@motion-proto/live-tokens 0.84.0 → 0.85.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 (67) hide show
  1. package/.claude/skills/live-tokens-create-component/references/token-naming.md +0 -1
  2. package/CHANGELOG.md +41 -0
  3. package/dist-plugin/{chunk-V2OVSC5Z.js → chunk-GWMEYBZ2.js} +22 -1
  4. package/dist-plugin/{chunk-FD4FVDOC.js → chunk-ONYAIXCZ.js} +74 -1
  5. package/dist-plugin/{chunk-M6BWSS6C.js → chunk-W5VQV32K.js} +1 -1
  6. package/dist-plugin/index.cjs +101 -7
  7. package/dist-plugin/index.js +3 -3
  8. package/dist-plugin/migrateData/index.cjs +78 -5
  9. package/dist-plugin/migrateData/index.js +2 -2
  10. package/dist-plugin/setColors/index.cjs +74 -1
  11. package/dist-plugin/setColors/index.js +1 -1
  12. package/dist-plugin/setGeometry/index.cjs +74 -4
  13. package/dist-plugin/setGeometry/index.d.cts +1 -1
  14. package/dist-plugin/setGeometry/index.d.ts +1 -1
  15. package/dist-plugin/setGeometry/index.js +1 -4
  16. package/dist-plugin/tokensCssMigrations/index.cjs +22 -1
  17. package/dist-plugin/tokensCssMigrations/index.js +1 -1
  18. package/package.json +1 -1
  19. package/src/editor/component-editor/DialogEditor.svelte +1 -2
  20. package/src/editor/component-editor/ImageLightboxEditor.svelte +1 -2
  21. package/src/editor/component-editor/scaffolding/TokenLayout.svelte +1 -4
  22. package/src/editor/core/components/aliasKinds.ts +0 -4
  23. package/src/editor/core/sketch/sketchLayer.ts +1 -1
  24. package/src/editor/core/store/editorPersistence.ts +46 -23
  25. package/src/editor/core/store/editorStore.ts +1 -5
  26. package/src/editor/core/store/editorTypes.ts +11 -7
  27. package/src/editor/core/themes/migrations/2026-09-21-scrim-surface.ts +56 -0
  28. package/src/editor/core/themes/migrations/2026-09-21-wash-color-and-opacity.ts +51 -0
  29. package/src/editor/core/themes/migrations/index.ts +4 -0
  30. package/src/editor/core/themes/slices/washes.ts +59 -77
  31. package/src/editor/skill-atlas/skillSources.generated.ts +1 -1
  32. package/src/editor/ui/UIPaletteSelector.svelte +5 -1
  33. package/src/editor/ui/UIVariantSelector.svelte +1 -1
  34. package/src/editor/ui/sections/WashesSection.svelte +100 -99
  35. package/src/editor/ui/variantScales.ts +0 -11
  36. package/src/live-tokens/data/colors-and-type/autumn.json +9 -7
  37. package/src/live-tokens/data/colors-and-type/default.json +9 -7
  38. package/src/live-tokens/data/colors-and-type/halloween.json +9 -7
  39. package/src/live-tokens/data/colors-and-type/midnight-study.json +9 -7
  40. package/src/live-tokens/data/colors-and-type/ocean.json +9 -7
  41. package/src/live-tokens/data/colors-and-type/royal-velvet.json +9 -7
  42. package/src/live-tokens/data/colors-and-type/sketchy.json +9 -7
  43. package/src/live-tokens/data/colors-and-type/spring-meadow.json +9 -7
  44. package/src/live-tokens/data/colors-and-type/sunset.json +9 -7
  45. package/src/live-tokens/data/themes/autumn.json +12 -12
  46. package/src/live-tokens/data/themes/halloween.json +12 -12
  47. package/src/live-tokens/data/themes/midnight-study.json +12 -12
  48. package/src/live-tokens/data/themes/ocean.json +12 -12
  49. package/src/live-tokens/data/themes/royal-velvet.json +12 -12
  50. package/src/live-tokens/data/themes/sketchy.json +12 -12
  51. package/src/live-tokens/data/themes/spring-meadow.json +12 -12
  52. package/src/live-tokens/data/themes/sunset.json +12 -12
  53. package/src/live-tokens/data/tokens.generated.css +8 -6
  54. package/src/system/components/Dialog.svelte +2 -7
  55. package/src/system/components/ImageLightbox.svelte +7 -18
  56. package/src/system/styles/tokens.css +13 -8
  57. package/src/testing-js/{chunk-WQJ6QB6Y.js → chunk-RDHCBQ6I.js} +4 -8
  58. package/src/testing-js/chunk-RDHCBQ6I.js.map +1 -0
  59. package/src/testing-js/{chunk-XXABJNUU.js → chunk-XV5CYADO.js} +2 -2
  60. package/src/testing-js/component-behavior.contract.js +1 -1
  61. package/src/testing-js/component-editor.contract.js +1 -1
  62. package/src/testing-js/component-render.contract.js +1 -1
  63. package/src/testing-js/index.js +2 -2
  64. package/src/testing-js/page-compliance.contract.js +1 -1
  65. package/src/testing-js/vitest.js +2 -2
  66. package/src/testing-js/chunk-WQJ6QB6Y.js.map +0 -1
  67. /package/src/testing-js/{chunk-XXABJNUU.js.map → chunk-XV5CYADO.js.map} +0 -0
