@motion-proto/live-tokens 0.78.0 → 0.79.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 (166) hide show
  1. package/.claude/skills/live-tokens-check-compliance/SKILL.md +60 -31
  2. package/.claude/skills/live-tokens-create-component/SKILL.md +23 -28
  3. package/.claude/skills/live-tokens-create-component/references/contract-tests.md +61 -0
  4. package/.claude/skills/live-tokens-create-component/references/sketch-mode.md +2 -2
  5. package/.claude/skills/live-tokens-create-component/references/token-naming.md +6 -15
  6. package/.claude/skills/live-tokens-create-page/SKILL.md +6 -4
  7. package/.claude/skills/live-tokens-create-theme/references/design-directions.md +1 -1
  8. package/.claude/skills/live-tokens-pick-component/SKILL.md +3 -3
  9. package/.claude/skills/live-tokens-set-colors/references/color-anchors.md +1 -1
  10. package/.claude/skills/live-tokens-set-geometry/SKILL.md +1 -1
  11. package/.claude/skills/live-tokens-set-geometry/references/geometry-anchors.md +1 -1
  12. package/CHANGELOG.md +231 -0
  13. package/README.md +9 -15
  14. package/bin/check-component.mjs +152 -551
  15. package/bin/check-page.mjs +55 -541
  16. package/bin/cli.mjs +59 -13
  17. package/bin/contractRunner.mjs +37 -91
  18. package/bin/lib/catalogue.mjs +161 -34
  19. package/bin/lib/componentSource.mjs +152 -0
  20. package/bin/lib/cssValues.mjs +9 -0
  21. package/bin/lib/dataDir.mjs +126 -0
  22. package/bin/lib/findings.mjs +103 -12
  23. package/bin/lib/fixers.mjs +64 -0
  24. package/bin/lib/geometry.mjs +92 -0
  25. package/bin/lib/pageSource.mjs +230 -0
  26. package/bin/lib/report.mjs +57 -59
  27. package/bin/lib/tokenVocabulary.mjs +104 -34
  28. package/bin/rules/componentStructure.mjs +344 -0
  29. package/bin/rules/componentUse.mjs +313 -0
  30. package/bin/rules/importsAndRoutes.mjs +136 -0
  31. package/bin/rules/testRuns.mjs +122 -0
  32. package/bin/rules/tokens.mjs +363 -0
  33. package/bin/setup-claude.mjs +1 -2
  34. package/dist-plugin/{chunk-PDNL4NC5.js → chunk-D4WRIKEZ.js} +7 -2
  35. package/dist-plugin/{chunk-SWXRVZKT.js → chunk-REBHE3ZM.js} +414 -1
  36. package/dist-plugin/index.cjs +432 -15
  37. package/dist-plugin/index.js +8 -9
  38. package/dist-plugin/migrateData/index.cjs +422 -4
  39. package/dist-plugin/migrateData/index.js +2 -2
  40. package/dist-plugin/setColors/index.cjs +414 -1
  41. package/dist-plugin/setColors/index.d.cts +1 -1
  42. package/dist-plugin/setColors/index.d.ts +1 -1
  43. package/dist-plugin/setColors/index.js +1 -1
  44. package/dist-plugin/setGeometry/index.cjs +423 -13
  45. package/dist-plugin/setGeometry/index.d.cts +3 -3
  46. package/dist-plugin/setGeometry/index.d.ts +3 -3
  47. package/dist-plugin/setGeometry/index.js +10 -13
  48. package/dist-plugin/setType/index.d.cts +1 -1
  49. package/dist-plugin/setType/index.d.ts +1 -1
  50. package/dist-plugin/{themeTypes-BxRtuN5V.d.cts → themeTypes-B8_Idrp4.d.cts} +2 -2
  51. package/dist-plugin/{themeTypes-BxRtuN5V.d.ts → themeTypes-B8_Idrp4.d.ts} +2 -2
  52. package/package.json +2 -2
  53. package/src/editor/component-editor/CalloutEditor.svelte +2 -2
  54. package/src/editor/component-editor/CollapsibleSectionEditor.svelte +14 -15
  55. package/src/editor/component-editor/CornerBadgeEditor.svelte +14 -14
  56. package/src/editor/component-editor/DialogEditor.svelte +5 -5
  57. package/src/editor/component-editor/InlineEditActionsEditor.svelte +2 -2
  58. package/src/editor/component-editor/RadioButtonEditor.svelte +21 -21
  59. package/src/editor/component-editor/SectionDividerEditor.svelte +7 -7
  60. package/src/editor/component-editor/SegmentedControlEditor.svelte +5 -5
  61. package/src/editor/component-editor/SideNavigationEditor.svelte +25 -25
  62. package/src/editor/component-editor/TabBarEditor.svelte +6 -6
  63. package/src/editor/component-editor/TableEditor.svelte +6 -6
  64. package/src/editor/component-editor/ToggleEditor.svelte +2 -2
  65. package/src/editor/component-editor/index.ts +3 -0
  66. package/src/editor/component-editor/registry.ts +57 -1
  67. package/src/editor/component-editor/scaffolding/TokenLayout.svelte +14 -14
  68. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +3 -0
  69. package/src/editor/component-editor/scaffolding/types.ts +15 -0
  70. package/src/editor/core/components/adjustAliases.ts +4 -4
  71. package/src/editor/core/components/aliasKinds.ts +20 -19
  72. package/src/editor/core/sketch/sketchLayer.ts +3 -3
  73. package/src/editor/core/themes/migrateComponentConfig.ts +14 -6
  74. package/src/editor/core/themes/migrations/2026-09-13-badge-brand.ts +42 -0
  75. package/src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts +33 -0
  76. package/src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts +70 -0
  77. package/src/editor/core/themes/migrations/2026-09-13-hairline.ts +92 -0
  78. package/src/editor/core/themes/migrations/2026-09-13-indicator.ts +54 -0
  79. package/src/editor/core/themes/migrations/2026-09-13-sectiondivider-surface.ts +36 -0
  80. package/src/editor/core/themes/migrations/2026-09-13-selected-state.ts +124 -0
  81. package/src/editor/core/themes/migrations/2026-09-13-toggle-label.ts +31 -0
  82. package/src/editor/core/themes/migrations/index.ts +16 -0
  83. package/src/editor/core/themes/themeService.ts +3 -3
  84. package/src/editor/core/themes/themeTypes.ts +13 -15
  85. package/src/editor/docs/Docs.svelte +1 -1
  86. package/src/editor/docs/content/light-and-dark.md +3 -3
  87. package/src/editor/docs/content.generated.ts +1 -1
  88. package/src/editor/index.ts +1 -0
  89. package/src/editor/overlay/LiveEditorOverlay.svelte +15 -0
  90. package/src/editor/skill-atlas/SkillAtlas.svelte +4 -4
  91. package/src/editor/skill-atlas/TreeNodeCard.svelte +4 -4
  92. package/src/editor/skill-atlas/skillSources.generated.ts +11 -14
  93. package/src/editor/skill-atlas/skillTrees.ts +1 -3
  94. package/src/editor/skill-atlas/trees/check-compliance.ts +258 -93
  95. package/src/editor/skill-atlas/trees/create-component.ts +73 -62
  96. package/src/editor/skill-atlas/trees/create-page.ts +38 -17
  97. package/src/editor/skill-atlas/trees/pick-component.ts +3 -3
  98. package/src/editor/skill-atlas/trees/set-geometry.ts +1 -1
  99. package/src/editor/ui/UIPaletteSelector.svelte +11 -15
  100. package/src/editor/ui/variantScales.ts +8 -8
  101. package/src/live-tokens/data/themes/autumn.json +188 -188
  102. package/src/live-tokens/data/themes/halloween.json +188 -188
  103. package/src/live-tokens/data/themes/midnight-study.json +245 -245
  104. package/src/live-tokens/data/themes/ocean.json +188 -188
  105. package/src/live-tokens/data/themes/royal-velvet.json +188 -188
  106. package/src/live-tokens/data/themes/sketchy.json +188 -188
  107. package/src/live-tokens/data/themes/spring-meadow.json +188 -188
  108. package/src/live-tokens/data/themes/sunset.json +188 -188
  109. package/src/system/components/Badge.svelte +27 -23
  110. package/src/system/components/Button.svelte +13 -7
  111. package/src/system/components/Callout.svelte +16 -11
  112. package/src/system/components/Card.svelte +22 -15
  113. package/src/system/components/CodeSnippet.svelte +10 -6
  114. package/src/system/components/CollapsibleSection.svelte +68 -63
  115. package/src/system/components/CornerBadge.svelte +78 -72
  116. package/src/system/components/Dialog.svelte +21 -18
  117. package/src/system/components/IconButton.svelte +13 -9
  118. package/src/system/components/Image.svelte +14 -8
  119. package/src/system/components/ImageLightbox.svelte +10 -6
  120. package/src/system/components/InlineEditActions.svelte +17 -14
  121. package/src/system/components/Input.svelte +13 -7
  122. package/src/system/components/MenuSelect.svelte +13 -7
  123. package/src/system/components/Notification.svelte +17 -11
  124. package/src/system/components/Panel.svelte +13 -6
  125. package/src/system/components/ProgressBar.svelte +10 -5
  126. package/src/system/components/RadioButton.svelte +33 -30
  127. package/src/system/components/SectionDivider.svelte +28 -21
  128. package/src/system/components/SegmentedControl.svelte +27 -23
  129. package/src/system/components/SideNavigation.svelte +175 -171
  130. package/src/system/components/Slider.svelte +11 -7
  131. package/src/system/components/TabBar.svelte +53 -49
  132. package/src/system/components/Table.svelte +20 -15
  133. package/src/system/components/Toggle.svelte +14 -10
  134. package/src/system/components/Tooltip.svelte +10 -6
  135. package/src/system/styles/CONVENTIONS.md +3 -4
  136. package/src/testing-js/chunk-3UKGXCDL.js +48 -0
  137. package/src/testing-js/chunk-3UKGXCDL.js.map +1 -0
  138. package/src/testing-js/{chunk-FAFOAWYL.js → chunk-Q3YIAAG3.js} +17 -3
  139. package/src/testing-js/chunk-Q3YIAAG3.js.map +1 -0
  140. package/src/testing-js/{chunk-GNIUPIU2.js → chunk-U7OJE5DU.js} +18 -18
  141. package/src/testing-js/chunk-U7OJE5DU.js.map +1 -0
  142. package/src/testing-js/{chunk-4JQX6WWL.js → chunk-ZMZQZ33J.js} +474 -166
  143. package/src/testing-js/chunk-ZMZQZ33J.js.map +1 -0
  144. package/src/testing-js/component-behavior.contract.js +155 -0
  145. package/src/testing-js/component-behavior.contract.js.map +1 -0
  146. package/src/testing-js/component-editor.contract.js +6 -4
  147. package/src/testing-js/component-editor.contract.js.map +1 -1
  148. package/src/testing-js/component-render.contract.js +14 -10
  149. package/src/testing-js/component-render.contract.js.map +1 -1
  150. package/src/testing-js/index.d.ts +44 -4
  151. package/src/testing-js/index.js +13 -7
  152. package/src/testing-js/index.js.map +1 -1
  153. package/src/testing-js/page-compliance.contract.js +48 -10
  154. package/src/testing-js/page-compliance.contract.js.map +1 -1
  155. package/src/testing-js/registry.contract.js +5 -3
  156. package/src/testing-js/registry.contract.js.map +1 -1
  157. package/src/testing-js/{vitest-C-wNWcoA.d.ts → vitest-BMLIbDs2.d.ts} +8 -2
  158. package/src/testing-js/vitest.d.ts +1 -1
  159. package/src/testing-js/vitest.js +2 -1
  160. package/template/package.json +1 -1
  161. package/.claude/skills/live-tokens-create-component/SKILL copy.md +0 -196
  162. package/.claude/skills/live-tokens-fix-findings/SKILL.md +0 -105
  163. package/src/editor/skill-atlas/trees/fix-findings.ts +0 -504
  164. package/src/testing-js/chunk-4JQX6WWL.js.map +0 -1
  165. package/src/testing-js/chunk-FAFOAWYL.js.map +0 -1
  166. package/src/testing-js/chunk-GNIUPIU2.js.map +0 -1
