@pure-ds/storybook 0.3.19 → 0.4.1

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 (40) hide show
  1. package/.storybook/addons/pds-configurator/SearchTool.js +44 -44
  2. package/.storybook/preview.js +6 -2
  3. package/dist/pds-reference.json +65 -13
  4. package/package.json +50 -50
  5. package/stories/components/PdsCalendar.stories.js +266 -263
  6. package/stories/components/PdsDrawer.stories.js +2 -2
  7. package/stories/components/PdsIcon.stories.js +2 -2
  8. package/stories/components/PdsJsonform.stories.js +2 -2
  9. package/stories/components/PdsRichtext.stories.js +367 -367
  10. package/stories/components/PdsScrollrow.stories.js +140 -140
  11. package/stories/components/PdsSplitpanel.stories.js +502 -502
  12. package/stories/components/PdsTabstrip.stories.js +2 -2
  13. package/stories/components/PdsToaster.stories.js +186 -186
  14. package/stories/components/PdsUpload.stories.js +66 -66
  15. package/stories/enhancements/Dropdowns.stories.js +185 -185
  16. package/stories/enhancements/InteractiveStates.stories.js +625 -625
  17. package/stories/enhancements/MeshGradients.stories.js +321 -320
  18. package/stories/enhancements/OpenGroups.stories.js +227 -227
  19. package/stories/enhancements/RangeSliders.stories.js +232 -232
  20. package/stories/enhancements/RequiredFields.stories.js +189 -189
  21. package/stories/enhancements/Toggles.stories.js +167 -167
  22. package/stories/foundations/Colors.stories.js +2 -1
  23. package/stories/foundations/Icons.stories.js +4 -0
  24. package/stories/foundations/SmartSurfaces.stories.js +485 -367
  25. package/stories/foundations/Spacing.stories.js +5 -1
  26. package/stories/foundations/Typography.stories.js +4 -0
  27. package/stories/foundations/ZIndex.stories.js +329 -325
  28. package/stories/layout/LayoutOverview.stories.js +247 -0
  29. package/stories/layout/LayoutSystem.stories.js +852 -0
  30. package/stories/patterns/BorderEffects.stories.js +74 -72
  31. package/stories/primitives/Accordion.stories.js +5 -3
  32. package/stories/primitives/Alerts.stories.js +261 -46
  33. package/stories/primitives/Badges.stories.js +4 -0
  34. package/stories/primitives/Buttons.stories.js +2 -2
  35. package/stories/primitives/Cards.stories.js +98 -170
  36. package/stories/primitives/Media.stories.js +442 -203
  37. package/stories/primitives/Tables.stories.js +358 -232
  38. package/stories/utilities/Backdrop.stories.js +197 -0
  39. package/stories/patterns/Layout.stories.js +0 -99
  40. 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';