@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.
Files changed (129) hide show
  1. package/.storybook/addons/description/preview.js +15 -0
  2. package/.storybook/addons/description/register.js +60 -0
  3. package/.storybook/addons/html-preview/Panel.jsx +327 -0
  4. package/.storybook/addons/html-preview/constants.js +6 -0
  5. package/.storybook/addons/html-preview/preview.js +178 -0
  6. package/.storybook/addons/html-preview/register.js +16 -0
  7. package/.storybook/addons/pds-configurator/SearchTool.js +44 -0
  8. package/.storybook/addons/pds-configurator/Tool.js +30 -0
  9. package/.storybook/addons/pds-configurator/constants.js +9 -0
  10. package/.storybook/addons/pds-configurator/preview.js +159 -0
  11. package/.storybook/addons/pds-configurator/register.js +24 -0
  12. package/.storybook/docs.css +35 -0
  13. package/.storybook/htmlPreview.css +103 -0
  14. package/.storybook/htmlPreview.js +271 -0
  15. package/.storybook/main.js +160 -0
  16. package/.storybook/preview-body.html +48 -0
  17. package/.storybook/preview-head.html +11 -0
  18. package/.storybook/preview.js +1563 -0
  19. package/README.md +266 -0
  20. package/bin/index.js +40 -0
  21. package/dist/pds-reference.json +2101 -0
  22. package/package.json +45 -0
  23. package/pds.config.js +6 -0
  24. package/public/assets/css/app.css +1216 -0
  25. package/public/assets/data/auto-design-advanced.json +704 -0
  26. package/public/assets/data/auto-design-simple.json +123 -0
  27. package/public/assets/img/icon-512x512.png +0 -0
  28. package/public/assets/img/logo-trans.png +0 -0
  29. package/public/assets/img/logo.png +0 -0
  30. package/public/assets/js/app.js +15088 -0
  31. package/public/assets/js/app.js.map +7 -0
  32. package/public/assets/js/lit.js +1176 -0
  33. package/public/assets/js/lit.js.map +7 -0
  34. package/public/assets/js/pds.js +9801 -0
  35. package/public/assets/js/pds.js.map +7 -0
  36. package/public/assets/pds/components/pds-calendar.js +837 -0
  37. package/public/assets/pds/components/pds-drawer.js +857 -0
  38. package/public/assets/pds/components/pds-icon.js +338 -0
  39. package/public/assets/pds/components/pds-jsonform.js +1775 -0
  40. package/public/assets/pds/components/pds-richtext.js +1035 -0
  41. package/public/assets/pds/components/pds-scrollrow.js +331 -0
  42. package/public/assets/pds/components/pds-splitpanel.js +401 -0
  43. package/public/assets/pds/components/pds-tabstrip.js +251 -0
  44. package/public/assets/pds/components/pds-toaster.js +446 -0
  45. package/public/assets/pds/components/pds-upload.js +657 -0
  46. package/public/assets/pds/custom-elements.json +2003 -0
  47. package/public/assets/pds/icons/pds-icons.svg +498 -0
  48. package/public/assets/pds/pds-css-complete.json +1861 -0
  49. package/public/assets/pds/pds-runtime-config.json +11 -0
  50. package/public/assets/pds/pds.css-data.json +2152 -0
  51. package/public/assets/pds/styles/pds-components.css +1944 -0
  52. package/public/assets/pds/styles/pds-components.css.js +3895 -0
  53. package/public/assets/pds/styles/pds-primitives.css +352 -0
  54. package/public/assets/pds/styles/pds-primitives.css.js +711 -0
  55. package/public/assets/pds/styles/pds-styles.css +3761 -0
  56. package/public/assets/pds/styles/pds-styles.css.js +7529 -0
  57. package/public/assets/pds/styles/pds-tokens.css +699 -0
  58. package/public/assets/pds/styles/pds-tokens.css.js +1405 -0
  59. package/public/assets/pds/styles/pds-utilities.css +763 -0
  60. package/public/assets/pds/styles/pds-utilities.css.js +1533 -0
  61. package/public/assets/pds/vscode-custom-data.json +824 -0
  62. package/scripts/build-pds-reference.mjs +807 -0
  63. package/scripts/generate-stories.js +542 -0
  64. package/scripts/package-build.js +86 -0
  65. package/src/js/app.js +17 -0
  66. package/src/js/common/ask.js +208 -0
  67. package/src/js/common/common.js +20 -0
  68. package/src/js/common/font-loader.js +200 -0
  69. package/src/js/common/msg.js +90 -0
  70. package/src/js/lit.js +40 -0
  71. package/src/js/pds-core/pds-config.js +1162 -0
  72. package/src/js/pds-core/pds-enhancer-metadata.js +75 -0
  73. package/src/js/pds-core/pds-enhancers.js +357 -0
  74. package/src/js/pds-core/pds-enums.js +86 -0
  75. package/src/js/pds-core/pds-generator.js +5317 -0
  76. package/src/js/pds-core/pds-ontology.js +256 -0
  77. package/src/js/pds-core/pds-paths.js +109 -0
  78. package/src/js/pds-core/pds-query.js +571 -0
  79. package/src/js/pds-core/pds-registry.js +129 -0
  80. package/src/js/pds-core/pds.d.ts +129 -0
  81. package/src/js/pds.d.ts +408 -0
  82. package/src/js/pds.js +1579 -0
  83. package/src/pds-core/pds-api.js +105 -0
  84. package/stories/GettingStarted.md +96 -0
  85. package/stories/GettingStarted.stories.js +144 -0
  86. package/stories/WhatIsPDS.md +194 -0
  87. package/stories/WhatIsPDS.stories.js +144 -0
  88. package/stories/components/PdsCalendar.stories.js +263 -0
  89. package/stories/components/PdsDrawer.stories.js +623 -0
  90. package/stories/components/PdsIcon.stories.js +78 -0
  91. package/stories/components/PdsJsonform.stories.js +1444 -0
  92. package/stories/components/PdsRichtext.stories.js +367 -0
  93. package/stories/components/PdsScrollrow.stories.js +140 -0
  94. package/stories/components/PdsSplitpanel.stories.js +502 -0
  95. package/stories/components/PdsTabstrip.stories.js +442 -0
  96. package/stories/components/PdsToaster.stories.js +186 -0
  97. package/stories/components/PdsUpload.stories.js +66 -0
  98. package/stories/enhancements/Dropdowns.stories.js +185 -0
  99. package/stories/enhancements/InteractiveStates.stories.js +625 -0
  100. package/stories/enhancements/MeshGradients.stories.js +320 -0
  101. package/stories/enhancements/OpenGroups.stories.js +227 -0
  102. package/stories/enhancements/RangeSliders.stories.js +232 -0
  103. package/stories/enhancements/RequiredFields.stories.js +189 -0
  104. package/stories/enhancements/Toggles.stories.js +167 -0
  105. package/stories/foundations/Colors.stories.js +283 -0
  106. package/stories/foundations/Icons.stories.js +305 -0
  107. package/stories/foundations/SmartSurfaces.stories.js +367 -0
  108. package/stories/foundations/Spacing.stories.js +175 -0
  109. package/stories/foundations/Typography.stories.js +960 -0
  110. package/stories/foundations/ZIndex.stories.js +325 -0
  111. package/stories/patterns/BorderEffects.stories.js +72 -0
  112. package/stories/patterns/Layout.stories.js +99 -0
  113. package/stories/patterns/Utilities.stories.js +107 -0
  114. package/stories/primitives/Accordion.stories.js +359 -0
  115. package/stories/primitives/Alerts.stories.js +64 -0
  116. package/stories/primitives/Badges.stories.js +183 -0
  117. package/stories/primitives/Buttons.stories.js +229 -0
  118. package/stories/primitives/Cards.stories.js +353 -0
  119. package/stories/primitives/FormGroups.stories.js +569 -0
  120. package/stories/primitives/Forms.stories.js +131 -0
  121. package/stories/primitives/Media.stories.js +203 -0
  122. package/stories/primitives/Tables.stories.js +232 -0
  123. package/stories/reference/ReferenceCatalog.stories.js +28 -0
  124. package/stories/reference/reference-catalog.js +413 -0
  125. package/stories/reference/reference-docs.js +302 -0
  126. package/stories/reference/reference-helpers.js +310 -0
  127. package/stories/utilities/GridSystem.stories.js +208 -0
  128. package/stories/utils/PdsAsk.stories.js +420 -0
  129. package/stories/utils/toast-utils.js +148 -0
