@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,502 +1,502 @@
1
- import { html } from 'lit';
2
-
3
- const docsParameters = {
4
- description: {
5
- component: 'Split panels divide content areas with a draggable divider for resizable layouts.'
6
- }
7
- };
8
-
9
- if (typeof window !== 'undefined') {
10
- import('../reference/reference-docs.js')
11
- .then(({ createComponentDocsPage }) => {
12
- docsParameters.page = createComponentDocsPage('pds-splitpanel');
13
- })
14
- .catch((error) => {
15
- console.warn('storybook: docs page failed to load for pds-splitpanel', error);
16
- });
17
- }
18
-
19
- const splitpanelStoryStyles = html`
20
- <style>
21
- .splitpanel-story {
22
- width: 100%;
23
- height: 560px;
24
- }
25
-
26
- .splitpanel-story--tall {
27
- height: 600px;
28
- }
29
-
30
- .splitpanel-story--xl {
31
- height: 700px;
32
- }
33
-
34
- .splitpanel-pane {
35
- box-sizing: border-box;
36
- padding: var(--spacing-4);
37
- overflow: auto;
38
- background: transparent;
39
- display: flex;
40
- flex-direction: column;
41
- gap: var(--spacing-4);
42
- }
43
-
44
- .splitpanel-pane--surface {
45
- background: var(--surface-bg);
46
- }
47
-
48
- .splitpanel-pane--surface-alt {
49
- background: var(--surface-bg-secondary);
50
- }
51
-
52
- .splitpanel-pane--stacked {
53
- gap: var(--spacing-3);
54
- }
55
-
56
- .splitpanel-card {
57
- display: flex;
58
- flex-direction: column;
59
- gap: var(--spacing-3);
60
- }
61
-
62
- .splitpanel-card--tight {
63
- gap: var(--spacing-2);
64
- }
65
-
66
- .splitpanel-eyebrow {
67
- margin: 0;
68
- text-transform: uppercase;
69
- font-size: 0.75rem;
70
- letter-spacing: 0.08em;
71
- color: var(--text-subtle, rgba(0, 0, 0, 0.6));
72
- }
73
-
74
- .splitpanel-heading {
75
- margin: 0;
76
- }
77
-
78
- .splitpanel-section-title {
79
- margin: 0;
80
- }
81
-
82
- .splitpanel-meta {
83
- margin: 0;
84
- font-size: 0.9rem;
85
- color: var(--text-muted, rgba(0, 0, 0, 0.65));
86
- }
87
-
88
- .splitpanel-action-group {
89
- display: flex;
90
- flex-wrap: wrap;
91
- gap: var(--spacing-2);
92
- }
93
-
94
- .splitpanel-stack {
95
- margin: 0;
96
- padding-left: var(--spacing-5);
97
- }
98
-
99
- .splitpanel-stack li + li {
100
- margin-top: var(--spacing-2);
101
- }
102
-
103
- .splitpanel-attachments {
104
- display: flex;
105
- flex-direction: column;
106
- gap: var(--spacing-2);
107
- }
108
-
109
- .splitpanel-attachment {
110
- display: flex;
111
- align-items: center;
112
- gap: var(--spacing-2);
113
- padding: var(--spacing-2);
114
- border-radius: var(--radius-sm);
115
- background: var(--surface-bg-secondary);
116
- }
117
-
118
- .splitpanel-attachment__label {
119
- flex: 1;
120
- overflow: hidden;
121
- text-overflow: ellipsis;
122
- white-space: nowrap;
123
- }
124
-
125
- .splitpanel-message {
126
- margin: 0;
127
- line-height: 1.6;
128
- }
129
-
130
- .splitpanel-signoff {
131
- margin: 0;
132
- display: flex;
133
- flex-direction: column;
134
- gap: var(--spacing-1);
135
- }
136
-
137
- .splitpanel-code-block {
138
- margin: 0;
139
- padding: var(--spacing-3);
140
- border-radius: var(--radius-md);
141
- background: var(--surface-bg-secondary);
142
- font-family: var(--font-family-mono, 'Fira Code', 'Courier New', monospace);
143
- font-size: 0.875rem;
144
- overflow: auto;
145
- }
146
-
147
- .splitpanel-console {
148
- display: flex;
149
- flex-direction: column;
150
- gap: var(--spacing-1);
151
- padding: var(--spacing-3);
152
- border-radius: var(--radius-md);
153
- background: #1e1e1e;
154
- color: #d4d4d4;
155
- font-family: var(--font-family-mono, 'Fira Code', 'Courier New', monospace);
156
- }
157
-
158
- .splitpanel-console__cmd {
159
- color: #4ec9b0;
160
- }
161
-
162
- .splitpanel-console__meta {
163
- color: #6a9955;
164
- }
165
-
166
- .splitpanel-dashboard-heading {
167
- margin: 0 0 var(--spacing-4);
168
- }
169
-
170
- .splitpanel-nav {
171
- display: flex;
172
- flex-direction: column;
173
- gap: var(--spacing-2);
174
- }
175
-
176
- .splitpanel-nav .btn-outline {
177
- justify-content: flex-start;
178
- }
179
-
180
- .splitpanel-grid {
181
- display: grid;
182
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
183
- gap: var(--spacing-4);
184
- }
185
-
186
- .splitpanel-stat {
187
- font-size: 2.5rem;
188
- font-weight: 700;
189
- margin: var(--spacing-2) 0;
190
- }
191
-
192
- .splitpanel-stat--primary {
193
- color: var(--color-primary);
194
- }
195
-
196
- .splitpanel-stat--secondary {
197
- color: var(--color-secondary);
198
- }
199
-
200
- .splitpanel-stat--accent {
201
- color: var(--color-accent);
202
- }
203
-
204
- .splitpanel-stat-note {
205
- margin: 0;
206
- font-size: 0.85rem;
207
- opacity: 0.7;
208
- }
209
-
210
- .splitpanel-activity-card {
211
- gap: var(--spacing-3);
212
- }
213
-
214
- .splitpanel-activity-list {
215
- display: flex;
216
- flex-direction: column;
217
- gap: var(--spacing-3);
218
- }
219
-
220
- .splitpanel-activity-item {
221
- display: flex;
222
- align-items: center;
223
- gap: var(--spacing-3);
224
- padding: var(--spacing-2);
225
- border-radius: var(--radius-sm);
226
- background: var(--surface-bg-secondary);
227
- }
228
-
229
- .splitpanel-activity-body {
230
- flex: 1;
231
- display: flex;
232
- flex-direction: column;
233
- gap: var(--spacing-1);
234
- }
235
-
236
- .splitpanel-activity-sub {
237
- font-size: 0.85rem;
238
- opacity: 0.7;
239
- }
240
-
241
- .splitpanel-activity-time {
242
- font-size: 0.85rem;
243
- opacity: 0.6;
244
- }
245
- </style>
246
- `;
247
-
248
- export default {
249
- title: 'Components/Pds Splitpanel',
250
- tags: ['autodocs'],
251
- parameters: {
252
- pds: {
253
- tags: ['layout', 'sizing', 'interaction']
254
- },
255
- docs: docsParameters
256
- }
257
- };
258
-
259
- export const Default = () => html`
260
- ${splitpanelStoryStyles}
261
- <pds-splitpanel class="splitpanel-story splitpanel-story--tall" orientation="horizontal" default-split="360px">
262
- <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
263
- <article class="card surface-elevated splitpanel-card">
264
- <div>
265
- <p class="splitpanel-eyebrow">Leadership Sync</p>
266
- <h3 class="splitpanel-heading">Q4 Roadmap Planning</h3>
267
- <p class="splitpanel-meta">Monday, 2:00 PM • Conference Room Aurora</p>
268
- </div>
269
-
270
- <div class="splitpanel-action-group">
271
- <button class="btn-primary btn-sm">
272
- <pds-icon icon="video"></pds-icon>
273
- Join Meeting
274
- </button>
275
- <button class="btn-outline btn-sm">
276
- <pds-icon icon="calendar"></pds-icon>
277
- Add to Calendar
278
- </button>
279
- </div>
280
-
281
- <div>
282
- <h4 class="splitpanel-section-title">Agenda</h4>
283
- <ul class="splitpanel-stack">
284
- <li>Roadmap alignment and blockers</li>
285
- <li>Department resource updates</li>
286
- <li>Upcoming launch dependencies</li>
287
- </ul>
288
- </div>
289
- </article>
290
-
291
- <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
292
- <h4 class="splitpanel-section-title">Attachments (2)</h4>
293
- <div class="splitpanel-attachments">
294
- <div class="splitpanel-attachment">
295
- <pds-icon icon="file-text"></pds-icon>
296
- <span class="splitpanel-attachment__label">meeting-agenda.pdf</span>
297
- <button class="icon-only btn-outline btn-sm">
298
- <pds-icon icon="download" size="sm" label="Download"></pds-icon>
299
- </button>
300
- </div>
301
- <div class="splitpanel-attachment">
302
- <pds-icon icon="file-text"></pds-icon>
303
- <span class="splitpanel-attachment__label">q4-report.xlsx</span>
304
- <button class="icon-only btn-outline btn-sm">
305
- <pds-icon icon="download" size="sm" label="Download"></pds-icon>
306
- </button>
307
- </div>
308
- </div>
309
- </article>
310
- </div>
311
-
312
- <div slot="right" class="splitpanel-pane splitpanel-pane--stacked">
313
- <article class="card splitpanel-card">
314
- <h3 class="splitpanel-heading">Discussion Topics</h3>
315
- <ul class="splitpanel-stack">
316
- <li>Prioritize customer feedback integration for the Q4 release.</li>
317
- <li>Finalize facility budget for new team hires.</li>
318
- <li>Review outstanding action items from last sprint review.</li>
319
- </ul>
320
- </article>
321
-
322
- <article class="card surface-elevated splitpanel-card">
323
- <h4 class="splitpanel-section-title">Notes</h4>
324
- <p class="splitpanel-message">
325
- Please come prepared with your updates and any questions you might have. Looking forward to seeing everyone there!
326
- </p>
327
- <p class="splitpanel-signoff">
328
- <strong>Sarah Johnson</strong>
329
- <span>Team Lead</span>
330
- </p>
331
- </article>
332
- </div>
333
- </pds-splitpanel>
334
- `;
335
-
336
- Default.storyName = 'Project Workspace';
337
-
338
- export const CodeEditorLayout = () => html`
339
- ${splitpanelStoryStyles}
340
- <pds-splitpanel class="splitpanel-story splitpanel-story--tall" orientation="horizontal" default-split="50%">
341
- <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
342
- <h3 class="splitpanel-heading">Code Editor</h3>
343
-
344
- <article class="card surface-elevated splitpanel-card">
345
- <pre class="splitpanel-code-block"><code>function greet(name) {
346
- console.log('Hello, ' + name + '!');
347
- }
348
-
349
- greet('World');</code></pre>
350
- </article>
351
-
352
- <div class="splitpanel-action-group">
353
- <button class="btn-primary">
354
- <pds-icon icon="play"></pds-icon>
355
- Run Code
356
- </button>
357
- <button class="btn-outline">
358
- <pds-icon icon="copy"></pds-icon>
359
- Copy
360
- </button>
361
- </div>
362
- </div>
363
-
364
- <div slot="right" class="splitpanel-pane splitpanel-pane--surface-alt splitpanel-pane--stacked">
365
- <h3 class="splitpanel-heading">Output Console</h3>
366
-
367
- <article class="card splitpanel-card splitpanel-card--tight">
368
- <div class="splitpanel-console">
369
- <div class="splitpanel-console__cmd">$ node script.js</div>
370
- <div>Hello, World!</div>
371
- <div class="splitpanel-console__meta">// Execution completed in 0.23s</div>
372
- </div>
373
- </article>
374
- </div>
375
- </pds-splitpanel>
376
- `;
377
-
378
- CodeEditorLayout.storyName = 'Code Editor Layout';
379
-
380
- export const DashboardLayout = () => html`
381
- ${splitpanelStoryStyles}
382
- <pds-splitpanel class="splitpanel-story splitpanel-story--xl" orientation="horizontal" default-split="250px">
383
- <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
384
- <h3 class="splitpanel-heading splitpanel-dashboard-heading">Navigation</h3>
385
-
386
- <nav class="splitpanel-nav">
387
- <button class="btn-outline">
388
- <pds-icon icon="house"></pds-icon>
389
- Dashboard
390
- </button>
391
- <button class="btn-outline">
392
- <pds-icon icon="bar-chart"></pds-icon>
393
- Analytics
394
- </button>
395
- <button class="btn-outline">
396
- <pds-icon icon="users"></pds-icon>
397
- Users
398
- </button>
399
- <button class="btn-outline">
400
- <pds-icon icon="gear"></pds-icon>
401
- Settings
402
- </button>
403
- </nav>
404
- </div>
405
-
406
- <div slot="right" class="splitpanel-pane splitpanel-pane--stacked">
407
- <h2 class="splitpanel-heading">Dashboard Overview</h2>
408
-
409
- <div class="splitpanel-grid">
410
- <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
411
- <h4 class="splitpanel-section-title">Total Users</h4>
412
- <div class="splitpanel-stat splitpanel-stat--primary">1,284</div>
413
- <p class="splitpanel-stat-note">↑ 12% from last month</p>
414
- </article>
415
-
416
- <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
417
- <h4 class="splitpanel-section-title">Revenue</h4>
418
- <div class="splitpanel-stat splitpanel-stat--secondary">$42.5K</div>
419
- <p class="splitpanel-stat-note">↑ 8% from last month</p>
420
- </article>
421
-
422
- <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
423
- <h4 class="splitpanel-section-title">Active Now</h4>
424
- <div class="splitpanel-stat splitpanel-stat--accent">127</div>
425
- <p class="splitpanel-stat-note">Current active users</p>
426
- </article>
427
- </div>
428
-
429
- <article class="card surface-elevated splitpanel-card splitpanel-activity-card">
430
- <h3 class="splitpanel-heading">Recent Activity</h3>
431
- <div class="splitpanel-activity-list">
432
- ${Array.from({ length: 5 }, (_, i) => html`
433
- <div class="splitpanel-activity-item">
434
- <div class="splitpanel-activity-avatar">
435
- <pds-icon icon="user"></pds-icon>
436
- </div>
437
- <div class="splitpanel-activity-body">
438
- <strong>User ${i + 1}</strong>
439
- <span class="splitpanel-activity-sub">Completed an action</span>
440
- </div>
441
- <span class="splitpanel-activity-time">${i + 1}h ago</span>
442
- </div>
443
- `)}
444
- </div>
445
- </article>
446
- </div>
447
- </pds-splitpanel>
448
- `;
449
-
450
- DashboardLayout.storyName = 'Dashboard Layout';
451
-
452
- export const StyledToggle = () => html`
453
- ${splitpanelStoryStyles}
454
- <style>
455
- .styled-toggle-panel::part(toggle) {
456
- top: auto;
457
- bottom: var(--spacing-4);
458
- right: var(--spacing-4);
459
- }
460
- </style>
461
-
462
- <div class="alert alert-info" style="margin-bottom: var(--spacing-4);">
463
- <div class="alert-icon">
464
- <pds-icon icon="info" class="icon-info" size="lg"></pds-icon>
465
- </div>
466
- <div>
467
- <div class="alert-title">Styled Toggle</div>
468
- <p>The custom styled toggle button below is only visible when the viewport width is less than the breakpoint (default 1024px). Resize your browser to see it.</p>
469
- </div>
470
- </div>
471
-
472
- <pds-splitpanel class="splitpanel-story splitpanel-story--tall styled-toggle-panel" layout="horizontal" defaultsplit="360px">
473
- <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
474
- <h3 class="splitpanel-heading">Mobile Menu</h3>
475
- <nav class="splitpanel-nav">
476
- <button class="btn-outline">
477
- <pds-icon icon="house"></pds-icon>
478
- Home
479
- </button>
480
- <button class="btn-outline">
481
- <pds-icon icon="user"></pds-icon>
482
- Profile
483
- </button>
484
- <button class="btn-outline">
485
- <pds-icon icon="gear"></pds-icon>
486
- Settings
487
- </button>
488
- </nav>
489
- </div>
490
- <div slot="right" class="splitpanel-pane splitpanel-pane--stacked">
491
- <h3 class="splitpanel-heading">Main Content</h3>
492
- <p>This is the main content area. In mobile view, use the floating toggle button at the bottom right to access the menu.</p>
493
- <article class="card surface-elevated splitpanel-card">
494
- <h4 class="splitpanel-section-title">Content Section</h4>
495
- <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
496
- </article>
497
- </div>
498
- </pds-splitpanel>
499
- `;
500
-
501
- StyledToggle.storyName = 'Styled Mobile Toggle';
502
-
1
+ import { html } from 'lit';
2
+
3
+ const docsParameters = {
4
+ description: {
5
+ component: 'Split panels divide content areas with a draggable divider for resizable layouts.'
6
+ }
7
+ };
8
+
9
+ if (typeof window !== 'undefined') {
10
+ import('../reference/reference-docs.js')
11
+ .then(({ createComponentDocsPage }) => {
12
+ docsParameters.page = createComponentDocsPage('pds-splitpanel');
13
+ })
14
+ .catch((error) => {
15
+ console.warn('storybook: docs page failed to load for pds-splitpanel', error);
16
+ });
17
+ }
18
+
19
+ const splitpanelStoryStyles = html`
20
+ <style>
21
+ .splitpanel-story {
22
+ width: 100%;
23
+ height: 560px;
24
+ }
25
+
26
+ .splitpanel-story--tall {
27
+ height: 600px;
28
+ }
29
+
30
+ .splitpanel-story--xl {
31
+ height: 700px;
32
+ }
33
+
34
+ .splitpanel-pane {
35
+ box-sizing: border-box;
36
+ padding: var(--spacing-4);
37
+ overflow: auto;
38
+ background: transparent;
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: var(--spacing-4);
42
+ }
43
+
44
+ .splitpanel-pane--surface {
45
+ background: var(--surface-bg);
46
+ }
47
+
48
+ .splitpanel-pane--surface-alt {
49
+ background: var(--surface-bg-secondary);
50
+ }
51
+
52
+ .splitpanel-pane--stacked {
53
+ gap: var(--spacing-3);
54
+ }
55
+
56
+ .splitpanel-card {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: var(--spacing-3);
60
+ }
61
+
62
+ .splitpanel-card--tight {
63
+ gap: var(--spacing-2);
64
+ }
65
+
66
+ .splitpanel-eyebrow {
67
+ margin: 0;
68
+ text-transform: uppercase;
69
+ font-size: 0.75rem;
70
+ letter-spacing: 0.08em;
71
+ color: var(--text-subtle, rgba(0, 0, 0, 0.6));
72
+ }
73
+
74
+ .splitpanel-heading {
75
+ margin: 0;
76
+ }
77
+
78
+ .splitpanel-section-title {
79
+ margin: 0;
80
+ }
81
+
82
+ .splitpanel-meta {
83
+ margin: 0;
84
+ font-size: 0.9rem;
85
+ color: var(--text-muted, rgba(0, 0, 0, 0.65));
86
+ }
87
+
88
+ .splitpanel-action-group {
89
+ display: flex;
90
+ flex-wrap: wrap;
91
+ gap: var(--spacing-2);
92
+ }
93
+
94
+ .splitpanel-stack {
95
+ margin: 0;
96
+ padding-left: var(--spacing-5);
97
+ }
98
+
99
+ .splitpanel-stack li + li {
100
+ margin-top: var(--spacing-2);
101
+ }
102
+
103
+ .splitpanel-attachments {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: var(--spacing-2);
107
+ }
108
+
109
+ .splitpanel-attachment {
110
+ display: flex;
111
+ align-items: center;
112
+ gap: var(--spacing-2);
113
+ padding: var(--spacing-2);
114
+ border-radius: var(--radius-sm);
115
+ background: var(--surface-bg-secondary);
116
+ }
117
+
118
+ .splitpanel-attachment__label {
119
+ flex: 1;
120
+ overflow: hidden;
121
+ text-overflow: ellipsis;
122
+ white-space: nowrap;
123
+ }
124
+
125
+ .splitpanel-message {
126
+ margin: 0;
127
+ line-height: 1.6;
128
+ }
129
+
130
+ .splitpanel-signoff {
131
+ margin: 0;
132
+ display: flex;
133
+ flex-direction: column;
134
+ gap: var(--spacing-1);
135
+ }
136
+
137
+ .splitpanel-code-block {
138
+ margin: 0;
139
+ padding: var(--spacing-3);
140
+ border-radius: var(--radius-md);
141
+ background: var(--surface-bg-secondary);
142
+ font-family: var(--font-family-mono, 'Fira Code', 'Courier New', monospace);
143
+ font-size: 0.875rem;
144
+ overflow: auto;
145
+ }
146
+
147
+ .splitpanel-console {
148
+ display: flex;
149
+ flex-direction: column;
150
+ gap: var(--spacing-1);
151
+ padding: var(--spacing-3);
152
+ border-radius: var(--radius-md);
153
+ background: #1e1e1e;
154
+ color: #d4d4d4;
155
+ font-family: var(--font-family-mono, 'Fira Code', 'Courier New', monospace);
156
+ }
157
+
158
+ .splitpanel-console__cmd {
159
+ color: #4ec9b0;
160
+ }
161
+
162
+ .splitpanel-console__meta {
163
+ color: #6a9955;
164
+ }
165
+
166
+ .splitpanel-dashboard-heading {
167
+ margin: 0 0 var(--spacing-4);
168
+ }
169
+
170
+ .splitpanel-nav {
171
+ display: flex;
172
+ flex-direction: column;
173
+ gap: var(--spacing-2);
174
+ }
175
+
176
+ .splitpanel-nav .btn-outline {
177
+ justify-content: flex-start;
178
+ }
179
+
180
+ .splitpanel-grid {
181
+ display: grid;
182
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
183
+ gap: var(--spacing-4);
184
+ }
185
+
186
+ .splitpanel-stat {
187
+ font-size: 2.5rem;
188
+ font-weight: 700;
189
+ margin: var(--spacing-2) 0;
190
+ }
191
+
192
+ .splitpanel-stat--primary {
193
+ color: var(--color-primary);
194
+ }
195
+
196
+ .splitpanel-stat--secondary {
197
+ color: var(--color-secondary);
198
+ }
199
+
200
+ .splitpanel-stat--accent {
201
+ color: var(--color-accent);
202
+ }
203
+
204
+ .splitpanel-stat-note {
205
+ margin: 0;
206
+ font-size: 0.85rem;
207
+ opacity: 0.7;
208
+ }
209
+
210
+ .splitpanel-activity-card {
211
+ gap: var(--spacing-3);
212
+ }
213
+
214
+ .splitpanel-activity-list {
215
+ display: flex;
216
+ flex-direction: column;
217
+ gap: var(--spacing-3);
218
+ }
219
+
220
+ .splitpanel-activity-item {
221
+ display: flex;
222
+ align-items: center;
223
+ gap: var(--spacing-3);
224
+ padding: var(--spacing-2);
225
+ border-radius: var(--radius-sm);
226
+ background: var(--surface-bg-secondary);
227
+ }
228
+
229
+ .splitpanel-activity-body {
230
+ flex: 1;
231
+ display: flex;
232
+ flex-direction: column;
233
+ gap: var(--spacing-1);
234
+ }
235
+
236
+ .splitpanel-activity-sub {
237
+ font-size: 0.85rem;
238
+ opacity: 0.7;
239
+ }
240
+
241
+ .splitpanel-activity-time {
242
+ font-size: 0.85rem;
243
+ opacity: 0.6;
244
+ }
245
+ </style>
246
+ `;
247
+
248
+ export default {
249
+ title: 'Components/Pds Splitpanel',
250
+ tags: ['autodocs', 'splitpanel', 'split', 'resizable', 'panel', 'layout'],
251
+ parameters: {
252
+ pds: {
253
+ tags: ['splitpanel', 'split', 'resizable', 'panel', 'layout', 'sizing', 'interaction', 'pds-splitpanel']
254
+ },
255
+ docs: docsParameters
256
+ }
257
+ };
258
+
259
+ export const Default = () => html`
260
+ ${splitpanelStoryStyles}
261
+ <pds-splitpanel class="splitpanel-story splitpanel-story--tall" orientation="horizontal" default-split="360px">
262
+ <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
263
+ <article class="card surface-elevated splitpanel-card">
264
+ <div>
265
+ <p class="splitpanel-eyebrow">Leadership Sync</p>
266
+ <h3 class="splitpanel-heading">Q4 Roadmap Planning</h3>
267
+ <p class="splitpanel-meta">Monday, 2:00 PM • Conference Room Aurora</p>
268
+ </div>
269
+
270
+ <div class="splitpanel-action-group">
271
+ <button class="btn-primary btn-sm">
272
+ <pds-icon icon="video"></pds-icon>
273
+ Join Meeting
274
+ </button>
275
+ <button class="btn-outline btn-sm">
276
+ <pds-icon icon="calendar"></pds-icon>
277
+ Add to Calendar
278
+ </button>
279
+ </div>
280
+
281
+ <div>
282
+ <h4 class="splitpanel-section-title">Agenda</h4>
283
+ <ul class="splitpanel-stack">
284
+ <li>Roadmap alignment and blockers</li>
285
+ <li>Department resource updates</li>
286
+ <li>Upcoming launch dependencies</li>
287
+ </ul>
288
+ </div>
289
+ </article>
290
+
291
+ <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
292
+ <h4 class="splitpanel-section-title">Attachments (2)</h4>
293
+ <div class="splitpanel-attachments">
294
+ <div class="splitpanel-attachment">
295
+ <pds-icon icon="file-text"></pds-icon>
296
+ <span class="splitpanel-attachment__label">meeting-agenda.pdf</span>
297
+ <button class="icon-only btn-outline btn-sm">
298
+ <pds-icon icon="download" size="sm" label="Download"></pds-icon>
299
+ </button>
300
+ </div>
301
+ <div class="splitpanel-attachment">
302
+ <pds-icon icon="file-text"></pds-icon>
303
+ <span class="splitpanel-attachment__label">q4-report.xlsx</span>
304
+ <button class="icon-only btn-outline btn-sm">
305
+ <pds-icon icon="download" size="sm" label="Download"></pds-icon>
306
+ </button>
307
+ </div>
308
+ </div>
309
+ </article>
310
+ </div>
311
+
312
+ <div slot="right" class="splitpanel-pane splitpanel-pane--stacked">
313
+ <article class="card splitpanel-card">
314
+ <h3 class="splitpanel-heading">Discussion Topics</h3>
315
+ <ul class="splitpanel-stack">
316
+ <li>Prioritize customer feedback integration for the Q4 release.</li>
317
+ <li>Finalize facility budget for new team hires.</li>
318
+ <li>Review outstanding action items from last sprint review.</li>
319
+ </ul>
320
+ </article>
321
+
322
+ <article class="card surface-elevated splitpanel-card">
323
+ <h4 class="splitpanel-section-title">Notes</h4>
324
+ <p class="splitpanel-message">
325
+ Please come prepared with your updates and any questions you might have. Looking forward to seeing everyone there!
326
+ </p>
327
+ <p class="splitpanel-signoff">
328
+ <strong>Sarah Johnson</strong>
329
+ <span>Team Lead</span>
330
+ </p>
331
+ </article>
332
+ </div>
333
+ </pds-splitpanel>
334
+ `;
335
+
336
+ Default.storyName = 'Project Workspace';
337
+
338
+ export const CodeEditorLayout = () => html`
339
+ ${splitpanelStoryStyles}
340
+ <pds-splitpanel class="splitpanel-story splitpanel-story--tall" orientation="horizontal" default-split="50%">
341
+ <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
342
+ <h3 class="splitpanel-heading">Code Editor</h3>
343
+
344
+ <article class="card surface-elevated splitpanel-card">
345
+ <pre class="splitpanel-code-block"><code>function greet(name) {
346
+ console.log('Hello, ' + name + '!');
347
+ }
348
+
349
+ greet('World');</code></pre>
350
+ </article>
351
+
352
+ <div class="splitpanel-action-group">
353
+ <button class="btn-primary">
354
+ <pds-icon icon="play"></pds-icon>
355
+ Run Code
356
+ </button>
357
+ <button class="btn-outline">
358
+ <pds-icon icon="copy"></pds-icon>
359
+ Copy
360
+ </button>
361
+ </div>
362
+ </div>
363
+
364
+ <div slot="right" class="splitpanel-pane splitpanel-pane--surface-alt splitpanel-pane--stacked">
365
+ <h3 class="splitpanel-heading">Output Console</h3>
366
+
367
+ <article class="card splitpanel-card splitpanel-card--tight">
368
+ <div class="splitpanel-console">
369
+ <div class="splitpanel-console__cmd">$ node script.js</div>
370
+ <div>Hello, World!</div>
371
+ <div class="splitpanel-console__meta">// Execution completed in 0.23s</div>
372
+ </div>
373
+ </article>
374
+ </div>
375
+ </pds-splitpanel>
376
+ `;
377
+
378
+ CodeEditorLayout.storyName = 'Code Editor Layout';
379
+
380
+ export const DashboardLayout = () => html`
381
+ ${splitpanelStoryStyles}
382
+ <pds-splitpanel class="splitpanel-story splitpanel-story--xl" orientation="horizontal" default-split="250px">
383
+ <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
384
+ <h3 class="splitpanel-heading splitpanel-dashboard-heading">Navigation</h3>
385
+
386
+ <nav class="splitpanel-nav">
387
+ <button class="btn-outline">
388
+ <pds-icon icon="house"></pds-icon>
389
+ Dashboard
390
+ </button>
391
+ <button class="btn-outline">
392
+ <pds-icon icon="bar-chart"></pds-icon>
393
+ Analytics
394
+ </button>
395
+ <button class="btn-outline">
396
+ <pds-icon icon="users"></pds-icon>
397
+ Users
398
+ </button>
399
+ <button class="btn-outline">
400
+ <pds-icon icon="gear"></pds-icon>
401
+ Settings
402
+ </button>
403
+ </nav>
404
+ </div>
405
+
406
+ <div slot="right" class="splitpanel-pane splitpanel-pane--stacked">
407
+ <h2 class="splitpanel-heading">Dashboard Overview</h2>
408
+
409
+ <div class="splitpanel-grid">
410
+ <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
411
+ <h4 class="splitpanel-section-title">Total Users</h4>
412
+ <div class="splitpanel-stat splitpanel-stat--primary">1,284</div>
413
+ <p class="splitpanel-stat-note">↑ 12% from last month</p>
414
+ </article>
415
+
416
+ <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
417
+ <h4 class="splitpanel-section-title">Revenue</h4>
418
+ <div class="splitpanel-stat splitpanel-stat--secondary">$42.5K</div>
419
+ <p class="splitpanel-stat-note">↑ 8% from last month</p>
420
+ </article>
421
+
422
+ <article class="card surface-elevated splitpanel-card splitpanel-card--tight">
423
+ <h4 class="splitpanel-section-title">Active Now</h4>
424
+ <div class="splitpanel-stat splitpanel-stat--accent">127</div>
425
+ <p class="splitpanel-stat-note">Current active users</p>
426
+ </article>
427
+ </div>
428
+
429
+ <article class="card surface-elevated splitpanel-card splitpanel-activity-card">
430
+ <h3 class="splitpanel-heading">Recent Activity</h3>
431
+ <div class="splitpanel-activity-list">
432
+ ${Array.from({ length: 5 }, (_, i) => html`
433
+ <div class="splitpanel-activity-item">
434
+ <div class="splitpanel-activity-avatar">
435
+ <pds-icon icon="user"></pds-icon>
436
+ </div>
437
+ <div class="splitpanel-activity-body">
438
+ <strong>User ${i + 1}</strong>
439
+ <span class="splitpanel-activity-sub">Completed an action</span>
440
+ </div>
441
+ <span class="splitpanel-activity-time">${i + 1}h ago</span>
442
+ </div>
443
+ `)}
444
+ </div>
445
+ </article>
446
+ </div>
447
+ </pds-splitpanel>
448
+ `;
449
+
450
+ DashboardLayout.storyName = 'Dashboard Layout';
451
+
452
+ export const StyledToggle = () => html`
453
+ ${splitpanelStoryStyles}
454
+ <style>
455
+ .styled-toggle-panel::part(toggle) {
456
+ top: auto;
457
+ bottom: var(--spacing-4);
458
+ right: var(--spacing-4);
459
+ }
460
+ </style>
461
+
462
+ <div class="alert alert-info" style="margin-bottom: var(--spacing-4);">
463
+ <div class="alert-icon">
464
+ <pds-icon icon="info" class="icon-info" size="lg"></pds-icon>
465
+ </div>
466
+ <div>
467
+ <div class="alert-title">Styled Toggle</div>
468
+ <p>The custom styled toggle button below is only visible when the viewport width is less than the breakpoint (default 1024px). Resize your browser to see it.</p>
469
+ </div>
470
+ </div>
471
+
472
+ <pds-splitpanel class="splitpanel-story splitpanel-story--tall styled-toggle-panel" layout="horizontal" defaultsplit="360px">
473
+ <div slot="left" class="splitpanel-pane splitpanel-pane--surface splitpanel-pane--stacked">
474
+ <h3 class="splitpanel-heading">Mobile Menu</h3>
475
+ <nav class="splitpanel-nav">
476
+ <button class="btn-outline">
477
+ <pds-icon icon="house"></pds-icon>
478
+ Home
479
+ </button>
480
+ <button class="btn-outline">
481
+ <pds-icon icon="user"></pds-icon>
482
+ Profile
483
+ </button>
484
+ <button class="btn-outline">
485
+ <pds-icon icon="gear"></pds-icon>
486
+ Settings
487
+ </button>
488
+ </nav>
489
+ </div>
490
+ <div slot="right" class="splitpanel-pane splitpanel-pane--stacked">
491
+ <h3 class="splitpanel-heading">Main Content</h3>
492
+ <p>This is the main content area. In mobile view, use the floating toggle button at the bottom right to access the menu.</p>
493
+ <article class="card surface-elevated splitpanel-card">
494
+ <h4 class="splitpanel-section-title">Content Section</h4>
495
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
496
+ </article>
497
+ </div>
498
+ </pds-splitpanel>
499
+ `;
500
+
501
+ StyledToggle.storyName = 'Styled Mobile Toggle';
502
+