@pure-ds/storybook 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/addons/description/preview.js +15 -0
- package/.storybook/addons/description/register.js +60 -0
- package/.storybook/addons/html-preview/Panel.jsx +327 -0
- package/.storybook/addons/html-preview/constants.js +6 -0
- package/.storybook/addons/html-preview/preview.js +178 -0
- package/.storybook/addons/html-preview/register.js +16 -0
- package/.storybook/addons/pds-configurator/SearchTool.js +44 -0
- package/.storybook/addons/pds-configurator/Tool.js +30 -0
- package/.storybook/addons/pds-configurator/constants.js +9 -0
- package/.storybook/addons/pds-configurator/preview.js +159 -0
- package/.storybook/addons/pds-configurator/register.js +24 -0
- package/.storybook/docs.css +35 -0
- package/.storybook/htmlPreview.css +103 -0
- package/.storybook/htmlPreview.js +271 -0
- package/.storybook/main.js +160 -0
- package/.storybook/preview-body.html +48 -0
- package/.storybook/preview-head.html +11 -0
- package/.storybook/preview.js +1563 -0
- package/README.md +266 -0
- package/bin/index.js +40 -0
- package/dist/pds-reference.json +2101 -0
- package/package.json +45 -0
- package/pds.config.js +6 -0
- package/public/assets/css/app.css +1216 -0
- package/public/assets/data/auto-design-advanced.json +704 -0
- package/public/assets/data/auto-design-simple.json +123 -0
- package/public/assets/img/icon-512x512.png +0 -0
- package/public/assets/img/logo-trans.png +0 -0
- package/public/assets/img/logo.png +0 -0
- package/public/assets/js/app.js +15088 -0
- package/public/assets/js/app.js.map +7 -0
- package/public/assets/js/lit.js +1176 -0
- package/public/assets/js/lit.js.map +7 -0
- package/public/assets/js/pds.js +9801 -0
- package/public/assets/js/pds.js.map +7 -0
- package/public/assets/pds/components/pds-calendar.js +837 -0
- package/public/assets/pds/components/pds-drawer.js +857 -0
- package/public/assets/pds/components/pds-icon.js +338 -0
- package/public/assets/pds/components/pds-jsonform.js +1775 -0
- package/public/assets/pds/components/pds-richtext.js +1035 -0
- package/public/assets/pds/components/pds-scrollrow.js +331 -0
- package/public/assets/pds/components/pds-splitpanel.js +401 -0
- package/public/assets/pds/components/pds-tabstrip.js +251 -0
- package/public/assets/pds/components/pds-toaster.js +446 -0
- package/public/assets/pds/components/pds-upload.js +657 -0
- package/public/assets/pds/custom-elements.json +2003 -0
- package/public/assets/pds/icons/pds-icons.svg +498 -0
- package/public/assets/pds/pds-css-complete.json +1861 -0
- package/public/assets/pds/pds-runtime-config.json +11 -0
- package/public/assets/pds/pds.css-data.json +2152 -0
- package/public/assets/pds/styles/pds-components.css +1944 -0
- package/public/assets/pds/styles/pds-components.css.js +3895 -0
- package/public/assets/pds/styles/pds-primitives.css +352 -0
- package/public/assets/pds/styles/pds-primitives.css.js +711 -0
- package/public/assets/pds/styles/pds-styles.css +3761 -0
- package/public/assets/pds/styles/pds-styles.css.js +7529 -0
- package/public/assets/pds/styles/pds-tokens.css +699 -0
- package/public/assets/pds/styles/pds-tokens.css.js +1405 -0
- package/public/assets/pds/styles/pds-utilities.css +763 -0
- package/public/assets/pds/styles/pds-utilities.css.js +1533 -0
- package/public/assets/pds/vscode-custom-data.json +824 -0
- package/scripts/build-pds-reference.mjs +807 -0
- package/scripts/generate-stories.js +542 -0
- package/scripts/package-build.js +86 -0
- package/src/js/app.js +17 -0
- package/src/js/common/ask.js +208 -0
- package/src/js/common/common.js +20 -0
- package/src/js/common/font-loader.js +200 -0
- package/src/js/common/msg.js +90 -0
- package/src/js/lit.js +40 -0
- package/src/js/pds-core/pds-config.js +1162 -0
- package/src/js/pds-core/pds-enhancer-metadata.js +75 -0
- package/src/js/pds-core/pds-enhancers.js +357 -0
- package/src/js/pds-core/pds-enums.js +86 -0
- package/src/js/pds-core/pds-generator.js +5317 -0
- package/src/js/pds-core/pds-ontology.js +256 -0
- package/src/js/pds-core/pds-paths.js +109 -0
- package/src/js/pds-core/pds-query.js +571 -0
- package/src/js/pds-core/pds-registry.js +129 -0
- package/src/js/pds-core/pds.d.ts +129 -0
- package/src/js/pds.d.ts +408 -0
- package/src/js/pds.js +1579 -0
- package/src/pds-core/pds-api.js +105 -0
- package/stories/GettingStarted.md +96 -0
- package/stories/GettingStarted.stories.js +144 -0
- package/stories/WhatIsPDS.md +194 -0
- package/stories/WhatIsPDS.stories.js +144 -0
- package/stories/components/PdsCalendar.stories.js +263 -0
- package/stories/components/PdsDrawer.stories.js +623 -0
- package/stories/components/PdsIcon.stories.js +78 -0
- package/stories/components/PdsJsonform.stories.js +1444 -0
- package/stories/components/PdsRichtext.stories.js +367 -0
- package/stories/components/PdsScrollrow.stories.js +140 -0
- package/stories/components/PdsSplitpanel.stories.js +502 -0
- package/stories/components/PdsTabstrip.stories.js +442 -0
- package/stories/components/PdsToaster.stories.js +186 -0
- package/stories/components/PdsUpload.stories.js +66 -0
- package/stories/enhancements/Dropdowns.stories.js +185 -0
- package/stories/enhancements/InteractiveStates.stories.js +625 -0
- package/stories/enhancements/MeshGradients.stories.js +320 -0
- package/stories/enhancements/OpenGroups.stories.js +227 -0
- package/stories/enhancements/RangeSliders.stories.js +232 -0
- package/stories/enhancements/RequiredFields.stories.js +189 -0
- package/stories/enhancements/Toggles.stories.js +167 -0
- package/stories/foundations/Colors.stories.js +283 -0
- package/stories/foundations/Icons.stories.js +305 -0
- package/stories/foundations/SmartSurfaces.stories.js +367 -0
- package/stories/foundations/Spacing.stories.js +175 -0
- package/stories/foundations/Typography.stories.js +960 -0
- package/stories/foundations/ZIndex.stories.js +325 -0
- package/stories/patterns/BorderEffects.stories.js +72 -0
- package/stories/patterns/Layout.stories.js +99 -0
- package/stories/patterns/Utilities.stories.js +107 -0
- package/stories/primitives/Accordion.stories.js +359 -0
- package/stories/primitives/Alerts.stories.js +64 -0
- package/stories/primitives/Badges.stories.js +183 -0
- package/stories/primitives/Buttons.stories.js +229 -0
- package/stories/primitives/Cards.stories.js +353 -0
- package/stories/primitives/FormGroups.stories.js +569 -0
- package/stories/primitives/Forms.stories.js +131 -0
- package/stories/primitives/Media.stories.js +203 -0
- package/stories/primitives/Tables.stories.js +232 -0
- package/stories/reference/ReferenceCatalog.stories.js +28 -0
- package/stories/reference/reference-catalog.js +413 -0
- package/stories/reference/reference-docs.js +302 -0
- package/stories/reference/reference-helpers.js +310 -0
- package/stories/utilities/GridSystem.stories.js +208 -0
- package/stories/utils/PdsAsk.stories.js +420 -0
- package/stories/utils/toast-utils.js +148 -0
package/README.md
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# PDS Storybook
|
|
2
|
+
|
|
3
|
+
**Pure Design System** Storybook showcase with live configuration capabilities.
|
|
4
|
+
|
|
5
|
+
This is the reference Storybook implementation demonstrating all features of the Pure Design System, including:
|
|
6
|
+
|
|
7
|
+
- 🎨 **Live Configuration** - Real-time design system updates via embedded configurator
|
|
8
|
+
- 🔍 **Smart Search** - Natural language queries for tokens and components
|
|
9
|
+
- 📚 **Comprehensive Stories** - All tokens, primitives, components, patterns, and enhancements
|
|
10
|
+
- 🎯 **Best Practices** - Organized by design system standards
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
### Live Configurator
|
|
15
|
+
|
|
16
|
+
Click the **PDS Configurator** button in the Storybook toolbar to open a configuration panel (via `pds-drawer[position=bottom]`) that includes:
|
|
17
|
+
|
|
18
|
+
- Full `pds-config-form` with simple/advanced modes
|
|
19
|
+
- Real-time preset switching
|
|
20
|
+
- Color, typography, spacing customization
|
|
21
|
+
- Export configuration as JSON
|
|
22
|
+
- Instant application to all visible stories
|
|
23
|
+
|
|
24
|
+
### Quick Search / Omnibox
|
|
25
|
+
|
|
26
|
+
Click the search icon in the toolbar to query the design system using natural language:
|
|
27
|
+
|
|
28
|
+
- "what is the focus border color on inputs?"
|
|
29
|
+
- "button hover states"
|
|
30
|
+
- "how to create a card layout?"
|
|
31
|
+
|
|
32
|
+
Powered by the PDS query system from `pds-query.js`.
|
|
33
|
+
|
|
34
|
+
### Story Organization
|
|
35
|
+
|
|
36
|
+
Stories are organized following design system best practices:
|
|
37
|
+
|
|
38
|
+
#### Foundations
|
|
39
|
+
Design tokens and core elements:
|
|
40
|
+
- **Colors** - Scales (50-900), semantics, themes
|
|
41
|
+
- **Typography** - Font families, sizes, weights, modular scale
|
|
42
|
+
- **Spacing** - Spatial rhythm, progression
|
|
43
|
+
- **Icons** - Icon system with sprite
|
|
44
|
+
|
|
45
|
+
#### Primitives
|
|
46
|
+
Basic UI building blocks:
|
|
47
|
+
- **Buttons** - Variants, sizes, states, icon buttons
|
|
48
|
+
- **Forms** - Inputs, selects, textareas, validation
|
|
49
|
+
- **Cards** - Surface containers
|
|
50
|
+
- **Badges** - Pills and badges
|
|
51
|
+
- **Alerts** - Notification styles
|
|
52
|
+
|
|
53
|
+
#### Components
|
|
54
|
+
Web Components (`<pds-*>`):
|
|
55
|
+
- `pds-icon` - SVG sprite icons
|
|
56
|
+
- `pds-drawer` - Slide-out panels
|
|
57
|
+
- `pds-tabstrip` - Accessible tabs
|
|
58
|
+
- `pds-upload` - File upload with preview
|
|
59
|
+
- `pds-toaster` - Toast notifications
|
|
60
|
+
- `pds-richtext` - Rich text editor (prefers `#showdown` import map; set `format="markdown"` to submit Markdown)
|
|
61
|
+
- `pds-jsonform` - JSON Schema forms
|
|
62
|
+
- `pds-splitpanel` - Resizable panes
|
|
63
|
+
- `pds-scrollrow` - Horizontal scroll
|
|
64
|
+
|
|
65
|
+
#### Patterns
|
|
66
|
+
Layout patterns and utilities:
|
|
67
|
+
- **Layout** - Grid, flex, containers
|
|
68
|
+
- **Utilities** - Spacing, borders, effects
|
|
69
|
+
- **Border Effects** - Gradients, glows
|
|
70
|
+
|
|
71
|
+
#### Enhancements
|
|
72
|
+
Progressive enhancements for semantic HTML:
|
|
73
|
+
- **Dropdowns** - `<nav data-dropdown>`
|
|
74
|
+
- **Toggles** - `<label data-toggle>`
|
|
75
|
+
- **Range Sliders** - Enhanced `<input type="range">`
|
|
76
|
+
- **Required Fields** - Auto-asterisks
|
|
77
|
+
|
|
78
|
+
## Development
|
|
79
|
+
|
|
80
|
+
### Install Dependencies
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm install
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Generate Stories
|
|
87
|
+
|
|
88
|
+
Auto-generate stories from PDS ontology and demo component:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npm run generate-stories
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This reads:
|
|
95
|
+
- `src/js/pds-core/pds-ontology.js` - Component metadata
|
|
96
|
+
- `src/js/pds-configurator/pds-demo.js` - Demo HTML sections
|
|
97
|
+
|
|
98
|
+
And outputs to `stories/` organized by groups.
|
|
99
|
+
|
|
100
|
+
### Run Storybook
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm run storybook
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Opens at http://localhost:6006
|
|
107
|
+
|
|
108
|
+
### Build Storybook
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npm run build-storybook
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Outputs to `storybook-static/`
|
|
115
|
+
|
|
116
|
+
### Development Mode (Generate + Run)
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npm run storybook:dev
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Generates stories then starts Storybook.
|
|
123
|
+
|
|
124
|
+
## Architecture
|
|
125
|
+
|
|
126
|
+
### Live Mode
|
|
127
|
+
|
|
128
|
+
This Storybook runs PDS in **live mode**:
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
// .storybook/preview.js
|
|
132
|
+
await PDS.start({
|
|
133
|
+
mode: 'live',
|
|
134
|
+
preset: 'default',
|
|
135
|
+
autoDefine: {
|
|
136
|
+
baseURL: '/assets/pds/components/',
|
|
137
|
+
predefine: ['pds-icon', 'pds-drawer']
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Benefits:**
|
|
143
|
+
- Styles generated at runtime
|
|
144
|
+
- Instant design updates
|
|
145
|
+
- Full access to `PDS.compiled` object model
|
|
146
|
+
- Automatic font loading
|
|
147
|
+
|
|
148
|
+
> ⚠️ **Important: Programmatic Component Access**
|
|
149
|
+
>
|
|
150
|
+
> Components loaded via `autoDefine` (except those in `predefine`) are registered asynchronously. When accessing component methods programmatically in stories or utilities:
|
|
151
|
+
>
|
|
152
|
+
> ```javascript
|
|
153
|
+
> // Always wait for the component to be defined
|
|
154
|
+
> await customElements.whenDefined('pds-toaster');
|
|
155
|
+
> const toaster = document.querySelector('pds-toaster');
|
|
156
|
+
> toaster.toast('Message');
|
|
157
|
+
> ```
|
|
158
|
+
>
|
|
159
|
+
> Components in the `predefine` array (`pds-icon`, `pds-drawer`) are available immediately after `PDS.start()` completes.
|
|
160
|
+
|
|
161
|
+
### Configurator Addon
|
|
162
|
+
|
|
163
|
+
Custom Storybook addon at `.storybook/addons/pds-configurator/`:
|
|
164
|
+
|
|
165
|
+
**Manager Side** (`Tool.js`):
|
|
166
|
+
- Toolbar button to open configurator
|
|
167
|
+
- Search/omnibox for queries
|
|
168
|
+
- Event bus communication
|
|
169
|
+
|
|
170
|
+
**Preview Side** (`preview.js`):
|
|
171
|
+
- Creates `<pds-drawer>` with `<pds-config-form>`
|
|
172
|
+
- Listens to `pds:design:updated` events
|
|
173
|
+
- Calls `PDS.applyDesign()` and forces remount
|
|
174
|
+
|
|
175
|
+
### Story Generator
|
|
176
|
+
|
|
177
|
+
`scripts/generate-stories.js` automatically creates stories by:
|
|
178
|
+
|
|
179
|
+
1. Parsing `pds-ontology.js` for component metadata
|
|
180
|
+
2. Extracting HTML from `pds-demo.js` sections
|
|
181
|
+
3. Generating CSF3 stories with controls
|
|
182
|
+
4. Organizing by groups (foundations/primitives/components/patterns/enhancements)
|
|
183
|
+
|
|
184
|
+
**Customization:**
|
|
185
|
+
Edit the generator to add new story groups or customize templates.
|
|
186
|
+
|
|
187
|
+
## Story Controls
|
|
188
|
+
|
|
189
|
+
Each story includes argTypes for interactive customization:
|
|
190
|
+
|
|
191
|
+
```javascript
|
|
192
|
+
argTypes: {
|
|
193
|
+
preset: {
|
|
194
|
+
control: 'select',
|
|
195
|
+
options: ['default', 'ocean-breeze', 'midnight-steel', ...]
|
|
196
|
+
},
|
|
197
|
+
primaryColor: {
|
|
198
|
+
control: 'color'
|
|
199
|
+
},
|
|
200
|
+
secondaryColor: {
|
|
201
|
+
control: 'color'
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Controls trigger `PDS.applyDesign()` to update the live configuration.
|
|
207
|
+
|
|
208
|
+
## Integration with Consumer Projects
|
|
209
|
+
|
|
210
|
+
See `packages/pds-storybook-cli` for CLI tool to integrate PDS into existing Storybook instances.
|
|
211
|
+
|
|
212
|
+
## Configuration
|
|
213
|
+
|
|
214
|
+
Modify `.storybook/preview.js` to change:
|
|
215
|
+
|
|
216
|
+
- Initial preset
|
|
217
|
+
- Auto-loaded components
|
|
218
|
+
- Theme management
|
|
219
|
+
- Global styles application
|
|
220
|
+
|
|
221
|
+
## Files
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
packages/pds-storybook/
|
|
225
|
+
├── .storybook/
|
|
226
|
+
│ ├── main.js # Storybook configuration
|
|
227
|
+
│ ├── preview.js # PDS initialization
|
|
228
|
+
│ └── addons/
|
|
229
|
+
│ └── pds-configurator/ # Custom addon
|
|
230
|
+
│ ├── register.js # Manager registration
|
|
231
|
+
│ ├── Tool.js # Toolbar UI
|
|
232
|
+
│ ├── preview.js # Preview logic
|
|
233
|
+
│ └── constants.js # Event constants
|
|
234
|
+
├── scripts/
|
|
235
|
+
│ └── generate-stories.js # Story generator
|
|
236
|
+
├── stories/
|
|
237
|
+
│ ├── GettingStarted.mdx # Welcome page
|
|
238
|
+
│ ├── foundations/ # Token stories
|
|
239
|
+
│ ├── primitives/ # Primitive stories
|
|
240
|
+
│ ├── components/ # Component stories
|
|
241
|
+
│ ├── patterns/ # Pattern stories
|
|
242
|
+
│ └── enhancements/ # Enhancement stories
|
|
243
|
+
└── package.json
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Contributing
|
|
247
|
+
|
|
248
|
+
Stories are auto-generated but can be manually edited. After editing:
|
|
249
|
+
|
|
250
|
+
1. Test changes: `npm run storybook`
|
|
251
|
+
2. Regenerate if needed: `npm run generate-stories`
|
|
252
|
+
3. Commit both generator and generated files
|
|
253
|
+
|
|
254
|
+
## Publishing
|
|
255
|
+
|
|
256
|
+
This package is private and not published to npm. It serves as:
|
|
257
|
+
|
|
258
|
+
1. Reference implementation
|
|
259
|
+
2. Development environment
|
|
260
|
+
3. Story template source for CLI
|
|
261
|
+
|
|
262
|
+
The CLI (`@pure-ds/storybook`) copies stories from here to consumer projects.
|
|
263
|
+
|
|
264
|
+
## License
|
|
265
|
+
|
|
266
|
+
ISC
|
package/bin/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
const packageRoot = join(__dirname, '..');
|
|
10
|
+
const configDir = join(packageRoot, '.storybook');
|
|
11
|
+
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
const command = args[0] || 'dev';
|
|
14
|
+
|
|
15
|
+
const storybookArgs = [
|
|
16
|
+
command === 'build' ? 'build' : 'dev',
|
|
17
|
+
'-c', configDir,
|
|
18
|
+
...args.slice(1)
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
// If dev, add port if not specified
|
|
22
|
+
if (command !== 'build' && !args.includes('-p') && !args.includes('--port')) {
|
|
23
|
+
storybookArgs.push('-p', '6006');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
console.log(`Running Storybook with config: ${configDir}`);
|
|
27
|
+
|
|
28
|
+
const child = spawn('npx', ['storybook', ...storybookArgs], {
|
|
29
|
+
stdio: 'inherit',
|
|
30
|
+
shell: true,
|
|
31
|
+
cwd: process.cwd(), // Run in user's project root so it finds their stories
|
|
32
|
+
env: {
|
|
33
|
+
...process.env,
|
|
34
|
+
PDS_STORYBOOK_ROOT: packageRoot
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
child.on('exit', (code) => {
|
|
39
|
+
process.exit(code);
|
|
40
|
+
});
|