@dixy-ui/themes 0.1.0-beta.3 → 0.1.0-beta.4

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 (91) hide show
  1. package/dist/ansi-panes.css +74 -5
  2. package/dist/arcade/ornament.d.ts +3 -0
  3. package/dist/arcade/ornament.js +8 -0
  4. package/dist/arcade-cabinet.css +1086 -0
  5. package/dist/art-deco.css +74 -5
  6. package/dist/atomic-lounge.css +78 -5
  7. package/dist/authoring.d.ts +8 -8
  8. package/dist/azulejo-tile.css +78 -5
  9. package/dist/blueprint.css +74 -5
  10. package/dist/brutalist-concrete.css +78 -5
  11. package/dist/bytes.json +97 -62
  12. package/dist/candy-clay.css +80 -5
  13. package/dist/catalog.d.ts +294 -0
  14. package/dist/catalog.js +301 -0
  15. package/dist/character.d.ts +1 -1
  16. package/dist/character.js +6 -0
  17. package/dist/chrome.js +13 -3
  18. package/dist/compile-css.js +22 -5
  19. package/dist/dispatch.css +731 -0
  20. package/dist/diwali-lights.css +78 -5
  21. package/dist/documents.d.ts +115 -7
  22. package/dist/documents.js +10 -2
  23. package/dist/foundations.d.ts +8 -0
  24. package/dist/foundations.js +10 -0
  25. package/dist/frame-styles.d.ts +3 -0
  26. package/dist/frame-styles.js +6 -0
  27. package/dist/freighter.css +140 -15
  28. package/dist/glass-ui.css +74 -5
  29. package/dist/holi-colours.css +78 -5
  30. package/dist/ledger.css +566 -0
  31. package/dist/living-forest.css +80 -5
  32. package/dist/mainframe.css +764 -0
  33. package/dist/manifests.d.ts +144 -144
  34. package/dist/material-light.css +78 -5
  35. package/dist/neon-night-market.css +78 -5
  36. package/dist/ocean-depths.css +80 -5
  37. package/dist/orbital-hud.css +140 -15
  38. package/dist/organic-paint-launch.d.ts +9 -0
  39. package/dist/organic-paint-launch.js +121 -46
  40. package/dist/organic-paint.d.ts +1 -1
  41. package/dist/organic-settings.d.ts +109 -25
  42. package/dist/organic-settings.js +49 -0
  43. package/dist/papel-picado.css +78 -5
  44. package/dist/phosphor-terminal.css +78 -5
  45. package/dist/prism-glass.css +74 -5
  46. package/dist/recipes.d.ts +162 -0
  47. package/dist/recipes.js +164 -0
  48. package/dist/resolve.d.ts +18 -2
  49. package/dist/retro-os.css +74 -5
  50. package/dist/riso-zine.css +74 -5
  51. package/dist/save-point.css +948 -0
  52. package/dist/savepoint/ornament.d.ts +3 -0
  53. package/dist/savepoint/ornament.js +8 -0
  54. package/dist/scrapbook.css +74 -5
  55. package/dist/signal.css +563 -0
  56. package/dist/skins/arcade-cabinet.d.ts +68 -0
  57. package/dist/skins/arcade-cabinet.js +68 -0
  58. package/dist/skins/dispatch.d.ts +57 -0
  59. package/dist/skins/dispatch.js +57 -0
  60. package/dist/skins/ledger.d.ts +57 -0
  61. package/dist/skins/ledger.js +57 -0
  62. package/dist/skins/mainframe.d.ts +57 -0
  63. package/dist/skins/mainframe.js +57 -0
  64. package/dist/skins/save-point.d.ts +68 -0
  65. package/dist/skins/save-point.js +68 -0
  66. package/dist/skins/signal.d.ts +57 -0
  67. package/dist/skins/signal.js +57 -0
  68. package/dist/skins/sunset-drive.d.ts +68 -0
  69. package/dist/skins/sunset-drive.js +68 -0
  70. package/dist/solar-sail.css +74 -5
  71. package/dist/starters-launch.d.ts +24 -0
  72. package/dist/starters-launch.js +343 -0
  73. package/dist/studio-hardware.css +78 -5
  74. package/dist/sumi-ink.css +74 -5
  75. package/dist/sunset/ornament.d.ts +3 -0
  76. package/dist/sunset/ornament.js +8 -0
  77. package/dist/sunset-drive.css +1024 -0
  78. package/dist/swiss-poster.css +144 -15
  79. package/dist/tactile-atelier.css +80 -5
  80. package/dist/theme-document.schema.json +34 -6
  81. package/dist/theme-fix.d.ts +11 -0
  82. package/dist/theme-fix.js +32 -0
  83. package/dist/theme-fixes.d.ts +2 -0
  84. package/dist/theme-fixes.js +1 -0
  85. package/dist/theme-schema.d.ts +6 -6
  86. package/dist/theme-schema.js +2 -0
  87. package/dist/tokyo-transit.css +78 -5
  88. package/dist/winamp-signal.css +78 -5
  89. package/dist/y2k-titanium.css +146 -15
  90. package/dist/yule-knit.css +74 -5
  91. package/package.json +50 -3
@@ -32,6 +32,11 @@
32
32
  --dixy-font-title-sm-family:
33
33
  "Fraunces Variable", "Fraunces", ui-serif, Georgia, serif;
34
34
  --dixy-skin-edge: #efc27a;
35
+ --dixy-skin-field-edge: color-mix(
36
+ in oklab,
37
+ var(--dixy-color-base-9) 50%,
38
+ var(--dixy-color-base-8)
39
+ );
35
40
  --dixy-organic-density: 50;
36
41
  --dixy-organic-cornerDensity: 75;
37
42
  --dixy-organic-canopyDepth: 45;
@@ -108,7 +113,6 @@
108
113
  --dixy-organic-b: #ffb627;
109
114
  --dixy-organic-c: #ffe08a;
110
115
  --dixy-organic-d: #26c6b0;
111
- --dixy-skin-selected: var(--dixy-skin-finish);
112
116
  --dixy-color-text-primary: color-mix(
113
117
  in srgb,
114
118
  var(--dixy-color-base-12) 75%,
@@ -126,6 +130,7 @@
126
130
  #2a0b2e
127
131
  );
128
132
  }