@@ -65,11 +65,12 @@ var KIND_RULES = [
65
65
  },
66
66
  { kind: "radius", suffix: ["-radius"], prefix: ["--radius-"] },
67
67
  // Three stroke roles share the `--border-width-*` scale: a border encloses,
68
- // a divider separates, an accent emphasises. `set-geometry` moves each role
69
- // on its own, so a suffix has to say which line it names.
70
- { kind: "divider-width", suffix: ["-divider-width", "-divider-thickness", "-hairline-thickness", "-thickness"] },
71
- { kind: "divider-height", suffix: ["-divider-height", "-track-height"] },
72
- { kind: "divider-inset", suffix: ["-divider-inset", "-inset"] },
68
+ // a hairline separates, an indicator emphasises. `set-geometry` moves each
69
+ // role on its own, so a suffix has to say which line it names.
70
+ { kind: "hairline-width", suffix: ["-hairline-width"] },
71
+ { kind: "indicator-width", suffix: ["-indicator-width"] },
72
+ { kind: "track-height", suffix: ["-track-height"] },
73
+ { kind: "hairline-inset", suffix: ["-hairline-inset"] },
73
74
  { kind: "dot-size", suffix: ["-dot-size"] },
74
75
  { kind: "blur", suffix: ["-blur"], prefix: ["--blur-"] },
