@pure-ds/storybook 0.4.16 → 0.4.19

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 (73) hide show
  1. package/.storybook/addons/html-preview/Panel.jsx +80 -29
  2. package/.storybook/addons/html-preview/preview.js +4 -5
  3. package/.storybook/manager.js +337 -49
  4. package/.storybook/preview-head.html +2 -2
  5. package/.storybook/preview.js +2 -2
  6. package/README.md +2 -2
  7. package/dist/pds-reference.json +1916 -267
  8. package/package.json +2 -2
  9. package/public/assets/css/app.css +2 -2
  10. package/public/assets/js/app.js +645 -10574
  11. package/public/assets/js/lit.js +3 -1048
  12. package/public/assets/js/pds.js +429 -7368
  13. package/public/assets/pds/components/pds-calendar.js +1 -1
  14. package/public/assets/pds/components/{pds-jsonform.js → pds-form.js} +536 -45
  15. package/public/assets/pds/custom-elements.json +271 -26
  16. package/public/assets/pds/pds-runtime-config.json +1 -1
  17. package/public/assets/pds/styles/pds-components.css +83 -221
  18. package/public/assets/pds/styles/pds-components.css.js +166 -442
  19. package/public/assets/pds/styles/pds-styles.css +240 -437
  20. package/public/assets/pds/styles/pds-styles.css.js +479 -881
  21. package/public/assets/pds/styles/pds-utilities.css +151 -214
  22. package/public/assets/pds/styles/pds-utilities.css.js +302 -428
  23. package/public/assets/pds/vscode-custom-data.json +63 -63
  24. package/scripts/build-pds-reference.mjs +112 -38
  25. package/scripts/generate-stories.js +2 -2
  26. package/src/js/common/ask.js +48 -21
  27. package/src/js/pds-configurator/pds-config-form.js +9 -9
  28. package/src/js/pds-configurator/pds-demo.js +2 -2
  29. package/src/js/pds-core/pds-config.js +14 -14
  30. package/src/js/pds-core/pds-generator.js +113 -50
  31. package/src/js/pds-core/pds-ontology.js +6 -6
  32. package/src/js/pds.d.ts +2 -2
  33. package/stories/GettingStarted.stories.js +3 -0
  34. package/stories/WhatIsPDS.stories.js +3 -0
  35. package/stories/components/PdsCalendar.stories.js +2 -2
  36. package/stories/components/PdsDrawer.stories.js +15 -15
  37. package/stories/components/PdsForm.stories.js +4356 -0
  38. package/stories/components/{PdsJsonformUiSchema.md → PdsFormUiSchema.md} +2 -2
  39. package/stories/components/PdsRichtext.stories.js +4 -17
  40. package/stories/components/PdsScrollrow.stories.js +224 -72
  41. package/stories/components/PdsSplitpanel.stories.js +63 -28
  42. package/stories/components/PdsTabstrip.stories.js +7 -7
  43. package/stories/enhancements/Accordion.stories.js +2 -2
  44. package/stories/enhancements/Dropdowns.stories.js +13 -10
  45. package/stories/enhancements/RangeSliders.stories.js +9 -9
  46. package/stories/enhancements/RequiredFields.stories.js +8 -8
  47. package/stories/enhancements/Toggles.stories.js +45 -36
  48. package/stories/enhancements/_enhancement-header.js +2 -2
  49. package/stories/foundations/Colors.stories.js +13 -13
  50. package/stories/foundations/HTMLDefaults.stories.js +4 -4
  51. package/stories/foundations/Icons.stories.js +123 -288
  52. package/stories/foundations/MeshGradients.stories.js +161 -250
  53. package/stories/foundations/SmartSurfaces.stories.js +147 -64
  54. package/stories/foundations/Spacing.stories.js +30 -30
  55. package/stories/foundations/Typography.stories.js +352 -723
  56. package/stories/foundations/ZIndex.stories.js +124 -141
  57. package/stories/layout/LayoutOverview.stories.js +345 -250
  58. package/stories/layout/LayoutSystem.stories.js +60 -76
  59. package/stories/patterns/InteractiveStates.stories.js +29 -29
  60. package/stories/patterns/Utilities.stories.js +17 -5
  61. package/stories/primitives/Alerts.stories.js +6 -6
  62. package/stories/primitives/Cards.stories.js +22 -11
  63. package/stories/primitives/{Forms.stories.js → FormElements.stories.js} +20 -11
  64. package/stories/primitives/HtmlFormElements.stories.js +128 -0
  65. package/stories/primitives/{FormGroups.stories.js → HtmlFormGroups.stories.js} +70 -21
  66. package/stories/primitives/Media.stories.js +23 -20
  67. package/stories/utilities/Backdrop.stories.js +68 -27
  68. package/stories/utils/PdsAsk.stories.js +15 -14
  69. package/public/assets/js/app.js.map +0 -7
  70. package/public/assets/js/lit.js.map +0 -7
  71. package/public/assets/js/pds.js.map +0 -7
  72. package/stories/components/PdsJsonform.stories.js +0 -1929
  73. /package/src/{pds-core → node-api}/pds-api.js +0 -0