133
+
129
134
  .dixy-theme[data-dixy-skin="dixy/diwali-lights"][data-relief="2"] {
130
135
  --dixy-skin-shadow:
131
136
  var(--dixy-skin-depth-shadow, var(--dixy-skin-authored-shadow)),
@@ -261,6 +266,30 @@
261
266
  ):not([data-variant="soft"]) {
262
267
  background-color: var(--dixy-skin-surface);
263
268
  }
269
+ :is(
270
+ .dixy-dialog-popup,
271
+ .dixy-alert-dialog-popup,
272
+ .dixy-drawer-popup,
273
+ .dixy-popover-popup,
274
+ .dixy-preview-card-popup,
275
+ .dixy-tooltip-popup,
276
+ .dixy-select-popup,
277
+ .dixy-combobox-popup,
278
+ .dixy-autocomplete-popup,
279
+ .dixy-menu-popup,
280
+ .dixy-context-menu-popup,
281
+ .dixy-navigation-menu-popup
282
+ )[data-dixy-skin="dixy/diwali-lights"]:not(
283
+ [data-dixy-material-override]
284
+ ):not(:where([data-dixy-material-override]) *):not(
285
+ [data-variant="solid"]
286
+ ):not([data-variant="soft"]) {
287
+ background-color: color-mix(
288
+ in srgb,
289
+ var(--dixy-color-background-surface-raised) 94%,
290
+ var(--dixy-skin-surface)
291
+ );
292
+ }
264
293
  :is(
265
294
  .dixy-input,
266
295
  .dixy-textarea,
@@ -293,7 +322,7 @@
293
322
  [data-dixy-material-override]
294
323
  ):not(:where([data-dixy-material-override]) *) {
295
324
  border-width: var(--dixy-input-border-width);
296
- border-color: var(--dixy-skin-edge);
325
+ border-color: var(--dixy-skin-field-edge);
297
326
  background-image: var(--dixy-skin-paint);
298
327
  background-color: var(--dixy-color-background-canvas);
299
328
  background-size:
@@ -303,6 +332,45 @@
303
332
  100% 100%;
304
333
  box-shadow: var(--dixy-skin-inset);
305
334
  }
335
+ /* materials.css styles [data-dixy-visual] surfaces at 0,5,0. Match the
336
+ skin's paint to that so its image and grain size always land together;
337
+ otherwise the material image is tiled at the grain size (stripes). */
338
+ :is(
339
+ .dixy-card,
340
+ .dixy-box,
341
+ .dixy-dialog-popup,
342
+ .dixy-alert-dialog-popup,
343
+ .dixy-drawer-popup,
344
+ .dixy-popover-popup,
345
+ .dixy-preview-card-popup,
346
+ .dixy-tooltip-popup,
347
+ .dixy-select-popup,
348
+ .dixy-combobox-popup,
349
+ .dixy-autocomplete-popup,
350
+ .dixy-menu-popup,
351
+ .dixy-context-menu-popup,
352
+ .dixy-navigation-menu-popup,
353
+ .dixy-toast-root,
354
+ .dixy-alert,
355
+ .dixy-list-box,
356
+ .dixy-calendar,
357
+ .dixy-range-calendar,
358
+ .dixy-input,
359
+ .dixy-textarea,
360
+ .dixy-native-select,
361
+ .dixy-select-trigger,
362
+ .dixy-input-group,
363
+ .dixy-combobox-input-group,
364
+ .dixy-autocomplete-input-group,
365
+ .dixy-number-field-group,
366
+ .dixy-otp-field-input
367
+ )[data-dixy-skin="dixy/diwali-lights"]:not(
368
+ [data-dixy-material-override]
369
+ ):not(
370
+ :where([data-dixy-material-override]) *
371
+ )[data-dixy-visual][data-material]:not([data-disabled]) {
372
+ background-image: var(--dixy-skin-paint);
373
+ }
306
374
  :is(.dixy-button)[data-dixy-skin="dixy/diwali-lights"]:not(
307
375
  [data-dixy-material-override]
308
376
  ):not(:where([data-dixy-material-override]) *):is(
@@ -333,14 +401,19 @@
333
401
  border: 1px solid var(--dixy-skin-edge);
334
402
  box-shadow: var(--dixy-skin-inset);
335
403
  }
404
+ /* Selected tabs and toggles are one flat colour, lifted by edge and relief only. A gradient behind the label (thumb art, sheen, material image) splits it across two colours. :not([data-variant="line"]) also outranks materials.css (0,3,0). */
336
405
  :is(.dixy-tabs-indicator)[data-dixy-skin="dixy/diwali-lights"]:not(
337
406
  [data-dixy-material-override]
338
407
  ):not(:where([data-dixy-material-override]) *) {
339
- background-image: var(--dixy-skin-finish);
340
408
  box-shadow: var(--dixy-skin-control-relief);
341
409
  border: 1px solid var(--dixy-skin-edge);
342
410
  }
343
- /* Toggle groups read like tabs: a sunken track, the selected toggle a raised thumb (slider-knob paint in light, the raised finish in dark so its label stays readable). */
411
+ :is(.dixy-tabs-indicator)[data-dixy-skin="dixy/diwali-lights"]:not(
412
+ [data-dixy-material-override]
413
+ ):not(:where([data-dixy-material-override]) *):not([data-variant="line"]) {
414
+ background-image: none;
415
+ }
416
+ /* Toggle groups read like tabs: a sunken track, the selected toggle a raised, flat thumb. */
344
417
  .dixy-theme[data-dixy-skin="dixy/diwali-lights"]