75
76
  { kind: "scale", suffix: ["-scale"], prefix: ["--scale-"] },
@@ -78,12 +79,11 @@ var KIND_RULES = [
78
79
  { kind: "gap", suffix: ["-gap"] },
79
80
  { kind: "duration", suffix: ["-duration"], prefix: ["--duration-"] },
80
81
  { kind: "easing", suffix: ["-easing"], prefix: ["--ease-"] },
81
- { kind: "accent-width", suffix: ["-accent-width", "-indicator-width"] },
82
82
  { kind: "border-width", suffix: ["-border-width"], prefix: ["--border-width-"] },
83
83
  { kind: "border", suffix: ["-border"], prefix: ["--border-"] },
84
84
  // A dimension with no more specific name behind it — a panel's width, an
85
85
  // avatar's size. Last of the geometry rules, so every `-border-width`,
86
- // `-divider-height`, `-icon-size` and the rest claim their token first.
86
+ // `-track-height`, `-icon-size` and the rest claim their token first.
87
87
  { kind: "length", suffix: ["-width", "-height", "-size"] },
88
88
  // Fills. A tint is a wash over a surface, so it takes the surface picker: the
89
89
  // full palette with an alpha, not just the tint stops it defaults to.
@@ -92,11 +92,8 @@ var KIND_RULES = [
92
92
  suffix: [
93
93
  "-surface",
94
94
  "-fill",
95
- "-divider",
96
- "-background",
97
95
  "-indicator",
98
96
  "-thumb",
99
- "-accent",
100
97
  "-color",
101
98
  "-tint",
102
99
  "-opacity"
@@ -181,8 +178,8 @@ var SCALES = {
181
178
  padding: { steps: SPACE_STEPS, settable: SPACE_SETTABLE, family: SPACE_FAMILY },
182
179
  gap: { steps: SPACE_STEPS, settable: SPACE_SETTABLE, family: SPACE_FAMILY },
183
180
  "border-width": STROKE_SCALE,
184
- "divider-width": STROKE_SCALE,
185
- "accent-width": STROKE_SCALE
181
+ "hairline-width": STROKE_SCALE,
182
+ "indicator-width": STROKE_SCALE
186
183
  };
187
184
  var TOKEN_NAME = /^--[a-z0-9-]+$/;
188
185
  function stepsFor(op, variable, aliases) {
@@ -1267,6 +1264,411 @@ var componentMigration_2026_09_07_strokeRoleRenames = {
1267
1264
  }
1268
1265
  };
1269
1266
 
1267
+ // src/editor/core/themes/migrations/2026-09-13-selected-state.ts
1268
+ var RADIOBUTTON_SUFFIXES = [
1269
+ "dot-border-color",
1270
+ "dot-border-width",
1271
+ "dot-fill",
1272
+ "dot-size",
1273
+ "label",
1274
+ "label-font-family",
1275
+ "label-font-size",
1276
+ "label-font-weight",
1277
+ "label-line-height"
1278
+ ];
1279
+ var TABBAR_SUFFIXES = [
1280
+ "border",
1281
+ "icon-size",
1282
+ "indicator-width",
1283
+ "padding",
1284
+ "surface",
1285
+ "tab-border-color",
1286
+ "tab-border-width",
1287
+ "tab-bottom-radius",
1288
+ "tab-top-radius",
1289
+ "text",
1290
+ "text-font-family",
1291
+ "text-font-size",
1292
+ "text-font-weight",
1293
+ "text-line-height"
1294
+ ];
1295
+ var SIDENAVIGATION_SUFFIXES = {
1296
+ title: [
1297
+ "accent",
1298
+ "accent-width",
1299
+ "border",
1300
+ "border-width",
1301
+ "label",
1302
+ "label-font-family",
1303
+ "label-font-size",
1304
+ "label-font-weight",
1305
+ "label-line-height",
1306
+ "padding",
1307
+ "surface"
1308
+ ],
1309
+ section: [
1310
+ "accent",
1311
+ "accent-width",
1312
+ "surface",
1313
+ "text",
1314
+ "text-font-family",
1315
+ "text-font-size",
1316
+ "text-font-weight",
1317
+ "text-line-height"
1318
+ ],
1319
+ item: [
1320
+ "accent",
1321
+ "accent-width",
1322
+ "padding",
1323
+ "surface",
1324
+ "text",
1325
+ "text-font-family",
1326
+ "text-font-size",
1327
+ "text-font-weight",
1328
+ "text-line-height"
1329
+ ],
1330
+ footer: [
1331
+ "accent",
1332
+ "accent-width",
1333
+ "gap",
1334
+ "icon",
1335
+ "icon-size",
1336
+ "padding",
1337
+ "surface",
1338
+ "text",
1339
+ "text-font-family",
1340
+ "text-font-size",
1341
+ "text-font-weight",
1342
+ "text-line-height"
1343
+ ]
1344
+ };
1345
+ var RENAMES3 = {
1346
+ radiobutton: Object.fromEntries(
1347
+ RADIOBUTTON_SUFFIXES.map((s) => [`--radiobutton-active-${s}`, `--radiobutton-selected-${s}`])
1348
+ ),
1349
+ tabbar: Object.fromEntries(
1350
+ TABBAR_SUFFIXES.map((s) => [`--tabbar-active-${s}`, `--tabbar-selected-${s}`])
1351
+ ),
1352
+ sidenavigation: Object.fromEntries(
1353
+ Object.entries(SIDENAVIGATION_SUFFIXES).flatMap(
1354
+ ([part, suffixes]) => suffixes.map((s) => [
1355
+ `--sidenavigation-${part}-active-${s}`,
1356
+ `--sidenavigation-${part}-selected-${s}`
1357
+ ])
1358
+ )
1359
+ )
1360
+ };
1361
+ var componentMigration_2026_09_13_selectedState = {
1362
+ id: "2026-09-13-selected-state",
1363
+ fromVersion: 27,
1364
+ toVersion: 28,
1365
+ appliesTo: "component-config",
1366
+ apply(rawVars, meta) {
1367
+ const renames = meta.component ? RENAMES3[meta.component] : void 0;
1368
+ if (!renames) return { ...rawVars };
1369
+ const out = {};
1370
+ for (const [key, value] of Object.entries(rawVars)) {
1371
+ out[renames[key] ?? key] = value;
1372
+ }
1373
+ return out;
1374
+ }
1375
+ };
1376
+
1377
+ // src/editor/core/themes/migrations/2026-09-13-hairline.ts
1378
+ var COLLAPSIBLESECTION_SUFFIXES = [
1379
+ "surface",
1380
+ "hairline-color",
1381
+ "padding",
1382
+ "label",
1383
+ "label-font-family",
1384
+ "label-font-size",
1385
+ "label-font-weight",
1386
+ "label-line-height",
1387
+ "icon",
1388
+ "icon-size"
1389
+ ];
1390
+ var COLLAPSIBLESECTION_STATES = ["default", "hover"];
1391
+ var RENAMES4 = {
1392
+ dialog: {
1393
+ "--dialog-header-divider": "--dialog-header-hairline-color",
1394
+ "--dialog-header-divider-width": "--dialog-header-hairline-width",
1395
+ "--dialog-footer-divider": "--dialog-footer-hairline-color",
1396
+ "--dialog-footer-divider-width": "--dialog-footer-hairline-width"
1397
+ },
1398
+ table: {
1399
+ "--table-default-header-divider": "--table-default-header-hairline-color",
1400
+ "--table-default-header-divider-width": "--table-default-header-hairline-width",
1401
+ "--table-default-row-divider": "--table-default-row-hairline-color",
1402
+ "--table-default-row-divider-width": "--table-default-row-hairline-width",
1403
+ "--table-default-column-divider": "--table-default-column-hairline-color",
1404
+ "--table-default-column-divider-width": "--table-default-column-hairline-width"
1405
+ },
1406
+ tabbar: {
1407
+ "--tabbar-bar-divider": "--tabbar-bar-hairline-color",
1408
+ "--tabbar-bar-divider-thickness": "--tabbar-bar-hairline-width"
1409
+ },
1410
+ segmentedcontrol: {
1411
+ "--segmentedcontrol-divider-color": "--segmentedcontrol-hairline-color",
1412
+ "--segmentedcontrol-divider-thickness": "--segmentedcontrol-hairline-width",
1413
+ "--segmentedcontrol-divider-inset": "--segmentedcontrol-hairline-inset",
1414
+ "--segmentedcontrol-small-divider-thickness": "--segmentedcontrol-small-hairline-width",
1415
+ "--segmentedcontrol-small-divider-inset": "--segmentedcontrol-small-hairline-inset"
1416
+ },
1417
+ collapsiblesection: {
1418
+ ...Object.fromEntries(
1419
+ COLLAPSIBLESECTION_STATES.flatMap((state) => [
1420
+ ...COLLAPSIBLESECTION_SUFFIXES.map((s) => [
1421
+ `--collapsiblesection-divider-${state}-${s}`,
1422
+ `--collapsiblesection-hairline-${state}-${s}`
1423
+ ]),
1424
+ [
1425
+ `--collapsiblesection-divider-${state}-hairline-thickness`,
1426
+ `--collapsiblesection-hairline-${state}-hairline-width`
1427
+ ]
1428
+ ])
1429
+ ),
1430
+ "--collapsiblesection-divider-expanded-padding": "--collapsiblesection-hairline-expanded-padding"
1431
+ },
1432
+ sectiondivider: {
1433
+ "--sectiondivider-lg-hairline-thickness": "--sectiondivider-lg-hairline-width",
1434
+ "--sectiondivider-md-hairline-thickness": "--sectiondivider-md-hairline-width",
1435
+ "--sectiondivider-sm-hairline-thickness": "--sectiondivider-sm-hairline-width"
1436
+ }
1437
+ };
1438
+ var componentMigration_2026_09_13_hairline = {
1439
+ id: "2026-09-13-hairline",
1440
+ fromVersion: 28,
1441
+ toVersion: 29,
1442
+ appliesTo: "component-config",
1443
+ apply(rawVars, meta) {
1444
+ const renames = meta.component ? RENAMES4[meta.component] : void 0;
1445
+ if (!renames) return { ...rawVars };
1446
+ const out = {};
1447
+ for (const [key, value] of Object.entries(rawVars)) {
1448
+ out[renames[key] ?? key] = value;
1449
+ }
1450
+ return out;
1451
+ }
1452
+ };
1453
+
1454
+ // src/editor/core/themes/migrations/2026-09-13-indicator.ts
1455
+ var SIDENAVIGATION_PARTS = ["title", "section", "item", "footer"];
1456
+ var SIDENAVIGATION_STATES = ["default", "hover", "selected"];
1457
+ var CALLOUT_VARIANTS = ["info", "success", "warning", "danger"];
1458
+ var RENAMES5 = {
1459
+ sidenavigation: Object.fromEntries(
1460
+ SIDENAVIGATION_PARTS.flatMap(
1461
+ (part) => SIDENAVIGATION_STATES.flatMap((state) => [
1462
+ [
1463
+ `--sidenavigation-${part}-${state}-accent`,
1464
+ `--sidenavigation-${part}-${state}-indicator`
1465
+ ],
1466
+ [
1467
+ `--sidenavigation-${part}-${state}-accent-width`,
1468
+ `--sidenavigation-${part}-${state}-indicator-width`
1469
+ ]
1470
+ ])
1471
+ )
1472
+ ),
1473
+ callout: Object.fromEntries(
1474
+ CALLOUT_VARIANTS.map((v) => [
1475
+ `--callout-${v}-accent-width`,
1476
+ `--callout-${v}-indicator-width`
1477
+ ])
1478
+ )
1479
+ };
1480
+ var componentMigration_2026_09_13_indicator = {
1481
+ id: "2026-09-13-indicator",
1482
+ fromVersion: 29,
1483
+ toVersion: 30,
1484
+ appliesTo: "component-config",
1485
+ apply(rawVars, meta) {
1486
+ const renames = meta.component ? RENAMES5[meta.component] : void 0;
1487
+ if (!renames) return { ...rawVars };
1488
+ const out = {};
1489
+ for (const [key, value] of Object.entries(rawVars)) {
1490
+ out[renames[key] ?? key] = value;
1491
+ }
1492
+ return out;
1493
+ }
1494
+ };
1495
+
1496
+ // src/editor/core/themes/migrations/2026-09-13-sectiondivider-surface.ts
1497
+ var SECTIONDIVIDER_VARIANTS = ["lg", "md", "sm"];
1498
+ var RENAMES6 = {
1499
+ sectiondivider: Object.fromEntries(
1500
+ SECTIONDIVIDER_VARIANTS.map((v) => [
1501
+ `--sectiondivider-${v}-background`,
1502
+ `--sectiondivider-${v}-surface`
1503
+ ])
1504
+ )
1505
+ };
1506
+ var componentMigration_2026_09_13_sectiondividerSurface = {
1507
+ id: "2026-09-13-sectiondivider-surface",
1508
+ fromVersion: 30,
1509
+ toVersion: 31,
1510
+ appliesTo: "component-config",
1511
+ apply(rawVars, meta) {
1512
+ const renames = meta.component ? RENAMES6[meta.component] : void 0;
1513
+ if (!renames) return { ...rawVars };
1514
+ const out = {};
1515
+ for (const [key, value] of Object.entries(rawVars)) {
1516
+ out[renames[key] ?? key] = value;
1517
+ }
1518
+ return out;
1519
+ }
1520
+ };
1521
+
1522
+ // src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts
1523
+ var RENAMES7 = {
1524
+ cornerbadge: {
1525
+ "--corner-badge-margin": "--cornerbadge-margin",
1526
+ "--corner-badge-outer-radius": "--cornerbadge-outer-radius",
1527
+ "--corner-badge-inner-radius": "--cornerbadge-inner-radius",
1528
+ "--corner-badge-h-axis-radius": "--cornerbadge-h-axis-radius",
1529
+ "--corner-badge-v-axis-radius": "--cornerbadge-v-axis-radius",
1530
+ "--corner-badge-padding": "--cornerbadge-padding",
1531
+ "--corner-badge-text-font-family": "--cornerbadge-text-font-family",
1532
+ "--corner-badge-text-font-size": "--cornerbadge-text-font-size",
1533
+ "--corner-badge-text-font-weight": "--cornerbadge-text-font-weight",
1534
+ "--corner-badge-text-line-height": "--cornerbadge-text-line-height",
1535
+ "--corner-badge-primary-surface": "--cornerbadge-primary-surface",
1536
+ "--corner-badge-primary-border": "--cornerbadge-primary-border",
1537
+ "--corner-badge-primary-text": "--cornerbadge-primary-text",
1538
+ "--corner-badge-accent-surface": "--cornerbadge-accent-surface",
1539
+ "--corner-badge-accent-border": "--cornerbadge-accent-border",
1540
+ "--corner-badge-accent-text": "--cornerbadge-accent-text",
1541
+ "--corner-badge-neutral-surface": "--cornerbadge-neutral-surface",
1542
+ "--corner-badge-neutral-border": "--cornerbadge-neutral-border",
1543
+ "--corner-badge-neutral-text": "--cornerbadge-neutral-text",
1544
+ "--corner-badge-alternate-surface": "--cornerbadge-alternate-surface",
1545
+ "--corner-badge-alternate-border": "--cornerbadge-alternate-border",
1546
+ "--corner-badge-alternate-text": "--cornerbadge-alternate-text",
1547
+ "--corner-badge-canvas-surface": "--cornerbadge-canvas-surface",
1548
+ "--corner-badge-canvas-border": "--cornerbadge-canvas-border",
1549
+ "--corner-badge-canvas-text": "--cornerbadge-canvas-text",
1550
+ "--corner-badge-special-surface": "--cornerbadge-special-surface",
1551
+ "--corner-badge-special-border": "--cornerbadge-special-border",
1552
+ "--corner-badge-special-text": "--cornerbadge-special-text",
1553
+ "--corner-badge-success-surface": "--cornerbadge-success-surface",
1554
+ "--corner-badge-success-border": "--cornerbadge-success-border",
1555
+ "--corner-badge-success-text": "--cornerbadge-success-text",
1556
+ "--corner-badge-warning-surface": "--cornerbadge-warning-surface",
1557
+ "--corner-badge-warning-border": "--cornerbadge-warning-border",
1558
+ "--corner-badge-warning-text": "--cornerbadge-warning-text",
1559
+ "--corner-badge-danger-surface": "--cornerbadge-danger-surface",
1560
+ "--corner-badge-danger-border": "--cornerbadge-danger-border",
1561
+ "--corner-badge-danger-text": "--cornerbadge-danger-text",
1562
+ "--corner-badge-info-surface": "--cornerbadge-info-surface",
1563
+ "--corner-badge-info-border": "--cornerbadge-info-border",
1564
+ "--corner-badge-info-text": "--cornerbadge-info-text"
1565
+ }
1566
+ };
1567
+ var componentMigration_2026_09_13_cornerbadgePrefix = {
1568
+ id: "2026-09-13-cornerbadge-prefix",
1569
+ fromVersion: 31,
1570
+ toVersion: 32,
1571
+ appliesTo: "component-config",
1572
+ apply(rawVars, meta) {
1573
+ const renames = meta.component ? RENAMES7[meta.component] : void 0;
1574
+ if (!renames) return { ...rawVars };
1575
+ const out = {};
1576
+ for (const [key, value] of Object.entries(rawVars)) {
1577
+ out[renames[key] ?? key] = value;
1578
+ }
1579
+ return out;
1580
+ }
1581
+ };
1582
+
1583
+ // src/editor/core/themes/migrations/2026-09-13-toggle-label.ts
1584
+ var RENAMES8 = {
1585
+ toggle: {
1586
+ "--toggle-label-text": "--toggle-label",
1587
+ "--toggle-disabled-label-text": "--toggle-disabled-label"
1588
+ }
1589
+ };
1590
+ var componentMigration_2026_09_13_toggleLabel = {
1591
+ id: "2026-09-13-toggle-label",
1592
+ fromVersion: 32,
1593
+ toVersion: 33,
1594
+ appliesTo: "component-config",
1595
+ apply(rawVars, meta) {
1596
+ const renames = meta.component ? RENAMES8[meta.component] : void 0;
1597
+ if (!renames) return { ...rawVars };
1598
+ const out = {};
1599
+ for (const [key, value] of Object.entries(rawVars)) {
1600
+ out[renames[key] ?? key] = value;
1601
+ }
1602
+ return out;
1603
+ }
1604
+ };
1605
+
1606
+ // src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts
1607
+ var RENAMES9 = {
1608
+ collapsiblesection: {
1609
+ "--collapsiblesection-chromeless-expanded-padding": "--collapsiblesection-chromeless-open-padding",
1610
+ "--collapsiblesection-hairline-expanded-padding": "--collapsiblesection-hairline-open-padding",
1611
+ "--collapsiblesection-container-expanded-surface": "--collapsiblesection-container-open-surface",
1612
+ "--collapsiblesection-container-expanded-padding": "--collapsiblesection-container-open-padding"
1613
+ }
1614
+ };
1615
+ var componentMigration_2026_09_13_collapsiblesectionOpen = {
1616
+ id: "2026-09-13-collapsiblesection-open",
1617
+ fromVersion: 33,
1618
+ toVersion: 34,
1619
+ appliesTo: "component-config",
1620
+ apply(rawVars, meta) {
1621
+ const renames = meta.component ? RENAMES9[meta.component] : void 0;
1622
+ if (!renames) return { ...rawVars };
1623
+ const out = {};
1624
+ for (const [key, value] of Object.entries(rawVars)) {
1625
+ out[renames[key] ?? key] = value;
1626
+ }
1627
+ return out;
1628
+ }
1629
+ };
1630
+
1631
+ // src/editor/core/themes/migrations/2026-09-13-badge-brand.ts
1632
+ var BADGE_SUFFIXES = [
1633
+ "surface",
1634
+ "text",
1635
+ "border",
1636
+ "text-font-family",
1637
+ "text-font-size",
1638
+ "text-font-weight",
1639
+ "text-line-height",
1640
+ "border-width",
1641
+ "radius",
1642
+ "padding",
1643
+ "shadow",
1644
+ "blur",
1645
+ "icon-size"
1646
+ ];
1647
+ var CORNERBADGE_SUFFIXES = ["surface", "border", "text"];
1648
+ var RENAMES10 = {
1649
+ badge: Object.fromEntries(
1650
+ BADGE_SUFFIXES.map((s) => [`--badge-primary-${s}`, `--badge-brand-${s}`])
1651
+ ),
1652
+ cornerbadge: Object.fromEntries(
1653
+ CORNERBADGE_SUFFIXES.map((s) => [`--cornerbadge-primary-${s}`, `--cornerbadge-brand-${s}`])
1654
+ )
1655
+ };
1656
+ var componentMigration_2026_09_13_badgeBrand = {
1657
+ id: "2026-09-13-badge-brand",
1658
+ fromVersion: 34,
1659
+ toVersion: 35,
1660
+ appliesTo: "component-config",
1661
+ apply(rawVars, meta) {
1662
+ const renames = meta.component ? RENAMES10[meta.component] : void 0;
1663
+ if (!renames) return { ...rawVars };
1664
+ const out = {};
1665
+ for (const [key, value] of Object.entries(rawVars)) {
1666
+ out[renames[key] ?? key] = value;
1667
+ }
1668
+ return out;
1669
+ }
1670
+ };
1671
+
1270
1672
  // src/editor/core/themes/migrations/index.ts
1271
1673
  var MIGRATIONS = [
1272
1674
  colorsAndTypeMigration_2026_04_24_legacyKeysAndBgToCanvas,
@@ -1303,7 +1705,15 @@ var MIGRATIONS = [
1303
1705
  componentMigration_2026_09_01_gateSuffixEnabled,
1304
1706
  componentMigration_2026_09_02_sectiondividerDropTitleOutline,
1305
1707
  colorsAndTypeMigration_2026_09_03_dropLegacyComponentKeys,
1306
- componentMigration_2026_09_07_strokeRoleRenames
1708
+ componentMigration_2026_09_07_strokeRoleRenames,
1709
+ componentMigration_2026_09_13_selectedState,
1710
+ componentMigration_2026_09_13_hairline,
1711
+ componentMigration_2026_09_13_indicator,
1712
+ componentMigration_2026_09_13_sectiondividerSurface,
1713
+ componentMigration_2026_09_13_cornerbadgePrefix,
1714
+ componentMigration_2026_09_13_toggleLabel,
1715
+ componentMigration_2026_09_13_collapsiblesectionOpen,
1716
+ componentMigration_2026_09_13_badgeBrand
1307
1717
  ];
1308
1718
  function countFor(kind) {
1309
1719
  return MIGRATIONS.filter((m) => m.appliesTo === kind).length;
@@ -1,8 +1,8 @@
1
- import { A as AliasDiskValue, a as ComponentConfig } from '../themeTypes-BxRtuN5V.cjs';
1
+ import { A as AliasDiskValue, a as ComponentConfig } from '../themeTypes-B8_Idrp4.cjs';
2
2
  export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-BpIK_Obx.cjs';
3
3
  export { C as CURRENT_COMPONENT_SCHEMA_VERSION } from '../index-4N-Orzzi.cjs';
4
4
 
5
- type AdjustKind = 'radius' | 'padding' | 'gap' | 'border-width' | 'divider-width' | 'accent-width';
5
+ type AdjustKind = 'radius' | 'padding' | 'gap' | 'border-width' | 'hairline-width' | 'indicator-width';
6
6
  interface AdjustOp {
7
7
  /** Component id; omitted applies the op to every config. */
8
8
  target?: string;
@@ -37,7 +37,7 @@ interface AdjustResult {
37
37
  }
38
38
  declare function adjustAliases(configs: Record<string, ComponentConfig>, ops: readonly AdjustOp[], now: string): AdjustResult;
39
39
 
40
- type TokenKind = 'surface' | 'border' | 'border-width' | 'divider-width' | 'accent-width' | 'radius' | 'divider-height' | 'divider-inset' | 'dot-size' | 'length' | 'blur' | 'scale' | 'shadow' | 'font-family' | 'font-weight' | 'font-size' | 'line-height' | 'letter-spacing' | 'padding' | 'gap' | 'duration' | 'easing' | 'text-color';
40
+ type TokenKind = 'surface' | 'border' | 'border-width' | 'hairline-width' | 'indicator-width' | 'radius' | 'track-height' | 'hairline-inset' | 'dot-size' | 'length' | 'blur' | 'scale' | 'shadow' | 'font-family' | 'font-weight' | 'font-size' | 'line-height' | 'letter-spacing' | 'padding' | 'gap' | 'duration' | 'easing' | 'text-color';
41
41
  /** Side-aware kind test. Per-side paddings (`--card-default-body-padding-top`)
42
42
  are written by UIPaddingSelector and never declared as editor tokens, so
43
43
  `rawKind` never meets one; the CLI does, and they belong with their parent. */
@@ -1,8 +1,8 @@
1
- import { A as AliasDiskValue, a as ComponentConfig } from '../themeTypes-BxRtuN5V.js';
1
+ import { A as AliasDiskValue, a as ComponentConfig } from '../themeTypes-B8_Idrp4.js';
2
2
  export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-BpIK_Obx.js';
3
3
  export { C as CURRENT_COMPONENT_SCHEMA_VERSION } from '../index-4N-Orzzi.js';
4
4
 
5
- type AdjustKind = 'radius' | 'padding' | 'gap' | 'border-width' | 'divider-width' | 'accent-width';
5
+ type AdjustKind = 'radius' | 'padding' | 'gap' | 'border-width' | 'hairline-width' | 'indicator-width';
6
6
  interface AdjustOp {
7
7
  /** Component id; omitted applies the op to every config. */
8
8
  target?: string;
@@ -37,7 +37,7 @@ interface AdjustResult {
37
37
  }
38
38
  declare function adjustAliases(configs: Record<string, ComponentConfig>, ops: readonly AdjustOp[], now: string): AdjustResult;
39
39
 
40
- type TokenKind = 'surface' | 'border' | 'border-width' | 'divider-width' | 'accent-width' | 'radius' | 'divider-height' | 'divider-inset' | 'dot-size' | 'length' | 'blur' | 'scale' | 'shadow' | 'font-family' | 'font-weight' | 'font-size' | 'line-height' | 'letter-spacing' | 'padding' | 'gap' | 'duration' | 'easing' | 'text-color';
40
+ type TokenKind = 'surface' | 'border' | 'border-width' | 'hairline-width' | 'indicator-width' | 'radius' | 'track-height' | 'hairline-inset' | 'dot-size' | 'length' | 'blur' | 'scale' | 'shadow' | 'font-family' | 'font-weight' | 'font-size' | 'line-height' | 'letter-spacing' | 'padding' | 'gap' | 'duration' | 'easing' | 'text-color';
41
41
  /** Side-aware kind test. Per-side paddings (`--card-default-body-padding-top`)
42
42
  are written by UIPaddingSelector and never declared as editor tokens, so
43
43
  `rawKind` never meets one; the CLI does, and they belong with their parent. */
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CURRENT_COMPONENT_SCHEMA_VERSION
3
- } from "../chunk-SWXRVZKT.js";
3
+ } from "../chunk-REBHE3ZM.js";
4
4
  import {
5
5
  readLiveTokensConfig,
6
6
  resolveDataDirs
@@ -33,11 +33,12 @@ var KIND_RULES = [
33
33
  },
34
34
  { kind: "radius", suffix: ["-radius"], prefix: ["--radius-"] },
35
35
  // Three stroke roles share the `--border-width-*` scale: a border encloses,
36
- // a divider separates, an accent emphasises. `set-geometry` moves each role
37
- // on its own, so a suffix has to say which line it names.
38
- { kind: "divider-width", suffix: ["-divider-width", "-divider-thickness", "-hairline-thickness", "-thickness"] },
39
- { kind: "divider-height", suffix: ["-divider-height", "-track-height"] },
40
- { kind: "divider-inset", suffix: ["-divider-inset", "-inset"] },
36
+ // a hairline separates, an indicator emphasises. `set-geometry` moves each
37
+ // role on its own, so a suffix has to say which line it names.
38
+ { kind: "hairline-width", suffix: ["-hairline-width"] },
39
+ { kind: "indicator-width", suffix: ["-indicator-width"] },
40
+ { kind: "track-height", suffix: ["-track-height"] },
41
+ { kind: "hairline-inset", suffix: ["-hairline-inset"] },
41
42
  { kind: "dot-size", suffix: ["-dot-size"] },
42
43
  { kind: "blur", suffix: ["-blur"], prefix: ["--blur-"] },
43
44
  { kind: "scale", suffix: ["-scale"], prefix: ["--scale-"] },
@@ -46,12 +47,11 @@ var KIND_RULES = [
46
47
  { kind: "gap", suffix: ["-gap"] },
47
48
  { kind: "duration", suffix: ["-duration"], prefix: ["--duration-"] },
48
49
  { kind: "easing", suffix: ["-easing"], prefix: ["--ease-"] },
49
- { kind: "accent-width", suffix: ["-accent-width", "-indicator-width"] },
50
50
  { kind: "border-width", suffix: ["-border-width"], prefix: ["--border-width-"] },
51
51
  { kind: "border", suffix: ["-border"], prefix: ["--border-"] },
52
52
  // A dimension with no more specific name behind it — a panel's width, an
53
53
  // avatar's size. Last of the geometry rules, so every `-border-width`,
54
- // `-divider-height`, `-icon-size` and the rest claim their token first.
54
+ // `-track-height`, `-icon-size` and the rest claim their token first.
55
55
  { kind: "length", suffix: ["-width", "-height", "-size"] },
56
56
  // Fills. A tint is a wash over a surface, so it takes the surface picker: the
57
57
  // full palette with an alpha, not just the tint stops it defaults to.
@@ -60,11 +60,8 @@ var KIND_RULES = [
60
60
  suffix: [
61
61
  "-surface",
62
62
  "-fill",
63
- "-divider",
64
- "-background",
65
63
  "-indicator",
66
64
  "-thumb",
67
- "-accent",
68
65
  "-color",
69
66
  "-tint",
70
67
  "-opacity"
@@ -149,8 +146,8 @@ var SCALES = {
149
146
  padding: { steps: SPACE_STEPS, settable: SPACE_SETTABLE, family: SPACE_FAMILY },
150
147
  gap: { steps: SPACE_STEPS, settable: SPACE_SETTABLE, family: SPACE_FAMILY },
151
148
  "border-width": STROKE_SCALE,
152
- "divider-width": STROKE_SCALE,
153
- "accent-width": STROKE_SCALE
149
+ "hairline-width": STROKE_SCALE,
150
+ "indicator-width": STROKE_SCALE
154
151
  };
155
152
  var TOKEN_NAME = /^--[a-z0-9-]+$/;
156
153
  function stepsFor(op, variable, aliases) {
@@ -1,4 +1,4 @@
1
- import { c as FontStackVariable, C as ColorsAndType, b as FontStack, F as FontSource } from '../themeTypes-BxRtuN5V.cjs';
1
+ import { c as FontStackVariable, C as ColorsAndType, b as FontStack, F as FontSource } from '../themeTypes-B8_Idrp4.cjs';
2
2
  export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-BpIK_Obx.cjs';
3
3
 
4
4
  type PairingSlot = 'display' | 'body' | 'serif' | 'mono' | 'editorial';
@@ -1,4 +1,4 @@
1
- import { c as FontStackVariable, C as ColorsAndType, b as FontStack, F as FontSource } from '../themeTypes-BxRtuN5V.js';
1
+ import { c as FontStackVariable, C as ColorsAndType, b as FontStack, F as FontSource } from '../themeTypes-B8_Idrp4.js';
2
2
  export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-BpIK_Obx.js';
3
3
 
4
4
  type PairingSlot = 'display' | 'body' | 'serif' | 'mono' | 'editorial';
@@ -191,8 +191,8 @@ type LiveSource = 'working' | 'theme';
191
191
  /**
192
192
  * Where a live colors-and-type read resolved from. Unlike `LiveSource`, this
193
193
  * keeps a third value: colors-and-type resolution is unchanged by the theme
194
- * completeness work (docs/plans/theme-completeness.md Wave 4), so `default`
195
- * still answers the one case completeness can't reach — the open theme's
194
+ * completeness work, so `default` still answers the one case completeness
195
+ * can't reach — the open theme's
196
196
  * file itself is unreadable (a stale pointer, or deleted mid-session), so
197
197
  * there is no document to resolve `working` or `theme` against.
198
198
  */
@@ -191,8 +191,8 @@ type LiveSource = 'working' | 'theme';
191
191
  /**
192
192
  * Where a live colors-and-type read resolved from. Unlike `LiveSource`, this
193
193
  * keeps a third value: colors-and-type resolution is unchanged by the theme
194
- * completeness work (docs/plans/theme-completeness.md Wave 4), so `default`
195
- * still answers the one case completeness can't reach — the open theme's
194
+ * completeness work, so `default` still answers the one case completeness
195
+ * can't reach — the open theme's
196
196
  * file itself is unreadable (a stale pointer, or deleted mid-session), so
197
197
  * there is no document to resolve `working` or `theme` against.
198
198
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motion-proto/live-tokens",
3
- "version": "0.78.0",
3
+ "version": "0.79.0",
4
4
  "type": "module",
5
5
  "description": "Design token editor with live CSS variable editing. Svelte 5 + Vite 8.",
6
6
  "keywords": [
@@ -166,7 +166,7 @@
166
166
  "check:overlay-portal": "node scripts/check-overlay-portal.mjs",
167
167
  "check:editor-font-isolation": "node scripts/check-editor-font-isolation.mjs",
168
168
  "check:component-defaults": "node scripts/sync-component-defaults.mjs --check",
169
- "check:pages": "node bin/cli.mjs check-page --strict",
169
+ "check:pages": "node bin/cli.mjs check-page --strict --no-fix",
170
170
  "check:production-is-default": "node scripts/check-production-is-default.mjs",
171
171
  "check:docs-content": "node scripts/sync-docs.mjs --check",
172
172
  "check:token-contract": "node scripts/check-token-contract.mjs",
@@ -12,7 +12,7 @@
12
12
  { label: 'surface color', element: 'frame', groupKey: 'surface', variable: `--callout-${v}-surface` },
13
13
  { label: 'border color', element: 'frame', groupKey: 'border', variable: `--callout-${v}-border` },
14
14
  { label: 'border width', element: 'frame', canBeLinked: true, groupKey: 'border-width', variable: `--callout-${v}-border-width` },
15
- { label: 'accent edge width', element: 'frame', canBeLinked: true, groupKey: 'accent-width', variable: `--callout-${v}-accent-width` },
15
+ { label: 'indicator width', element: 'frame', canBeLinked: true, groupKey: 'indicator-width', variable: `--callout-${v}-indicator-width` },
16
16
  { label: 'corner radius', element: 'frame', canBeLinked: true, groupKey: 'radius', variable: `--callout-${v}-radius` },
17
17
  { label: 'padding', element: 'frame', canBeLinked: true, groupKey: 'padding', variable: `--callout-${v}-padding` },
18
18
  ];
@@ -59,7 +59,7 @@
59
59
  ]);
60
60
 
61
61
  const linkableProps = [
62
- 'border-width', 'accent-width', 'radius', 'padding',
62
+ 'border-width', 'indicator-width', 'radius', 'padding',
63
63
  'label-font-family', 'label-font-size', 'label-font-weight', 'label-line-height',
64
64
  'text-font-family', 'text-font-size', 'text-font-weight', 'text-line-height',
65
65
  ] as const;