@pure-ds/storybook 0.3.19 → 0.4.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.
Files changed (39) hide show
  1. package/.storybook/addons/pds-configurator/SearchTool.js +44 -44
  2. package/dist/pds-reference.json +65 -13
  3. package/package.json +50 -50
  4. package/stories/components/PdsCalendar.stories.js +266 -263
  5. package/stories/components/PdsDrawer.stories.js +2 -2
  6. package/stories/components/PdsIcon.stories.js +2 -2
  7. package/stories/components/PdsJsonform.stories.js +2 -2
  8. package/stories/components/PdsRichtext.stories.js +367 -367
  9. package/stories/components/PdsScrollrow.stories.js +140 -140
  10. package/stories/components/PdsSplitpanel.stories.js +502 -502
  11. package/stories/components/PdsTabstrip.stories.js +2 -2
  12. package/stories/components/PdsToaster.stories.js +186 -186
  13. package/stories/components/PdsUpload.stories.js +66 -66
  14. package/stories/enhancements/Dropdowns.stories.js +185 -185
  15. package/stories/enhancements/InteractiveStates.stories.js +625 -625
  16. package/stories/enhancements/MeshGradients.stories.js +321 -320
  17. package/stories/enhancements/OpenGroups.stories.js +227 -227
  18. package/stories/enhancements/RangeSliders.stories.js +232 -232
  19. package/stories/enhancements/RequiredFields.stories.js +189 -189
  20. package/stories/enhancements/Toggles.stories.js +167 -167
  21. package/stories/foundations/Colors.stories.js +2 -1
  22. package/stories/foundations/Icons.stories.js +4 -0
  23. package/stories/foundations/SmartSurfaces.stories.js +485 -367
  24. package/stories/foundations/Spacing.stories.js +5 -1
  25. package/stories/foundations/Typography.stories.js +4 -0
  26. package/stories/foundations/ZIndex.stories.js +329 -325
  27. package/stories/layout/LayoutOverview.stories.js +247 -0
  28. package/stories/layout/LayoutSystem.stories.js +852 -0
  29. package/stories/patterns/BorderEffects.stories.js +74 -72
  30. package/stories/primitives/Accordion.stories.js +5 -3
  31. package/stories/primitives/Alerts.stories.js +261 -46
  32. package/stories/primitives/Badges.stories.js +4 -0
  33. package/stories/primitives/Buttons.stories.js +2 -2
  34. package/stories/primitives/Cards.stories.js +98 -170
  35. package/stories/primitives/Media.stories.js +442 -203
  36. package/stories/primitives/Tables.stories.js +358 -232
  37. package/stories/utilities/Backdrop.stories.js +197 -0
  38. package/stories/patterns/Layout.stories.js +0 -99
  39. package/stories/utilities/GridSystem.stories.js +0 -208