@@ -0,0 +1,1216 @@
1
+ /**
2
+ * Pure Design System Builder - App-Specific Styles
3
+ * These styles are for the design system builder interface itself,
4
+ * NOT part of the generated design system CSS
5
+ */
6
+
7
+ html {
8
+ scroll-behavior: smooth;
9
+ }
10
+ /*
11
+ body {
12
+ background: var(--background-mesh-01);
13
+ } */
14
+
15
+ .abs-center {
16
+ position: fixed !important;
17
+ top: 50vh;
18
+ left: 50vh;
19
+ padding: 2rem 3rem;
20
+ background-color: var(--color-surface-elevated);
21
+ border-radius: var(--radius-md);
22
+ }
23
+
24
+
25
+ pds-config-form {
26
+ z-index: 1;
27
+ }
28
+
29
+ pds-config-form {
30
+ form > fieldset > legend {
31
+ padding-left: var(--spacing-3);
32
+ }
33
+ }
34
+
35
+ body {
36
+ margin: 0;
37
+ padding: 0;
38
+ overflow: hidden;
39
+ }
40
+
41
+ /* App layout: aside (designer) + main (showcase) */
42
+ .app-layout {
43
+ /* display: grid;
44
+ grid-template-columns: 480px 1fr; */
45
+ display: flex;
46
+ height: 100vh;
47
+ overflow: hidden;
48
+ }
49
+
50
+ /* Designer aside */
51
+ pds-config-form {
52
+ display: flex;
53
+ flex-direction: column;
54
+ height: 100vh;
55
+ border-right: 1px solid var(--color-border);
56
+ overflow: hidden;
57
+ }
58
+
59
+ .designer-container {
60
+ display: flex;
61
+ flex-direction: column;
62
+ height: 100%;
63
+
64
+ fieldset {
65
+ background-color: transparent;
66
+ }
67
+ }
68
+
69
+ .designer-toolbar {
70
+ display: flex;
71
+ flex-direction: column;
72
+ gap: var(--spacing-3);
73
+ padding: var(--spacing-4);
74
+ border-bottom: 1px solid var(--color-border);
75
+ }
76
+
77
+ .inspector-toggle {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: var(--spacing-2);
81
+ padding: var(--spacing-2) var(--spacing-3);
82
+ background: var(--color-surface-base);
83
+ border: 1px solid var(--color-border);
84
+ border-radius: var(--radius-md);
85
+ color: var(--color-text-secondary);
86
+ font-size: var(--font-size-sm);
87
+ font-weight: var(--font-weight-medium);
88
+ cursor: pointer;
89
+ transition: all var(--transition-fast);
90
+ width: 100%;
91
+ justify-content: center;
92
+ }
93
+
94
+ .inspector-toggle:hover {
95
+ background: var(--color-surface-hover);
96
+ border-color: var(--color-border-strong);
97
+ color: var(--color-text-primary);
98
+ }
99
+
100
+ .inspector-toggle.active {
101
+ background: var(--color-primary-100);
102
+ border-color: var(--color-primary-500);
103
+ color: var(--color-primary-700);
104
+ font-weight: var(--font-weight-semibold);
105
+ }
106
+
107
+ .inspector-toggle.active:hover {
108
+ background: var(--color-primary-200);
109
+ }
110
+
111
+ .designer-header {
112
+ padding: var(--spacing-6);
113
+ border-bottom: 1px solid var(--color-border);
114
+ }
115
+
116
+ .designer-header h2 {
117
+ margin: 0 0 var(--spacing-2) 0;
118
+ }
119
+
120
+ .designer-header p {
121
+ margin: 0;
122
+ color: var(--color-text-secondary);
123
+ }
124
+
125
+ .designer-form-container {
126
+ overflow-y: auto;
127
+ flex: 1;
128
+ }
129
+
130
+ .designer-actions {
131
+ padding: var(--spacing-4);
132
+ border-top: 1px solid var(--color-border);
133
+ display: flex;
134
+ gap: var(--spacing-3);
135
+ flex-direction: column;
136
+ }
137
+
138
+ /* Showcase: remove older duplicates in favor of consolidated styles below */
139
+
140
+ /* Badge grid */
141
+ .badge-grid {
142
+ display: flex;
143
+ flex-wrap: wrap;
144
+ gap: var(--spacing-3);
145
+ margin-bottom: var(--spacing-6);
146
+ }
147
+
148
+ /* Icon demo grid */
149
+ .icon-demo-grid {
150
+ display: grid;
151
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
152
+ gap: var(--spacing-4);
153
+ margin-bottom: var(--spacing-6);
154
+ }
155
+
156
+ .icon-demo-item {
157
+ display: flex;
158
+ flex-direction: column;
159
+ align-items: center;
160
+ gap: var(--spacing-2);
161
+ padding: var(--spacing-3);
162
+ border: 1px solid var(--color-border);
163
+ border-radius: var(--radius-md);
164
+ text-align: center;
165
+ }
166
+
167
+ .icon-demo-item span {
168
+ color: var(--color-text-secondary);
169
+ }
170
+
171
+ /* Dropdown styles are provided by PDS components layer */
172
+
173
+ /* Adjustments for SplitPanel below breakpoint */
174
+ :host([mobile]) .splitter {
175
+ display: none;
176
+ }
177
+
178
+ :host([mobile]) [slot="right"] {
179
+ display: block;
180
+ flex: 1;
181
+ }
182
+
183
+ :host([mobile]) [slot="left"] {
184
+ display: none; /* Completely hide the left slot */
185
+ position: fixed;
186
+ top: 0;
187
+ left: 0;
188
+ height: 100%;
189
+ width: auto;
190
+ max-width: 300px; /* Limit the width to avoid taking too much space */
191
+ background: var(--color-surface-base);
192
+ box-shadow: var(--shadow-lg);
193
+ transform: translateX(-100%);
194
+ transition: transform var(--transition-fast) ease-in-out;
195
+ }
196
+
197
+ :host([mobile]) [slot="left"].open {
198
+ display: block; /* Show the left slot only when toggled */
199
+ transform: translateX(0);
200
+ }
201
+
202
+ :host([mobile]) [slot="left"] {
203
+ visibility: hidden;
204
+ }
205
+
206
+ :host([mobile]) [slot="left"].open {
207
+ visibility: visible;
208
+ }
209
+
210
+ pds-config-form {
211
+ legend {
212
+ font-size: 1.25rem;
213
+ font-weight: 600;
214
+ }
215
+ }
216
+
217
+ pds-jsonform form > fieldset {
218
+ _padding: 0;
219
+ margin: 0;
220
+
221
+ > legend {
222
+ font-size: var(--font-size-xl);
223
+ }
224
+ }
225
+
226
+ label:has(input[type="color"]) {
227
+ display: inline-block;
228
+ }
229
+
230
+ .designer-container {
231
+ position: relative;
232
+ }
233
+
234
+ #mode-toggle {
235
+ margin: 1rem;
236
+ }
237
+
238
+ /* Preset color swatches */
239
+ .preset-colors {
240
+ display: flex;
241
+ gap: 1px;
242
+ flex-shrink: 0;
243
+ }
244
+
245
+ .preset-colors span {
246
+ width: 10px;
247
+ height: 20px;
248
+ }
249
+
250
+ .preset-info {
251
+ display: flex;
252
+ flex-direction: column;
253
+ gap: 2px;
254
+ flex: 1;
255
+ }
256
+
257
+ .preset-info strong {
258
+ font-weight: 600;
259
+ color: var(--color-text-primary);
260
+ }
261
+
262
+ .preset-info small {
263
+ font-size: 0.85em;
264
+ color: var(--color-text-secondary);
265
+ line-height: 1.3;
266
+ }
267
+
268
+ [data-dropdown] menu a:has(.preset-colors) {
269
+ gap: var(--spacing-3);
270
+ }
271
+
272
+ /* =============================================================================
273
+ Showcase Styles
274
+ Styles specific to the design system showcase/demo page
275
+ ============================================================================= */
276
+
277
+ pds-demo {
278
+ position: relative;
279
+ display: block;
280
+ height: 100vh; /* Constrain height so inner container can scroll */
281
+ overflow: hidden; /* Prevent body scroll; inner container handles it */
282
+ }
283
+
284
+ /* Table of Contents Navigation */
285
+ .showcase-toc {
286
+ position: fixed;
287
+ width: 700px;
288
+ right: -660px;
289
+
290
+ top: 10px;
291
+ z-index: 100;
292
+
293
+ border-bottom: 1px solid var(--color-border-subtle);
294
+
295
+ box-shadow: var(--shadow-sm);
296
+
297
+ margin: 0 auto;
298
+
299
+ transition: right var(--transition-fast);
300
+
301
+ input {
302
+ cursor: pointer;
303
+ }
304
+
305
+ &:has(input:focus) {
306
+ right: 10px;
307
+
308
+ input {
309
+ cursor: unset;
310
+ }
311
+ }
312
+
313
+
314
+ }
315
+
316
+ @media screen and (max-width: 1023px) {
317
+ .showcase-toc {
318
+ top: 50px;
319
+ &:has(input:focus) {
320
+ left: 0;
321
+ right: 0;
322
+ top: 0;
323
+ bottom: 0
324
+ }
325
+ }
326
+ }
327
+
328
+ .toc-wrapper {
329
+ display: flex;
330
+ align-items: center;
331
+ gap: var(--spacing-4);
332
+ flex-wrap: wrap;
333
+ max-width: 1400px;
334
+ margin: 0 auto;
335
+
336
+ .input-icon {
337
+ width: 100%;
338
+ }
339
+ }
340
+
341
+ /* Showcase Container */
342
+ .showcase-container {
343
+ max-width: 1400px;
344
+ margin: 0 auto;
345
+ padding: var(--spacing-6);
346
+ height: 100%; /* Fill pds-demo */
347
+ min-height: 100%; /* Ensure full height for scrolling */
348
+ overflow-y: auto; /* Inner scroll container */
349
+ -webkit-overflow-scrolling: touch;
350
+ }
351
+
352
+ /* Code Inspector Mode */
353
+ .showcase-container.inspector-active {
354
+ cursor: crosshair;
355
+ }
356
+
357
+ .showcase-container.inspector-active * {
358
+ cursor: crosshair !important;
359
+ }
360
+
361
+ .showcase-container.inspector-active .showcase-section:hover {
362
+ outline: 2px dashed var(--color-primary-500);
363
+ outline-offset: 2px;
364
+ }
365
+
366
+ /* Hero Section */
367
+ .showcase-hero {
368
+ position: relative;
369
+ text-align: center;
370
+ padding: var(--spacing-12) var(--spacing-6);
371
+ background: linear-gradient(
372
+ 135deg,
373
+ var(--color-primary-500),
374
+ var(--color-accent-500)
375
+ );
376
+ color: white;
377
+ border-radius: var(--radius-lg);
378
+ margin-bottom: var(--spacing-8);
379
+ z-index: 2;
380
+
381
+ &::before {
382
+ pointer-events: none;;
383
+ position: absolute;
384
+ top: 0;
385
+ left: 0;
386
+ right: 0;
387
+ bottom: 0;
388
+ content: "";
389
+ background: url("/assets/img/icon-512x512.png") no-repeat center center;
390
+ background-size: 70%;
391
+ opacity: 0.2;
392
+ z-index: 0;
393
+ mix-blend-mode: lighten;
394
+ }
395
+
396
+ h1,
397
+ p {
398
+ position: relative;
399
+ }
400
+ }
401
+
402
+ .showcase-hero h1 {
403
+ margin: 0 0 var(--spacing-4) 0;
404
+ font-size: var(--font-size-4xl);
405
+ font-weight: var(--font-weight-bold);
406
+ color: white;
407
+ }
408
+
409
+ .showcase-hero p {
410
+ margin: 0 0 var(--spacing-6) 0;
411
+ font-size: var(--font-size-xl);
412
+ opacity: 0.95;
413
+ color: white;
414
+ }
415
+
416
+ /* Showcase Sections */
417
+ .showcase-section {
418
+ padding: var(--spacing-8) var(--spacing-6);
419
+ margin-bottom: var(--spacing-6);
420
+
421
+ border-radius: var(--radius-lg);
422
+ }
423
+
424
+ .showcase-section.alt-bg {
425
+ /* Prefer adding the `surface--translucent` utility to the section element */
426
+ background-color: var(--color-surface-translucent-50);
427
+ }
428
+
429
+ .showcase-section h2 {
430
+ display: flex;
431
+ align-items: center;
432
+ gap: var(--spacing-3);
433
+ margin: 0 0 var(--spacing-6) 0;
434
+ font-size: var(--font-size-2xl);
435
+ font-weight: var(--font-weight-bold);
436
+ }
437
+
438
+ .showcase-section h3 {
439
+ margin: var(--spacing-6) 0 var(--spacing-4) 0;
440
+ font-size: var(--font-size-xl);
441
+ font-weight: var(--font-weight-semibold);
442
+ color: var(--color-text-primary);
443
+ }
444
+
445
+ .showcase-section h3:first-of-type {
446
+ margin-top: 0;
447
+ }
448
+
449
+ /* Color Grid */
450
+ .color-grid {
451
+ display: grid;
452
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
453
+ gap: var(--spacing-6);
454
+ }
455
+
456
+ .color-card {
457
+ overflow: hidden;
458
+ padding: 0;
459
+ background: var(--color-surface-base);
460
+ border-radius: var(--radius-md);
461
+ box-shadow: var(--shadow-md);
462
+ transition: transform var(--transition-fast),
463
+ box-shadow var(--transition-fast);
464
+ }
465
+
466
+ .color-card:hover {
467
+ transform: translateY(-4px);
468
+ box-shadow: var(--shadow-lg);
469
+ }
470
+
471
+ .color-card-header {
472
+ height: 120px;
473
+ display: flex;
474
+ align-items: center;
475
+ justify-content: center;
476
+ color: white;
477
+ font-size: var(--font-size-2xl);
478
+ font-weight: var(--font-weight-semibold);
479
+ }
480
+
481
+ .color-card-body {
482
+ padding: var(--spacing-4);
483
+ }
484
+
485
+ .color-scale-grid {
486
+ display: grid;
487
+ grid-template-columns: repeat(9, 1fr);
488
+ gap: 2px;
489
+ }
490
+
491
+ .color-scale-swatch {
492
+ height: 32px;
493
+ border-radius: var(--radius-sm);
494
+ }
495
+
496
+ .color-card-footer {
497
+ margin: var(--spacing-3) 0 0 0;
498
+ font-size: var(--font-size-sm);
499
+ color: var(--color-text-muted);
500
+ }
501
+
502
+ /* Semantic messages are now provided by PDS (.alert and .semantic-message aliases) */
503
+
504
+ /* Gray Scale Grid */
505
+ .gray-scale-grid {
506
+ display: grid;
507
+ grid-template-columns: repeat(auto-fit, minmax(60px, 1fr));
508
+ gap: var(--spacing-2);
509
+ }
510
+
511
+ .gray-scale-item {
512
+ text-align: center;
513
+ }
514
+
515
+ .gray-scale-swatch {
516
+ height: 60px;
517
+ border-radius: var(--radius-sm);
518
+ border: 1px solid var(--color-border);
519
+ }
520
+
521
+ .gray-scale-label {
522
+ margin-top: var(--spacing-1);
523
+ font-size: var(--font-size-xs);
524
+ color: var(--color-text-muted);
525
+ }
526
+
527
+ /* Derived Color Scales */
528
+ .color-scale-container {
529
+ display: grid;
530
+ gap: var(--spacing-1);
531
+ margin-bottom: var(--spacing-6);
532
+ }
533
+
534
+ .color-scale-row {
535
+ display: grid;
536
+ grid-template-columns: 100px 1fr;
537
+ gap: var(--spacing-2);
538
+ align-items: center;
539
+ }
540
+
541
+ .color-scale-label {
542
+ font-family: var(--font-family-mono);
543
+ font-size: var(--font-size-sm);
544
+ font-weight: var(--font-weight-medium);
545
+ }
546
+
547
+ .color-scale-swatches {
548
+ display: grid;
549
+ grid-template-columns: repeat(9, 1fr);
550
+ gap: 2px;
551
+ border-radius: var(--radius-sm);
552
+ overflow: hidden;
553
+ }
554
+
555
+ .color-scale-swatch-interactive {
556
+ height: 60px;
557
+ display: flex;
558
+ align-items: flex-end;
559
+ justify-content: center;
560
+ padding: var(--spacing-1);
561
+ font-size: var(--font-size-xs);
562
+ font-family: var(--font-family-mono);
563
+ transition: transform var(--transition-fast);
564
+ cursor: pointer;
565
+ }
566
+
567
+ .color-scale-swatch-interactive:hover {
568
+ transform: translateY(-4px);
569
+ z-index: 10;
570
+ box-shadow: var(--shadow-md);
571
+ }
572
+
573
+ /* Demo Grids */
574
+ .demo-grid {
575
+ display: grid;
576
+ gap: var(--spacing-6);
577
+ }
578
+
579
+ .demo-grid.cols-1 {
580
+ grid-template-columns: 1fr;
581
+ }
582
+
583
+ .demo-grid.cols-2 {
584
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
585
+ }
586
+
587
+ .demo-grid.cols-3 {
588
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
589
+ }
590
+
591
+ /* Flex Utilities */
592
+ .flex-wrap {
593
+ display: flex;
594
+ flex-wrap: wrap;
595
+ gap: var(--spacing-3);
596
+ }
597
+
598
+ .flex-wrap.gap-sm {
599
+ gap: var(--spacing-2);
600
+ }
601
+
602
+ /* Form Demo */
603
+ .form-demo {
604
+ max-width: 600px;
605
+ }
606
+
607
+ .form-demo fieldset + fieldset {
608
+ margin-top: var(--spacing-4);
609
+ }
610
+
611
+ .form-demo legend {
612
+ font-weight: var(--font-weight-semibold);
613
+ margin-bottom: var(--spacing-4);
614
+ }
615
+
616
+ .form-demo-actions {
617
+ display: flex;
618
+ gap: var(--spacing-3);
619
+ margin-top: var(--spacing-6);
620
+ }
621
+
622
+ /* Badge Grid */
623
+ .badge-grid {
624
+ display: flex;
625
+ flex-wrap: wrap;
626
+ gap: var(--spacing-3);
627
+ align-items: center;
628
+ }
629
+
630
+ /* Size Demo */
631
+ .size-demo {
632
+ display: flex;
633
+ align-items: center;
634
+ flex-wrap: wrap;
635
+ gap: var(--spacing-3);
636
+ }
637
+
638
+ /* Icon Demo */
639
+ .icon-sizes {
640
+ display: flex;
641
+ align-items: center;
642
+ gap: var(--spacing-4);
643
+ padding: var(--spacing-4);
644
+ border-radius: var(--radius-md);
645
+ }
646
+
647
+ .icon-colors {
648
+ display: flex;
649
+ flex-wrap: wrap;
650
+ gap: var(--spacing-4);
651
+ padding: var(--spacing-4);
652
+ border-radius: var(--radius-md);
653
+ }
654
+
655
+ .icon-text-demo {
656
+ display: flex;
657
+ flex-wrap: wrap;
658
+ gap: var(--spacing-4);
659
+ }
660
+
661
+ .input-icon-demo {
662
+ max-width: 400px;
663
+ display: grid;
664
+ gap: var(--spacing-3);
665
+ }
666
+
667
+ .icon-grid {
668
+ display: grid;
669
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
670
+ gap: var(--spacing-3);
671
+ padding: var(--spacing-4);
672
+
673
+ border-radius: var(--radius-md);
674
+ }
675
+
676
+ .icon-grid-item {
677
+ display: flex;
678
+ flex-direction: column;
679
+ align-items: center;
680
+ gap: var(--spacing-1);
681
+ }
682
+
683
+ .icon-grid-label {
684
+ font-size: var(--font-size-xs);
685
+ color: var(--color-text-muted);
686
+ }
687
+
688
+ /* Media Elements */
689
+ .media-grid {
690
+ display: grid;
691
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
692
+ gap: var(--spacing-6);
693
+ }
694
+
695
+ .media-figure {
696
+ margin: 0;
697
+ }
698
+
699
+ .media-image {
700
+ width: 100%;
701
+ height: auto;
702
+ border-radius: var(--radius-md);
703
+ display: block;
704
+ }
705
+
706
+ .media-caption {
707
+ margin-top: var(--spacing-2);
708
+ color: var(--color-text-secondary);
709
+ font-size: var(--font-size-sm);
710
+ }
711
+
712
+ .gallery-grid {
713
+ display: grid;
714
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
715
+ gap: var(--spacing-4);
716
+ }
717
+
718
+ .gallery-image {
719
+ width: 100%;
720
+ height: 150px;
721
+ object-fit: cover;
722
+ border-radius: var(--radius-md);
723
+ }
724
+
725
+ .video-container {
726
+ margin: var(--spacing-4) 0 0 0;
727
+ }
728
+
729
+ .video-element {
730
+ width: 100%;
731
+ border-radius: var(--radius-md);
732
+ }
733
+
734
+ /* Enhanced Components */
735
+ /* Dropdown styles moved to generated components layer (pds-components.css) */
736
+
737
+ /* Card styles moved to PDS (.card, .card--elevated, .card--outlined + aliases) */
738
+
739
+ /* Form Groups */
740
+ .form-group {
741
+ max-width: 600px;
742
+ }
743
+
744
+ .form-group fieldset {
745
+ border: none;
746
+ padding: 0;
747
+ }
748
+
749
+ .form-group legend {
750
+ font-weight: var(--font-weight-semibold);
751
+ margin-bottom: var(--spacing-3);
752
+ }
753
+
754
+ .form-group label {
755
+ display: flex;
756
+ align-items: center;
757
+ gap: var(--spacing-2);
758
+ margin-bottom: var(--spacing-2);
759
+ }
760
+
761
+ .form-group label:last-child {
762
+ margin-bottom: 0;
763
+ }
764
+
765
+ /* Surfaces provided by PDS utilities/components; app can compose spacing utilities as needed */
766
+
767
+ /* Smart surface helpers used in demos */
768
+ .surface-box {
769
+ padding: var(--spacing-6);
770
+ border-radius: var(--radius-lg);
771
+ }
772
+
773
+ .surface-center {
774
+ text-align: center;
775
+ }
776
+
777
+ /* Shadow Demo */
778
+ .shadow-demo-grid {
779
+ display: grid;
780
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
781
+ gap: var(--spacing-6);
782
+ }
783
+
784
+ .shadow-demo-item {
785
+ padding: var(--spacing-4);
786
+ background: var(--color-surface-base);
787
+ border-radius: var(--radius-md);
788
+ text-align: center;
789
+ }
790
+
791
+ .shadow-demo-item strong {
792
+ display: block;
793
+ margin-bottom: var(--spacing-2);
794
+ }
795
+
796
+ .shadow-demo-item p {
797
+ margin: 0;
798
+ color: var(--color-text-secondary);
799
+ font-size: var(--font-size-sm);
800
+ }
801
+
802
+ .shadow-demo-item.shadow-sm {
803
+ box-shadow: var(--shadow-sm);
804
+ }
805
+
806
+ .shadow-demo-item.shadow-md {
807
+ box-shadow: var(--shadow-md);
808
+ }
809
+
810
+ .shadow-demo-item.shadow-lg {
811
+ box-shadow: var(--shadow-lg);
812
+ }
813
+
814
+ /* Transition Demo */
815
+ .transition-speed-demo {
816
+ display: flex;
817
+ flex-direction: column;
818
+ gap: var(--spacing-4);
819
+ align-items: center;
820
+ padding: var(--spacing-6);
821
+ background: var(--color-surface-subtle);
822
+ border-radius: var(--radius-lg);
823
+ border: 2px solid var(--color-border);
824
+ }
825
+
826
+ .transition-demo-stage {
827
+ width: 100%;
828
+ max-width: 600px;
829
+ height: 120px;
830
+ background: var(--color-surface-base);
831
+ border-radius: var(--radius-md);
832
+ border: 2px dashed var(--color-border);
833
+ position: relative;
834
+ overflow: hidden;
835
+ }
836
+
837
+ .transition-demo-ball {
838
+ position: absolute;
839
+ left: 20px;
840
+ top: 50%;
841
+ transform: translateY(-50%);
842
+ width: 60px;
843
+ height: 60px;
844
+ background: linear-gradient(
845
+ 135deg,
846
+ var(--color-primary-500),
847
+ var(--color-accent-500)
848
+ );
849
+ border-radius: 50%;
850
+ display: flex;
851
+ align-items: center;
852
+ justify-content: center;
853
+ color: white;
854
+ box-shadow: var(--shadow-md);
855
+ transition: all var(--transition-normal);
856
+ }
857
+
858
+ .transition-demo-ball.animated {
859
+ left: calc(100% - 80px);
860
+ transform: translateY(-50%) scale(1.2) rotate(360deg);
861
+ box-shadow: var(--shadow-lg);
862
+ }
863
+
864
+ .transition-demo {
865
+ padding: var(--spacing-6);
866
+ background: var(--color-surface-base);
867
+ border: 2px solid var(--color-border);
868
+ border-radius: var(--radius-md);
869
+ text-align: center;
870
+ cursor: pointer;
871
+ }
872
+
873
+ .transition-demo-fast {
874
+ transition: all var(--transition-fast);
875
+ }
876
+
877
+ .transition-demo-normal {
878
+ transition: all var(--transition-normal);
879
+ }
880
+
881
+ .transition-demo-slow {
882
+ transition: all var(--transition-slow);
883
+ }
884
+
885
+ .transition-demo:hover,
886
+ .transition-demo.hover {
887
+ background: var(--color-primary-50);
888
+ border-color: var(--color-primary-600);
889
+ transform: translateY(-4px);
890
+ box-shadow: var(--shadow-lg);
891
+ }
892
+
893
+ .transition-demo strong {
894
+ display: block;
895
+ margin-bottom: var(--spacing-2);
896
+ font-size: var(--font-size-lg);
897
+ color: var(--color-text-primary);
898
+ }
899
+
900
+ .transition-demo p {
901
+ margin: var(--spacing-1) 0;
902
+ color: var(--color-text-secondary);
903
+ font-family: var(--font-family-mono);
904
+ font-size: var(--font-size-sm);
905
+ }
906
+
907
+ .transition-demo small {
908
+ color: var(--color-text-muted);
909
+ font-size: var(--font-size-xs);
910
+ }
911
+
912
+ /* Toast Demo */
913
+ .toast-demo-description {
914
+ margin-bottom: var(--spacing-4);
915
+ color: var(--color-text-secondary);
916
+ }
917
+
918
+ .btn-warning {
919
+ background-color: var(--color-warning-600);
920
+ color: white;
921
+ border: none;
922
+ }
923
+
924
+ .btn-warning:hover {
925
+ background-color: var(--color-warning-700);
926
+ }
927
+
928
+ .btn-danger {
929
+ background-color: var(--color-danger-600);
930
+ color: white;
931
+ border: none;
932
+ }
933
+
934
+ .btn-danger:hover {
935
+ background-color: var(--color-danger-700);
936
+ }
937
+
938
+ /* Interactive States */
939
+ .interactive-demo {
940
+ margin-bottom: var(--spacing-3);
941
+ color: var(--color-text-secondary);
942
+ }
943
+
944
+ /* Disabled Section */
945
+ .showcase-section.disabled {
946
+ opacity: 0.5;
947
+ pointer-events: none;
948
+ }
949
+
950
+ .disabled-message {
951
+ color: var(--color-text-muted);
952
+ font-style: italic;
953
+ }
954
+
955
+ /* Code Inspector Drawer Styles */
956
+ .code-drawer-header {
957
+ display: flex;
958
+ justify-content: space-between;
959
+ align-items: center;
960
+ padding: var(--spacing-4);
961
+ gap: var(--spacing-4);
962
+ background: var(--color-surface-subtle);
963
+ border-bottom: 1px solid var(--color-border);
964
+ }
965
+
966
+ .code-drawer-title {
967
+ display: flex;
968
+ align-items: center;
969
+ gap: var(--spacing-2);
970
+ font-weight: var(--font-weight-semibold);
971
+ font-size: var(--font-size-lg);
972
+ flex: 1;
973
+ }
974
+
975
+ .component-type-badge {
976
+ font-size: var(--font-size-xs);
977
+ padding: var(--spacing-1) var(--spacing-2);
978
+ background: var(--color-primary-100);
979
+ color: var(--color-primary-700);
980
+ border-radius: var(--radius-sm);
981
+ font-weight: var(--font-weight-medium);
982
+ }
983
+
984
+ .copy-code-btn {
985
+ display: flex;
986
+ align-items: center;
987
+ gap: var(--spacing-2);
988
+ padding: var(--spacing-2) var(--spacing-3);
989
+ background: var(--color-primary-500);
990
+ color: white;
991
+ border: none;
992
+ border-radius: var(--radius-md);
993
+ font-weight: var(--font-weight-medium);
994
+ cursor: pointer;
995
+ transition: all var(--transition-fast);
996
+ }
997
+
998
+ .copy-code-btn:hover {
999
+ background: var(--color-primary-600);
1000
+ transform: translateY(-1px);
1001
+ box-shadow: var(--shadow-sm);
1002
+ }
1003
+
1004
+ .copy-code-btn:active {
1005
+ transform: translateY(0);
1006
+ }
1007
+
1008
+ .code-drawer-content {
1009
+ padding: var(--spacing-4);
1010
+ overflow: auto;
1011
+ max-height: calc(80vh - 80px);
1012
+ }
1013
+
1014
+ .lit-properties {
1015
+ margin-bottom: var(--spacing-4);
1016
+ padding: var(--spacing-4);
1017
+ background: var(--color-surface-subtle);
1018
+ border-radius: var(--radius-md);
1019
+ border: 1px solid var(--color-border);
1020
+ }
1021
+
1022
+ .lit-properties h4 {
1023
+ margin: 0 0 var(--spacing-3) 0;
1024
+ font-size: var(--font-size-base);
1025
+ font-weight: var(--font-weight-semibold);
1026
+ color: var(--color-text-primary);
1027
+ display: flex;
1028
+ align-items: center;
1029
+ gap: var(--spacing-2);
1030
+ }
1031
+
1032
+ .lit-props-list {
1033
+ display: flex;
1034
+ flex-direction: column;
1035
+ gap: var(--spacing-2);
1036
+ }
1037
+
1038
+ .lit-prop {
1039
+ display: flex;
1040
+ align-items: baseline;
1041
+ gap: var(--spacing-3);
1042
+ padding: var(--spacing-2);
1043
+ background: var(--color-surface-base);
1044
+ border-radius: var(--radius-sm);
1045
+ }
1046
+
1047
+ .prop-name {
1048
+ font-weight: var(--font-weight-semibold);
1049
+ color: var(--color-primary-600);
1050
+ font-family: var(--font-family-mono);
1051
+ font-size: var(--font-size-sm);
1052
+ }
1053
+
1054
+ .prop-value {
1055
+ color: var(--color-text-secondary);
1056
+ font-family: var(--font-family-mono);
1057
+ font-size: var(--font-size-sm);
1058
+ }
1059
+
1060
+ .code-block-wrapper {
1061
+ background: var(--color-surface-base);
1062
+ border-radius: var(--radius-md);
1063
+ overflow: hidden;
1064
+ border: 1px solid var(--color-border);
1065
+ }
1066
+
1067
+ .code-block {
1068
+ margin: 0;
1069
+ padding: var(--spacing-4);
1070
+ overflow-x: auto;
1071
+ background: var(--color-surface-muted);
1072
+ color: var(--color-text-primary);
1073
+ font-family: var(
1074
+ --font-family-mono,
1075
+ "Consolas",
1076
+ "Monaco",
1077
+ "Courier New",
1078
+ monospace
1079
+ );
1080
+ font-size: var(--font-size-sm);
1081
+ line-height: 1.7;
1082
+ tab-size: 2;
1083
+ }
1084
+
1085
+ .code-block code {
1086
+ font-family: inherit;
1087
+ background: transparent;
1088
+ padding: 0;
1089
+ }
1090
+
1091
+ /* Shiki will inject its own styling via inline styles, but we provide fallbacks */
1092
+ .language-html {
1093
+ color: #d4d4d4;
1094
+ }
1095
+
1096
+ /* Scrollbar styling for code block */
1097
+ .code-block::-webkit-scrollbar {
1098
+ height: 8px;
1099
+ }
1100
+
1101
+ .code-block::-webkit-scrollbar-track {
1102
+ background: var(--color-surface-muted);
1103
+ }
1104
+
1105
+ .code-block::-webkit-scrollbar-thumb {
1106
+ background: color-mix(in srgb, var(--color-text-primary) 20%, transparent);
1107
+ border-radius: 4px;
1108
+ }
1109
+
1110
+ .code-block::-webkit-scrollbar-thumb:hover {
1111
+ background: color-mix(in srgb, var(--color-text-primary) 32%, transparent);
1112
+ }
1113
+
1114
+ /* Responsive */
1115
+ @media (max-width: 768px) {
1116
+ .showcase-container {
1117
+ padding: var(--spacing-4);
1118
+ }
1119
+
1120
+ .showcase-hero {
1121
+ padding: var(--spacing-8) var(--spacing-4);
1122
+ }
1123
+
1124
+ .showcase-hero h1 {
1125
+ font-size: var(--font-size-3xl);
1126
+ }
1127
+
1128
+ .showcase-section {
1129
+ padding: var(--spacing-6) var(--spacing-4);
1130
+ }
1131
+
1132
+ .color-grid {
1133
+ grid-template-columns: 1fr;
1134
+ }
1135
+
1136
+ .demo-grid.cols-2,
1137
+ .demo-grid.cols-3 {
1138
+ grid-template-columns: 1fr;
1139
+ }
1140
+ }
1141
+
1142
+ fieldset[data-path="/components"] {
1143
+ display: flex;
1144
+ flex-wrap: wrap;
1145
+ gap: 1rem;
1146
+ }
1147
+
1148
+ /* Mobile Toggle Button */
1149
+ .mobile-toggle {
1150
+ display: none; /* Hidden by default on desktop */
1151
+ position: fixed;
1152
+ top: var(--spacing-4);
1153
+ right: var(--spacing-4);
1154
+ z-index: 1001;
1155
+ padding: var(--spacing-3);
1156
+ background: var(--color-surface-base);
1157
+ border: 1px solid var(--color-border);
1158
+ border-radius: var(--radius-md);
1159
+ cursor: pointer;
1160
+ box-shadow: var(--shadow-md);
1161
+ transition: all var(--transition-fast);
1162
+ color: var(--color-text-primary);
1163
+ }
1164
+
1165
+ .mobile-toggle:hover {
1166
+ background: var(--color-surface-hover);
1167
+ box-shadow: var(--shadow-lg);
1168
+ }
1169
+
1170
+ @media (max-width: 1023px) {
1171
+ .mobile-toggle {
1172
+ display: block; /* Show on mobile/tablet */
1173
+ }
1174
+ }
1175
+
1176
+ .ac-suggestion.ac-active {
1177
+ backdrop-filter: blur(10px) saturate(180%) contrast(85%);
1178
+ background: color-mix(in srgb, var(--color-surface-elevated) 90%, transparent);
1179
+ box-shadow: var(--shadow-lg);
1180
+ padding: var(--spacing-2);
1181
+ border-radius: var(--radius-md);
1182
+ z-index: 1;
1183
+
1184
+ .ac-itm {
1185
+ min-width: 300px;
1186
+ cursor: pointer;
1187
+ padding: var(--spacing-2) 0;
1188
+ display: grid;
1189
+ grid-template-columns: 45px 1fr 80px;
1190
+
1191
+ .text {
1192
+ overflow: hidden;
1193
+ text-overflow: ellipsis;
1194
+ white-space: nowrap;
1195
+ }
1196
+
1197
+ pds-icon {
1198
+ position: relative;
1199
+ left: unset;
1200
+ }
1201
+
1202
+ .category {
1203
+ float: right;
1204
+ opacity: 0.6;
1205
+ font-size: small;
1206
+ }
1207
+
1208
+ &.selected,
1209
+ &:hover {
1210
+ background-color: var(--color-surface-overlay);
1211
+ }
1212
+ }
1213
+ }
1214
+
1215
+
1216
+