@@ -2214,12 +2214,14 @@
2214
2214
  "--columns-max-width": "1440px",
2215
2215
  "--columns-gutter": "32px",
2216
2216
  "--columns-margin": "0px",
2217
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2218
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2219
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2220
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2221
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2222
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2217
+ "--scrim-color": "var(--surface-neutral-lowest)",
2218
+ "--scrim-opacity-low": "0.7",
2219
+ "--scrim-opacity": "0.8",
2220
+ "--scrim-opacity-high": "0.9",
2221
+ "--tint-color": "var(--text-primary)",
2222
+ "--tint-opacity-low": "0.05",
2223
+ "--tint-opacity": "0.1",
2224
+ "--tint-opacity-high": "0.15",
2223
2225
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.2)",
2224
2226
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.2)",
2225
2227
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.2)",
@@ -2396,7 +2398,7 @@
2396
2398
  "family": null
2397
2399
  }
2398
2400
  ],
2399
- "schemaVersion": 8,
2401
+ "schemaVersion": 9,
2400
2402
  "gradients": [
2401
2403
  {
2402
2404
  "variable": "--gradient-1",
@@ -2982,8 +2984,7 @@
2982
2984
  "createdAt": "2026-05-10T20:05:24.719Z",
2983
2985
  "updatedAt": "2026-08-19T22:39:32.785Z",
2984
2986
  "aliases": {
2985
- "--dialog-scrim-color": "--scrim-color",
2986
- "--dialog-scrim-opacity": "--scrim-opacity-high",
2987
+ "--dialog-scrim-surface": "--scrim-high",
2987
2988
  "--dialog-surface": "--surface-neutral-lowest",
2988
2989
  "--dialog-border": "--border-neutral-strong",
2989
2990
  "--dialog-border-width": "--border-width-2",
@@ -3127,8 +3128,7 @@
3127
3128
  "--imagelightbox-tile-border": "--color-transparent",
3128
3129
  "--imagelightbox-tile-border-width": "--border-width-0",
3129
3130
  "--imagelightbox-tile-shadow": "--shadow-md",
3130
- "--imagelightbox-scrim-color": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3131
- "--imagelightbox-scrim-opacity": "1",
3131
+ "--imagelightbox-scrim-surface": "--scrim-high",
3132
3132
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3133
3133
  "--imagelightbox-chrome-border": "--border-brand",
3134
3134
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -3982,5 +3982,5 @@
3982
3982
  }
3983
3983
  }
3984
3984
  },
3985
- "componentSchemaVersion": 37
3985
+ "componentSchemaVersion": 38
3986
3986
  }
@@ -2275,12 +2275,14 @@
2275
2275
  "--columns-max-width": "1440px",
2276
2276
  "--columns-gutter": "32px",
2277
2277
  "--columns-margin": "0px",