345
418
  .dixy-toggle-group:is([data-attached], [data-segmented]):not(
346
419
  [data-dixy-material-override]
@@ -355,7 +428,7 @@
355
428
  [data-variant="solid"]
356
429
  )[data-pressed]:not([data-disabled]) {
357
430
  background-color: var(--dixy-color-background-surface-raised);
358
- background-image: var(--dixy-skin-selected, var(--dixy-skin-thumb));
431
+ background-image: none;
359
432
  box-shadow: var(--dixy-skin-control-relief);
360
433
  border-color: var(--dixy-skin-edge);
361
434
  color: var(--dixy-color-text-primary);
@@ -1,4 +1,112 @@
1
- /** Portable recipes for all eleven installed themes. */
1
+ /** Each starter as authored, before any saved fix from the theme audit. */
2
+ export declare const starterDocuments: {
3
+ readonly schemaVersion: 6;
4
+ readonly id: string;
5
+ readonly name: string;
6
+ readonly revision: number;
7
+ readonly foundations: {
8
+ readonly accentColor: "ruby" | "blue" | "brown" | "crimson" | "cyan" | "fuchsia" | "gold" | "gray" | "green" | "indigo" | "lime" | "olive" | "orange" | "pink" | "plum" | "purple" | "red" | "teal" | "tomato" | "violet" | "yellow" | "neutral" | "slate" | "zinc" | "stone" | "taupe" | "mauve" | "mist" | "sage" | "sand" | "rose" | "iris" | "sky" | "emerald" | "jade" | "grass" | "mint" | "amber" | "bronze";
9
+ readonly customAccent: boolean;
10
+ readonly lightness: number;
11
+ readonly chroma: number;
12
+ readonly hue: number;
13
+ readonly neutralColor: "gray" | "olive" | "neutral" | "slate" | "zinc" | "stone" | "taupe" | "mauve" | "mist" | "sage" | "sand";
14
+ readonly radius: "none" | "full" | "lg" | "md" | "sm";
15
+ readonly density: "default" | "compact" | "comfortable";
16
+ readonly material: "glossy" | "soft" | "matte" | "metal" | "paper";
17
+ readonly componentFinish: "inherit" | "glossy" | "soft" | "matte" | "metal" | "paper";
18
+ readonly shape: "square" | "rounded" | "pill";
19
+ readonly appearance: "dark" | "light";
20
+ readonly bodyFont: "serif" | "terminal" | "deco" | "neon" | "mono" | "system" | "rounded" | "lcd" | "pixel" | "inter" | "grotesk" | "fraunces" | "techno" | "plex" | "archivo" | "mincho" | "gothic" | "playfair" | "caveat" | "bricolage" | "jetbrains" | "manrope" | "figtree" | "cormorant" | "plexSans" | "atkinson";
21
+ readonly headingFont: "serif" | "terminal" | "deco" | "neon" | "mono" | "system" | "rounded" | "lcd" | "pixel" | "inter" | "grotesk" | "fraunces" | "techno" | "plex" | "archivo" | "mincho" | "gothic" | "playfair" | "caveat" | "bricolage" | "jetbrains" | "manrope" | "figtree" | "cormorant" | "plexSans" | "atkinson";
22
+ readonly border: 2 | 1;
23
+ readonly depth: "none" | "raised" | "floating";
24
+ readonly ornament: "balanced" | "expressive" | "quiet";
25
+ readonly relief: 0 | 2 | 1;
26
+ readonly effects: "static" | "reduced" | "backdrop";
27
+ };
28
+ readonly recipes: {
29
+ readonly material: {
30
+ readonly id: "botanical-paper" | "pixel-enamel" | "gunmetal" | "ceramic" | "prismatic-glass" | "atelier-paper" | "sea-glass" | "candy-clay" | "lacquer-brass" | "titanium" | "frosted-porcelain" | "scrapbook-paper" | "cyanotype" | "riso-paper" | "wet-asphalt" | "washi" | "station-enamel" | "phosphor-glass" | "ansi-term" | "poster-stock" | "glazed-tile" | "concrete" | "atomic-laminate" | "hologram" | "painted-steel" | "gold-foil" | "marigold-silk" | "red-paper" | "fiesta-paper" | "powder-wash" | "wool" | "liquid-glass" | "sunset-neon" | "ledger-ruled" | "layer-grid" | "mono-ink" | "signal-contrast" | "menu-window" | "arcade-bezel";
31
+ readonly version: 1;
32
+ readonly parameters: {
33
+ readonly surfaceMix: number;
34
+ readonly darkSurfaceMix: number;
35
+ readonly sheen: number;
36
+ readonly cushion: number;
37
+ readonly inkTint: number;
38
+ readonly textureScale: number;
39
+ readonly lightAngle: number;
40
+ readonly backdropBlur: number;
41
+ readonly backdropSaturate: number;
42
+ };
43
+ };
44
+ readonly frame: {
45
+ readonly id: "none" | "menu" | "marquee" | "coral" | "forest" | "cushion" | "deco" | "drafting" | "riso" | "neon" | "sumi" | "transit" | "crt" | "panes" | "swiss" | "azulejo" | "formwork" | "atomic" | "hud" | "hazard" | "orbit" | "rangoli" | "papercut" | "picado" | "gulal" | "knit" | "liquid" | "sunset" | "glass" | "pixel" | "halo" | "ceramic" | "rails" | "stitch" | "chamfer";
46
+ readonly version: 1;
47
+ readonly ornament: {
48
+ readonly style: "Woodland mix" | "Wild ivy" | "Fern grove" | "Willow canopy" | "Oak & moss" | "Spring growth" | "Ginkgo fans" | "Maple grove" | "Eucalyptus" | "Olive branch" | "Clover meadow" | "Wildflower hedge" | "Piped petals" | "Twisted rope" | "Candy pebbles" | "Ribbon folds" | "Tidal ribbons" | "Seafoam beads" | "Glass droplets" | "Quiet currents" | "Fine filigree" | "Art deco" | "Hammered edge" | "Quiet gilding" | "Dimensioned" | "Ruler ticks" | "Construction lines" | "Quiet draft" | "Misprint" | "Halftone" | "Taped corners" | "Clean stamp" | "Tube outline" | "Broken tubes" | "Sign shapes" | "Low hum" | "Bamboo" | "Plum blossom" | "Dry brush" | "Ensō" | "Line map" | "Station roundels" | "Platform edge" | "Quiet line" | "Box corners" | "Status line" | "Raster ticks" | "Quiet cursor" | "Pane titles" | "Key hints" | "Split panes" | "Bare panes" | "Crop marks" | "Red block" | "Grid ticks" | "Bare grid" | "Corner tiles" | "Border run" | "Floral rosette" | "Single tile" | "Tie holes" | "Stencil marks" | "Board seams" | "Bare concrete" | "Starbursts" | "Boomerangs" | "Orbit atoms" | "Lone star" | "Target brackets" | "Telemetry" | "Reticle" | "Clean brackets" | "Hazard stripes" | "Rivet seams" | "Cargo stencils" | "Clean plate" | "Orbit rings" | "Gold foil" | "Star field" | "Single orbit" | "Rangoli corners" | "Diya row" | "Marigold string" | "Single diya" | "Lanterns" | "Scallop edge" | "Cloud scrolls" | "Single lantern" | "Bunting" | "Marigold garland" | "Paper confetti" | "Short string" | "Powder clouds" | "Splashes" | "Speckle dust" | "Soft haze" | "Fair Isle band" | "Snowflakes" | "Cable stitch" | "Plain rib" | "Specular rim" | "Refraction" | "Light catch" | "Clear" | "Sun and grid" | "Sun only" | "Grid only" | "Bare coast" | "Cursor and stars" | "Cursor only" | "Stars only" | "Plain window" | "Bulbs and credits" | "Bulbs only" | "Credits only" | "Dark cabinet";
49
+ readonly canopy: "Scattered trails" | "Corner cascades" | "Overhead boughs" | "Long tendrils" | "Open crown";
50
+ readonly stem: "Twining vines" | "Woody branches" | "Tender shoots" | "Mossy roots";
51
+ readonly density: number;
52
+ readonly cornerDensity: number;
53
+ readonly canopyDepth: number;
54
+ readonly variation: number;
55
+ readonly scale: number;
56
+ readonly stemWeight: number;
57
+ readonly motion: number;
58
+ readonly seed: number;
59
+ };
60
+ readonly parameters: {
61
+ readonly width: number;
62
+ readonly paddingTop: number;
63
+ readonly paddingInline: number;
64
+ readonly paddingBottom: number;
65
+ readonly inset: number;
66
+ readonly cornerVariation: number;
67
+ readonly cornerScale: number;
68
+ };
69
+ };
70
+ };
71
+ readonly character: {
72
+ readonly controls: "standard" | "glass" | "chrome" | "pixel" | "botanical" | "instrument" | "hardware" | "stitched" | "pearl" | "clay" | "brass" | "halo";
73
+ readonly motion: {
74
+ readonly style: "standard" | "stepped" | "snappy" | "springy" | "weighted" | "drift";
75
+ readonly press: number;
76
+ readonly tempo: number;
77
+ };
78
+ readonly type: {
79
+ readonly headingCase: "none" | "small-caps" | "uppercase";
80
+ readonly headingTracking: number;
81
+ readonly headingWeight: 400 | 500 | 600 | 700 | 900 | 300 | 800;
82
+ readonly numerals: "proportional" | "tabular" | "oldstyle";
83
+ };
84
+ readonly states: "standard" | "led" | "marching" | "inlay" | "glow" | "stamp";
85
+ readonly details: {
86
+ readonly focus: "offset" | "dashed" | "double" | "halo" | "glow" | "ring";
87
+ readonly divider: "line" | "dashed" | "dotted" | "double" | "groove";
88
+ readonly selection: "accent" | "inverse" | "highlighter";
89
+ readonly scrollbar: "accent" | "native" | "thin";
90
+ readonly iconStroke: number;
91
+ };
92
+ readonly backdrop: {
93
+ readonly pattern: "none" | "grid" | "scanlines" | "sunburst" | "caustics" | "fibre" | "dots" | "topo" | "halftone";
94
+ readonly intensity: number;
95
+ readonly scale: number;
96
+ };
97
+ readonly chrome: {
98
+ readonly titlebar: "none" | "caption" | "tab" | "grip" | "gradient" | "glass" | "chrome";
99
+ readonly edge: "bevel" | "line" | "double" | "pill" | "stepped";
100
+ readonly well: "none" | "paper" | "glass" | "lcd" | "recessed" | "tinted" | "sunken";
101
+ readonly corners: "round" | "inherit" | "pixel" | "notched";
102
+ };
103
+ };
104
+ }[];
105
+ /**
106
+ * Installed themes: each starter with its saved fix, if any. Fixes are small
107
+ * patches written by the playground's "Save as theme fix" (dev server only),
108
+ * so a reviewer sees exactly which values changed.
109
+ */
2
110
  export declare const themeDocuments: {
3
111
  readonly schemaVersion: 6;
4
112
  readonly id: string;
@@ -17,8 +125,8 @@ export declare const themeDocuments: {
17
125
  readonly componentFinish: "inherit" | "glossy" | "soft" | "matte" | "metal" | "paper";
18
126
  readonly shape: "square" | "rounded" | "pill";
19
127
  readonly appearance: "dark" | "light";
20
- readonly bodyFont: "serif" | "terminal" | "deco" | "neon" | "mono" | "system" | "rounded" | "lcd" | "pixel" | "inter" | "grotesk" | "fraunces" | "techno" | "plex" | "archivo" | "mincho" | "gothic" | "playfair" | "caveat" | "bricolage" | "jetbrains" | "manrope" | "figtree" | "cormorant";
21
- readonly headingFont: "serif" | "terminal" | "deco" | "neon" | "mono" | "system" | "rounded" | "lcd" | "pixel" | "inter" | "grotesk" | "fraunces" | "techno" | "plex" | "archivo" | "mincho" | "gothic" | "playfair" | "caveat" | "bricolage" | "jetbrains" | "manrope" | "figtree" | "cormorant";
128
+ readonly bodyFont: "serif" | "terminal" | "deco" | "neon" | "mono" | "system" | "rounded" | "lcd" | "pixel" | "inter" | "grotesk" | "fraunces" | "techno" | "plex" | "archivo" | "mincho" | "gothic" | "playfair" | "caveat" | "bricolage" | "jetbrains" | "manrope" | "figtree" | "cormorant" | "plexSans" | "atkinson";
129
+ readonly headingFont: "serif" | "terminal" | "deco" | "neon" | "mono" | "system" | "rounded" | "lcd" | "pixel" | "inter" | "grotesk" | "fraunces" | "techno" | "plex" | "archivo" | "mincho" | "gothic" | "playfair" | "caveat" | "bricolage" | "jetbrains" | "manrope" | "figtree" | "cormorant" | "plexSans" | "atkinson";
22
130
  readonly border: 2 | 1;
23
131
  readonly depth: "none" | "raised" | "floating";
24
132
  readonly ornament: "balanced" | "expressive" | "quiet";
@@ -27,7 +135,7 @@ export declare const themeDocuments: {
27
135
  };
28
136
  readonly recipes: {
29
137
  readonly material: {
30
- readonly id: "botanical-paper" | "pixel-enamel" | "gunmetal" | "ceramic" | "prismatic-glass" | "atelier-paper" | "sea-glass" | "candy-clay" | "lacquer-brass" | "titanium" | "frosted-porcelain" | "scrapbook-paper" | "cyanotype" | "riso-paper" | "wet-asphalt" | "washi" | "station-enamel" | "phosphor-glass" | "ansi-term" | "poster-stock" | "glazed-tile" | "concrete" | "atomic-laminate" | "hologram" | "painted-steel" | "gold-foil" | "marigold-silk" | "red-paper" | "fiesta-paper" | "powder-wash" | "wool" | "liquid-glass";
138
+ readonly id: "botanical-paper" | "pixel-enamel" | "gunmetal" | "ceramic" | "prismatic-glass" | "atelier-paper" | "sea-glass" | "candy-clay" | "lacquer-brass" | "titanium" | "frosted-porcelain" | "scrapbook-paper" | "cyanotype" | "riso-paper" | "wet-asphalt" | "washi" | "station-enamel" | "phosphor-glass" | "ansi-term" | "poster-stock" | "glazed-tile" | "concrete" | "atomic-laminate" | "hologram" | "painted-steel" | "gold-foil" | "marigold-silk" | "red-paper" | "fiesta-paper" | "powder-wash" | "wool" | "liquid-glass" | "sunset-neon" | "ledger-ruled" | "layer-grid" | "mono-ink" | "signal-contrast" | "menu-window" | "arcade-bezel";
31
139
  readonly version: 1;
32
140
  readonly parameters: {
33
141
  readonly surfaceMix: number;
@@ -42,10 +150,10 @@ export declare const themeDocuments: {
42
150
  };
43
151
  };
44
152
  readonly frame: {
45
- readonly id: "none" | "coral" | "forest" | "cushion" | "deco" | "drafting" | "riso" | "neon" | "sumi" | "transit" | "crt" | "panes" | "swiss" | "azulejo" | "formwork" | "atomic" | "hud" | "hazard" | "orbit" | "rangoli" | "papercut" | "picado" | "gulal" | "knit" | "liquid" | "glass" | "pixel" | "halo" | "ceramic" | "rails" | "stitch" | "chamfer";
153
+ readonly id: "none" | "menu" | "marquee" | "coral" | "forest" | "cushion" | "deco" | "drafting" | "riso" | "neon" | "sumi" | "transit" | "crt" | "panes" | "swiss" | "azulejo" | "formwork" | "atomic" | "hud" | "hazard" | "orbit" | "rangoli" | "papercut" | "picado" | "gulal" | "knit" | "liquid" | "sunset" | "glass" | "pixel" | "halo" | "ceramic" | "rails" | "stitch" | "chamfer";
46
154
  readonly version: 1;
47
155
  readonly ornament: {
48
- readonly style: "Woodland mix" | "Wild ivy" | "Fern grove" | "Willow canopy" | "Oak & moss" | "Spring growth" | "Ginkgo fans" | "Maple grove" | "Eucalyptus" | "Olive branch" | "Clover meadow" | "Wildflower hedge" | "Piped petals" | "Twisted rope" | "Candy pebbles" | "Ribbon folds" | "Tidal ribbons" | "Seafoam beads" | "Glass droplets" | "Quiet currents" | "Fine filigree" | "Art deco" | "Hammered edge" | "Quiet gilding" | "Dimensioned" | "Ruler ticks" | "Construction lines" | "Quiet draft" | "Misprint" | "Halftone" | "Taped corners" | "Clean stamp" | "Tube outline" | "Broken tubes" | "Sign shapes" | "Low hum" | "Bamboo" | "Plum blossom" | "Dry brush" | "Ensō" | "Line map" | "Station roundels" | "Platform edge" | "Quiet line" | "Box corners" | "Status line" | "Raster ticks" | "Quiet cursor" | "Pane titles" | "Key hints" | "Split panes" | "Bare panes" | "Crop marks" | "Red block" | "Grid ticks" | "Bare grid" | "Corner tiles" | "Border run" | "Floral rosette" | "Single tile" | "Tie holes" | "Stencil marks" | "Board seams" | "Bare concrete" | "Starbursts" | "Boomerangs" | "Orbit atoms" | "Lone star" | "Target brackets" | "Telemetry" | "Reticle" | "Clean brackets" | "Hazard stripes" | "Rivet seams" | "Cargo stencils" | "Clean plate" | "Orbit rings" | "Gold foil" | "Star field" | "Single orbit" | "Rangoli corners" | "Diya row" | "Marigold string" | "Single diya" | "Lanterns" | "Scallop edge" | "Cloud scrolls" | "Single lantern" | "Bunting" | "Marigold garland" | "Paper confetti" | "Short string" | "Powder clouds" | "Splashes" | "Speckle dust" | "Soft haze" | "Fair Isle band" | "Snowflakes" | "Cable stitch" | "Plain rib" | "Specular rim" | "Refraction" | "Light catch" | "Clear";
156
+ readonly style: "Woodland mix" | "Wild ivy" | "Fern grove" | "Willow canopy" | "Oak & moss" | "Spring growth" | "Ginkgo fans" | "Maple grove" | "Eucalyptus" | "Olive branch" | "Clover meadow" | "Wildflower hedge" | "Piped petals" | "Twisted rope" | "Candy pebbles" | "Ribbon folds" | "Tidal ribbons" | "Seafoam beads" | "Glass droplets" | "Quiet currents" | "Fine filigree" | "Art deco" | "Hammered edge" | "Quiet gilding" | "Dimensioned" | "Ruler ticks" | "Construction lines" | "Quiet draft" | "Misprint" | "Halftone" | "Taped corners" | "Clean stamp" | "Tube outline" | "Broken tubes" | "Sign shapes" | "Low hum" | "Bamboo" | "Plum blossom" | "Dry brush" | "Ensō" | "Line map" | "Station roundels" | "Platform edge" | "Quiet line" | "Box corners" | "Status line" | "Raster ticks" | "Quiet cursor" | "Pane titles" | "Key hints" | "Split panes" | "Bare panes" | "Crop marks" | "Red block" | "Grid ticks" | "Bare grid" | "Corner tiles" | "Border run" | "Floral rosette" | "Single tile" | "Tie holes" | "Stencil marks" | "Board seams" | "Bare concrete" | "Starbursts" | "Boomerangs" | "Orbit atoms" | "Lone star" | "Target brackets" | "Telemetry" | "Reticle" | "Clean brackets" | "Hazard stripes" | "Rivet seams" | "Cargo stencils" | "Clean plate" | "Orbit rings" | "Gold foil" | "Star field" | "Single orbit" | "Rangoli corners" | "Diya row" | "Marigold string" | "Single diya" | "Lanterns" | "Scallop edge" | "Cloud scrolls" | "Single lantern" | "Bunting" | "Marigold garland" | "Paper confetti" | "Short string" | "Powder clouds" | "Splashes" | "Speckle dust" | "Soft haze" | "Fair Isle band" | "Snowflakes" | "Cable stitch" | "Plain rib" | "Specular rim" | "Refraction" | "Light catch" | "Clear" | "Sun and grid" | "Sun only" | "Grid only" | "Bare coast" | "Cursor and stars" | "Cursor only" | "Stars only" | "Plain window" | "Bulbs and credits" | "Bulbs only" | "Credits only" | "Dark cabinet";
49
157
  readonly canopy: "Scattered trails" | "Corner cascades" | "Overhead boughs" | "Long tendrils" | "Open crown";
50
158
  readonly stem: "Twining vines" | "Woody branches" | "Tender shoots" | "Mossy roots";
51
159
  readonly density: number;
@@ -83,7 +191,7 @@ export declare const themeDocuments: {
83
191
  };
84
192
  readonly states: "standard" | "led" | "marching" | "inlay" | "glow" | "stamp";
85
193
  readonly details: {
86
- readonly focus: "offset" | "dashed" | "double" | "glow" | "ring";
194
+ readonly focus: "offset" | "dashed" | "double" | "halo" | "glow" | "ring";
87
195
  readonly divider: "line" | "dashed" | "dotted" | "double" | "groove";
88
196
  readonly selection: "accent" | "inverse" | "highlighter";
89
197
  readonly scrollbar: "accent" | "native" | "thin";
package/dist/documents.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { parseThemeDocument } from "./theme-schema.js";
2
+ import { applyThemeFix } from "./theme-fix.js";
3
+ import { themeFixes } from "./theme-fixes.js";
2
4
  import { defaultChrome } from "./chrome.js";
3
5
  import { launchCharacters, launchChrome, launchDocuments, } from "./starters-launch.js";
4
6
  /**
@@ -437,8 +439,8 @@ const starterCharacters = {
437
439
  backdrop: { pattern: "dots", intensity: 0.22, scale: 0.8 },
438
440
  },
439
441
  };
440
- /** Portable recipes for all eleven installed themes. */
441
- export const themeDocuments = [
442
+ /** Each starter as authored, before any saved fix from the theme audit. */
443
+ export const starterDocuments = [
442
444
  {
443
445
  schemaVersion: 2,
444
446
  id: "dixy/living-forest",
@@ -1409,3 +1411,9 @@ export const themeDocuments = [
1409
1411
  },
1410
1412
  });
1411
1413
  });
1414
+ /**
1415
+ * Installed themes: each starter with its saved fix, if any. Fixes are small
1416
+ * patches written by the playground's "Save as theme fix" (dev server only),
1417
+ * so a reviewer sees exactly which values changed.
1418
+ */
1419
+ export const themeDocuments = starterDocuments.map((document) => parseThemeDocument(applyThemeFix(document, themeFixes[document.id])));
@@ -88,6 +88,14 @@ export declare const themeFonts: {
88
88
  readonly label: "Manrope";
89
89
  readonly value: "\"Manrope Variable\", \"Manrope\", ui-sans-serif, system-ui, sans-serif";
90
90
  };
91
+ readonly atkinson: {
92
+ readonly label: "Atkinson Hyperlegible";
93
+ readonly value: "\"Atkinson Hyperlegible\", ui-sans-serif, system-ui, sans-serif";
94
+ };
95
+ readonly plexSans: {
96
+ readonly label: "IBM Plex Sans";
97
+ readonly value: "\"IBM Plex Sans Variable\", \"IBM Plex Sans\", ui-sans-serif, system-ui, sans-serif";
98
+ };
91
99
  readonly figtree: {
92
100
  readonly label: "Figtree";
93
101
  readonly value: "\"Figtree Variable\", \"Figtree\", ui-sans-serif, system-ui, sans-serif";
@@ -80,6 +80,14 @@ export const themeFonts = {
80
80
  label: "Manrope",
81
81
  value: '"Manrope Variable", "Manrope", ui-sans-serif, system-ui, sans-serif',
82
82
  },
83
+ atkinson: {
84
+ label: "Atkinson Hyperlegible",
85
+ value: '"Atkinson Hyperlegible", ui-sans-serif, system-ui, sans-serif',
86
+ },
87
+ plexSans: {
88
+ label: "IBM Plex Sans",
89
+ value: '"IBM Plex Sans Variable", "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif',
90
+ },
83
91
  figtree: {
84
92
  label: "Figtree",
85
93
  value: '"Figtree Variable", "Figtree", ui-sans-serif, system-ui, sans-serif',
@@ -111,6 +119,8 @@ export const themeFontPackages = {
111
119
  jetbrains: "@fontsource/jetbrains-mono",
112
120
  manrope: "@fontsource-variable/manrope",
113
121
  figtree: "@fontsource-variable/figtree",
122
+ plexSans: "@fontsource-variable/ibm-plex-sans",
123
+ atkinson: "@fontsource/atkinson-hyperlegible",
114
124
  cormorant: "@fontsource-variable/cormorant-garamond",
115
125
  };
116
126
  /** Shared by the compiled consumer settings and playground exports; no React or router import. */
@@ -31,6 +31,9 @@ export declare const framePrefixes: {
31
31
  readonly gulal: "holi";
32
32
  readonly knit: "yule";
33
33
  readonly liquid: "glass";
34
+ readonly sunset: "sunset";
35
+ readonly menu: "savepoint";
36
+ readonly marquee: "arcade";
34
37
  };
35
38
  /** Frame code owns trim/geometry only. It never paints an input or action surface. */
36
39
  export declare function frameStyles(m: ResolvedThemeRecipe, theme: string): string;
@@ -31,6 +31,9 @@ export const framePrefixes = {
31
31
  gulal: "holi",
32
32
  knit: "yule",
33
33
  liquid: "glass",
34
+ sunset: "sunset",
35
+ menu: "savepoint",
36
+ marquee: "arcade",
34
37
  };
35
38
  /** Frame code owns trim/geometry only. It never paints an input or action surface. */
36
39
  export function frameStyles(m, theme) {
@@ -125,6 +128,9 @@ export function frameStyles(m, theme) {
125
128
  details.gulal = `@keyframes dixy-holi-detail { from { opacity:.5; } to { opacity:1; } }`;
126
129
  details.knit = `@keyframes dixy-yule-detail { from { opacity:.5; } to { opacity:1; } }`;
127
130
  details.liquid = `@keyframes dixy-glass-detail { from { opacity:.5; } to { opacity:1; } }`;
131
+ details.sunset = `@keyframes dixy-sunset-detail { from { opacity:.5; } to { opacity:1; } }`;
132
+ details.menu = `@keyframes dixy-savepoint-detail { from { opacity:.5; } to { opacity:1; } }`;
133
+ details.marquee = `@keyframes dixy-arcade-detail { from { opacity:.5; } to { opacity:1; } }`;
128
134
  // Scope every legacy ornament selector as well, so two custom frames can coexist.
129
135
  const scoped = details[m.frame].replace(/(^|[}\n])([ \t]*)(\.dixy-[^{]+)\{/g, (_match, before, space, selector) => before +
130
136
  space +
@@ -31,6 +31,11 @@
31
31
  --dixy-font-title-sm-family:
32
32
  "Archivo Black", "Arial Black", ui-sans-serif, sans-serif;
33
33
  --dixy-skin-edge: #9b9a94;
34
+ --dixy-skin-field-edge: color-mix(
35
+ in oklab,
36
+ var(--dixy-color-base-9) 50%,
37
+ var(--dixy-color-base-8)
38
+ );
34
39
  --dixy-organic-density: 50;
35
40
  --dixy-organic-cornerDensity: 70;
36
41
  --dixy-organic-canopyDepth: 40;
@@ -128,7 +133,6 @@
128
133
  --dixy-organic-b: #0e0f10;
129
134
  --dixy-organic-c: #e5533d;
130
135
  --dixy-organic-d: #a5a59c;
131
- --dixy-skin-selected: var(--dixy-skin-finish);
132
136
  --dixy-color-text-primary: color-mix(
133
137
  in srgb,
134
138
  var(--dixy-color-base-12) 85%,
@@ -146,6 +150,7 @@
146
150
  #2b2e30
147
151
  );
148
152
  }
153
+
149
154
  .dixy-theme[data-dixy-skin="dixy/freighter"][data-relief="2"] {
150
155
  --dixy-skin-shadow:
151
156
  var(--dixy-skin-depth-shadow, var(--dixy-skin-authored-shadow)),
@@ -279,6 +284,28 @@
279
284
  ):not([data-variant="solid"]):not([data-variant="soft"]) {
280
285
  background-color: var(--dixy-skin-surface);
281
286
  }
287
+ :is(
288
+ .dixy-dialog-popup,
289
+ .dixy-alert-dialog-popup,
290
+ .dixy-drawer-popup,
291
+ .dixy-popover-popup,
292
+ .dixy-preview-card-popup,
293
+ .dixy-tooltip-popup,
294
+ .dixy-select-popup,
295
+ .dixy-combobox-popup,
296
+ .dixy-autocomplete-popup,
297
+ .dixy-menu-popup,
298
+ .dixy-context-menu-popup,
299
+ .dixy-navigation-menu-popup
300
+ )[data-dixy-skin="dixy/freighter"]:not([data-dixy-material-override]):not(
301
+ :where([data-dixy-material-override]) *
302
+ ):not([data-variant="solid"]):not([data-variant="soft"]) {
303
+ background-color: color-mix(
304
+ in srgb,
305
+ var(--dixy-color-background-surface-raised) 94%,
306
+ var(--dixy-skin-surface)
307
+ );
308
+ }
282
309
  :is(
283
310
  .dixy-input,
284
311
  .dixy-textarea,
@@ -311,7 +338,7 @@
311
338
  :where([data-dixy-material-override]) *
312
339
  ) {
313
340
  border-width: var(--dixy-input-border-width);
314
- border-color: var(--dixy-skin-edge);
341
+ border-color: var(--dixy-skin-field-edge);
315
342
  background-image: var(--dixy-skin-paint);
316
343
  background-color: var(--dixy-color-background-canvas);
317
344
  background-size:
@@ -321,6 +348,43 @@
321
348
  100% 100%;
322
349
  box-shadow: var(--dixy-skin-inset);
323
350
  }
351
+ /* materials.css styles [data-dixy-visual] surfaces at 0,5,0. Match the
352
+ skin's paint to that so its image and grain size always land together;
353
+ otherwise the material image is tiled at the grain size (stripes). */
354
+ :is(
355
+ .dixy-card,
356
+ .dixy-box,
357
+ .dixy-dialog-popup,
358
+ .dixy-alert-dialog-popup,
359
+ .dixy-drawer-popup,
360
+ .dixy-popover-popup,
361
+ .dixy-preview-card-popup,
362
+ .dixy-tooltip-popup,
363
+ .dixy-select-popup,
364
+ .dixy-combobox-popup,
365
+ .dixy-autocomplete-popup,
366
+ .dixy-menu-popup,
367
+ .dixy-context-menu-popup,
368
+ .dixy-navigation-menu-popup,
369
+ .dixy-toast-root,
370
+ .dixy-alert,
371
+ .dixy-list-box,
372
+ .dixy-calendar,
373
+ .dixy-range-calendar,
374
+ .dixy-input,
375
+ .dixy-textarea,
376
+ .dixy-native-select,
377
+ .dixy-select-trigger,
378
+ .dixy-input-group,
379
+ .dixy-combobox-input-group,
380
+ .dixy-autocomplete-input-group,
381
+ .dixy-number-field-group,
382
+ .dixy-otp-field-input
383
+ )[data-dixy-skin="dixy/freighter"]:not([data-dixy-material-override]):not(
384
+ :where([data-dixy-material-override]) *
385
+ )[data-dixy-visual][data-material]:not([data-disabled]) {
386
+ background-image: var(--dixy-skin-paint);
387
+ }
324
388
  :is(.dixy-button)[data-dixy-skin="dixy/freighter"]:not(
325
389
  [data-dixy-material-override]
326
390
  ):not(:where([data-dixy-material-override]) *):is(
@@ -351,14 +415,19 @@
351
415
  border: 1px solid var(--dixy-skin-edge);
352
416
  box-shadow: var(--dixy-skin-inset);
353
417
  }
418
+ /* Selected tabs and toggles are one flat colour, lifted by edge and relief only. A gradient behind the label (thumb art, sheen, material image) splits it across two colours. :not([data-variant="line"]) also outranks materials.css (0,3,0). */
354
419
  :is(.dixy-tabs-indicator)[data-dixy-skin="dixy/freighter"]:not(
355
420
  [data-dixy-material-override]
356
421
  ):not(:where([data-dixy-material-override]) *) {
357
- background-image: var(--dixy-skin-finish);
358
422
  box-shadow: var(--dixy-skin-control-relief);
359
423
  border: 1px solid var(--dixy-skin-edge);
360
424
  }
361
- /* Toggle groups read like tabs: a sunken track, the selected toggle a raised thumb (slider-knob paint in light, the raised finish in dark so its label stays readable). */
425
+ :is(.dixy-tabs-indicator)[data-dixy-skin="dixy/freighter"]:not(
426
+ [data-dixy-material-override]
427
+ ):not(:where([data-dixy-material-override]) *):not([data-variant="line"]) {
428
+ background-image: none;
429
+ }
430
+ /* Toggle groups read like tabs: a sunken track, the selected toggle a raised, flat thumb. */
362
431
  .dixy-theme[data-dixy-skin="dixy/freighter"]
363
432
  .dixy-toggle-group:is([data-attached], [data-segmented]):not(
364
433
  [data-dixy-material-override]
@@ -373,7 +442,7 @@
373
442
  [data-variant="solid"]
374
443
  )[data-pressed]:not([data-disabled]) {
375
444
  background-color: var(--dixy-color-background-surface-raised);
376
- background-image: var(--dixy-skin-selected, var(--dixy-skin-thumb));
445
+ background-image: none;
377
446
  box-shadow: var(--dixy-skin-control-relief);
378
447
  border-color: var(--dixy-skin-edge);
379
448
  color: var(--dixy-color-text-primary);
@@ -834,16 +903,72 @@
834
903
  :is(.dixy-card, .dixy-dialog-popup)[data-dixy-skin="dixy/freighter"] {
835
904
  border-radius: 0;
836
905
  --dixy-chrome-bar-radius: 0px;
837
- clip-path: polygon(
838
- 10px 0,
839
- calc(100% - 10px) 0,
840
- 100% 10px,
841
- 100% calc(100% - 10px),
842
- calc(100% - 10px) 100%,
843
- 10px 100%,
844
- 0 calc(100% - 10px),
845
- 0 10px
846
- );
906
+ }
907
+ @supports (corner-shape: bevel) {
908
+ .dixy-theme[data-dixy-skin="dixy/freighter"]
909
+ :is(.dixy-card, .dixy-dialog-popup)[data-dixy-skin="dixy/freighter"] {
910
+ border-radius: 10px;
911
+ corner-shape: bevel;
912
+ }
913
+ }
914
+ @supports not (corner-shape: bevel) {
915
+ .dixy-theme[data-dixy-skin="dixy/freighter"]
916
+ :is(.dixy-card, .dixy-dialog-popup)[data-dixy-skin="dixy/freighter"] {
917
+ clip-path: polygon(
918
+ 10px 0,
919
+ calc(100% - 10px) 0,
920
+ 100% 10px,
921
+ 100% calc(100% - 10px),
922
+ calc(100% - 10px) 100%,
923
+ 10px 100%,
924
+ 0 calc(100% - 10px),
925
+ 0 10px
926
+ );
927
+ }
928
+ .dixy-theme[data-dixy-skin="dixy/freighter"]
929
+ :is(
930
+ .dixy-card,
931
+ .dixy-dialog-popup
932
+ )[data-dixy-skin="dixy/freighter"]::after {
933
+ content: "";
934
+ position: absolute;
935
+ inset: calc(var(--dixy-skin-frame-width, 1px) * -1);
936
+ pointer-events: none;
937
+ z-index: 1;
938
+ background:
939
+ linear-gradient(
940
+ to bottom right,
941
+ transparent 50%,
942
+ var(--dixy-skin-edge) 50%
943
+ calc(50% + var(--dixy-skin-frame-width, 1px)),
944
+ transparent calc(50% + var(--dixy-skin-frame-width, 1px))
945
+ )
946
+ top left/10px 10px no-repeat,
947
+ linear-gradient(
948
+ to bottom left,
949
+ transparent 50%,
950
+ var(--dixy-skin-edge) 50%
951
+ calc(50% + var(--dixy-skin-frame-width, 1px)),
952
+ transparent calc(50% + var(--dixy-skin-frame-width, 1px))
953
+ )
954
+ top right/10px 10px no-repeat,
955
+ linear-gradient(
956
+ to top right,
957
+ transparent 50%,
958
+ var(--dixy-skin-edge) 50%
959
+ calc(50% + var(--dixy-skin-frame-width, 1px)),
960
+ transparent calc(50% + var(--dixy-skin-frame-width, 1px))
961
+ )
962
+ bottom left/10px 10px no-repeat,
963
+ linear-gradient(
964
+ to top left,
965
+ transparent 50%,
966
+ var(--dixy-skin-edge) 50%
967
+ calc(50% + var(--dixy-skin-frame-width, 1px)),
968
+ transparent calc(50% + var(--dixy-skin-frame-width, 1px))
969
+ )
970
+ bottom right/10px 10px no-repeat;
971
+ }
847
972
  }
848
973
  .dixy-theme[data-dixy-skin="dixy/freighter"]
849
974
  :is(.dixy-card)[data-dixy-skin="dixy/freighter"]