@@ -1,232 +1,232 @@
1
- import { html } from 'lit';
2
-
3
- const rangeSliderStoryStyles = html`
4
- <style>
5
- .range-slider-section {
6
- max-width: 400px;
7
- display: grid;
8
- gap: var(--spacing-4);
9
- }
10
-
11
- .range-slider-section--wide {
12
- max-width: 500px;
13
- }
14
-
15
- .range-slider-section--comparison {
16
- display: grid;
17
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
18
- gap: var(--spacing-6);
19
- max-width: 1000px;
20
- }
21
-
22
- .range-slider-description {
23
- color: var(--color-text-secondary);
24
- font-size: 0.875rem;
25
- margin: 0 0 var(--spacing-4);
26
- }
27
-
28
- .range-slider-form {
29
- display: flex;
30
- flex-direction: column;
31
- gap: var(--spacing-4);
32
- }
33
-
34
- .range-slider-actions {
35
- margin-top: var(--spacing-2);
36
- align-self: flex-start;
37
- }
38
-
39
- .range-slider-card {
40
- display: grid;
41
- gap: var(--spacing-4);
42
- }
43
- </style>
44
- `;
45
-
46
- export default {
47
- title: 'Enhancements/Range Sliders',
48
- tags: ['forms', 'interaction'],
49
- parameters: {
50
- pds: {
51
- tags: ['forms', 'interaction']
52
- },
53
- docs: {
54
- description: {
55
- component: `Enhanced range inputs with two display modes:
56
-
57
- **Standard Mode** (default): Floating bubble that appears on interaction.
58
-
59
- **Inline Output Mode**: Add \`range-output\` class to the label for persistent inline value display using semantic \`<output>\` element.
60
-
61
- Both modes automatically generate proper ARIA attributes and use the \`<output>\` tag for accessibility.`
62
- }
63
- }
64
- }
65
- };
66
-
67
- export const StandardFloatingBubble = () => html`
68
- ${rangeSliderStoryStyles}
69
- <section class="range-slider-section">
70
- <p class="range-slider-description">
71
- Default behavior: A floating bubble appears when you interact with the slider.
72
- </p>
73
- <label>
74
- <span>Volume</span>
75
- <input type="range" min="0" max="100" value="50">
76
- </label>
77
- </section>
78
- `;
79
-
80
- StandardFloatingBubble.storyName = 'Standard (Floating Bubble)';
81
-
82
- export const MultipleRanges = () => html`
83
- ${rangeSliderStoryStyles}
84
- <form
85
- class="range-slider-section range-slider-form"
86
- @submit="${(event) => {
87
- event.preventDefault();
88
- toastFormData(new FormData(event.target));
89
- }}"
90
- >
91
- <label>
92
- <span>Brightness</span>
93
- <input type="range" name="brightness" min="0" max="100" value="75">
94
- </label>
95
- <label>
96
- <span>Contrast</span>
97
- <input type="range" name="contrast" min="0" max="100" value="50">
98
- </label>
99
- <label>
100
- <span>Saturation</span>
101
- <input type="range" name="saturation" min="0" max="100" value="60">
102
- </label>
103
- <label>
104
- <span>Temperature</span>
105
- <input type="range" name="temperature" min="-100" max="100" value="0">
106
- </label>
107
- <button type="submit" class="btn-primary range-slider-actions">Apply Settings</button>
108
- </form>
109
- `;
110
-
111
- export const CustomSteps = () => html`
112
- ${rangeSliderStoryStyles}
113
- <form
114
- class="range-slider-section range-slider-form"
115
- @submit="${(event) => {
116
- event.preventDefault();
117
- toastFormData(new FormData(event.target));
118
- }}"
119
- >
120
- <label>
121
- <span>Opacity (10% steps)</span>
122
- <input type="range" name="opacity" min="0" max="100" value="100" step="10">
123
- </label>
124
- <label>
125
- <span>Font Size (0.25rem steps)</span>
126
- <input type="range" name="fontSize" min="0.5" max="3" value="1" step="0.25">
127
- </label>
128
- <button type="submit" class="btn-primary range-slider-actions">Apply Settings</button>
129
- </form>
130
- `;
131
-
132
- export const InlineOutputMode = () => html`
133
- ${rangeSliderStoryStyles}
134
- <section class="range-slider-section range-slider-section--wide">
135
- <p class="range-slider-description">
136
- Add the <code>range-output</code> class to automatically create an inline output display.
137
- </p>
138
- <div class="range-slider-form">
139
- <label class="range-output">
140
- <span>Master Volume</span>
141
- <input type="range" min="0" max="100" value="75">
142
- </label>
143
- <label class="range-output">
144
- <span>Bass</span>
145
- <input type="range" min="0" max="100" value="50">
146
- </label>
147
- <label class="range-output">
148
- <span>Treble</span>
149
- <input type="range" min="0" max="100" value="60">
150
- </label>
151
- </div>
152
- </section>
153
- `;
154
-
155
- InlineOutputMode.storyName = 'Inline Output (range-output class)';
156
-
157
- export const AudioControlsExample = () => html`
158
- ${rangeSliderStoryStyles}
159
- <article class="card range-slider-section range-slider-section--wide range-slider-card">
160
- <div>
161
- <h3>Audio Controls</h3>
162
- <p class="range-slider-description">
163
- Complete example using <code>range-output</code> class for a real-world audio control interface.
164
- </p>
165
- </div>
166
- <div class="range-slider-form">
167
- <label class="range-output">
168
- <span>Master Volume</span>
169
- <input type="range" min="0" max="100" value="75">
170
- </label>
171
- <label class="range-output">
172
- <span>Bass</span>
173
- <input type="range" min="0" max="100" value="50">
174
- </label>
175
- <label class="range-output">
176
- <span>Treble</span>
177
- <input type="range" min="0" max="100" value="60">
178
- </label>
179
- <label class="range-output">
180
- <span>Balance</span>
181
- <input type="range" min="-50" max="50" value="0">
182
- </label>
183
- </div>
184
- </article>
185
- `;
186
-
187
- AudioControlsExample.storyName = 'Real-world Example (Audio Controls)';
188
-
189
- export const ComparisonView = () => html`
190
- ${rangeSliderStoryStyles}
191
- <div class="range-slider-section range-slider-section--comparison">
192
- <article class="card range-slider-card">
193
- <div>
194
- <h3>Standard Mode</h3>
195
- <p class="range-slider-description">
196
- Floating bubble appears on hover/focus. Best for simple forms.
197
- </p>
198
- </div>
199
- <div class="range-slider-form">
200
- <label>
201
- <span>Volume</span>
202
- <input type="range" min="0" max="100" value="75">
203
- </label>
204
- <label>
205
- <span>Brightness</span>
206
- <input type="range" min="0" max="100" value="50">
207
- </label>
208
- </div>
209
- </article>
210
-
211
- <article class="card range-slider-card">
212
- <div>
213
- <h3>Inline Output Mode</h3>
214
- <p class="range-slider-description">
215
- Persistent value display. Best for settings and controls.
216
- </p>
217
- </div>
218
- <div class="range-slider-form">
219
- <label class="range-output">
220
- <span>Volume</span>
221
- <input type="range" min="0" max="100" value="75">
222
- </label>
223
- <label class="range-output">
224
- <span>Brightness</span>
225
- <input type="range" min="0" max="100" value="50">
226
- </label>
227
- </div>
228
- </article>
229
- </div>
230
- `;
231
-
232
- ComparisonView.storyName = 'Side-by-side Comparison';
1
+ import { html } from 'lit';
2
+
3
+ const rangeSliderStoryStyles = html`
4
+ <style>
5
+ .range-slider-section {
6
+ max-width: 400px;
7
+ display: grid;
8
+ gap: var(--spacing-4);
9
+ }
10
+
11
+ .range-slider-section--wide {
12
+ max-width: 500px;
13
+ }
14
+
15
+ .range-slider-section--comparison {
16
+ display: grid;
17
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
18
+ gap: var(--spacing-6);
19
+ max-width: 1000px;
20
+ }
21
+
22
+ .range-slider-description {
23
+ color: var(--color-text-secondary);
24
+ font-size: 0.875rem;
25
+ margin: 0 0 var(--spacing-4);
26
+ }
27
+
28
+ .range-slider-form {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--spacing-4);
32
+ }
33
+
34
+ .range-slider-actions {
35
+ margin-top: var(--spacing-2);
36
+ align-self: flex-start;
37
+ }
38
+
39
+ .range-slider-card {
40
+ display: grid;
41
+ gap: var(--spacing-4);
42
+ }
43
+ </style>
44
+ `;
45
+
46
+ export default {
47
+ title: 'Enhancements/Range Sliders',
48
+ tags: ['range', 'slider', 'input', 'forms', 'interaction'],
49
+ parameters: {
50
+ pds: {
51
+ tags: ['range', 'slider', 'input', 'forms', 'interaction', 'enhancement']
52
+ },
53
+ docs: {
54
+ description: {
55
+ component: `Enhanced range inputs with two display modes:
56
+
57
+ **Standard Mode** (default): Floating bubble that appears on interaction.
58
+
59
+ **Inline Output Mode**: Add \`range-output\` class to the label for persistent inline value display using semantic \`<output>\` element.
60
+
61
+ Both modes automatically generate proper ARIA attributes and use the \`<output>\` tag for accessibility.`
62
+ }
63
+ }
64
+ }
65
+ };
66
+
67
+ export const StandardFloatingBubble = () => html`
68
+ ${rangeSliderStoryStyles}
69
+ <section class="range-slider-section">
70
+ <p class="range-slider-description">
71
+ Default behavior: A floating bubble appears when you interact with the slider.
72
+ </p>
73
+ <label>
74
+ <span>Volume</span>
75
+ <input type="range" min="0" max="100" value="50">
76
+ </label>
77
+ </section>
78
+ `;
79
+
80
+ StandardFloatingBubble.storyName = 'Standard (Floating Bubble)';
81
+
82
+ export const MultipleRanges = () => html`
83
+ ${rangeSliderStoryStyles}
84
+ <form
85
+ class="range-slider-section range-slider-form"
86
+ @submit="${(event) => {
87
+ event.preventDefault();
88
+ toastFormData(new FormData(event.target));
89
+ }}"
90
+ >
91
+ <label>
92
+ <span>Brightness</span>
93
+ <input type="range" name="brightness" min="0" max="100" value="75">
94
+ </label>
95
+ <label>
96
+ <span>Contrast</span>
97
+ <input type="range" name="contrast" min="0" max="100" value="50">
98
+ </label>
99
+ <label>
100
+ <span>Saturation</span>
101
+ <input type="range" name="saturation" min="0" max="100" value="60">
102
+ </label>
103
+ <label>
104
+ <span>Temperature</span>
105
+ <input type="range" name="temperature" min="-100" max="100" value="0">
106
+ </label>
107
+ <button type="submit" class="btn-primary range-slider-actions">Apply Settings</button>
108
+ </form>
109
+ `;
110
+
111
+ export const CustomSteps = () => html`
112
+ ${rangeSliderStoryStyles}
113
+ <form
114
+ class="range-slider-section range-slider-form"
115
+ @submit="${(event) => {
116
+ event.preventDefault();
117
+ toastFormData(new FormData(event.target));
118
+ }}"
119
+ >
120
+ <label>
121
+ <span>Opacity (10% steps)</span>
122
+ <input type="range" name="opacity" min="0" max="100" value="100" step="10">
123
+ </label>
124
+ <label>
125
+ <span>Font Size (0.25rem steps)</span>
126
+ <input type="range" name="fontSize" min="0.5" max="3" value="1" step="0.25">
127
+ </label>
128
+ <button type="submit" class="btn-primary range-slider-actions">Apply Settings</button>
129
+ </form>
130
+ `;
131
+
132
+ export const InlineOutputMode = () => html`
133
+ ${rangeSliderStoryStyles}
134
+ <section class="range-slider-section range-slider-section--wide">
135
+ <p class="range-slider-description">
136
+ Add the <code>range-output</code> class to automatically create an inline output display.
137
+ </p>
138
+ <div class="range-slider-form">
139
+ <label class="range-output">
140
+ <span>Master Volume</span>
141
+ <input type="range" min="0" max="100" value="75">
142
+ </label>
143
+ <label class="range-output">
144
+ <span>Bass</span>
145
+ <input type="range" min="0" max="100" value="50">
146
+ </label>
147
+ <label class="range-output">
148
+ <span>Treble</span>
149
+ <input type="range" min="0" max="100" value="60">
150
+ </label>
151
+ </div>
152
+ </section>
153
+ `;
154
+
155
+ InlineOutputMode.storyName = 'Inline Output (range-output class)';
156
+
157
+ export const AudioControlsExample = () => html`
158
+ ${rangeSliderStoryStyles}
159
+ <article class="card range-slider-section range-slider-section--wide range-slider-card">
160
+ <div>
161
+ <h3>Audio Controls</h3>
162
+ <p class="range-slider-description">
163
+ Complete example using <code>range-output</code> class for a real-world audio control interface.
164
+ </p>
165
+ </div>
166
+ <div class="range-slider-form">
167
+ <label class="range-output">
168
+ <span>Master Volume</span>
169
+ <input type="range" min="0" max="100" value="75">
170
+ </label>
171
+ <label class="range-output">
172
+ <span>Bass</span>
173
+ <input type="range" min="0" max="100" value="50">
174
+ </label>
175
+ <label class="range-output">
176
+ <span>Treble</span>
177
+ <input type="range" min="0" max="100" value="60">
178
+ </label>
179
+ <label class="range-output">
180
+ <span>Balance</span>
181
+ <input type="range" min="-50" max="50" value="0">
182
+ </label>
183
+ </div>
184
+ </article>
185
+ `;
186
+
187
+ AudioControlsExample.storyName = 'Real-world Example (Audio Controls)';
188
+
189
+ export const ComparisonView = () => html`
190
+ ${rangeSliderStoryStyles}
191
+ <div class="range-slider-section range-slider-section--comparison">
192
+ <article class="card range-slider-card">
193
+ <div>
194
+ <h3>Standard Mode</h3>
195
+ <p class="range-slider-description">
196
+ Floating bubble appears on hover/focus. Best for simple forms.
197
+ </p>
198
+ </div>
199
+ <div class="range-slider-form">
200
+ <label>
201
+ <span>Volume</span>
202
+ <input type="range" min="0" max="100" value="75">
203
+ </label>
204
+ <label>
205
+ <span>Brightness</span>
206
+ <input type="range" min="0" max="100" value="50">
207
+ </label>
208
+ </div>
209
+ </article>
210
+
211
+ <article class="card range-slider-card">
212
+ <div>
213
+ <h3>Inline Output Mode</h3>
214
+ <p class="range-slider-description">
215
+ Persistent value display. Best for settings and controls.
216
+ </p>
217
+ </div>
218
+ <div class="range-slider-form">
219
+ <label class="range-output">
220
+ <span>Volume</span>
221
+ <input type="range" min="0" max="100" value="75">
222
+ </label>
223
+ <label class="range-output">
224
+ <span>Brightness</span>
225
+ <input type="range" min="0" max="100" value="50">
226
+ </label>
227
+ </div>
228
+ </article>
229
+ </div>
230
+ `;
231
+
232
+ ComparisonView.storyName = 'Side-by-side Comparison';