@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,1162 @@
1
+ import { enums } from "./pds-enums.js";
2
+
3
+ /**
4
+ * Design system presets - pre-configured themes for quick starts.
5
+ * Expose as an object keyed by preset id.
6
+ */
7
+ export const presets = {
8
+ "ocean-breeze": {
9
+ id: "ocean-breeze",
10
+ name: "Ocean Breeze",
11
+ tags: ["playful"],
12
+ description:
13
+ "Fresh and calming ocean-inspired palette with professional undertones",
14
+ options: {
15
+ liquidGlassEffects: true,
16
+ backgroundMesh: 3,
17
+ },
18
+ colors: {
19
+ primary: "#0891b2",
20
+ secondary: "#64748b",
21
+ accent: "#06b6d4",
22
+ background: "#f0f9ff",
23
+ darkMode: {
24
+ background: "#0c1821",
25
+ secondary: "#94a3b8",
26
+ primary: "#0891b2", // Tailwind cyan-600 as base - generates darker 600 shade
27
+ },
28
+ },
29
+ typography: {
30
+ baseFontSize: 17,
31
+ fontScale: 1.5, // More dramatic scale for breathing room
32
+ fontFamilyHeadings:
33
+ 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',
34
+ fontFamilyBody:
35
+ 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',
36
+ },
37
+ spatialRhythm: {
38
+ baseUnit: 6, // More spacious
39
+ scaleRatio: 1.2,
40
+ },
41
+ shape: {
42
+ radiusSize: enums.RadiusSizes.xxlarge, // Soft, flowing
43
+ },
44
+ },
45
+ "midnight-steel": {
46
+ id: "midnight-steel",
47
+ name: "Midnight Steel",
48
+ description:
49
+ "Bold industrial aesthetic with sharp contrasts and urban edge",
50
+ colors: {
51
+ primary: "#3b82f6",
52
+ secondary: "#52525b",
53
+ accent: "#f59e0b",
54
+ background: "#fafaf9",
55
+ darkMode: {
56
+ background: "#18181b",
57
+ secondary: "#71717a",
58
+ primary: "#3b82f6", // Tailwind blue-500 - optimized mid-tone
59
+ },
60
+ },
61
+ typography: {
62
+ baseFontSize: 16,
63
+ fontScale: 1.333,
64
+ fontFamilyHeadings:
65
+ "'IBM Plex Sans', system-ui, -apple-system, sans-serif",
66
+ fontFamilyBody: "'Inter', system-ui, -apple-system, sans-serif",
67
+ fontWeightSemibold: 600,
68
+ },
69
+ spatialRhythm: {
70
+ baseUnit: 4,
71
+ scaleRatio: 1.25,
72
+ },
73
+ shape: {
74
+ radiusSize: enums.RadiusSizes.small, // Crisp corporate edges
75
+ borderWidth: enums.BorderWidths.thin,
76
+ },
77
+ },
78
+ "neural-glow": {
79
+ id: "neural-glow",
80
+ name: "Neural Glow",
81
+ description:
82
+ "AI-inspired with vibrant purple-blue gradients and futuristic vibes",
83
+ colors: {
84
+ primary: "#8b5cf6",
85
+ secondary: "#6366f1",
86
+ accent: "#ec4899",
87
+ background: "#faf5ff",
88
+ darkMode: {
89
+ background: "#0f0a1a",
90
+ secondary: "#818cf8",
91
+ primary: "#8b5cf6", // Tailwind violet-500 - optimized mid-tone
92
+ },
93
+ },
94
+ typography: {
95
+ baseFontSize: 16,
96
+ fontScale: 1.618, // Golden ratio for futuristic feel
97
+ fontFamilyHeadings: "'Space Grotesk', system-ui, sans-serif",
98
+ fontFamilyBody: "'Space Grotesk', system-ui, sans-serif",
99
+ },
100
+ spatialRhythm: {
101
+ baseUnit: 4,
102
+ scaleRatio: 1.5,
103
+ },
104
+ shape: {
105
+ radiusSize: enums.RadiusSizes.xlarge, // Smooth, modern
106
+ borderWidth: enums.BorderWidths.medium,
107
+ },
108
+ behavior: {
109
+ transitionSpeed: enums.TransitionSpeeds.fast,
110
+ },
111
+ },
112
+ "paper-and-ink": {
113
+ id: "paper-and-ink",
114
+ name: "Paper & Ink",
115
+ tags: ["app", "featured"],
116
+ description: "Ultra-minimal design with focus on typography and whitespace",
117
+ colors: {
118
+ primary: "#171717",
119
+ secondary: "#737373",
120
+ accent: "#525252",
121
+ background: "#ffffff",
122
+ darkMode: {
123
+ background: "#0a0a0a",
124
+ secondary: "#a3a3a3",
125
+ primary: "#737373", // Tailwind gray-500 - optimized mid-tone
126
+ },
127
+ },
128
+ typography: {
129
+ baseFontSize: 18, // Readable, print-like
130
+ fontScale: 1.333, // Perfect fourth
131
+ fontFamilyHeadings: "'Helvetica Neue', 'Arial', sans-serif",
132
+ fontFamilyBody: "'Georgia', 'Times New Roman', serif",
133
+ fontWeightNormal: 400,
134
+ fontWeightBold: 700,
135
+ },
136
+ spatialRhythm: {
137
+ baseUnit: 4, // Tight, compact
138
+ scaleRatio: 1.2,
139
+ },
140
+ shape: {
141
+ radiusSize: enums.RadiusSizes.none, // Sharp editorial
142
+ borderWidth: enums.BorderWidths.thin,
143
+ },
144
+ },
145
+ "sunset-paradise": {
146
+ id: "sunset-paradise",
147
+ name: "Sunset Paradise",
148
+ description: "Warm tropical colors evoking golden hour by the beach",
149
+ options: {
150
+ liquidGlassEffects: true,
151
+ backgroundMesh: 2,
152
+ },
153
+ colors: {
154
+ primary: "#ea580c", // Darker orange for better light mode contrast
155
+ secondary: "#d4a373",
156
+ accent: "#fb923c",
157
+ background: "#fffbeb",
158
+ darkMode: {
159
+ background: "#1a0f0a",
160
+ secondary: "#c9a482",
161
+ // Ensure sufficient contrast for primary-filled components with white text in dark mode
162
+ primary: "#f97316", // Tailwind orange-500 - optimized mid-tone
163
+ },
164
+ },
165
+ typography: {
166
+ baseFontSize: 16,
167
+ fontScale: 1.5,
168
+ fontFamilyHeadings: "'Quicksand', 'Comfortaa', sans-serif",
169
+ fontFamilyBody: "'Quicksand', 'Comfortaa', sans-serif",
170
+ },
171
+ spatialRhythm: {
172
+ baseUnit: 6, // Relaxed, vacation vibes
173
+ scaleRatio: 1.5,
174
+ },
175
+ shape: {
176
+ radiusSize: enums.RadiusSizes.xxlarge, // Playful, rounded
177
+ borderWidth: enums.BorderWidths.medium,
178
+ },
179
+ },
180
+ "retro-wave": {
181
+ id: "retro-wave",
182
+ name: "Retro Wave",
183
+ description: "Nostalgic 80s-inspired palette with neon undertones",
184
+ colors: {
185
+ primary: "#c026d3", // Darker fuchsia for better light mode contrast
186
+ secondary: "#a78bfa",
187
+ accent: "#22d3ee",
188
+ background: "#fef3ff",
189
+ darkMode: {
190
+ background: "#1a0a1f",
191
+ secondary: "#c4b5fd",
192
+ // Deepen primary for dark mode to meet AA contrast with white text
193
+ primary: "#d946ef", // Tailwind fuchsia-500 - optimized mid-tone
194
+ },
195
+ },
196
+ typography: {
197
+ baseFontSize: 15,
198
+ fontScale: 1.5,
199
+ fontFamilyHeadings: "'Orbitron', 'Impact', monospace",
200
+ fontFamilyBody: "'Courier New', 'Courier', monospace",
201
+ fontWeightBold: 700,
202
+ },
203
+ spatialRhythm: {
204
+ baseUnit: 4,
205
+ scaleRatio: 1.25,
206
+ },
207
+ shape: {
208
+ radiusSize: enums.RadiusSizes.none, // Sharp geometric 80s
209
+ borderWidth: enums.BorderWidths.thick, // Bold borders
210
+ },
211
+ behavior: {
212
+ transitionSpeed: enums.TransitionSpeeds.instant, // Snappy retro feel
213
+ },
214
+ },
215
+ "forest-canopy": {
216
+ id: "forest-canopy",
217
+ name: "Forest Canopy",
218
+ description: "Natural earth tones with organic, calming green hues",
219
+ colors: {
220
+ primary: "#059669",
221
+ secondary: "#78716c",
222
+ accent: "#84cc16",
223
+ background: "#f0fdf4",
224
+ darkMode: {
225
+ background: "#0a1410",
226
+ secondary: "#a8a29e",
227
+ primary: "#10b981", // Tailwind emerald-500 - optimized mid-tone
228
+ },
229
+ },
230
+ typography: {
231
+ baseFontSize: 16,
232
+ fontScale: 1.414, // Square root of 2, organic growth
233
+ fontFamilyHeadings: "'Merriweather Sans', 'Arial', sans-serif",
234
+ fontFamilyBody: "'Merriweather', 'Georgia', serif",
235
+ },
236
+ spatialRhythm: {
237
+ baseUnit: 6,
238
+ scaleRatio: 1.3,
239
+ },
240
+ shape: {
241
+ radiusSize: enums.RadiusSizes.medium, // Natural, organic curves
242
+ borderWidth: enums.BorderWidths.thin,
243
+ },
244
+ },
245
+ "ruby-elegance": {
246
+ id: "ruby-elegance",
247
+ name: "Ruby Elegance",
248
+ description: "Sophisticated palette with rich ruby reds and warm accents",
249
+ colors: {
250
+ primary: "#dc2626",
251
+ secondary: "#9ca3af",
252
+ accent: "#be123c",
253
+ background: "#fef2f2",
254
+ darkMode: {
255
+ background: "#1b0808",
256
+ secondary: "#d1d5db",
257
+ primary: "#ef4444", // Tailwind red-500 - optimized mid-tone
258
+ },
259
+ },
260
+ typography: {
261
+ baseFontSize: 17,
262
+ fontScale: 1.5,
263
+ fontFamilyHeadings: "'Playfair Display', 'Georgia', serif",
264
+ fontFamilyBody: "'Crimson Text', 'Garamond', serif",
265
+ fontWeightNormal: 400,
266
+ fontWeightSemibold: 600,
267
+ },
268
+ spatialRhythm: {
269
+ baseUnit: 4,
270
+ scaleRatio: 1.333,
271
+ },
272
+ shape: {
273
+ radiusSize: enums.RadiusSizes.small, // Subtle elegance
274
+ borderWidth: enums.BorderWidths.thin,
275
+ },
276
+ },
277
+ "desert-dawn": {
278
+ id: "desert-dawn",
279
+ name: "Desert Dawn",
280
+ description:
281
+ "Sun-baked neutrals with grounded terracotta and cool oasis accents",
282
+ colors: {
283
+ primary: "#b45309", // terracotta
284
+ secondary: "#a8a29e", // warm gray
285
+ accent: "#0ea5a8", // oasis teal
286
+ background: "#fcf6ef",
287
+ darkMode: {
288
+ background: "#12100e",
289
+ secondary: "#d1d5db",
290
+ // Deepen primary in dark to keep white text AA-compliant
291
+ primary: "#f59e0b", // Tailwind amber-500 - optimized mid-tone
292
+ },
293
+ },
294
+ typography: {
295
+ baseFontSize: 16,
296
+ fontScale: 1.414,
297
+ fontFamilyHeadings:
298
+ "'Source Sans Pro', system-ui, -apple-system, sans-serif",
299
+ fontFamilyBody: "'Source Serif Pro', Georgia, serif",
300
+ },
301
+ spatialRhythm: {
302
+ baseUnit: 6,
303
+ scaleRatio: 1.3,
304
+ },
305
+ shape: {
306
+ radiusSize: enums.RadiusSizes.medium,
307
+ borderWidth: enums.BorderWidths.medium,
308
+ },
309
+ },
310
+ "contrast-pro": {
311
+ id: "contrast-pro",
312
+ name: "Contrast Pro",
313
+ description: "Accessibility-first, high-contrast UI with assertive clarity",
314
+ colors: {
315
+ primary: "#1f2937", // slate-800
316
+ secondary: "#111827", // gray-900
317
+ accent: "#eab308", // amber-500
318
+ background: "#ffffff",
319
+ darkMode: {
320
+ background: "#0b0f14",
321
+ secondary: "#9ca3af",
322
+ // Use a lighter primary in dark mode to ensure outline/link text
323
+ // has strong contrast against the very-dark surface. The generator
324
+ // will still pick appropriate darker fill shades for buttons so
325
+ // white-on-fill contrast is preserved.
326
+ primary: "#9ca3af", // Tailwind gray-400 - optimized mid-tone
327
+ },
328
+ },
329
+ typography: {
330
+ baseFontSize: 17,
331
+ fontScale: 1.2,
332
+ fontFamilyHeadings:
333
+ "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
334
+ fontFamilyBody:
335
+ "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
336
+ fontWeightBold: 700,
337
+ },
338
+ spatialRhythm: {
339
+ baseUnit: 3, // compact, data-dense
340
+ scaleRatio: 1.2,
341
+ },
342
+ shape: {
343
+ radiusSize: enums.RadiusSizes.small,
344
+ borderWidth: enums.BorderWidths.thick,
345
+ },
346
+ behavior: {
347
+ transitionSpeed: enums.TransitionSpeeds.fast,
348
+ focusRingWidth: 4,
349
+ },
350
+ },
351
+ "pastel-play": {
352
+ id: "pastel-play",
353
+ name: "Pastel Play",
354
+ description:
355
+ "Playful pastels with soft surfaces and friendly rounded shapes",
356
+ colors: {
357
+ primary: "#db2777", // raspberry
358
+ secondary: "#a78bfa", // lavender
359
+ accent: "#34d399", // mint
360
+ background: "#fff7fa",
361
+ darkMode: {
362
+ background: "#1a1016",
363
+ secondary: "#c4b5fd",
364
+ primary: "#ec4899", // Tailwind pink-500 - optimized mid-tone
365
+ },
366
+ },
367
+ typography: {
368
+ baseFontSize: 16,
369
+ fontScale: 1.333,
370
+ fontFamilyHeadings: "'Nunito', system-ui, -apple-system, sans-serif",
371
+ fontFamilyBody: "'Nunito', system-ui, -apple-system, sans-serif",
372
+ lineHeightRelaxed: enums.LineHeights.relaxed,
373
+ },
374
+ spatialRhythm: {
375
+ baseUnit: 6, // comfy
376
+ scaleRatio: 1.4,
377
+ },
378
+ shape: {
379
+ radiusSize: enums.RadiusSizes.xxlarge,
380
+ borderWidth: enums.BorderWidths.thin,
381
+ },
382
+ behavior: {
383
+ transitionSpeed: enums.TransitionSpeeds.slow,
384
+ animationEasing: enums.AnimationEasings["ease-out"],
385
+ },
386
+ },
387
+ "brutalist-tech": {
388
+ id: "brutalist-tech",
389
+ name: "Brutalist Tech",
390
+ description:
391
+ "Stark grayscale with engineered accents and unapologetically bold structure",
392
+ colors: {
393
+ primary: "#111111",
394
+ secondary: "#4b5563",
395
+ accent: "#06b6d4", // cyan signal
396
+ background: "#f8fafc",
397
+ darkMode: {
398
+ background: "#0b0b0b",
399
+ secondary: "#9ca3af",
400
+ // Set a chromatic primary in dark mode to ensure both:
401
+ // - outline/link contrast on dark surface, and
402
+ // - sufficient button fill contrast against white text.
403
+ // Cyan signal aligns with preset accent and produces high-contrast dark fills.
404
+ primary: "#06b6d4", // Tailwind cyan-500 - optimized mid-tone
405
+ },
406
+ },
407
+ typography: {
408
+ baseFontSize: 15,
409
+ fontScale: 1.25,
410
+ fontFamilyHeadings:
411
+ "'JetBrains Mono', ui-monospace, Menlo, Consolas, monospace",
412
+ fontFamilyBody: "'Inter', system-ui, -apple-system, sans-serif",
413
+ letterSpacingTight: -0.02,
414
+ },
415
+ spatialRhythm: {
416
+ baseUnit: 4,
417
+ scaleRatio: 1.25,
418
+ },
419
+ shape: {
420
+ radiusSize: enums.RadiusSizes.none,
421
+ borderWidth: enums.BorderWidths.thick,
422
+ },
423
+ behavior: {
424
+ transitionSpeed: enums.TransitionSpeeds.instant,
425
+ },
426
+ },
427
+ "zen-garden": {
428
+ id: "zen-garden",
429
+ name: "Zen Garden",
430
+ description:
431
+ "Soft botanicals with contemplative spacing and balanced motion",
432
+ colors: {
433
+ primary: "#3f6212", // deep olive
434
+ secondary: "#6b7280", // neutral leaf shadow
435
+ accent: "#7c3aed", // iris bloom
436
+ background: "#f7fbef",
437
+ darkMode: {
438
+ background: "#0d130a",
439
+ secondary: "#a3a3a3",
440
+ primary: "#84cc16", // Tailwind lime-500 - optimized mid-tone
441
+ },
442
+ },
443
+ typography: {
444
+ baseFontSize: 17,
445
+ fontScale: 1.414,
446
+ fontFamilyHeadings: "'Merriweather', Georgia, serif",
447
+ fontFamilyBody: "'Noto Sans', system-ui, -apple-system, sans-serif",
448
+ },
449
+ spatialRhythm: {
450
+ baseUnit: 6, // airy
451
+ scaleRatio: 1.35,
452
+ },
453
+ shape: {
454
+ radiusSize: enums.RadiusSizes.large,
455
+ borderWidth: enums.BorderWidths.medium,
456
+ },
457
+ behavior: {
458
+ transitionSpeed: enums.TransitionSpeeds.normal,
459
+ animationEasing: enums.AnimationEasings.ease,
460
+ },
461
+ },
462
+ "fitness-pro": {
463
+ id: "fitness-pro",
464
+ name: "Fitness Pro",
465
+ tags: ["app", "featured"],
466
+ description:
467
+ "Health and fitness tracking aesthetic with data-driven dark surfaces and vibrant accent rings",
468
+ options: {
469
+ liquidGlassEffects: true,
470
+ backgroundMesh: 2,
471
+ },
472
+ colors: {
473
+ primary: "#e91e63", // vibrant pink-magenta for data highlights
474
+ secondary: "#78909c", // cool gray for secondary data
475
+ accent: "#ab47bc", // purple accent for premium features
476
+ background: "#fafafa",
477
+ darkMode: {
478
+ background: "#1a1d21", // deep charcoal like WHOOP
479
+ secondary: "#78909c",
480
+ primary: "#0a4ca4",
481
+ },
482
+ },
483
+ typography: {
484
+ baseFontSize: 15,
485
+ fontScale: 1.25,
486
+ fontFamilyHeadings:
487
+ "'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif",
488
+ fontFamilyBody:
489
+ "'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif",
490
+ fontWeightNormal: 400,
491
+ fontWeightMedium: 500,
492
+ fontWeightSemibold: 600,
493
+ fontWeightBold: 700,
494
+ lineHeightNormal: enums.LineHeights.tight,
495
+ },
496
+ spatialRhythm: {
497
+ baseUnit: 4,
498
+ scaleRatio: 1.25,
499
+ containerPadding: 1.25,
500
+ sectionSpacing: 2.5,
501
+ },
502
+ shape: {
503
+ radiusSize: enums.RadiusSizes.large, // smooth cards and buttons
504
+ borderWidth: enums.BorderWidths.thin,
505
+ },
506
+ layers: {
507
+ shadowDepth: "medium",
508
+ blurMedium: 12,
509
+ },
510
+ behavior: {
511
+ transitionSpeed: enums.TransitionSpeeds.fast,
512
+ animationEasing: enums.AnimationEasings["ease-out"],
513
+ focusRingWidth: 2,
514
+ },
515
+ },
516
+ "travel-market": {
517
+ id: "travel-market",
518
+ name: "Travel Market",
519
+ description:
520
+ "Hospitality marketplace design with clean cards, subtle shadows, and trust-building neutrals",
521
+ options: {
522
+ liquidGlassEffects: true,
523
+ backgroundMesh: 3,
524
+ },
525
+ colors: {
526
+ primary: "#d93251", // Darker coral red for better contrast (was #ff385c)
527
+ secondary: "#717171", // neutral gray for text
528
+ accent: "#144990", // teal for experiences/verified
529
+ background: "#ffffff",
530
+ darkMode: {
531
+ background: "#222222",
532
+ secondary: "#b0b0b0",
533
+ primary: "#ff5a7a", // Lighter for dark mode
534
+ },
535
+ },
536
+ typography: {
537
+ baseFontSize: 16,
538
+ fontScale: 1.2,
539
+ fontFamilyHeadings:
540
+ "'Circular', system-ui, -apple-system, 'Segoe UI', sans-serif",
541
+ fontFamilyBody:
542
+ "'Circular', system-ui, -apple-system, 'Segoe UI', sans-serif",
543
+ fontWeightNormal: 400,
544
+ fontWeightMedium: 500,
545
+ fontWeightSemibold: 600,
546
+ fontWeightBold: 700,
547
+ lineHeightRelaxed: enums.LineHeights.relaxed,
548
+ },
549
+ spatialRhythm: {
550
+ baseUnit: 4,
551
+ scaleRatio: 1.25,
552
+ containerMaxWidth: 1440,
553
+ containerPadding: 1.5,
554
+ sectionSpacing: 3.0,
555
+ },
556
+ shape: {
557
+ radiusSize: enums.RadiusSizes.medium,
558
+ borderWidth: enums.BorderWidths.thin,
559
+ },
560
+ layers: {
561
+ shadowDepth: "light",
562
+ blurLight: 8,
563
+ },
564
+ behavior: {
565
+ transitionSpeed: enums.TransitionSpeeds.normal,
566
+ animationEasing: enums.AnimationEasings["ease-in-out"],
567
+ hoverOpacity: 0.9,
568
+ },
569
+ },
570
+ "mobility-app": {
571
+ id: "mobility-app",
572
+ name: "Mobility App",
573
+ tags: ["app", "featured"],
574
+ description:
575
+ "On-demand service platform with bold typography, map-ready colors, and action-driven UI",
576
+ options: {
577
+ liquidGlassEffects: true,
578
+ backgroundMesh: 0,
579
+ },
580
+ colors: {
581
+ primary: "#000000", // Uber-inspired black for trust and sophistication
582
+ secondary: "#545454", // mid-gray for secondary elements
583
+ accent: "#06c167", // green for success/confirmation
584
+ background: "#f6f6f6",
585
+ darkMode: {
586
+ background: "#0f0f0f",
587
+ secondary: "#8a8a8a",
588
+ primary: "#06c167", // Use bright green for dark mode buttons (was white)
589
+ },
590
+ },
591
+ typography: {
592
+ baseFontSize: 16,
593
+ fontScale: 1.3,
594
+ fontFamilyHeadings:
595
+ "'UberMove', system-ui, -apple-system, 'Segoe UI', sans-serif",
596
+ fontFamilyBody:
597
+ "'UberMove', system-ui, -apple-system, 'Segoe UI', sans-serif",
598
+ fontWeightNormal: 400,
599
+ fontWeightMedium: 500,
600
+ fontWeightSemibold: 600,
601
+ fontWeightBold: 700,
602
+ },
603
+ spatialRhythm: {
604
+ baseUnit: 4,
605
+ scaleRatio: 1.25,
606
+ buttonPadding: 1.25,
607
+ inputPadding: 1.0,
608
+ },
609
+ shape: {
610
+ radiusSize: enums.RadiusSizes.small, // subtle, professional
611
+ borderWidth: enums.BorderWidths.medium,
612
+ },
613
+ behavior: {
614
+ transitionSpeed: enums.TransitionSpeeds.fast,
615
+ animationEasing: enums.AnimationEasings["ease-out"],
616
+ focusRingWidth: 3,
617
+ },
618
+ a11y: {
619
+ minTouchTarget: enums.TouchTargetSizes.comfortable,
620
+ focusStyle: enums.FocusStyles.ring,
621
+ },
622
+ },
623
+ "fintech-secure": {
624
+ id: "fintech-secure",
625
+ name: "Fintech Secure",
626
+ description:
627
+ "Financial services app UI with trust-building blues, precise spacing, and security-first design",
628
+ options: {
629
+ liquidGlassEffects: false,
630
+ backgroundMesh: 0,
631
+ },
632
+ colors: {
633
+ primary: "#0a2540", // deep navy for trust and security
634
+ secondary: "#425466", // slate for secondary content
635
+ accent: "#00d4ff", // bright cyan for CTAs
636
+ background: "#f7fafc",
637
+ darkMode: {
638
+ background: "#0a1929",
639
+ secondary: "#8796a5",
640
+ primary: "#00d4ff",
641
+ },
642
+ },
643
+ typography: {
644
+ baseFontSize: 16,
645
+ fontScale: 1.25,
646
+ fontFamilyHeadings:
647
+ "'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif",
648
+ fontFamilyBody:
649
+ "'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif",
650
+ fontFamilyMono:
651
+ "'JetBrains Mono', ui-monospace, 'Cascadia Code', monospace",
652
+ fontWeightNormal: 400,
653
+ fontWeightMedium: 500,
654
+ fontWeightSemibold: 600,
655
+ fontWeightBold: 700,
656
+ },
657
+ spatialRhythm: {
658
+ baseUnit: 4,
659
+ scaleRatio: 1.25,
660
+ containerMaxWidth: 1280,
661
+ sectionSpacing: 2.5,
662
+ },
663
+ shape: {
664
+ radiusSize: enums.RadiusSizes.medium,
665
+ borderWidth: enums.BorderWidths.thin,
666
+ },
667
+ layers: {
668
+ shadowDepth: "light",
669
+ blurLight: 6,
670
+ },
671
+ behavior: {
672
+ transitionSpeed: enums.TransitionSpeeds.fast,
673
+ animationEasing: enums.AnimationEasings["ease-in-out"],
674
+ focusRingWidth: 3,
675
+ focusRingOpacity: 0.4,
676
+ },
677
+ a11y: {
678
+ minTouchTarget: enums.TouchTargetSizes.standard,
679
+ focusStyle: enums.FocusStyles.ring,
680
+ },
681
+ },
682
+ "social-feed": {
683
+ id: "social-feed",
684
+ name: "Social Feed",
685
+ tags: ["app", "featured"],
686
+ description:
687
+ "Content-first social platform with minimal chrome, bold actions, and vibrant media presentation",
688
+ options: {
689
+ liquidGlassEffects: true,
690
+ backgroundMesh: 4,
691
+ },
692
+ colors: {
693
+ primary: "#1877f2", // social blue for links and primary actions
694
+ secondary: "#65676b", // neutral gray for secondary text
695
+ accent: "#fe2c55", // vibrant pink-red for likes/hearts
696
+ background: "#ffffff",
697
+ darkMode: {
698
+ background: "#18191a",
699
+ secondary: "#b0b3b8",
700
+ primary: "#2d88ff",
701
+ },
702
+ },
703
+ typography: {
704
+ baseFontSize: 15,
705
+ fontScale: 1.2,
706
+ fontFamilyHeadings:
707
+ "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
708
+ fontFamilyBody:
709
+ "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
710
+ fontWeightNormal: 400,
711
+ fontWeightMedium: 500,
712
+ fontWeightSemibold: 600,
713
+ fontWeightBold: 700,
714
+ lineHeightNormal: enums.LineHeights.relaxed,
715
+ },
716
+ spatialRhythm: {
717
+ baseUnit: 4,
718
+ scaleRatio: 1.25,
719
+ containerMaxWidth: 680,
720
+ sectionSpacing: 1.5,
721
+ },
722
+ shape: {
723
+ radiusSize: enums.RadiusSizes.medium,
724
+ borderWidth: enums.BorderWidths.thin,
725
+ },
726
+ behavior: {
727
+ transitionSpeed: enums.TransitionSpeeds.fast,
728
+ animationEasing: enums.AnimationEasings["ease-out"],
729
+ hoverOpacity: 0.85,
730
+ },
731
+ },
732
+ "enterprise-dash": {
733
+ id: "enterprise-dash",
734
+ tags: ["app", "featured"],
735
+ name: "Enterprise Dashboard",
736
+ description:
737
+ "Data-dense business intelligence app interface with organized hierarchy and professional polish",
738
+ options: {
739
+ liquidGlassEffects: false,
740
+ backgroundMesh: 2,
741
+ },
742
+ colors: {
743
+ primary: "#0066cc", // corporate blue for primary actions
744
+ secondary: "#5f6368", // neutral gray for text and chrome
745
+ accent: "#1a73e8", // bright blue for highlights
746
+ background: "#ffffff",
747
+ success: "#34a853",
748
+ warning: "#fbbc04",
749
+ danger: "#ea4335",
750
+ darkMode: {
751
+ background: "#202124",
752
+ secondary: "#9aa0a6",
753
+ primary: "#8ab4f8",
754
+ },
755
+ },
756
+ typography: {
757
+ baseFontSize: 14,
758
+ fontScale: 1.2,
759
+ fontFamilyHeadings:
760
+ "'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif",
761
+ fontFamilyBody:
762
+ "'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif",
763
+ fontFamilyMono: "'Roboto Mono', ui-monospace, Consolas, monospace",
764
+ fontWeightNormal: 400,
765
+ fontWeightMedium: 500,
766
+ fontWeightSemibold: 600,
767
+ fontWeightBold: 700,
768
+ lineHeightNormal: enums.LineHeights.tight,
769
+ },
770
+ spatialRhythm: {
771
+ baseUnit: 4,
772
+ scaleRatio: 1.2,
773
+ containerMaxWidth: 1600,
774
+ containerPadding: 1.5,
775
+ sectionSpacing: 2.0,
776
+ },
777
+ shape: {
778
+ radiusSize: enums.RadiusSizes.small,
779
+ borderWidth: enums.BorderWidths.thin,
780
+ },
781
+ layers: {
782
+ shadowDepth: "light",
783
+ blurLight: 4,
784
+ },
785
+ behavior: {
786
+ transitionSpeed: enums.TransitionSpeeds.fast,
787
+ animationEasing: enums.AnimationEasings["ease-in-out"],
788
+ focusRingWidth: 2,
789
+ },
790
+ layout: {
791
+ densityCompact: 0.85,
792
+ gridColumns: 12,
793
+ },
794
+ }
795
+
796
+ };
797
+
798
+ /**
799
+ * Default configuration for the Pure Design System.
800
+ * This file defines the default settings for colors, typography,
801
+ * spatial rhythm, layers, shape, behavior, layout, advanced options,
802
+ * accessibility, components, and icons.
803
+ */
804
+ // Default configuration moved into presets as the canonical "default" entry
805
+ presets.default = {
806
+ id: "default",
807
+ name: "Default",
808
+ tags: ["app", "featured"],
809
+ description: "Fresh and modern design system with balanced aesthetics and usability",
810
+ options: {
811
+ liquidGlassEffects: true,
812
+ backgroundMesh: 4,
813
+ },
814
+
815
+ form: {
816
+ options: {
817
+ widgets: {
818
+ booleans: "toggle", // 'toggle' | 'checkbox'
819
+ numbers: "input", // 'input' | 'range'
820
+ selects: "standard", // 'standard' | 'dropdown'
821
+ },
822
+ layouts: {
823
+ fieldsets: "default", // 'default' | 'flex' | 'grid' | 'accordion' | 'tabs' | 'card'
824
+ arrays: "default", // 'default' | 'compact'
825
+ },
826
+ enhancements: {
827
+ icons: true, // Enable icon-enhanced inputs
828
+ datalists: true, // Enable datalist autocomplete
829
+ rangeOutput: true, // Use .range-output for ranges
830
+ },
831
+ validation: {
832
+ showErrors: true, // Show validation errors inline
833
+ validateOnChange: false, // Validate on every change vs on submit
834
+ },
835
+ }
836
+ },
837
+ colors: {
838
+ // Palette - base colors that generate entire color palettes
839
+ primary: "#0e7490", // Darker cyan for better contrast
840
+ secondary: "#a99b95", // REQUIRED: Secondary/neutral color for gray scale generation
841
+ accent: "#e54271", // Accent color (pink red)
842
+ background: "#e7e6de", // Base background color for light mode
843
+
844
+ // Dark mode overrides - specify custom dark theme colors
845
+ darkMode: {
846
+ background: "#16171a", // Custom dark mode background (cool blue-gray)
847
+ secondary: "#8b9199", // Optional: custom dark grays (uses light secondary if omitted)
848
+ primary: "#06b6d4", // Tailwind cyan-500 - optimized mid-tone
849
+ // accent: null, // Optional: override accent color for dark mode
850
+ },
851
+
852
+ // Semantic colors (auto-generated from primary if not specified)
853
+ success: null, // Auto-generated green from primary if null
854
+ warning: "#B38600", // Warning color (defaults to accent if null)
855
+ danger: null, // Auto-generated red from primary if null
856
+ info: null, // Defaults to primary color if null
857
+
858
+ // Advanced color options
859
+ gradientStops: 3,
860
+ elevationOpacity: 0.05,
861
+ },
862
+
863
+ typography: {
864
+ // Essential typography settings (exposed in simple form)
865
+ baseFontSize: 16,
866
+ fontScale: 1.2, // Multiplier for heading size generation (1.2 = minor third)
867
+ fontFamilyHeadings:
868
+ 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',
869
+ fontFamilyBody: 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',
870
+ fontFamilyMono:
871
+ 'ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace',
872
+
873
+ // Advanced typography options (exposed in advanced form)
874
+ fontWeightLight: enums.FontWeights.light,
875
+ fontWeightNormal: enums.FontWeights.normal,
876
+ fontWeightMedium: enums.FontWeights.medium,
877
+ fontWeightSemibold: enums.FontWeights.semibold,
878
+ fontWeightBold: enums.FontWeights.bold,
879
+ lineHeightTight: enums.LineHeights.tight,
880
+ lineHeightNormal: enums.LineHeights.normal,
881
+ lineHeightRelaxed: enums.LineHeights.relaxed,
882
+ letterSpacingTight: -0.025,
883
+ letterSpacingNormal: 0,
884
+ letterSpacingWide: 0.025,
885
+ },
886
+
887
+ spatialRhythm: {
888
+ // Essential spacing setting (exposed in simple form)
889
+ baseUnit: 4, // Base spacing unit in pixels (typically 16 = 1rem)
890
+
891
+ // Advanced spacing options
892
+ scaleRatio: 1.25,
893
+ maxSpacingSteps: 32,
894
+ containerMaxWidth: 1200,
895
+ containerPadding: 1.0,
896
+ inputPadding: 0.75,
897
+ buttonPadding: 1.0,
898
+ sectionSpacing: 2.0,
899
+ },
900
+
901
+ layers: {
902
+ shadowDepth: "medium",
903
+ blurLight: 4,
904
+ blurMedium: 8,
905
+ blurHeavy: 16,
906
+ zIndexBase: 0,
907
+ zIndexDropdown: 1000,
908
+ zIndexSticky: 1020,
909
+ zIndexFixed: 1030,
910
+ zIndexModal: 1040,
911
+ zIndexPopover: 1050,
912
+ zIndexTooltip: 1060,
913
+ zIndexNotification: 1070,
914
+ },
915
+
916
+ shape: {
917
+ radiusSize: enums.RadiusSizes.large,
918
+ borderWidth: enums.BorderWidths.medium,
919
+ customRadius: null,
920
+ },
921
+
922
+ behavior: {
923
+ transitionSpeed: enums.TransitionSpeeds.normal,
924
+ animationEasing: enums.AnimationEasings["ease-out"],
925
+ customTransitionSpeed: null,
926
+ customEasing: null,
927
+ focusRingWidth: 3,
928
+ focusRingOpacity: 0.3,
929
+ hoverOpacity: 0.8,
930
+ },
931
+
932
+ layout: {
933
+ gridColumns: 12,
934
+ gridGutter: 1.0,
935
+ breakpoints: {
936
+ sm: 640,
937
+ md: 768,
938
+ lg: 1024,
939
+ xl: 1280,
940
+ },
941
+ densityCompact: 0.8,
942
+ densityNormal: 1.0,
943
+ densityComfortable: 1.2,
944
+ buttonMinHeight: enums.TouchTargetSizes.standard,
945
+ inputMinHeight: 40,
946
+
947
+ // Layout utility system
948
+ utilities: {
949
+ grid: true,
950
+ flex: true,
951
+ spacing: true,
952
+ container: true,
953
+ },
954
+
955
+ gridSystem: {
956
+ columns: [1, 2, 3, 4, 6],
957
+ autoFitBreakpoints: {
958
+ sm: "150px",
959
+ md: "250px",
960
+ lg: "350px",
961
+ xl: "450px",
962
+ },
963
+ enableGapUtilities: true,
964
+ },
965
+
966
+ containerMaxWidth: "1400px",
967
+ containerPadding: "var(--spacing-6)",
968
+ },
969
+
970
+ advanced: {
971
+ linkStyle: enums.LinkStyles.inline,
972
+ colorDerivation: "hsl",
973
+ },
974
+
975
+ a11y: {
976
+ minTouchTarget: enums.TouchTargetSizes.standard,
977
+ prefersReducedMotion: true,
978
+ focusStyle: enums.FocusStyles.ring,
979
+ },
980
+
981
+ icons: {
982
+ set: "phosphor", // https://phosphoricons.com/
983
+ weight: "regular",
984
+ defaultSize: 24,
985
+ sizes: {
986
+ xs: 16,
987
+ sm: 20,
988
+ md: 24,
989
+ lg: 32,
990
+ xl: 48,
991
+ "2xl": 64,
992
+ },
993
+ include: {
994
+ navigation: [
995
+ "arrow-left",
996
+ "arrow-right",
997
+ "arrow-up",
998
+ "arrow-down",
999
+ "arrow-counter-clockwise",
1000
+ "caret-left",
1001
+ "caret-right",
1002
+ "caret-down",
1003
+ "caret-up",
1004
+ "x",
1005
+ "list",
1006
+ "list-dashes",
1007
+ "dots-three-vertical",
1008
+ "dots-three",
1009
+ "house",
1010
+ "gear",
1011
+ "magnifying-glass",
1012
+ "funnel",
1013
+ "tabs",
1014
+ "sidebar",
1015
+ ],
1016
+ actions: [
1017
+ "plus",
1018
+ "minus",
1019
+ "check",
1020
+ "trash",
1021
+ "pencil",
1022
+ "floppy-disk",
1023
+ "copy",
1024
+ "download",
1025
+ "upload",
1026
+ "share",
1027
+ "link",
1028
+ "eye",
1029
+ "eye-slash",
1030
+ "heart",
1031
+ "star",
1032
+ "bookmark",
1033
+ "note-pencil",
1034
+ "cursor-click",
1035
+ "clipboard",
1036
+ "magic-wand",
1037
+ "sparkle",
1038
+ ],
1039
+ communication: [
1040
+ "envelope",
1041
+ "bell",
1042
+ "bell-ringing",
1043
+ "bell-simple",
1044
+ "chat-circle",
1045
+ "phone",
1046
+ "paper-plane-tilt",
1047
+ "user",
1048
+ "users",
1049
+ "user-gear",
1050
+ "at",
1051
+ ],
1052
+ content: [
1053
+ "image",
1054
+ "file",
1055
+ "file-text",
1056
+ "file-css",
1057
+ "file-js",
1058
+ "folder",
1059
+ "folder-open",
1060
+ "book-open",
1061
+ "camera",
1062
+ "video-camera",
1063
+ "play",
1064
+ "pause",
1065
+ "microphone",
1066
+ "brackets-curly",
1067
+ "code",
1068
+ "folder-simple",
1069
+ "grid-four",
1070
+ "briefcase",
1071
+ "chart-line",
1072
+ "chart-bar",
1073
+ "database",
1074
+ "map-pin"
1075
+ ],
1076
+ status: [
1077
+ "info",
1078
+ "warning",
1079
+ "check-circle",
1080
+ "x-circle",
1081
+ "question",
1082
+ "shield",
1083
+ "shield-check",
1084
+ "shield-warning",
1085
+ "lock",
1086
+ "lock-open",
1087
+ "fingerprint",
1088
+ "circle-notch"
1089
+ ],
1090
+ time: ["calendar", "clock", "timer", "hourglass"],
1091
+ commerce: [
1092
+ "shopping-cart",
1093
+ "credit-card",
1094
+ "currency-dollar",
1095
+ "tag",
1096
+ "receipt",
1097
+ "storefront",
1098
+ ],
1099
+ formatting: [
1100
+ "text-align-left",
1101
+ "text-align-center",
1102
+ "text-align-right",
1103
+ "text-b",
1104
+ "text-italic",
1105
+ "text-underline",
1106
+ "list-bullets",
1107
+ "list-numbers",
1108
+ "text-aa",
1109
+ ],
1110
+ system: [
1111
+ "cloud",
1112
+ "cloud-arrow-up",
1113
+ "cloud-arrow-down",
1114
+ "desktop",
1115
+ "device-mobile",
1116
+ "globe",
1117
+ "wifi-high",
1118
+ "battery-charging",
1119
+ "sun",
1120
+ "moon",
1121
+ "moon-stars",
1122
+ "palette",
1123
+ "rocket",
1124
+ "feather",
1125
+ "square",
1126
+ "circle",
1127
+ "squares-four",
1128
+ "lightning",
1129
+ "wrench",
1130
+ ],
1131
+ },
1132
+ // Default sprite path for internal/dev use. For consumer apps, icons are exported to
1133
+ // [config.static.root]/icons/pds-icons.svg and components should consume from there.
1134
+ spritePath: "public/assets/pds/icons/pds-icons.svg",
1135
+ },
1136
+
1137
+ gap: 4,
1138
+
1139
+ debug: false,
1140
+ };
1141
+ // Note: presets is now a stable object keyed by id
1142
+
1143
+ /**
1144
+ * Default logging method - can be overridden at config root level
1145
+ * This is exported separately so it can be added to the root config object
1146
+ * @param {string} level - log level: 'log', 'warn', 'error', 'debug', 'info'
1147
+ * @param {string} message - primary message to log
1148
+ * @param {...any} data - additional data to log
1149
+ */
1150
+ export function defaultLog(level = "log", message, ...data) {
1151
+ // Access debug from 'this' context when called as method, or check for common locations
1152
+ const debug = this?.debug || this?.design?.debug || false;
1153
+
1154
+ if (debug || level === "error" || level === "warn") {
1155
+ const method = console[level] || console.log;
1156
+ if (data.length > 0) {
1157
+ method(message, ...data);
1158
+ } else {
1159
+ method(message);
1160
+ }
1161
+ }
1162
+ }