@motion-proto/live-tokens 0.82.0 → 0.83.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 (79) hide show
  1. package/.claude/skills/live-tokens-create-component/SKILL.md +16 -4
  2. package/.claude/skills/live-tokens-create-page/SKILL.md +19 -17
  3. package/.claude/skills/live-tokens-create-page/references/interaction-sources.md +3 -3
  4. package/.claude/skills/live-tokens-pick-component/SKILL.md +10 -83
  5. package/CHANGELOG.md +53 -0
  6. package/README.md +1 -1
  7. package/bin/cli.mjs +21 -8
  8. package/bin/lib/catalogue.mjs +140 -41
  9. package/bin/rules/componentStructure.mjs +12 -4
  10. package/dist-plugin/{chunk-REBHE3ZM.js → chunk-6JKUYCPL.js} +29 -9
  11. package/dist-plugin/{chunk-D4WRIKEZ.js → chunk-LBZISJPG.js} +1 -1
  12. package/dist-plugin/index.cjs +33 -13
  13. package/dist-plugin/index.js +2 -2
  14. package/dist-plugin/migrateData/index.cjs +29 -9
  15. package/dist-plugin/migrateData/index.js +2 -2
  16. package/dist-plugin/setColors/index.cjs +29 -9
  17. package/dist-plugin/setColors/index.js +1 -1
  18. package/dist-plugin/setGeometry/index.cjs +29 -9
  19. package/dist-plugin/setGeometry/index.js +1 -1
  20. package/package.json +3 -1
  21. package/src/editor/component-editor/ImageLightboxEditor.svelte +1 -1
  22. package/src/editor/component-editor/scaffolding/types.ts +13 -8
  23. package/src/editor/core/sketch/sketchLayer.ts +1 -1
  24. package/src/editor/core/themes/migrations/2026-09-20-imagelightbox-scrim.ts +28 -0
  25. package/src/editor/core/themes/migrations/index.ts +2 -0
  26. package/src/editor/docs/content/creating-components.md +3 -0
  27. package/src/editor/docs/content.generated.ts +1 -1
  28. package/src/editor/skill-atlas/SkillAtlas.svelte +65 -38
  29. package/src/editor/skill-atlas/SkillValue.svelte +202 -0
  30. package/src/editor/skill-atlas/evalResults.ts +46 -0
  31. package/src/editor/skill-atlas/skillSources.generated.ts +4 -4
  32. package/src/editor/skill-atlas/trees/create-component.ts +18 -18
  33. package/src/editor/skill-atlas/trees/create-page.ts +28 -32
  34. package/src/editor/skill-atlas/trees/pick-component.ts +66 -196
  35. package/src/live-tokens/data/themes/autumn.json +3 -3
  36. package/src/live-tokens/data/themes/halloween.json +3 -3
  37. package/src/live-tokens/data/themes/midnight-study.json +3 -3
  38. package/src/live-tokens/data/themes/ocean.json +3 -3
  39. package/src/live-tokens/data/themes/royal-velvet.json +3 -3
  40. package/src/live-tokens/data/themes/sketchy.json +3 -3
  41. package/src/live-tokens/data/themes/spring-meadow.json +3 -3
  42. package/src/live-tokens/data/themes/sunset.json +3 -3
  43. package/src/system/components/Badge.svelte +5 -2
  44. package/src/system/components/Button.svelte +10 -2
  45. package/src/system/components/Callout.svelte +5 -2
  46. package/src/system/components/Card.svelte +8 -3
  47. package/src/system/components/CodeSnippet.svelte +6 -2
  48. package/src/system/components/CollapsibleSection.svelte +6 -2
  49. package/src/system/components/CornerBadge.svelte +5 -2
  50. package/src/system/components/Dialog.svelte +5 -2
  51. package/src/system/components/IconButton.svelte +5 -2
  52. package/src/system/components/Image.svelte +5 -2
  53. package/src/system/components/ImageLightbox.svelte +47 -4
  54. package/src/system/components/InlineEditActions.svelte +5 -2
  55. package/src/system/components/Input.svelte +6 -2
  56. package/src/system/components/MenuSelect.svelte +9 -2
  57. package/src/system/components/Notification.svelte +5 -2
  58. package/src/system/components/Panel.svelte +5 -2
  59. package/src/system/components/ProgressBar.svelte +5 -2
  60. package/src/system/components/RadioButton.svelte +5 -2
  61. package/src/system/components/SectionDivider.svelte +5 -2
  62. package/src/system/components/SegmentedControl.svelte +5 -2
  63. package/src/system/components/SideNavigation.svelte +5 -2
  64. package/src/system/components/Slider.svelte +6 -2
  65. package/src/system/components/TabBar.svelte +5 -2
  66. package/src/system/components/Table.svelte +4 -2
  67. package/src/system/components/Toggle.svelte +5 -2
  68. package/src/system/components/Tooltip.svelte +5 -2
  69. package/src/testing-js/{chunk-ZMZQZ33J.js → chunk-RDHCBQ6I.js} +2 -2
  70. package/src/testing-js/chunk-RDHCBQ6I.js.map +1 -0
  71. package/src/testing-js/{chunk-Q3YIAAG3.js → chunk-XV5CYADO.js} +2 -2
  72. package/src/testing-js/component-behavior.contract.js +1 -1
  73. package/src/testing-js/component-editor.contract.js +1 -1
  74. package/src/testing-js/component-render.contract.js +1 -1
  75. package/src/testing-js/index.js +2 -2
  76. package/src/testing-js/page-compliance.contract.js +1 -1
  77. package/src/testing-js/vitest.js +2 -2
  78. package/src/testing-js/chunk-ZMZQZ33J.js.map +0 -1
  79. /package/src/testing-js/{chunk-Q3YIAAG3.js.map → chunk-XV5CYADO.js.map} +0 -0