@@ -23,7 +23,7 @@ export const presets = {
23
23
  darkMode: {
24
24
  background: "#0c1821",
25
25
  secondary: "#94a3b8",
26
- primary: "#0891b2", // Tailwind cyan-600 as base - generates darker 600 shade
26
+ primary: "#0891b2", // cyan-600 as base - generates darker 600 shade
27
27
  },
28
28
  },
29
29
  typography: {
@@ -55,7 +55,7 @@ export const presets = {
55
55
  darkMode: {
56
56
  background: "#18181b",
57
57
  secondary: "#71717a",
58
- primary: "#3b82f6", // Tailwind blue-500 - optimized mid-tone
58
+ primary: "#3b82f6", // blue-500 - optimized mid-tone
59
59
  },
60
60
  },
61
61
  typography: {
@@ -88,7 +88,7 @@ export const presets = {
88
88
  darkMode: {
89
89
  background: "#0f0a1a",
90
90
  secondary: "#818cf8",
91
- primary: "#8b5cf6", // Tailwind violet-500 - optimized mid-tone
91
+ primary: "#8b5cf6", // violet-500 - optimized mid-tone
92
92
  },
93
93
  },
94
94
  typography: {
@@ -122,7 +122,7 @@ export const presets = {
122
122
  darkMode: {
123
123
  background: "#0a0a0a",
124
124
  secondary: "#a3a3a3",
125
- primary: "#737373", // Tailwind gray-500 - optimized mid-tone
125
+ primary: "#737373", // gray-500 - optimized mid-tone
126
126
  },
127
127
  },
128
128
  typography: {
@@ -159,7 +159,7 @@ export const presets = {
159
159
  background: "#1a0f0a",
160
160
  secondary: "#c9a482",
161
161
  // Ensure sufficient contrast for primary-filled components with white text in dark mode
162
- primary: "#f97316", // Tailwind orange-500 - optimized mid-tone
162
+ primary: "#f97316", // orange-500 - optimized mid-tone
163
163
  },
164
164
  },
165
165
  typography: {
@@ -190,7 +190,7 @@ export const presets = {
190
190
  background: "#1a0a1f",
191
191
  secondary: "#c4b5fd",
192
192
  // Deepen primary for dark mode to meet AA contrast with white text
193
- primary: "#d946ef", // Tailwind fuchsia-500 - optimized mid-tone
193
+ primary: "#d946ef", // fuchsia-500 - optimized mid-tone
194
194
  },
195
195
  },
196
196
  typography: {
@@ -224,7 +224,7 @@ export const presets = {
224
224
  darkMode: {
225
225
  background: "#0a1410",
226
226
  secondary: "#a8a29e",
227
- primary: "#10b981", // Tailwind emerald-500 - optimized mid-tone
227
+ primary: "#10b981", // emerald-500 - optimized mid-tone
228
228
  },
229
229
  },
230
230
  typography: {
@@ -254,7 +254,7 @@ export const presets = {
254
254
  darkMode: {
255
255
  background: "#1b0808",
256
256
  secondary: "#d1d5db",
257
- primary: "#ef4444", // Tailwind red-500 - optimized mid-tone
257
+ primary: "#ef4444", // red-500 - optimized mid-tone
258
258
  },
259
259
  },
260
260
  typography: {
@@ -288,7 +288,7 @@ export const presets = {
288
288
  background: "#12100e",
289
289
  secondary: "#d1d5db",
290
290
  // Deepen primary in dark to keep white text AA-compliant
291
- primary: "#f59e0b", // Tailwind amber-500 - optimized mid-tone
291
+ primary: "#f59e0b", // amber-500 - optimized mid-tone
292
292
  },
293
293
  },
294
294
  typography: {
@@ -323,7 +323,7 @@ export const presets = {
323
323
  // has strong contrast against the very-dark surface. The generator
324
324
  // will still pick appropriate darker fill shades for buttons so
325
325
  // white-on-fill contrast is preserved.
326
- primary: "#9ca3af", // Tailwind gray-400 - optimized mid-tone
326
+ primary: "#9ca3af", // gray-400 - optimized mid-tone
327
327
  },
328
328
  },
329
329
  typography: {
@@ -361,7 +361,7 @@ export const presets = {
361
361
  darkMode: {
362
362
  background: "#1a1016",
363
363
  secondary: "#c4b5fd",
364
- primary: "#ec4899", // Tailwind pink-500 - optimized mid-tone
364
+ primary: "#ec4899", // pink-500 - optimized mid-tone
365
365
  },
366
366
  },
367
367
  typography: {
@@ -401,7 +401,7 @@ export const presets = {
401
401
  // - outline/link contrast on dark surface, and
402
402
  // - sufficient button fill contrast against white text.
403
403
  // Cyan signal aligns with preset accent and produces high-contrast dark fills.
404
- primary: "#06b6d4", // Tailwind cyan-500 - optimized mid-tone
404
+ primary: "#06b6d4", // cyan-500 - optimized mid-tone
405
405
  },
406
406
  },
407
407
  typography: {
@@ -437,7 +437,7 @@ export const presets = {
437
437
  darkMode: {
438
438
  background: "#0d130a",
439
439
  secondary: "#a3a3a3",
440
- primary: "#84cc16", // Tailwind lime-500 - optimized mid-tone
440
+ primary: "#84cc16", // lime-500 - optimized mid-tone
441
441
  },
442
442
  },
443
443
  typography: {
@@ -845,7 +845,7 @@ presets.default = {
845
845
  darkMode: {
846
846
  background: "#16171a", // Custom dark mode background (cool blue-gray)
847
847
  secondary: "#8b9199", // Optional: custom dark grays (uses light secondary if omitted)
848
- primary: "#06b6d4", // Tailwind cyan-500 - optimized mid-tone
848
+ primary: "#06b6d4", // cyan-500 - optimized mid-tone
849
849
  // accent: null, // Optional: override accent color for dark mode
850
850
  },
851
851
 
@@ -1,4 +1,4 @@
1
- import { registry as pdsRegistry } from "./pds-registry.js";
1
+ import { registry as pdsRegistry } from "./pds-registry.js";
2
2
 
3
3
  /**
4
4
  * Generator - A JS-config-first design system
@@ -1149,6 +1149,8 @@ export class Generator {
1149
1149
  mesh,
1150
1150
  ].join("");
1151
1151
 
1152
+ // Dark mode selector only - .surface-inverse is handled separately in utilities
1153
+ // to avoid inheriting the full dark palette (which would override --color-surface-inverse)
1152
1154
  return `html[data-theme="dark"] {\n${body}}\n`;
1153
1155
  }
1154
1156
 
@@ -1589,12 +1591,13 @@ html[data-theme="dark"] .liquid-glass {
1589
1591
 
1590
1592
  :where(blockquote) {
1591
1593
  margin: 0 0 var(--spacing-4) 0;
1592
- padding: var(--spacing-4) var(--spacing-6);
1594
+ padding: var(--spacing-6) var(--spacing-8);
1593
1595
  border-left: 4px solid var(--color-primary-500);
1594
- background-color: var(--color-surface-subtle);
1595
- border-radius: var(--radius-md);
1596
- font-style: italic;
1597
- color: var(--color-text-secondary);
1596
+ background-color: var(--color-surface-elevated);
1597
+ border-radius: var(--radius-none);
1598
+ font-size: var(--font-size-lg);
1599
+ line-height: var(--line-height-relaxed);
1600
+ color: var(--color-text-primary);
1598
1601
 
1599
1602
  :where(p):last-child {
1600
1603
  margin-bottom: 0;
@@ -1602,14 +1605,10 @@ html[data-theme="dark"] .liquid-glass {
1602
1605
 
1603
1606
  :where(cite) {
1604
1607
  display: block;
1605
- margin-top: var(--spacing-2);
1606
- font-size: var(--font-size-sm);
1608
+ margin-top: var(--spacing-4);
1609
+ font-size: var(--font-size-base);
1607
1610
  font-style: normal;
1608
- color: var(--color-text-tertiary);
1609
-
1610
- &::before {
1611
- content: "— ";
1612
- }
1611
+ color: var(--color-primary-500);
1613
1612
  }
1614
1613
  }
1615
1614
 
@@ -1811,10 +1810,8 @@ form {
1811
1810
  }
1812
1811
 
1813
1812
  fieldset {
1814
- margin: 0;
1815
- padding: var(--spacing-5);
1813
+ margin: 0;
1816
1814
  width: 100%;
1817
- background-color: color-mix(in oklab, var(--color-surface-subtle) 50%, transparent 50%);
1818
1815
 
1819
1816
  /* Unified styling for radio groups and checkbox groups */
1820
1817
  &[role="radiogroup"],
@@ -3045,15 +3042,24 @@ dialog[open]::backdrop {
3045
3042
  }
3046
3043
  }
3047
3044
 
3045
+ /* Dialog - constrain max height to 90vh, support custom maxHeight via CSS variable */
3046
+ dialog {
3047
+ max-height: var(--dialog-max-height, 90vh);
3048
+ display: flex;
3049
+ flex-direction: column;
3050
+ overflow: hidden; /* Prevent dialog itself from scrolling - let .dialog-body handle it */
3051
+ }
3052
+
3048
3053
  /* Form structure - use flexbox instead of contents */
3049
3054
  dialog form {
3050
3055
  display: flex;
3051
3056
  flex-direction: column;
3052
- height: 100%;
3057
+ flex: 1;
3058
+ min-height: 0; /* Allow flex child to shrink */
3053
3059
  margin: 0;
3054
3060
  }
3055
3061
 
3056
- /* Dialog fields - to open pds-jsonform subforms */
3062
+ /* Dialog fields - to open pds-form subforms */
3057
3063
  .dialog-field {
3058
3064
  margin-top: var(--spacing-3);
3059
3065
  }
@@ -3108,7 +3114,8 @@ dialog {
3108
3114
  article,
3109
3115
  form > article,
3110
3116
  .dialog-body {
3111
- flex: 1;
3117
+ flex: 1 1 auto;
3118
+ min-height: 0; /* Critical: allow flex child to shrink and scroll */
3112
3119
  padding: var(--spacing-3) var(--spacing-6);
3113
3120
  overflow-y: auto;
3114
3121
  overflow-x: hidden;
@@ -3134,9 +3141,17 @@ dialog.dialog-lg { max-width: min(800px, calc(100vw - var(--spacing-8))); }
3134
3141
  dialog.dialog-xl { max-width: min(1200px, calc(100vw - var(--spacing-8))); }
3135
3142
  dialog.dialog-full { max-width: calc(100vw - var(--spacing-8)); max-height: calc(100vh - var(--spacing-8)); }
3136
3143
 
3137
- /* Mobile responsiveness */
3144
+ /* Mobile responsiveness - maximize on mobile */
3138
3145
  @media (max-width: ${breakpoints.sm - 1}px) {
3139
- dialog { max-width: 100vw; max-height: 100vh; border-radius: 0; top: 50%; transform: translateY(-50%); margin: 0; }
3146
+ dialog {
3147
+ max-width: 100vw;
3148
+ max-height: 100vh;
3149
+ --dialog-max-height: 100vh; /* Override custom maxHeight on mobile */
3150
+ border-radius: 0;
3151
+ top: 50%;
3152
+ transform: translateY(-50%);
3153
+ margin: 0;
3154
+ }
3140
3155
  dialog header, dialog form > header, dialog article, dialog form > article, dialog footer, dialog form > footer { padding: var(--spacing-4); }
3141
3156
  }
3142
3157
 
@@ -4214,9 +4229,6 @@ nav[data-dropdown] {
4214
4229
 
4215
4230
  :where(fieldset) {
4216
4231
  border: none;
4217
- padding: var(--spacing-4);
4218
- margin: 0 0 var(--spacing-4) 0;
4219
- background-color: var(--color-surface-subtle);
4220
4232
  }
4221
4233
 
4222
4234
  :where(legend) {
@@ -4447,40 +4459,27 @@ ${this.#generateBorderGradientUtilities()}
4447
4459
  }
4448
4460
 
4449
4461
 
4450
- /* Inverse surface (dark) using PDS tokens; text/icons inherit currentColor */
4462
+ /*
4463
+ * SURFACE-INVERSE: Local Theme Context Flip
4464
+ *
4465
+ * We can't simply add .surface-inverse to the dark mode selector because that would
4466
+ * also apply the dark color PALETTE (grays, surfaces, etc.), which would override
4467
+ * --color-surface-inverse itself. Instead, we duplicate only the SEMANTIC tokens.
4468
+ *
4469
+ * Light theme .surface-inverse → dark semantic tokens
4470
+ * Dark theme .surface-inverse → light semantic tokens (flip back)
4471
+ */
4472
+
4473
+ /* Surface-inverse visual properties (shared, uses smart surface tokens) */
4451
4474
  .surface-inverse {
4452
4475
  background-color: var(--color-surface-inverse);
4453
- /* Ensure foregrounds inside use the correct smart-surface tokens */
4454
4476
  color: var(--surface-inverse-text);
4455
- --color-text-primary: var(--surface-inverse-text);
4456
- --color-text-secondary: var(--surface-inverse-text-secondary);
4457
- --color-text-muted: var(--surface-inverse-text-muted);
4458
- /* Ensure code/pre and other muted surfaces have contrast on inverse */
4459
- --color-surface-muted: rgba(255, 255, 255, 0.08);
4460
- /* Optional: adjust borders/shadows if utilities/components read these */
4461
- --color-border: var(--surface-inverse-border);
4462
4477
 
4463
4478
  pds-icon {
4464
4479
  color: var(--surface-inverse-icon);
4465
4480
  }
4466
4481
 
4467
- /* Default and secondary buttons on inverse - semi-transparent glass effect */
4468
- & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
4469
- & .btn-secondary {
4470
- background-color: rgba(255, 255, 255, 0.12);
4471
- color: var(--surface-inverse-text);
4472
- border-color: rgba(255, 255, 255, 0.25);
4473
-
4474
- &:hover {
4475
- background-color: rgba(255, 255, 255, 0.2);
4476
- }
4477
-
4478
- &:active {
4479
- background-color: rgba(255, 255, 255, 0.28);
4480
- }
4481
- }
4482
-
4483
- /* Ensure btn-primary stays vibrant on inverse */
4482
+ /* btn-primary stays vibrant in any context */
4484
4483
  & .btn-primary {
4485
4484
  background-color: var(--color-primary-500);
4486
4485
  border-color: var(--color-primary-500);
@@ -4493,6 +4492,70 @@ ${this.#generateBorderGradientUtilities()}
4493
4492
  }
4494
4493
  }
4495
4494
 
4495
+ /* Light-mode inverse: apply dark semantic tokens */
4496
+ html:not([data-theme="dark"]) .surface-inverse {
4497
+ --color-text-primary: var(--color-gray-100);
4498
+ --color-text-secondary: var(--color-gray-300);
4499
+ --color-text-muted: var(--color-gray-400);
4500
+ --color-border: var(--color-gray-700);
4501
+ --color-input-bg: var(--color-gray-800);
4502
+ --color-input-disabled-bg: var(--color-gray-900);
4503
+ --color-input-disabled-text: var(--color-gray-600);
4504
+ --color-code-bg: var(--color-gray-800);
4505
+ --color-surface-muted: rgba(255, 255, 255, 0.08);
4506
+
4507
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
4508
+ & .btn-secondary {
4509
+ background-color: rgba(255, 255, 255, 0.12);
4510
+ color: var(--surface-inverse-text);
4511
+ border-color: rgba(255, 255, 255, 0.25);
4512
+
4513
+ &:hover { background-color: rgba(255, 255, 255, 0.2); }
4514
+ &:active { background-color: rgba(255, 255, 255, 0.28); }
4515
+ }
4516
+
4517
+ & select {
4518
+ background-color: rgba(255, 255, 255, 0.1);
4519
+ color: var(--surface-inverse-text);
4520
+ }
4521
+
4522
+ & a:not([class*="btn"]) {
4523
+ color: var(--color-primary-300, #7dd3fc);
4524
+ }
4525
+ }
4526
+
4527
+ /* Dark-mode inverse: flip back to light semantic tokens */
4528
+ html[data-theme="dark"] .surface-inverse {
4529
+ --color-text-primary: var(--color-gray-900);
4530
+ --color-text-secondary: var(--color-gray-600);
4531
+ --color-text-muted: var(--color-gray-600);
4532
+ --color-border: var(--color-gray-300);
4533
+ --color-input-bg: var(--color-surface-base);
4534
+ --color-input-disabled-bg: var(--color-gray-50);
4535
+ --color-input-disabled-text: var(--color-gray-500);
4536
+ --color-code-bg: var(--color-gray-100);
4537
+ --color-surface-muted: var(--color-gray-100);
4538
+
4539
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
4540
+ & .btn-secondary {
4541
+ background-color: rgba(0, 0, 0, 0.06);
4542
+ color: var(--surface-inverse-text);
4543
+ border-color: rgba(0, 0, 0, 0.15);
4544
+
4545
+ &:hover { background-color: rgba(0, 0, 0, 0.1); }
4546
+ &:active { background-color: rgba(0, 0, 0, 0.15); }
4547
+ }
4548
+
4549
+ & select {
4550
+ background-color: #ffffff;
4551
+ color: var(--surface-inverse-text);
4552
+ }
4553
+
4554
+ & a:not([class*="btn"]) {
4555
+ color: var(--color-primary-600, #0284c7);
4556
+ }
4557
+ }
4558
+
4496
4559
  /* Shadow utilities */
4497
4560
  .shadow-sm {
4498
4561
  box-shadow: var(--shadow-sm);
@@ -1,4 +1,4 @@
1
- // Pure Design System Ontology (PDS)
1
+ // Pure Design System Ontology (PDS)
2
2
  // This file is the single source-of-truth metadata for primitives, components, tokens, themes and enhancements.
3
3
  // Used by PDS.query() for searching and correlating concepts.
4
4
 
@@ -223,10 +223,10 @@ export const ontology = {
223
223
  category: "feedback"
224
224
  },
225
225
  {
226
- id: "pds-jsonform",
226
+ id: "pds-form",
227
227
  name: "JSON Form",
228
228
  description: "Auto-generated form from JSON Schema",
229
- selectors: ["pds-jsonform"],
229
+ selectors: ["pds-form"],
230
230
  tags: ["form", "schema", "auto-generate"],
231
231
  category: "form"
232
232
  },
@@ -380,7 +380,7 @@ export const ontology = {
380
380
  utilities: {
381
381
  text: {
382
382
  alignment: [".text-left", ".text-center", ".text-right"],
383
- color: [".text-muted", ".text-primary", ".text-success", ".text-warning", ".text-danger", ".text-info"],
383
+ color: [".text-muted"],
384
384
  overflow: [".truncate"]
385
385
  },
386
386
  backdrop: {
@@ -481,7 +481,7 @@ export const ontology = {
481
481
  form: {
482
482
  description: "Form inputs and controls",
483
483
  primitives: ["button", "fieldset", "label-field", "form"],
484
- components: ["pds-upload", "pds-jsonform", "pds-richtext", "pds-calendar"]
484
+ components: ["pds-upload", "pds-form", "pds-richtext", "pds-calendar"]
485
485
  },
486
486
  layout: {
487
487
  description: "Page structure and content arrangement",
@@ -541,7 +541,7 @@ export const ontology = {
541
541
  content: ["text", "typography", "body", "article"],
542
542
 
543
543
  // Forms & Inputs
544
- form: ["input", "field", "label", "button", "fieldset", "pds-jsonform", "pds-upload", "pds-richtext", "pds-calendar", "required", "validation", "submit"],
544
+ form: ["input", "field", "label", "button", "fieldset", "pds-form", "pds-upload", "pds-richtext", "pds-calendar", "required", "validation", "submit"],
545
545
  input: ["form", "field", "text", "label", "required", "validation"],
546
546
  field: ["form", "input", "label", "required"],
547
547
  button: ["btn", "interactive", "action", "submit", "form", "btn-primary", "btn-secondary", "btn-working"],
package/src/js/pds.d.ts CHANGED
@@ -217,7 +217,7 @@ export class PDS extends EventTarget {
217
217
 
218
218
  export { PDS as default };
219
219
 
220
- // ===== pds-jsonform Types =====
220
+ // ===== pds-form Types =====
221
221
 
222
222
  export interface JsonFormOptions {
223
223
  widgets?: {
@@ -358,7 +358,7 @@ export interface JsonFormEventMap {
358
358
 
359
359
  declare global {
360
360
  interface HTMLElementTagNameMap {
361
- 'pds-jsonform': SchemaForm;
361
+ 'pds-form': SchemaForm;
362
362
  }
363
363
  }
364
364
 
@@ -7,6 +7,9 @@ export default {
7
7
  title: 'About PDS/Getting Started',
8
8
  parameters: {
9
9
  layout: 'fullscreen',
10
+ pds: {
11
+ tags: ['getting started', 'introduction', 'cli', 'npm', 'cdn', 'overview', 'guide', 'themes', 'dark mode', 'light mode']
12
+ },
10
13
  docs: {
11
14
  description: {
12
15
  component: 'Complete beginner guide: installation, philosophy, configuration, enhancements, components, and console API'
@@ -7,6 +7,9 @@ export default {
7
7
  title: 'About PDS/What Is PDS',
8
8
  parameters: {
9
9
  layout: 'fullscreen',
10
+ pds: {
11
+ tags: ['what is pds', 'introduction', 'overview', 'design system', 'philosophy', 'progressive enhancements', 'web components', 'adoptedt stylesheets']
12
+ },
10
13
  docs: {
11
14
  description: {
12
15
  component: 'Learn about Pure Design System and its revolutionary approach to design systems'
@@ -173,7 +173,7 @@ export const EventTypes = {
173
173
  }, 0);
174
174
 
175
175
  return html`
176
- <div class="flex flex-col gap-lg">
176
+ <div class="stack-lg">
177
177
  <pds-calendar id="event-types-calendar"></pds-calendar>
178
178
 
179
179
  <div class="card">
@@ -234,7 +234,7 @@ export const DynamicEvents = {
234
234
  }, 0);
235
235
 
236
236
  return html`
237
- <div class="flex flex-col gap-lg">
237
+ <div class="stack-lg">
238
238
  <div class="card">
239
239
  <h3>Add Events Dynamically</h3>
240
240
  <div class="flex gap-md items-end">
@@ -61,7 +61,7 @@ export const Default = {
61
61
  <h2>Drawer from ${args.position}</h2>
62
62
  </div>
63
63
 
64
- <div slot="drawer-content" class="flex flex-col gap-md">
64
+ <div slot="drawer-content" class="stack-md">
65
65
  <article class="card">
66
66
  <h4>About this Drawer</h4>
67
67
  <p>This drawer slides from the <strong>${args.position}</strong> edge of the screen. Drawers are perfect for:</p>
@@ -75,7 +75,7 @@ export const Default = {
75
75
 
76
76
  <article class="card surface-elevated">
77
77
  <h4>Quick Actions</h4>
78
- <nav class="flex flex-col gap-sm">
78
+ <nav class="stack-sm">
79
79
  <button class="btn-outline">
80
80
  <pds-icon icon="download"></pds-icon>
81
81
  <span>Download Report</span>
@@ -145,12 +145,12 @@ export const AllPositions = () => {
145
145
  <pds-icon icon="list" size="lg"></pds-icon>
146
146
  <h2>Main Navigation</h2>
147
147
  </div>
148
- <div slot="drawer-content" class="flex flex-col gap-md">
148
+ <div slot="drawer-content" class="stack-md">
149
149
  <p>
150
150
  <strong>Use case:</strong> Primary navigation menu for web applications
151
151
  </p>
152
152
 
153
- <nav class="flex flex-col gap-sm">
153
+ <nav class="stack-sm">
154
154
  <button class="btn-outline">
155
155
  <pds-icon icon="house"></pds-icon>
156
156
  <span>Dashboard</span>
@@ -194,7 +194,7 @@ export const AllPositions = () => {
194
194
  <pds-icon icon="x" label="Close"></pds-icon>
195
195
  </button>
196
196
  </div>
197
- <div slot="drawer-content" class="flex flex-col gap-md">
197
+ <div slot="drawer-content" class="stack-md">
198
198
  <p>
199
199
  <strong>Use case:</strong> Filters, detail panels, or property inspectors
200
200
  </p>
@@ -223,7 +223,7 @@ export const AllPositions = () => {
223
223
 
224
224
  <article class="card surface-elevated">
225
225
  <label>
226
- <span>Sort By</span>
226
+ <span data-label>Sort By</span>
227
227
  <select>
228
228
  <option>Date Created (Newest)</option>
229
229
  <option>Date Created (Oldest)</option>
@@ -253,12 +253,12 @@ export const AllPositions = () => {
253
253
  <h2>Notifications</h2>
254
254
  <span class="badge badge-primary">3 new</span>
255
255
  </div>
256
- <div slot="drawer-content" class="flex flex-col gap-md">
256
+ <div slot="drawer-content" class="stack-md">
257
257
  <p>
258
258
  <strong>Use case:</strong> Notification center or announcement banners
259
259
  </p>
260
260
 
261
- <div class="flex flex-col gap-md">
261
+ <div class="stack-md">
262
262
  <article class="card surface-elevated">
263
263
  <div class="flex gap-md items-start">
264
264
  <div class="badge badge-success">
@@ -323,7 +323,7 @@ export const AllPositions = () => {
323
323
  <pds-icon icon="toolbox" size="lg"></pds-icon>
324
324
  <h2>Quick Actions</h2>
325
325
  </div>
326
- <div slot="drawer-content" class="flex flex-col gap-md">
326
+ <div slot="drawer-content" class="stack-md">
327
327
  <p>
328
328
  <strong>Use case:</strong> Command palette, quick actions, or contextual toolbars
329
329
  </p>
@@ -390,7 +390,7 @@ export const NavigationDrawer = () => {
390
390
  <h2>Navigation</h2>
391
391
  </div>
392
392
 
393
- <nav slot="drawer-content" class="flex flex-col gap-sm">
393
+ <nav slot="drawer-content" class="stack-sm">
394
394
  <button class="btn-outline">
395
395
  <pds-icon icon="house"></pds-icon>
396
396
  <span>Home</span>
@@ -458,19 +458,19 @@ export const SettingsDrawer = () => {
458
458
  <h2>Settings</h2>
459
459
  </div>
460
460
 
461
- <div slot="drawer-content" class="flex flex-col gap-md">
461
+ <div slot="drawer-content" class="stack-md">
462
462
  <article class="card">
463
463
  <fieldset>
464
464
  <legend>Profile Settings</legend>
465
465
  <label>
466
- <span>Username</span>
466
+ <span data-label>Username</span>
467
467
  <div class="input-icon">
468
468
  <pds-icon icon="user"></pds-icon>
469
469
  <input type="text" value="john_doe" placeholder="Enter your username">
470
470
  </div>
471
471
  </label>
472
472
  <label>
473
- <span>Email</span>
473
+ <span data-label>Email</span>
474
474
  <div class="input-icon">
475
475
  <pds-icon icon="envelope"></pds-icon>
476
476
  <input type="email" value="john@example.com" placeholder="your.email@example.com">
@@ -555,7 +555,7 @@ export const DetailDrawer = () => {
555
555
  </button>
556
556
  </div>
557
557
 
558
- <div slot="drawer-content" class="flex flex-col gap-md">
558
+ <div slot="drawer-content" class="stack-md">
559
559
  <div class="card border-gradient flex items-center justify-center">
560
560
  <pds-icon icon="image" size="xl"></pds-icon>
561
561
  </div>
@@ -579,7 +579,7 @@ export const DetailDrawer = () => {
579
579
 
580
580
  <article class="card surface-elevated">
581
581
  <h4>Recent Activity</h4>
582
- <div class="flex flex-col gap-md">
582
+ <div class="stack-md">
583
583
  <div class="flex gap-sm">
584
584
  <pds-icon icon="check" class="icon-primary"></pds-icon>
585
585
  <div>