Storybook showcase for Pure Design System with live configuration
npm install @pure-ds/storybookpds-drawer[position=bottom]) that includes:
pds-config-form with simple/advanced modes
pds-query.js.
):
pds-icon - SVG sprite icons
pds-drawer - Slide-out panels
pds-tabstrip - Accessible tabs
pds-upload - File upload with preview
pds-toaster - Toast notifications
pds-richtext - Rich text editor (prefers #showdown import map; set format="markdown" to submit Markdown)
pds-form - JSON Schema forms
pds-splitpanel - Resizable panes
pds-scrollrow - Horizontal scroll
bash
npm install
`
$3
Auto-generate stories from PDS ontology and demo component:
`bash
npm run generate-stories
`
This reads:
- src/js/pds-core/pds-ontology.js - Component metadata
- src/js/pds-configurator/pds-demo.js - Demo HTML sections
And outputs to stories/ organized by groups.
$3
`bash
npm run storybook
`
Opens at http://localhost:6006
$3
`bash
npm run build-storybook
`
Outputs to storybook-static/
$3
`bash
npm run storybook:dev
`
Generates stories then starts Storybook.
Architecture
$3
This Storybook runs PDS in live mode:
`javascript
// .storybook/preview.js
await PDS.start({
mode: 'live',
preset: 'default',
autoDefine: {
baseURL: '/assets/pds/components/',
predefine: ['pds-icon', 'pds-drawer']
}
});
`
Benefits:
- Styles generated at runtime
- Instant design updates
- Full access to PDS.compiled object model
- Automatic font loading
> ā ļø Important: Programmatic Component Access
>
> Components loaded via autoDefine (except those in predefine) are registered asynchronously. When accessing component methods programmatically in stories or utilities:
>
> `javascript
> // Always wait for the component to be defined
> await customElements.whenDefined('pds-toaster');
> const toaster = document.querySelector('pds-toaster');
> toaster.toast('Message');
> `
>
> Components in the predefine array (pds-icon, pds-drawer) are available immediately after PDS.start() completes.
$3
Custom Storybook addon at .storybook/addons/pds-configurator/:
Manager Side (Tool.js):
- Toolbar button to open configurator
- Search/omnibox for queries
- Event bus communication
Preview Side (preview.js):
- Creates with
- Listens to pds:design:updated events
- Calls PDS.applyDesign() and forces remount
$3
scripts/generate-stories.js automatically creates stories by:
1. Parsing pds-ontology.js for component metadata
2. Extracting HTML from pds-demo.js sections
3. Generating CSF3 stories with controls
4. Organizing by groups (foundations/primitives/components/patterns/enhancements)
Customization:
Edit the generator to add new story groups or customize templates.
Story Controls
Each story includes argTypes for interactive customization:
`javascript
argTypes: {
preset: {
control: 'select',
options: ['default', 'ocean-breeze', 'midnight-steel', ...]
},
primaryColor: {
control: 'color'
},
secondaryColor: {
control: 'color'
}
}
`
Controls trigger PDS.applyDesign() to update the live configuration.
Integration with Consumer Projects
See packages/pds-storybook-cli for CLI tool to integrate PDS into existing Storybook instances.
Configuration
Modify .storybook/preview.js to change:
- Initial preset
- Auto-loaded components
- Theme management
- Global styles application
Files
`
packages/pds-storybook/
āāā .storybook/
ā āāā main.js # Storybook configuration
ā āāā preview.js # PDS initialization
ā āāā addons/
ā āāā pds-configurator/ # Custom addon
ā āāā register.js # Manager registration
ā āāā Tool.js # Toolbar UI
ā āāā preview.js # Preview logic
ā āāā constants.js # Event constants
āāā scripts/
ā āāā generate-stories.js # Story generator
āāā stories/
ā āāā getting-started.md # Welcome page (imported from project root)
ā āāā foundations/ # Token stories
ā āāā primitives/ # Primitive stories
ā āāā components/ # Component stories
ā āāā patterns/ # Pattern stories
ā āāā enhancements/ # Enhancement stories
āāā package.json
`
Contributing
Stories are auto-generated but can be manually edited. After editing:
1. Test changes: npm run storybook
2. Regenerate if needed: npm run generate-stories
3. Commit both generator and generated files
Publishing
This package is private and not published to npm. It serves as:
1. Reference implementation
2. Development environment
3. Story template source for CLI
The CLI (@pure-ds/storybook`) copies stories from here to consumer projects.