@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.
- package/.storybook/addons/html-preview/Panel.jsx +80 -29
- package/.storybook/addons/html-preview/preview.js +4 -5
- package/.storybook/manager.js +337 -49
- package/.storybook/preview-head.html +2 -2
- package/.storybook/preview.js +2 -2
- package/README.md +2 -2
- package/dist/pds-reference.json +1916 -267
- package/package.json +2 -2
- package/public/assets/css/app.css +2 -2
- package/public/assets/js/app.js +645 -10574
- package/public/assets/js/lit.js +3 -1048
- package/public/assets/js/pds.js +429 -7368
- package/public/assets/pds/components/pds-calendar.js +1 -1
- package/public/assets/pds/components/{pds-jsonform.js → pds-form.js} +536 -45
- package/public/assets/pds/custom-elements.json +271 -26
- package/public/assets/pds/pds-runtime-config.json +1 -1
- package/public/assets/pds/styles/pds-components.css +83 -221
- package/public/assets/pds/styles/pds-components.css.js +166 -442
- package/public/assets/pds/styles/pds-styles.css +240 -437
- package/public/assets/pds/styles/pds-styles.css.js +479 -881
- package/public/assets/pds/styles/pds-utilities.css +151 -214
- package/public/assets/pds/styles/pds-utilities.css.js +302 -428
- package/public/assets/pds/vscode-custom-data.json +63 -63
- package/scripts/build-pds-reference.mjs +112 -38
- package/scripts/generate-stories.js +2 -2
- package/src/js/common/ask.js +48 -21
- package/src/js/pds-configurator/pds-config-form.js +9 -9
- package/src/js/pds-configurator/pds-demo.js +2 -2
- package/src/js/pds-core/pds-config.js +14 -14
- package/src/js/pds-core/pds-generator.js +113 -50
- package/src/js/pds-core/pds-ontology.js +6 -6
- package/src/js/pds.d.ts +2 -2
- package/stories/GettingStarted.stories.js +3 -0
- package/stories/WhatIsPDS.stories.js +3 -0
- package/stories/components/PdsCalendar.stories.js +2 -2
- package/stories/components/PdsDrawer.stories.js +15 -15
- package/stories/components/PdsForm.stories.js +4356 -0
- package/stories/components/{PdsJsonformUiSchema.md → PdsFormUiSchema.md} +2 -2
- package/stories/components/PdsRichtext.stories.js +4 -17
- package/stories/components/PdsScrollrow.stories.js +224 -72
- package/stories/components/PdsSplitpanel.stories.js +63 -28
- package/stories/components/PdsTabstrip.stories.js +7 -7
- package/stories/enhancements/Accordion.stories.js +2 -2
- package/stories/enhancements/Dropdowns.stories.js +13 -10
- package/stories/enhancements/RangeSliders.stories.js +9 -9
- package/stories/enhancements/RequiredFields.stories.js +8 -8
- package/stories/enhancements/Toggles.stories.js +45 -36
- package/stories/enhancements/_enhancement-header.js +2 -2
- package/stories/foundations/Colors.stories.js +13 -13
- package/stories/foundations/HTMLDefaults.stories.js +4 -4
- package/stories/foundations/Icons.stories.js +123 -288
- package/stories/foundations/MeshGradients.stories.js +161 -250
- package/stories/foundations/SmartSurfaces.stories.js +147 -64
- package/stories/foundations/Spacing.stories.js +30 -30
- package/stories/foundations/Typography.stories.js +352 -723
- package/stories/foundations/ZIndex.stories.js +124 -141
- package/stories/layout/LayoutOverview.stories.js +345 -250
- package/stories/layout/LayoutSystem.stories.js +60 -76
- package/stories/patterns/InteractiveStates.stories.js +29 -29
- package/stories/patterns/Utilities.stories.js +17 -5
- package/stories/primitives/Alerts.stories.js +6 -6
- package/stories/primitives/Cards.stories.js +22 -11
- package/stories/primitives/{Forms.stories.js → FormElements.stories.js} +20 -11
- package/stories/primitives/HtmlFormElements.stories.js +128 -0
- package/stories/primitives/{FormGroups.stories.js → HtmlFormGroups.stories.js} +70 -21
- package/stories/primitives/Media.stories.js +23 -20
- package/stories/utilities/Backdrop.stories.js +68 -27
- package/stories/utils/PdsAsk.stories.js +15 -14
- package/public/assets/js/app.js.map +0 -7
- package/public/assets/js/lit.js.map +0 -7
- package/public/assets/js/pds.js.map +0 -7
- package/stories/components/PdsJsonform.stories.js +0 -1929
- /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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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", //
|
|
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-
|
|
1594
|
+
padding: var(--spacing-6) var(--spacing-8);
|
|
1593
1595
|
border-left: 4px solid var(--color-primary-500);
|
|
1594
|
-
background-color: var(--color-surface-
|
|
1595
|
-
border-radius: var(--radius-
|
|
1596
|
-
font-
|
|
1597
|
-
|
|
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-
|
|
1606
|
-
font-size: var(--font-size-
|
|
1608
|
+
margin-top: var(--spacing-4);
|
|
1609
|
+
font-size: var(--font-size-base);
|
|
1607
1610
|
font-style: normal;
|
|
1608
|
-
color: var(--color-
|
|
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
|
-
|
|
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-
|
|
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 {
|
|
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
|
-
/*
|
|
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
|
-
/*
|
|
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-
|
|
226
|
+
id: "pds-form",
|
|
227
227
|
name: "JSON Form",
|
|
228
228
|
description: "Auto-generated form from JSON Schema",
|
|
229
|
-
selectors: ["pds-
|
|
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"
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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>
|