2278
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2279
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2280
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2281
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2282
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2283
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2278
+ "--scrim-color": "var(--surface-neutral-lowest)",
2279
+ "--scrim-opacity-low": "0.7",
2280
+ "--scrim-opacity": "0.8",
2281
+ "--scrim-opacity-high": "0.9",
2282
+ "--tint-color": "var(--text-primary)",
2283
+ "--tint-opacity-low": "0.05",
2284
+ "--tint-opacity": "0.1",
2285
+ "--tint-opacity-high": "0.15",
2284
2286
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.9)",
2285
2287
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2286
2288
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
@@ -2448,7 +2450,7 @@
2448
2450
  "family": null
2449
2451
  }
2450
2452
  ],
2451
- "schemaVersion": 8,
2453
+ "schemaVersion": 9,
2452
2454
  "gradients": [
2453
2455
  {
2454
2456
  "variable": "--gradient-1",
@@ -3034,8 +3036,7 @@
3034
3036
  "createdAt": "2026-05-10T20:05:24.719Z",
3035
3037
  "updatedAt": "2026-08-19T22:39:32.785Z",
3036
3038
  "aliases": {
3037
- "--dialog-scrim-color": "--scrim-color",
3038
- "--dialog-scrim-opacity": "--scrim-opacity-high",
3039
+ "--dialog-scrim-surface": "--scrim-high",
3039
3040
  "--dialog-surface": "--surface-neutral-lowest",
3040
3041
  "--dialog-border": "--border-neutral-strong",
3041
3042
  "--dialog-border-width": "--border-width-2",
@@ -3179,8 +3180,7 @@
3179
3180
  "--imagelightbox-tile-border": "--color-transparent",
3180
3181
  "--imagelightbox-tile-border-width": "--border-width-0",
3181
3182
  "--imagelightbox-tile-shadow": "--shadow-md",
3182
- "--imagelightbox-scrim-color": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3183
- "--imagelightbox-scrim-opacity": "1",
3183
+ "--imagelightbox-scrim-surface": "--scrim-high",
3184
3184
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3185
3185
  "--imagelightbox-chrome-border": "--border-brand",
3186
3186
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -4034,5 +4034,5 @@
4034
4034
  }
4035
4035
  }
4036
4036
  },
4037
- "componentSchemaVersion": 37
4037
+ "componentSchemaVersion": 38
4038
4038
  }
@@ -11,12 +11,14 @@
11
11
  --columns-max-width: 1440px;
12
12
  --columns-gutter: 32px;
13
13
  --columns-margin: 0px;
14
- --scrim-low: color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent);
15
- --scrim: color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent);
16
- --scrim-high: color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent);
17
- --tint-low: color-mix(in srgb, var(--text-primary) 5%, transparent);
18
- --tint: color-mix(in srgb, var(--text-primary) 10%, transparent);
19
- --tint-high: color-mix(in srgb, var(--text-primary) 15%, transparent);
14
+ --scrim-color: var(--surface-neutral-lowest);
15
+ --scrim-opacity-low: 0.7;
16
+ --scrim-opacity: 0.8;
17
+ --scrim-opacity-high: 0.9;
18
+ --tint-color: var(--text-primary);
19
+ --tint-opacity-low: 0.05;
20
+ --tint-opacity: 0.1;
21
+ --tint-opacity-high: 0.15;
20
22
  --shadow-sm: 1px 1px 2px hsla(237, 18%, 3%, 0.9);
21
23
  --shadow-md: 3px 3px 6px hsla(237, 18%, 3%, 0.9);
22
24
  --shadow-lg: 5px 5px 9px hsla(237, 18%, 3%, 0.9);
@@ -180,8 +180,7 @@
180
180
  <style>