@@ -37,7 +37,7 @@ export const componentRules = {
37
37
  severity: 'warn',
38
38
  repair: 'authored',
39
39
  guidance:
40
- "Add the catalogue export to the runtime's <script module> block, with description, useFor, and notFor as string literals. The message names the field that is missing or malformed, and `npx live-tokens components <id>` prints the entry once it is there.",
40
+ "Add the catalogue export to the runtime's <script module> block, with description and whenToUse as string literals, and whenNotToUse as an array of { when, use? } rows: `when` names the condition that rules this component out, and `use` names the sibling component id that fits instead. A row with no sibling to name takes no `use`. A component with no disqualifying condition takes `whenNotToUse: []`. An optional constraints array states each rule of use as one sentence. The message names the field that is missing or malformed, and `npx live-tokens components <id>` prints the entry once it is there.",
41
41
  },
42
42
  'state-after-property': {
43
43
  severity: 'error',
@@ -111,21 +111,29 @@ export function checkFiles({ root, runtimePath, editorPath }, record) {
111
111
  return { editorMissing, runtimeMissing };
112
112
  }
113
113
 
114
- export function checkRuntime({ id, Id, root, runtimePath, runtime, blocks, intrinsic }, record) {
114
+ export function checkRuntime({ id, Id, root, runtimePath, runtime, blocks, intrinsic, vocab }, record) {
115
115
  // Runtime: the file exports the `catalogue` that says what the component
116
116
  // is for. Without it the component is pickable but unexplained.
117
117
  const catalogue = catalogueOf(runtime);
118
118
  if (!catalogue) {
119
119
  record(
120
120
  'missing-description',
121
- `${relative(root, runtimePath)}: has no catalogue export. Say what ${Id} is for, and what it is not for`,
121
+ `${relative(root, runtimePath)}: has no catalogue export. Say what ${Id} is for and when not to use it`,
122
122
  );
123
123
  } else {
124
- for (const requiredField of ['description', 'useFor', 'notFor']) {
124
+ for (const requiredField of ['description', 'whenToUse', 'whenNotToUse']) {
125
125
  if (!catalogue[requiredField]) {
126
126
  record('missing-description', `${relative(root, runtimePath)}: catalogue has no ${requiredField}`);
127
127
  }
128
128
  }
129
+ for (const row of catalogue.whenNotToUse ?? []) {
130
+ if (row.use && !vocab.components.has(row.use)) {
131
+ record(
132
+ 'missing-description',
133
+ `${relative(root, runtimePath)}: catalogue whenNotToUse names "${row.use}", which is not a component id`,
134
+ );
135
+ }
136
+ }
129
137
  }
130
138
 
131
139
  // Runtime: :global(:root) block present.
@@ -1176,8 +1176,27 @@ var componentMigration_2026_09_13_sectiondividerSurface = {
1176
1176
  }
1177
1177
  };
1178
1178
 
1179
- // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1179
+ // src/editor/core/themes/migrations/2026-09-20-imagelightbox-scrim.ts
1180
1180
  var RENAMES7 = {
1181
+ "--imagelightbox-overlay-surface": "--imagelightbox-scrim-surface"
1182
+ };
1183
+ var componentMigration_2026_09_20_imagelightboxScrim = {
1184
+ id: "2026-09-20-imagelightbox-scrim",
1185
+ fromVersion: 35,
1186
+ toVersion: 36,
1187
+ appliesTo: "component-config",
1188
+ apply(rawVars, meta) {
1189
+ if (meta.component !== "imagelightbox") return { ...rawVars };
1190
+ const out = {};
1191
+ for (const [key, value] of Object.entries(rawVars)) {
1192
+ out[RENAMES7[key] ?? key] = value;
1193
+ }
1194
+ return out;
1195
+ }
1196
+ };
1197
+
1198
+ // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1199
+ var RENAMES8 = {
1181
1200
  cornerbadge: {
1182
1201
  "--corner-badge-margin": "--cornerbadge-margin",
1183
1202
  "--corner-badge-outer-radius": "--cornerbadge-outer-radius",
@@ -1227,7 +1246,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
1227
1246
  toVersion: 32,
1228
1247
  appliesTo: "component-config",
1229
1248
  apply(rawVars, meta) {
1230
- const renames = meta.component ? RENAMES7[meta.component] : void 0;
1249
+ const renames = meta.component ? RENAMES8[meta.component] : void 0;
1231
1250
  if (!renames) return { ...rawVars };
1232
1251
  const out = {};
1233
1252
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1238,7 +1257,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
1238
1257
  };
1239
1258
 
1240
1259
  // src/editor/core/themes/migrations/2026-09-13-toggle-label.ts
1241
- var RENAMES8 = {
1260
+ var RENAMES9 = {
1242
1261
  toggle: {
1243
1262
  "--toggle-label-text": "--toggle-label",
1244
1263
  "--toggle-disabled-label-text": "--toggle-disabled-label"
@@ -1250,7 +1269,7 @@ var componentMigration_2026_09_13_toggleLabel = {
1250
1269
  toVersion: 33,
1251
1270
  appliesTo: "component-config",
1252
1271
  apply(rawVars, meta) {
1253
- const renames = meta.component ? RENAMES8[meta.component] : void 0;
1272
+ const renames = meta.component ? RENAMES9[meta.component] : void 0;
1254
1273
  if (!renames) return { ...rawVars };
1255
1274
  const out = {};
1256
1275
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1261,7 +1280,7 @@ var componentMigration_2026_09_13_toggleLabel = {
1261
1280
  };
1262
1281
 
1263
1282
  // src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts
1264
- var RENAMES9 = {
1283
+ var RENAMES10 = {
1265
1284
  collapsiblesection: {
1266
1285
  "--collapsiblesection-chromeless-expanded-padding": "--collapsiblesection-chromeless-open-padding",
1267
1286
  "--collapsiblesection-hairline-expanded-padding": "--collapsiblesection-hairline-open-padding",
@@ -1275,7 +1294,7 @@ var componentMigration_2026_09_13_collapsiblesectionOpen = {
1275
1294
  toVersion: 34,
1276
1295
  appliesTo: "component-config",
1277
1296
  apply(rawVars, meta) {
1278
- const renames = meta.component ? RENAMES9[meta.component] : void 0;
1297
+ const renames = meta.component ? RENAMES10[meta.component] : void 0;
1279
1298
  if (!renames) return { ...rawVars };
1280
1299
  const out = {};
1281
1300
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1302,7 +1321,7 @@ var BADGE_SUFFIXES = [
1302
1321
  "icon-size"
1303
1322
  ];
1304
1323
  var CORNERBADGE_SUFFIXES = ["surface", "border", "text"];
1305
- var RENAMES10 = {
1324
+ var RENAMES11 = {
1306
1325
  badge: Object.fromEntries(
1307
1326
  BADGE_SUFFIXES.map((s) => [`--badge-primary-${s}`, `--badge-brand-${s}`])
1308
1327
  ),
@@ -1316,7 +1335,7 @@ var componentMigration_2026_09_13_badgeBrand = {
1316
1335
  toVersion: 35,
1317
1336
  appliesTo: "component-config",
1318
1337
  apply(rawVars, meta) {
1319
- const renames = meta.component ? RENAMES10[meta.component] : void 0;
1338
+ const renames = meta.component ? RENAMES11[meta.component] : void 0;
1320
1339
  if (!renames) return { ...rawVars };
1321
1340
  const out = {};
1322
1341
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1370,7 +1389,8 @@ var MIGRATIONS = [
1370
1389
  componentMigration_2026_09_13_cornerbadgePrefix,
1371
1390
  componentMigration_2026_09_13_toggleLabel,
1372
1391
  componentMigration_2026_09_13_collapsiblesectionOpen,
1373
- componentMigration_2026_09_13_badgeBrand
1392
+ componentMigration_2026_09_13_badgeBrand,
1393
+ componentMigration_2026_09_20_imagelightboxScrim
1374
1394
  ];
1375
1395
  function countFor(kind) {
1376
1396
  return MIGRATIONS.filter((m) => m.appliesTo === kind).length;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CURRENT_COMPONENT_SCHEMA_VERSION,
3
3
  runMigrations
4
- } from "./chunk-REBHE3ZM.js";
4
+ } from "./chunk-6JKUYCPL.js";
5
5
 
6
6
  // vite-plugin/files/versionedFileResourceServer.ts
7
7
  import fs from "fs";
@@ -1960,8 +1960,27 @@ var componentMigration_2026_09_13_sectiondividerSurface = {
1960
1960
  }
1961
1961
  };
1962
1962
 
1963
- // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1963
+ // src/editor/core/themes/migrations/2026-09-20-imagelightbox-scrim.ts
1964
1964
  var RENAMES7 = {
1965
+ "--imagelightbox-overlay-surface": "--imagelightbox-scrim-surface"
1966
+ };
1967
+ var componentMigration_2026_09_20_imagelightboxScrim = {
1968
+ id: "2026-09-20-imagelightbox-scrim",
1969
+ fromVersion: 35,
1970
+ toVersion: 36,
1971
+ appliesTo: "component-config",
1972
+ apply(rawVars, meta) {
1973
+ if (meta.component !== "imagelightbox") return { ...rawVars };
1974
+ const out = {};
1975
+ for (const [key, value] of Object.entries(rawVars)) {
1976
+ out[RENAMES7[key] ?? key] = value;
1977
+ }
1978
+ return out;
1979
+ }
1980
+ };
1981
+
1982
+ // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1983
+ var RENAMES8 = {
1965
1984
  cornerbadge: {
1966
1985
  "--corner-badge-margin": "--cornerbadge-margin",
1967
1986
  "--corner-badge-outer-radius": "--cornerbadge-outer-radius",
@@ -2011,7 +2030,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
2011
2030
  toVersion: 32,
2012
2031
  appliesTo: "component-config",
2013
2032
  apply(rawVars, meta) {
2014
- const renames = meta.component ? RENAMES7[meta.component] : void 0;
2033
+ const renames = meta.component ? RENAMES8[meta.component] : void 0;
2015
2034
  if (!renames) return { ...rawVars };
2016
2035
  const out = {};
2017
2036
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2022,7 +2041,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
2022
2041
  };
2023
2042
 
2024
2043
  // src/editor/core/themes/migrations/2026-09-13-toggle-label.ts
2025
- var RENAMES8 = {
2044
+ var RENAMES9 = {
2026
2045
  toggle: {
2027
2046
  "--toggle-label-text": "--toggle-label",
2028
2047
  "--toggle-disabled-label-text": "--toggle-disabled-label"
@@ -2034,7 +2053,7 @@ var componentMigration_2026_09_13_toggleLabel = {
2034
2053
  toVersion: 33,
2035
2054
  appliesTo: "component-config",
2036
2055
  apply(rawVars, meta) {
2037
- const renames = meta.component ? RENAMES8[meta.component] : void 0;
2056
+ const renames = meta.component ? RENAMES9[meta.component] : void 0;
2038
2057
  if (!renames) return { ...rawVars };
2039
2058
  const out = {};
2040
2059
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2045,7 +2064,7 @@ var componentMigration_2026_09_13_toggleLabel = {
2045
2064
  };
2046
2065
 
2047
2066
  // src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts
2048
- var RENAMES9 = {
2067
+ var RENAMES10 = {
2049
2068
  collapsiblesection: {
2050
2069
  "--collapsiblesection-chromeless-expanded-padding": "--collapsiblesection-chromeless-open-padding",
2051
2070
  "--collapsiblesection-hairline-expanded-padding": "--collapsiblesection-hairline-open-padding",
@@ -2059,7 +2078,7 @@ var componentMigration_2026_09_13_collapsiblesectionOpen = {
2059
2078
  toVersion: 34,
2060
2079
  appliesTo: "component-config",
2061
2080
  apply(rawVars, meta) {
2062
- const renames = meta.component ? RENAMES9[meta.component] : void 0;
2081
+ const renames = meta.component ? RENAMES10[meta.component] : void 0;
2063
2082
  if (!renames) return { ...rawVars };
2064
2083
  const out = {};
2065
2084
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2086,7 +2105,7 @@ var BADGE_SUFFIXES = [
2086
2105
  "icon-size"
2087
2106
  ];
2088
2107
  var CORNERBADGE_SUFFIXES = ["surface", "border", "text"];
2089
- var RENAMES10 = {
2108
+ var RENAMES11 = {
2090
2109
  badge: Object.fromEntries(
2091
2110
  BADGE_SUFFIXES.map((s) => [`--badge-primary-${s}`, `--badge-brand-${s}`])
2092
2111
  ),
@@ -2100,7 +2119,7 @@ var componentMigration_2026_09_13_badgeBrand = {
2100
2119
  toVersion: 35,
2101
2120
  appliesTo: "component-config",
2102
2121
  apply(rawVars, meta) {
2103
- const renames = meta.component ? RENAMES10[meta.component] : void 0;
2122
+ const renames = meta.component ? RENAMES11[meta.component] : void 0;
2104
2123
  if (!renames) return { ...rawVars };
2105
2124
  const out = {};
2106
2125
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2154,7 +2173,8 @@ var MIGRATIONS = [
2154
2173
  componentMigration_2026_09_13_cornerbadgePrefix,
2155
2174
  componentMigration_2026_09_13_toggleLabel,
2156
2175
  componentMigration_2026_09_13_collapsiblesectionOpen,
2157
- componentMigration_2026_09_13_badgeBrand
2176
+ componentMigration_2026_09_13_badgeBrand,
2177
+ componentMigration_2026_09_20_imagelightboxScrim
2158
2178
  ];
2159
2179
  function countFor(kind) {
2160
2180
  return MIGRATIONS.filter((m) => m.appliesTo === kind).length;
@@ -3575,7 +3595,7 @@ var tokensCssMigration_2026_06_04_easingColorAndTypescaleAdditions = {
3575
3595
  };
3576
3596
 
3577
3597
  // vite-plugin/tokensCssMigrations/migrations/2026-07-20-line-height-rename.ts
3578
- var RENAMES11 = [
3598
+ var RENAMES12 = [
3579
3599
  ["--line-height-xs", "--line-height-none"],
3580
3600
  ["--line-height-sm", "--line-height-tighter"],
3581
3601
  ["--line-height-md", "--line-height-normal"],
@@ -3595,7 +3615,7 @@ var tokensCssMigration_2026_07_20_lineHeightRename = {
3595
3615
  description: "Reshape --line-height-{xs..xl} to leading vocabulary (none/tightest/tighter/tight/normal/relaxed); retire the 2.0 slot",
3596
3616
  apply(css) {
3597
3617
  let out = css;
3598
- for (const [oldName, newName] of RENAMES11) out = renameToken2(out, oldName, newName);
3618
+ for (const [oldName, newName] of RENAMES12) out = renameToken2(out, oldName, newName);
3599
3619
  out = removeToken(out, "--line-height-xl");
3600
3620
  out = ensureScale(out, {
3601
3621
  anchorPrefixes: ["--line-height-", "--font-size-", "--font-weight-", "--font-"],
@@ -3828,7 +3848,7 @@ var tokensCssMigration_2026_08_27_editorialLargeSteps = {
3828
3848
  };
3829
3849
 
3830
3850
  // vite-plugin/tokensCssMigrations/migrations/2026-09-01-scrim-rename.ts
3831
- var RENAMES12 = [
3851
+ var RENAMES13 = [
3832
3852
  ["--overlay-low", "--scrim-low"],
3833
3853
  ["--overlay-high", "--scrim-high"],
3834
3854
  ["--overlay", "--scrim"]
@@ -3839,7 +3859,7 @@ var tokensCssMigration_2026_09_01_scrimRename = {
3839
3859
  description: "Rename --overlay-{low,base,high} to --scrim-*; a scrim dims what is behind it",
3840
3860
  apply(css) {
3841
3861
  let out = css;
3842
- for (const [oldName, newName] of RENAMES12) out = renameToken2(out, oldName, newName);
3862
+ for (const [oldName, newName] of RENAMES13) out = renameToken2(out, oldName, newName);
3843
3863
  return out;
3844
3864
  }
3845
3865
  };
@@ -5,7 +5,7 @@ import {
5
5
  nextAvailableName,
6
6
  normalizeTheme,
7
7
  versionedFileResourceServer
8
- } from "./chunk-D4WRIKEZ.js";
8
+ } from "./chunk-LBZISJPG.js";
9
9
  import {
10
10
  formatGradientValue,
11
11
  palettesToVars,
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-O6GQ6GBH.js";
17
17
  import {
18
18
  CURRENT_COMPONENT_SCHEMA_VERSION
19
- } from "./chunk-REBHE3ZM.js";
19
+ } from "./chunk-6JKUYCPL.js";
20
20
  import {
21
21
  TOKENS_CSS_MIGRATIONS,
22
22
  extractGlobalRootBody,
@@ -1356,8 +1356,27 @@ var componentMigration_2026_09_13_sectiondividerSurface = {
1356
1356
  }
1357
1357
  };
1358
1358
 
1359
- // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1359
+ // src/editor/core/themes/migrations/2026-09-20-imagelightbox-scrim.ts
1360
1360
  var RENAMES7 = {
1361
+ "--imagelightbox-overlay-surface": "--imagelightbox-scrim-surface"
1362
+ };
1363
+ var componentMigration_2026_09_20_imagelightboxScrim = {
1364
+ id: "2026-09-20-imagelightbox-scrim",
1365
+ fromVersion: 35,
1366
+ toVersion: 36,
1367
+ appliesTo: "component-config",
1368
+ apply(rawVars, meta) {
1369
+ if (meta.component !== "imagelightbox") return { ...rawVars };
1370
+ const out = {};
1371
+ for (const [key, value] of Object.entries(rawVars)) {
1372
+ out[RENAMES7[key] ?? key] = value;
1373
+ }
1374
+ return out;
1375
+ }
1376
+ };
1377
+
1378
+ // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1379
+ var RENAMES8 = {
1361
1380
  cornerbadge: {
1362
1381
  "--corner-badge-margin": "--cornerbadge-margin",
1363
1382
  "--corner-badge-outer-radius": "--cornerbadge-outer-radius",
@@ -1407,7 +1426,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
1407
1426
  toVersion: 32,
1408
1427
  appliesTo: "component-config",
1409
1428
  apply(rawVars, meta) {
1410
- const renames = meta.component ? RENAMES7[meta.component] : void 0;
1429
+ const renames = meta.component ? RENAMES8[meta.component] : void 0;
1411
1430
  if (!renames) return { ...rawVars };
1412
1431
  const out = {};
1413
1432
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1418,7 +1437,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
1418
1437
  };
1419
1438
 
1420
1439
  // src/editor/core/themes/migrations/2026-09-13-toggle-label.ts
1421
- var RENAMES8 = {
1440
+ var RENAMES9 = {
1422
1441
  toggle: {
1423
1442
  "--toggle-label-text": "--toggle-label",
1424
1443
  "--toggle-disabled-label-text": "--toggle-disabled-label"
@@ -1430,7 +1449,7 @@ var componentMigration_2026_09_13_toggleLabel = {
1430
1449
  toVersion: 33,
1431
1450
  appliesTo: "component-config",
1432
1451
  apply(rawVars, meta) {
1433
- const renames = meta.component ? RENAMES8[meta.component] : void 0;
1452
+ const renames = meta.component ? RENAMES9[meta.component] : void 0;
1434
1453
  if (!renames) return { ...rawVars };
1435
1454
  const out = {};
1436
1455
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1441,7 +1460,7 @@ var componentMigration_2026_09_13_toggleLabel = {
1441
1460
  };
1442
1461
 
1443
1462
  // src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts
1444
- var RENAMES9 = {
1463
+ var RENAMES10 = {
1445
1464
  collapsiblesection: {
1446
1465
  "--collapsiblesection-chromeless-expanded-padding": "--collapsiblesection-chromeless-open-padding",
1447
1466
  "--collapsiblesection-hairline-expanded-padding": "--collapsiblesection-hairline-open-padding",
@@ -1455,7 +1474,7 @@ var componentMigration_2026_09_13_collapsiblesectionOpen = {
1455
1474
  toVersion: 34,
1456
1475
  appliesTo: "component-config",
1457
1476
  apply(rawVars, meta) {
1458
- const renames = meta.component ? RENAMES9[meta.component] : void 0;
1477
+ const renames = meta.component ? RENAMES10[meta.component] : void 0;
1459
1478
  if (!renames) return { ...rawVars };
1460
1479
  const out = {};
1461
1480
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1482,7 +1501,7 @@ var BADGE_SUFFIXES = [
1482
1501
  "icon-size"
1483
1502
  ];
1484
1503
  var CORNERBADGE_SUFFIXES = ["surface", "border", "text"];
1485
- var RENAMES10 = {
1504
+ var RENAMES11 = {
1486
1505
  badge: Object.fromEntries(
1487
1506
  BADGE_SUFFIXES.map((s) => [`--badge-primary-${s}`, `--badge-brand-${s}`])
1488
1507
  ),
@@ -1496,7 +1515,7 @@ var componentMigration_2026_09_13_badgeBrand = {
1496
1515
  toVersion: 35,
1497
1516
  appliesTo: "component-config",
1498
1517
  apply(rawVars, meta) {
1499
- const renames = meta.component ? RENAMES10[meta.component] : void 0;
1518
+ const renames = meta.component ? RENAMES11[meta.component] : void 0;
1500
1519
  if (!renames) return { ...rawVars };
1501
1520
  const out = {};
1502
1521
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1550,7 +1569,8 @@ var MIGRATIONS = [
1550
1569
  componentMigration_2026_09_13_cornerbadgePrefix,
1551
1570
  componentMigration_2026_09_13_toggleLabel,
1552
1571
  componentMigration_2026_09_13_collapsiblesectionOpen,
1553
- componentMigration_2026_09_13_badgeBrand
1572
+ componentMigration_2026_09_13_badgeBrand,
1573
+ componentMigration_2026_09_20_imagelightboxScrim
1554
1574
  ];
1555
1575
  function countFor(kind) {
1556
1576
  return MIGRATIONS.filter((m) => m.appliesTo === kind).length;
@@ -7,10 +7,10 @@ import {
7
7
  normalizeTheme,
8
8
  planLegacyRenames,
9
9
  versionedFileResourceServer
10
- } from "../chunk-D4WRIKEZ.js";
10
+ } from "../chunk-LBZISJPG.js";
11
11
  import {
12
12
  CURRENT_COMPONENT_SCHEMA_VERSION
13
- } from "../chunk-REBHE3ZM.js";
13
+ } from "../chunk-6JKUYCPL.js";
14
14
  import {
15
15
  readLiveTokensConfig,
16
16
  resolveDataDirs
@@ -2370,8 +2370,27 @@ var componentMigration_2026_09_13_sectiondividerSurface = {
2370
2370
  }
2371
2371
  };
2372
2372
 
2373
- // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
2373
+ // src/editor/core/themes/migrations/2026-09-20-imagelightbox-scrim.ts
2374
2374
  var RENAMES7 = {
2375
+ "--imagelightbox-overlay-surface": "--imagelightbox-scrim-surface"
2376
+ };
2377
+ var componentMigration_2026_09_20_imagelightboxScrim = {
2378
+ id: "2026-09-20-imagelightbox-scrim",
2379
+ fromVersion: 35,
2380
+ toVersion: 36,
2381
+ appliesTo: "component-config",
2382
+ apply(rawVars, meta) {
2383
+ if (meta.component !== "imagelightbox") return { ...rawVars };
2384
+ const out = {};
2385
+ for (const [key, value] of Object.entries(rawVars)) {
2386
+ out[RENAMES7[key] ?? key] = value;
2387
+ }
2388
+ return out;
2389
+ }
2390
+ };
2391
+
2392
+ // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
2393
+ var RENAMES8 = {
2375
2394
  cornerbadge: {
2376
2395
  "--corner-badge-margin": "--cornerbadge-margin",
2377
2396
  "--corner-badge-outer-radius": "--cornerbadge-outer-radius",
@@ -2421,7 +2440,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
2421
2440
  toVersion: 32,
2422
2441
  appliesTo: "component-config",
2423
2442
  apply(rawVars, meta) {
2424
- const renames = meta.component ? RENAMES7[meta.component] : void 0;
2443
+ const renames = meta.component ? RENAMES8[meta.component] : void 0;
2425
2444
  if (!renames) return { ...rawVars };
2426
2445
  const out = {};
2427
2446
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2432,7 +2451,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
2432
2451
  };
2433
2452
 
2434
2453
  // src/editor/core/themes/migrations/2026-09-13-toggle-label.ts
2435
- var RENAMES8 = {
2454
+ var RENAMES9 = {
2436
2455
  toggle: {
2437
2456
  "--toggle-label-text": "--toggle-label",
2438
2457
  "--toggle-disabled-label-text": "--toggle-disabled-label"
@@ -2444,7 +2463,7 @@ var componentMigration_2026_09_13_toggleLabel = {
2444
2463
  toVersion: 33,
2445
2464
  appliesTo: "component-config",
2446
2465
  apply(rawVars, meta) {
2447
- const renames = meta.component ? RENAMES8[meta.component] : void 0;
2466
+ const renames = meta.component ? RENAMES9[meta.component] : void 0;
2448
2467
  if (!renames) return { ...rawVars };
2449
2468
  const out = {};
2450
2469
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2455,7 +2474,7 @@ var componentMigration_2026_09_13_toggleLabel = {
2455
2474
  };
2456
2475
 
2457
2476
  // src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts
2458
- var RENAMES9 = {
2477
+ var RENAMES10 = {
2459
2478
  collapsiblesection: {
2460
2479
  "--collapsiblesection-chromeless-expanded-padding": "--collapsiblesection-chromeless-open-padding",
2461
2480
  "--collapsiblesection-hairline-expanded-padding": "--collapsiblesection-hairline-open-padding",
@@ -2469,7 +2488,7 @@ var componentMigration_2026_09_13_collapsiblesectionOpen = {
2469
2488
  toVersion: 34,
2470
2489
  appliesTo: "component-config",
2471
2490
  apply(rawVars, meta) {
2472
- const renames = meta.component ? RENAMES9[meta.component] : void 0;
2491
+ const renames = meta.component ? RENAMES10[meta.component] : void 0;
2473
2492
  if (!renames) return { ...rawVars };
2474
2493
  const out = {};
2475
2494
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2496,7 +2515,7 @@ var BADGE_SUFFIXES = [
2496
2515
  "icon-size"
2497
2516
  ];
2498
2517
  var CORNERBADGE_SUFFIXES = ["surface", "border", "text"];
2499
- var RENAMES10 = {
2518
+ var RENAMES11 = {
2500
2519
  badge: Object.fromEntries(
2501
2520
  BADGE_SUFFIXES.map((s) => [`--badge-primary-${s}`, `--badge-brand-${s}`])
2502
2521
  ),
@@ -2510,7 +2529,7 @@ var componentMigration_2026_09_13_badgeBrand = {
2510
2529
  toVersion: 35,
2511
2530
  appliesTo: "component-config",
2512
2531
  apply(rawVars, meta) {
2513
- const renames = meta.component ? RENAMES10[meta.component] : void 0;
2532
+ const renames = meta.component ? RENAMES11[meta.component] : void 0;
2514
2533
  if (!renames) return { ...rawVars };
2515
2534
  const out = {};
2516
2535
  for (const [key, value] of Object.entries(rawVars)) {
@@ -2564,7 +2583,8 @@ var MIGRATIONS = [
2564
2583
  componentMigration_2026_09_13_cornerbadgePrefix,
2565
2584
  componentMigration_2026_09_13_toggleLabel,
2566
2585
  componentMigration_2026_09_13_collapsiblesectionOpen,
2567
- componentMigration_2026_09_13_badgeBrand
2586
+ componentMigration_2026_09_13_badgeBrand,
2587
+ componentMigration_2026_09_20_imagelightboxScrim
2568
2588
  ];
2569
2589
  function countFor(kind) {
2570
2590
  return MIGRATIONS.filter((m) => m.appliesTo === kind).length;
@@ -18,7 +18,7 @@ import {
18
18
  } from "../chunk-O6GQ6GBH.js";
19
19
  import {
20
20
  CURRENT_COMPONENT_SCHEMA_VERSION
21
- } from "../chunk-REBHE3ZM.js";
21
+ } from "../chunk-6JKUYCPL.js";
22
22
  import {
23
23
  cssColorToOklch,
24
24
  gamutClamp,
@@ -1519,8 +1519,27 @@ var componentMigration_2026_09_13_sectiondividerSurface = {
1519
1519
  }
1520
1520
  };
1521
1521
 
1522
- // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1522
+ // src/editor/core/themes/migrations/2026-09-20-imagelightbox-scrim.ts
1523
1523
  var RENAMES7 = {
1524
+ "--imagelightbox-overlay-surface": "--imagelightbox-scrim-surface"
1525
+ };
1526
+ var componentMigration_2026_09_20_imagelightboxScrim = {
1527
+ id: "2026-09-20-imagelightbox-scrim",
1528
+ fromVersion: 35,
1529
+ toVersion: 36,
1530
+ appliesTo: "component-config",
1531
+ apply(rawVars, meta) {
1532
+ if (meta.component !== "imagelightbox") return { ...rawVars };
1533
+ const out = {};
1534
+ for (const [key, value] of Object.entries(rawVars)) {
1535
+ out[RENAMES7[key] ?? key] = value;
1536
+ }
1537
+ return out;
1538
+ }
1539
+ };
1540
+
1541
+ // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1542
+ var RENAMES8 = {
1524
1543
  cornerbadge: {
1525
1544
  "--corner-badge-margin": "--cornerbadge-margin",
1526
1545
  "--corner-badge-outer-radius": "--cornerbadge-outer-radius",
@@ -1570,7 +1589,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
1570
1589
  toVersion: 32,
1571
1590
  appliesTo: "component-config",
1572
1591
  apply(rawVars, meta) {
1573
- const renames = meta.component ? RENAMES7[meta.component] : void 0;
1592
+ const renames = meta.component ? RENAMES8[meta.component] : void 0;
1574
1593
  if (!renames) return { ...rawVars };
1575
1594
  const out = {};
1576
1595
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1581,7 +1600,7 @@ var componentMigration_2026_09_13_cornerbadgePrefix = {
1581
1600
  };
1582
1601
 
1583
1602
  // src/editor/core/themes/migrations/2026-09-13-toggle-label.ts
1584
- var RENAMES8 = {
1603
+ var RENAMES9 = {
1585
1604
  toggle: {
1586
1605
  "--toggle-label-text": "--toggle-label",
1587
1606
  "--toggle-disabled-label-text": "--toggle-disabled-label"
@@ -1593,7 +1612,7 @@ var componentMigration_2026_09_13_toggleLabel = {
1593
1612
  toVersion: 33,
1594
1613
  appliesTo: "component-config",
1595
1614
  apply(rawVars, meta) {
1596
- const renames = meta.component ? RENAMES8[meta.component] : void 0;
1615
+ const renames = meta.component ? RENAMES9[meta.component] : void 0;
1597
1616
  if (!renames) return { ...rawVars };
1598
1617
  const out = {};
1599
1618
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1604,7 +1623,7 @@ var componentMigration_2026_09_13_toggleLabel = {
1604
1623
  };
1605
1624
 
1606
1625
  // src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts
1607
- var RENAMES9 = {
1626
+ var RENAMES10 = {
1608
1627
  collapsiblesection: {
1609
1628
  "--collapsiblesection-chromeless-expanded-padding": "--collapsiblesection-chromeless-open-padding",
1610
1629
  "--collapsiblesection-hairline-expanded-padding": "--collapsiblesection-hairline-open-padding",
@@ -1618,7 +1637,7 @@ var componentMigration_2026_09_13_collapsiblesectionOpen = {
1618
1637
  toVersion: 34,
1619
1638
  appliesTo: "component-config",
1620
1639
  apply(rawVars, meta) {
1621
- const renames = meta.component ? RENAMES9[meta.component] : void 0;
1640
+ const renames = meta.component ? RENAMES10[meta.component] : void 0;
1622
1641
  if (!renames) return { ...rawVars };
1623
1642
  const out = {};
1624
1643
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1645,7 +1664,7 @@ var BADGE_SUFFIXES = [
1645
1664
  "icon-size"
1646
1665
  ];
1647
1666
  var CORNERBADGE_SUFFIXES = ["surface", "border", "text"];
1648
- var RENAMES10 = {
1667
+ var RENAMES11 = {
1649
1668
  badge: Object.fromEntries(
1650
1669
  BADGE_SUFFIXES.map((s) => [`--badge-primary-${s}`, `--badge-brand-${s}`])
1651
1670
  ),
@@ -1659,7 +1678,7 @@ var componentMigration_2026_09_13_badgeBrand = {
1659
1678
  toVersion: 35,
1660
1679
  appliesTo: "component-config",
1661
1680
  apply(rawVars, meta) {
1662
- const renames = meta.component ? RENAMES10[meta.component] : void 0;
1681
+ const renames = meta.component ? RENAMES11[meta.component] : void 0;
1663
1682
  if (!renames) return { ...rawVars };
1664
1683
  const out = {};
1665
1684
  for (const [key, value] of Object.entries(rawVars)) {
@@ -1713,7 +1732,8 @@ var MIGRATIONS = [
1713
1732
  componentMigration_2026_09_13_cornerbadgePrefix,
1714
1733
  componentMigration_2026_09_13_toggleLabel,
1715
1734
  componentMigration_2026_09_13_collapsiblesectionOpen,
1716
- componentMigration_2026_09_13_badgeBrand
1735
+ componentMigration_2026_09_13_badgeBrand,
1736
+ componentMigration_2026_09_20_imagelightboxScrim
1717
1737
  ];
1718
1738
  function countFor(kind) {
1719
1739
  return MIGRATIONS.filter((m) => m.appliesTo === kind).length;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CURRENT_COMPONENT_SCHEMA_VERSION
3
- } from "../chunk-REBHE3ZM.js";
3
+ } from "../chunk-6JKUYCPL.js";
4
4
  import {
5
5
  readLiveTokensConfig,
6
6
  resolveDataDirs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motion-proto/live-tokens",
3
- "version": "0.82.0",
3
+ "version": "0.83.0",
4
4
  "type": "module",
5
5
  "description": "Design token editor with live CSS variable editing. Svelte 5 + Vite 8.",
6
6
  "keywords": [
@@ -199,6 +199,8 @@
199
199
  "collapse:theme": "node scripts/collapse-theme-to-default.mjs",
200
200
  "check:smoke-install": "bash scripts/smoke-install.sh",
201
201
  "check:smoke-create": "bash scripts/smoke-create.sh",
202
+ "eval": "bash scripts/eval.sh",
203
+ "build:eval-project": "bash scripts/build-eval-project.sh",
202
204
  "check:smoke-component-tests": "bash scripts/smoke-component-tests.sh",
203
205
  "check:smoke-page-tests": "bash scripts/smoke-page-tests.sh",
204
206
  "prepublishOnly": "npm run check:no-style-imports && npm run check:no-tooling-imports && npm run check:slot-prose && npm run check:overlay-portal && npm run check:editor-font-isolation && npm run check:component-defaults && npm run check:pages && npm run check:production-is-default && npm run check:docs-content && npm run build:lib && npm run check:token-contract && npm run check:preset-themes && npm run check:skills && npm run check:cli-strings && npm run check:skill-sources && npm run check:skill-atlas && npm run check:smoke-install && npm run check:smoke-create && npm run check:smoke-component-tests && npm run check:smoke-page-tests"
@@ -15,7 +15,7 @@
15
15
  { label: 'tile shadow', variable: '--imagelightbox-tile-shadow' },
16
16
  ],
17
17
  overlay: [
18
- { label: 'backdrop color', groupKey: 'surface', variable: '--imagelightbox-overlay-surface' },
18
+ { label: 'scrim color', groupKey: 'surface', variable: '--imagelightbox-scrim-surface' },
19
19
  ],
20
20
  chrome: [
21
21
  { label: 'surface color', groupKey: 'surface', variable: '--imagelightbox-chrome-surface' },