181
181
  :global(:root) {
182
182
  /* Scrim */
183
- --dialog-scrim-color: var(--scrim-color);
184
- --dialog-scrim-opacity: var(--scrim-opacity-high);
183
+ --dialog-scrim-surface: var(--scrim-high);
185
184
 
186
185
  /* Dialog frame */
187
186
  --dialog-surface: var(--surface-neutral-lowest);
@@ -228,11 +227,7 @@
228
227
  left: 0;
229
228
  width: 100%;
230
229
  height: 100%;
231
- background: color-mix(
232
- in srgb,
233
- var(--dialog-scrim-color) calc(var(--dialog-scrim-opacity) * 100%),
234
- transparent
235
- );
230
+ background: var(--dialog-scrim-surface);
236
231
  display: flex;
237
232
  justify-content: center;
238
233
  align-items: center;
@@ -57,15 +57,11 @@
57
57
  /** The width of that line, as any CSS length. Overrides
58
58
  `--imagelightbox-tile-border-width`. */
59
59
  borderWidth?: string | undefined;
60
- /** The scrim's colour behind the open image, for this instance. Overrides
61
- `--imagelightbox-scrim-color`. The modal portals to <body>, out of reach
62
- of a wrapper around the tile, so a page that wants its own scrim has to
63
- say so here. */
60
+ /** The scrim behind the open image, for this instance, as any CSS fill,
61
+ such as `var(--scrim-low)`. Overrides `--imagelightbox-scrim-surface`.
62
+ The modal portals to <body>, out of reach of a wrapper around the tile,
63
+ so a page that wants its own scrim has to say so here. */
64
64
  scrim?: string | undefined;
65
- /** How much of that colour covers the page, 0 to 1. Overrides
66
- `--imagelightbox-scrim-opacity`, and stands on its own: the colour it
67
- mixes with is whatever the theme holds. */
68
- scrimOpacity?: number | undefined;
69
65
  /** When true, shows a bottom toolbar (zoom in/out + percent) and a top-right close button, and enables wheel/drag zoom inside the open modal. When false, click anywhere closes. */
70
66
  extended?: boolean;
71
67
  /** Maximum zoom, as a multiple of the image's natural resolution: `1` = 100%
@@ -102,7 +98,6 @@
102
98
  border = undefined,
103
99
  borderWidth = undefined,
104
100
  scrim = undefined,
105
- scrimOpacity = undefined,
106
101
  extended = false,
107
102
  maxZoom = undefined,
108
103
  capNatural = false,
@@ -658,8 +653,7 @@
658
653
  <div
659
654
  bind:this={overlayEl}
660
655
  class="image-lightbox-overlay"
661
- style:--imagelightbox-scrim-color={scrim}
662
- style:--imagelightbox-scrim-opacity={scrimOpacity}
656
+ style:--imagelightbox-scrim-surface={scrim}
663
657
  class:active={open}
664
658
  aria-hidden="true"
665
659
  onclick={closeLightbox}
@@ -783,8 +777,7 @@
783
777
  --imagelightbox-tile-object-fit: contain;
784
778
 
785
779
  /* overlay */
786
- --imagelightbox-scrim-color: var(--scrim-color);
787
- --imagelightbox-scrim-opacity: var(--scrim-opacity-high);
780
+ --imagelightbox-scrim-surface: var(--scrim-high);
788
781
 
789
782
  /* chrome (toolbar + close button) */
790
783
  --imagelightbox-chrome-surface: var(--surface-neutral-low);
@@ -910,11 +903,7 @@
910
903
  .image-lightbox-overlay {
911
904
  position: fixed;
912
905
  inset: 0;
913
- background: color-mix(
914
- in srgb,
915
- var(--imagelightbox-scrim-color) calc(var(--imagelightbox-scrim-opacity) * 100%),
916
- transparent
917
- );
906
+ background: var(--imagelightbox-scrim-surface);
918
907
  backdrop-filter: blur(var(--blur-md));
919
908
  z-index: var(--z-overlay);
920
909
  opacity: 0;
@@ -273,19 +273,24 @@
273
273
  instead of darkening it. The three stops stay, composed from the two, for
274
274
  anywhere that wants one value. */
275
275
  --scrim-color: rgb(20, 3, 0);
276
- --scrim-opacity-low: 0.38;
277
- --scrim-opacity: 0.51;
278
- --scrim-opacity-high: 0.64;
276
+ --scrim-opacity-low: 0.7;
277
+ --scrim-opacity: 0.8;
278
+ --scrim-opacity-high: 0.9;
279
279
  --scrim-low: color-mix(in srgb, var(--scrim-color) calc(var(--scrim-opacity-low) * 100%), transparent);
280
280
  --scrim: color-mix(in srgb, var(--scrim-color) calc(var(--scrim-opacity) * 100%), transparent);
281
281
  --scrim-high: color-mix(in srgb, var(--scrim-color) calc(var(--scrim-opacity-high) * 100%), transparent);
282
282
 
283
283
  /* Tints — translucent washes that shade the surface they sit on, for a hover
284
- or an active row. The theme aliases these to the text color, so a tint
285
- lightens a dark theme and darkens a light one without picking a direction. */
286
- --tint-low: rgba(255, 255, 255, 0.05);
287
- --tint: rgba(255, 255, 255, 0.1);
288
- --tint-high: rgba(255, 255, 255, 0.15);
284
+ or an active row. The theme aliases --tint-color to the text color, so a
285
+ tint lightens a dark theme and darkens a light one without picking a
286
+ direction. Colour and strength are separate, as for scrims. */
287
+ --tint-color: rgb(255, 255, 255);
288
+ --tint-opacity-low: 0.05;
289
+ --tint-opacity: 0.1;
290
+ --tint-opacity-high: 0.15;
291
+ --tint-low: color-mix(in srgb, var(--tint-color) calc(var(--tint-opacity-low) * 100%), transparent);
292
+ --tint: color-mix(in srgb, var(--tint-color) calc(var(--tint-opacity) * 100%), transparent);
293
+ --tint-high: color-mix(in srgb, var(--tint-color) calc(var(--tint-opacity-high) * 100%), transparent);
289
294
 
290
295
  /* BORDERS — 5-point scales, faint → strong. */
291
296
 
@@ -783,6 +783,7 @@ var dialogContract = {
783
783
  properties: [
784
784
  {
785
785
  paints: {
786
+ backdrop: { backgroundColor: "--dialog-scrim-surface" },
786
787
  root: {
787
788
  backgroundColor: "--dialog-surface",
788
789
  borderTopColor: "--dialog-border",
@@ -831,9 +832,7 @@ var dialogContract = {
831
832
  { state: "footer" }
832
833
  ],
833
834
  uncovered: {
834
- "--dialog-blur": "consumed via backdrop-filter: blur(), which no probe covers",
835
- "--dialog-scrim-color": "composed into the fill through color-mix(), so no computed style reports the token verbatim",
836
- "--dialog-scrim-opacity": "composed into the fill through color-mix(), so no computed style reports the token verbatim"
835
+ "--dialog-blur": "consumed via backdrop-filter: blur(), which no probe covers"
837
836
  },
838
837
  persistence: {
839
838
  cases: [
@@ -1118,6 +1117,7 @@ var imageLightboxContract = {
1118
1117
  borderRadius: "--imagelightbox-tile-radius",
1119
1118
  boxShadow: "--imagelightbox-tile-shadow"
1120
1119
  },
1120
+ overlay: { backgroundColor: "--imagelightbox-scrim-surface" },
1121
1121
  closeButton: {
1122
1122
  backgroundColor: "--imagelightbox-chrome-surface",
1123
1123
  borderTopColor: "--imagelightbox-chrome-border",
@@ -1137,10 +1137,6 @@ var imageLightboxContract = {
1137
1137
  }
1138
1138
  ],
1139
1139
  states: [{ state: "tile" }, { state: "overlay" }, { state: "chrome" }],
1140
- uncovered: {
1141
- "--imagelightbox-scrim-color": "composed into the fill through color-mix(), so no computed style reports the token verbatim",
1142
- "--imagelightbox-scrim-opacity": "composed into the fill through color-mix(), so no computed style reports the token verbatim"
1143
- },
1144
1140
  persistence: {
1145
1141
  cases: [
1146
1142
  {
@@ -3372,4 +3368,4 @@ export {
3372
3368
  allContracts,
3373
3369
  selectedContracts
3374
3370
  };
3375
- //# sourceMappingURL=chunk-WQJ6QB6Y.js.map
3371
+ //# sourceMappingURL=chunk-RDHCBQ6I.js.map