@motion-proto/live-tokens 0.6.2 → 0.7.1

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 (212) hide show
  1. package/README.md +14 -13
  2. package/dist-plugin/index.cjs +147 -136
  3. package/dist-plugin/index.d.cts +1 -1
  4. package/dist-plugin/index.d.ts +1 -1
  5. package/dist-plugin/index.js +145 -135
  6. package/package.json +25 -40
  7. package/src/{component-editor → editor/component-editor}/BadgeEditor.svelte +8 -82
  8. package/src/{component-editor → editor/component-editor}/CalloutEditor.svelte +4 -4
  9. package/src/{component-editor → editor/component-editor}/CardEditor.svelte +28 -76
  10. package/src/{component-editor → editor/component-editor}/CollapsibleSectionEditor.svelte +3 -3
  11. package/src/{component-editor → editor/component-editor}/CornerBadgeEditor.svelte +31 -93
  12. package/src/{component-editor → editor/component-editor}/DialogEditor.svelte +60 -57
  13. package/src/editor/component-editor/ImageEditor.svelte +30 -0
  14. package/src/{component-editor → editor/component-editor}/InlineEditActionsEditor.svelte +6 -4
  15. package/src/editor/component-editor/MenuSelectEditor.svelte +160 -0
  16. package/src/{component-editor → editor/component-editor}/NotificationEditor.svelte +64 -37
  17. package/src/{component-editor → editor/component-editor}/ProgressBarEditor.svelte +5 -4
  18. package/src/{component-editor → editor/component-editor}/RadioButtonEditor.svelte +3 -3
  19. package/src/{component-editor → editor/component-editor}/SectionDividerEditor.svelte +57 -84
  20. package/src/{component-editor → editor/component-editor}/SegmentedControlEditor.svelte +2 -2
  21. package/src/{component-editor → editor/component-editor}/StandardButtonsEditor.svelte +16 -20
  22. package/src/{component-editor → editor/component-editor}/TabBarEditor.svelte +9 -14
  23. package/src/{component-editor → editor/component-editor}/TableEditor.svelte +9 -18
  24. package/src/{component-editor → editor/component-editor}/TooltipEditor.svelte +11 -47
  25. package/src/{component-editor → editor/component-editor}/registry.ts +28 -18
  26. package/src/{component-editor → editor/component-editor}/scaffolding/AngleDial.svelte +2 -2
  27. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentEditorBase.svelte +3 -51
  28. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileManager.svelte +144 -416
  29. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileMenu.svelte +18 -170
  30. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentsTab.svelte +2 -2
  31. package/src/{component-editor → editor/component-editor}/scaffolding/CopyFromMenu.svelte +44 -4
  32. package/src/{component-editor → editor/component-editor}/scaffolding/DividerEditor.svelte +1 -1
  33. package/src/{component-editor → editor/component-editor}/scaffolding/FieldsetWrapper.svelte +1 -1
  34. package/src/{component-editor → editor/component-editor}/scaffolding/GradientCard.svelte +6 -6
  35. package/src/{component-editor → editor/component-editor}/scaffolding/LinkageChart.svelte +6 -6
  36. package/src/{component-editor → editor/component-editor}/scaffolding/LinkedBlock.svelte +6 -11
  37. package/src/editor/component-editor/scaffolding/NonStylableConfig.svelte +38 -0
  38. package/src/{component-editor → editor/component-editor}/scaffolding/SaveAsDialog.svelte +66 -12
  39. package/src/editor/component-editor/scaffolding/ShadowBackdrop.svelte +72 -0
  40. package/src/editor/component-editor/scaffolding/ShadowBackdropControls.svelte +132 -0
  41. package/src/editor/component-editor/scaffolding/StateBlock.svelte +257 -0
  42. package/src/{component-editor → editor/component-editor}/scaffolding/TokenLayout.svelte +9 -7
  43. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +644 -0
  44. package/src/{component-editor → editor/component-editor}/scaffolding/editorContext.ts +19 -9
  45. package/src/{component-editor → editor/component-editor}/scaffolding/linkedBlock.ts +2 -2
  46. package/src/{component-editor → editor/component-editor}/scaffolding/types.ts +14 -0
  47. package/src/{lib → editor/core/components}/componentConfigService.ts +2 -2
  48. package/src/{lib → editor/core/components}/componentPersist.ts +5 -5
  49. package/src/editor/core/flashStatus.ts +30 -0
  50. package/src/{lib → editor/core/fonts}/fontLoader.ts +2 -2
  51. package/src/{lib → editor/core/fonts}/fontMigration.ts +4 -4
  52. package/src/{lib → editor/core/fonts}/fontParse.ts +1 -1
  53. package/src/editor/core/manifests/manifestService.ts +116 -0
  54. package/src/{lib → editor/core/palettes}/paletteDerivation.ts +2 -2
  55. package/src/{lib → editor/core/palettes}/tokenRegistry.ts +5 -5
  56. package/src/editor/core/productionPulse.ts +37 -0
  57. package/src/{lib → editor/core/routing}/router.ts +1 -1
  58. package/src/{lib/files/versionedFileResource.ts → editor/core/storage/files/versionedFileResourceClient.ts} +8 -1
  59. package/src/{lib → editor/core/store}/editorCore.ts +24 -8
  60. package/src/{lib → editor/core/store}/editorPersistence.ts +3 -3
  61. package/src/{lib → editor/core/store}/editorRenderer.ts +2 -2
  62. package/src/{lib → editor/core/store}/editorStore.ts +17 -17
  63. package/src/{lib → editor/core/store}/editorTypes.ts +1 -1
  64. package/src/{lib → editor/core/themes}/slices/columns.ts +2 -2
  65. package/src/{lib → editor/core/themes}/slices/components.ts +2 -2
  66. package/src/{lib → editor/core/themes}/slices/fonts.ts +1 -1
  67. package/src/{lib → editor/core/themes}/slices/gradients.ts +2 -2
  68. package/src/{lib → editor/core/themes}/slices/overlays.ts +1 -1
  69. package/src/{lib → editor/core/themes}/slices/palettes.ts +1 -1
  70. package/src/{lib → editor/core/themes}/slices/shadows.ts +3 -3
  71. package/src/{lib → editor/core/themes}/themeInit.ts +6 -6
  72. package/src/{lib → editor/core/themes}/themeService.ts +6 -6
  73. package/src/{lib → editor/core/themes}/themeTypes.ts +11 -7
  74. package/src/editor/index.ts +69 -0
  75. package/src/{lib → editor/overlay}/LiveEditorOverlay.svelte +79 -125
  76. package/src/{lib → editor/overlay}/columnsOverlay.ts +2 -2
  77. package/src/{pages → editor/pages}/ComponentEditorPage.svelte +12 -12
  78. package/src/{pages → editor/pages}/Editor.svelte +4 -4
  79. package/src/{pages → editor/pages}/EditorShell.svelte +18 -36
  80. package/src/{styles → editor/styles}/ui-editor.css +41 -21
  81. package/src/{styles → editor/styles}/ui-form-controls.css +8 -8
  82. package/src/{ui → editor/ui}/BezierCurveEditor.svelte +8 -8
  83. package/src/{ui → editor/ui}/ColorEditPanel.svelte +13 -13
  84. package/src/{ui → editor/ui}/EditorViewSwitcher.svelte +8 -6
  85. package/src/editor/ui/FileLoadList.svelte +350 -0
  86. package/src/editor/ui/FilePill.svelte +80 -0
  87. package/src/{ui → editor/ui}/FontStackEditor.svelte +7 -7
  88. package/src/{ui → editor/ui}/GradientEditor.svelte +11 -11
  89. package/src/{ui → editor/ui}/GradientStopPicker.svelte +1 -1
  90. package/src/editor/ui/ManifestFileManager.svelte +371 -0
  91. package/src/{ui → editor/ui}/PaletteEditor.svelte +132 -598
  92. package/src/{ui → editor/ui}/ProjectFontsSection.svelte +102 -144
  93. package/src/{ui → editor/ui}/SurfacesTab.svelte +3 -3
  94. package/src/{ui → editor/ui}/TextTab.svelte +3 -3
  95. package/src/{ui → editor/ui}/ThemeFileManager.svelte +286 -519
  96. package/src/{ui → editor/ui}/UICopyPopover.svelte +4 -4
  97. package/src/{ui → editor/ui}/UIFontFamilySelector.svelte +6 -6
  98. package/src/{ui → editor/ui}/UIFontSizeSelector.svelte +1 -1
  99. package/src/editor/ui/UIInfoPopover.svelte +244 -0
  100. package/src/{ui → editor/ui}/UILineHeightSelector.svelte +5 -5
  101. package/src/{ui → editor/ui}/UILinkToggle.svelte +2 -2
  102. package/src/{ui → editor/ui}/UIPaddingSelector.svelte +6 -6
  103. package/src/{ui → editor/ui}/UIPaletteSelector.svelte +26 -26
  104. package/src/editor/ui/UIPillButton.svelte +138 -0
  105. package/src/{ui → editor/ui}/UIRadio.svelte +2 -2
  106. package/src/{ui → editor/ui}/UIRelinkConfirmPopover.svelte +4 -4
  107. package/src/editor/ui/UISquareButton.svelte +172 -0
  108. package/src/{ui → editor/ui}/UITokenSelector.svelte +10 -10
  109. package/src/{ui → editor/ui}/UIVariantSelector.svelte +1 -1
  110. package/src/{ui → editor/ui}/VariablesTab.svelte +31 -8
  111. package/src/{ui → editor/ui}/palette/GradientStopEditor.svelte +13 -13
  112. package/src/{ui → editor/ui}/palette/OverridesPanel.svelte +13 -13
  113. package/src/{ui → editor/ui}/palette/PaletteBase.svelte +8 -5
  114. package/src/{ui → editor/ui}/palette/paletteEditorState.ts +1 -1
  115. package/src/editor/ui/palette/paletteMath.ts +275 -0
  116. package/src/{ui → editor/ui}/sections/ColumnsSection.svelte +137 -17
  117. package/src/{ui → editor/ui}/sections/GradientsSection.svelte +7 -7
  118. package/src/{ui → editor/ui}/sections/OverlaysSection.svelte +17 -17
  119. package/src/{ui → editor/ui}/sections/ShadowsSection.svelte +22 -22
  120. package/src/{ui → editor/ui}/sections/TokenScaleTable.svelte +3 -3
  121. package/src/{components → system/components}/Badge.svelte +0 -36
  122. package/src/{components → system/components}/Card.svelte +8 -62
  123. package/src/{components → system/components}/CornerBadge.svelte +8 -24
  124. package/src/{components → system/components}/Dialog.svelte +1 -1
  125. package/src/system/components/FloatingTokenTags.css +256 -0
  126. package/src/system/components/FloatingTokenTags.svelte +592 -0
  127. package/src/{components → system/components}/InlineEditActions.svelte +6 -4
  128. package/src/system/components/MenuSelect.svelte +229 -0
  129. package/src/{components → system/components}/ProgressBar.svelte +29 -11
  130. package/src/{components → system/components}/SegmentedControl.svelte +49 -43
  131. package/src/{components → system/components}/TabBar.svelte +81 -65
  132. package/src/{components → system/components}/Table.svelte +17 -3
  133. package/src/{components → system/components}/Tooltip.svelte +6 -4
  134. package/src/system/styles/CONVENTIONS.md +178 -0
  135. package/src/{styles → system/styles}/fonts.css +6 -3
  136. package/src/{styles → system/styles}/tokens.css +149 -29
  137. package/src/component-editor/ImageEditor.svelte +0 -74
  138. package/src/component-editor/scaffolding/NonStylableConfig.svelte +0 -62
  139. package/src/component-editor/scaffolding/ShadowBackdrop.svelte +0 -37
  140. package/src/component-editor/scaffolding/ShadowBackdropControls.svelte +0 -61
  141. package/src/component-editor/scaffolding/StateBlock.svelte +0 -132
  142. package/src/component-editor/scaffolding/VariantGroup.svelte +0 -310
  143. package/src/data/google-fonts.json +0 -75
  144. package/src/lib/index.ts +0 -68
  145. package/src/lib/presetService.ts +0 -214
  146. package/src/lib/productionPulse.ts +0 -32
  147. package/src/ui/PresetFileManager.svelte +0 -1116
  148. package/src/ui/UnsavedComponentsDialog.svelte +0 -315
  149. /package/src/{styles → app}/site.css +0 -0
  150. /package/src/{component-editor → editor/component-editor}/index.ts +0 -0
  151. /package/src/{component-editor → editor/component-editor}/scaffolding/DemoHeader.svelte +0 -0
  152. /package/src/{component-editor → editor/component-editor}/scaffolding/TypeEditor.svelte +0 -0
  153. /package/src/{component-editor → editor/component-editor}/scaffolding/buildTypeGroupTokens.ts +0 -0
  154. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSectionType.ts +0 -0
  155. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSources.ts +0 -0
  156. /package/src/{component-editor → editor/component-editor}/scaffolding/defaultSections.ts +0 -0
  157. /package/src/{component-editor → editor/component-editor}/scaffolding/siblings.ts +0 -0
  158. /package/src/{lib → editor/core/components}/componentConfigKeys.ts +0 -0
  159. /package/src/{lib → editor/core}/cssVarSync.ts +0 -0
  160. /package/src/{lib → editor/core/palettes}/oklch.ts +0 -0
  161. /package/src/{lib → editor/core/routing}/navLinkTypes.ts +0 -0
  162. /package/src/{lib → editor/core/routing}/parentRouteStore.ts +0 -0
  163. /package/src/{lib → editor/core/storage}/storage.ts +0 -0
  164. /package/src/{lib → editor/core/store}/editorConfig.ts +0 -0
  165. /package/src/{lib → editor/core/store}/editorConfigStore.ts +0 -0
  166. /package/src/{lib → editor/core/store}/editorKeybindings.ts +0 -0
  167. /package/src/{lib → editor/core/store}/editorViewStore.ts +0 -0
  168. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-component-prefix-and-suffix-renames.ts +0 -0
  169. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-legacy-keys-and-bg-to-canvas.ts +0 -0
  170. /package/src/{lib → editor/core/themes}/migrations/2026-04-27-segmentedcontrol-disabled-flatten.ts +0 -0
  171. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-frame-and-cleanup.ts +0 -0
  172. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-variant-namespace.ts +0 -0
  173. /package/src/{lib → editor/core/themes}/migrations/2026-05-10-sectiondivider-gradient-stops.ts +0 -0
  174. /package/src/{lib → editor/core/themes}/migrations/2026-05-13-primary-to-brand.ts +0 -0
  175. /package/src/{lib → editor/core/themes}/migrations/index.ts +0 -0
  176. /package/src/{lib → editor/core/themes}/parsers/globalRootBlock.ts +0 -0
  177. /package/src/{lib → editor/core/themes}/slices/domainVars.ts +0 -0
  178. /package/src/{lib → editor/overlay}/ColumnsOverlay.svelte +0 -0
  179. /package/src/{lib → editor/overlay}/overlayState.ts +0 -0
  180. /package/src/{pages → editor/pages}/ComponentEditorPage.svelte.d.ts +0 -0
  181. /package/src/{pages → editor/pages}/Editor.svelte.d.ts +0 -0
  182. /package/src/{ui → editor/ui}/Toggle.svelte +0 -0
  183. /package/src/{ui → editor/ui}/UIDialog.svelte +0 -0
  184. /package/src/{ui → editor/ui}/UIFontWeightSelector.svelte +0 -0
  185. /package/src/{ui → editor/ui}/UIOptionItem.svelte +0 -0
  186. /package/src/{ui → editor/ui}/UIOptionList.svelte +0 -0
  187. /package/src/{ui → editor/ui}/UIRadioGroup.svelte +0 -0
  188. /package/src/{lib → editor/ui}/copyPopover.ts +0 -0
  189. /package/src/{ui → editor/ui}/curveEngine.ts +0 -0
  190. /package/src/{ui → editor/ui}/index.ts +0 -0
  191. /package/src/{ui → editor/ui}/keepInViewport.ts +0 -0
  192. /package/src/{ui → editor/ui}/palette/ScaleCurveEditor.svelte +0 -0
  193. /package/src/{lib → editor/ui}/scrollSection.ts +0 -0
  194. /package/src/{ui → editor/ui}/sections/tokenScales.ts +0 -0
  195. /package/src/{ui → editor/ui}/variantScales.ts +0 -0
  196. /package/src/{assets → system/assets}/newspaper.webp +0 -0
  197. /package/src/{assets → system/assets}/offering.webp +0 -0
  198. /package/src/{components → system/components}/Button.svelte +0 -0
  199. /package/src/{components → system/components}/Callout.svelte +0 -0
  200. /package/src/{components → system/components}/CollapsibleSection.svelte +0 -0
  201. /package/src/{components → system/components}/Image.svelte +0 -0
  202. /package/src/{components → system/components}/Notification.svelte +0 -0
  203. /package/src/{components → system/components}/RadioButton.svelte +0 -0
  204. /package/src/{components → system/components}/SectionDivider.svelte +0 -0
  205. /package/src/{components → system/components}/types.ts +0 -0
  206. /package/src/{styles → system/styles}/_padding.scss +0 -0
  207. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin-ext.woff2 +0 -0
  208. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin.woff2 +0 -0
  209. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin-ext.woff2 +0 -0
  210. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin.woff2 +0 -0
  211. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin-ext.woff2 +0 -0
  212. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin.woff2 +0 -0
@@ -1,8 +1,8 @@
1
- // src/vite-plugin/themeFileApi.ts
1
+ // vite-plugin/themeFileApi.ts
2
2
  import fs2 from "fs";
3
3
  import path2 from "path";
4
4
 
5
- // src/lib/parsers/globalRootBlock.ts
5
+ // src/editor/core/themes/parsers/globalRootBlock.ts
6
6
  function extractGlobalRootBody(source) {
7
7
  const re = /:global\(:root\)\s*\{([^}]*)\}/g;
8
8
  const bodies = [];
@@ -13,12 +13,12 @@ function extractGlobalRootBody(source) {
13
13
  return bodies.join("\n");
14
14
  }
15
15
 
16
- // src/lib/files/versionedFileResource.ts
16
+ // src/editor/core/storage/files/versionedFileResourceClient.ts
17
17
  function sanitizeFileName(name) {
18
18
  return name.toLowerCase().trim().replace(/\s+/g, "-").replace(/[^a-z0-9\-_]/g, "").replace(/-+/g, "-").replace(/^-|-$/g, "") || "unnamed";
19
19
  }
20
20
 
21
- // src/vite-plugin/files/versionedFileResource.ts
21
+ // vite-plugin/files/versionedFileResourceServer.ts
22
22
  import fs from "fs";
23
23
  import path from "path";
24
24
  function versionedFileResourceServer(opts) {
@@ -78,7 +78,7 @@ function versionedFileResourceServer(opts) {
78
78
  };
79
79
  }
80
80
 
81
- // src/vite-plugin/files/routeTable.ts
81
+ // vite-plugin/files/routeTable.ts
82
82
  async function dispatch(req, res, routes) {
83
83
  const url = req.url || "";
84
84
  const method = req.method || "GET";
@@ -106,16 +106,34 @@ async function dispatch(req, res, routes) {
106
106
  return false;
107
107
  }
108
108
 
109
- // src/vite-plugin/themeFileApi.ts
110
- var PKG_VERSION = true ? "0.6.2" : "";
109
+ // vite-plugin/themeFileApi.ts
110
+ import { fileURLToPath } from "url";
111
+ var PKG_VERSION = (() => {
112
+ try {
113
+ let dir = path2.dirname(fileURLToPath(import.meta.url));
114
+ for (let i = 0; i < 4; i++) {
115
+ const p = path2.join(dir, "package.json");
116
+ if (fs2.existsSync(p)) {
117
+ const json = JSON.parse(fs2.readFileSync(p, "utf-8"));
118
+ if (json?.name === "@motion-proto/live-tokens") return json.version ?? "";
119
+ }
120
+ const up = path2.dirname(dir);
121
+ if (up === dir) break;
122
+ dir = up;
123
+ }
124
+ } catch {
125
+ }
126
+ return "";
127
+ })();
111
128
  function themeFileApi(opts) {
112
129
  const THEMES_DIR = path2.resolve(opts.themesDir);
113
130
  const CSS_PATH = path2.resolve(opts.tokensCssPath);
114
131
  const FONTS_CSS_PATH = opts.fontsCssPath ? path2.resolve(opts.fontsCssPath) : path2.join(path2.dirname(CSS_PATH), "fonts.css");
115
132
  const API_BASE = opts.apiBase ?? "/api";
116
133
  const COMPONENT_CONFIGS_DIR = opts.componentConfigsDir ? path2.resolve(opts.componentConfigsDir) : path2.resolve("component-configs");
117
- const COMPONENTS_SRC_DIR = opts.componentsSrcDir ? path2.resolve(opts.componentsSrcDir) : path2.resolve("src/components");
118
- const PRESETS_DIR = opts.presetsDir ? path2.resolve(opts.presetsDir) : path2.resolve("presets");
134
+ const COMPONENTS_SRC_DIR = opts.componentsSrcDir ? path2.resolve(opts.componentsSrcDir) : path2.resolve("src/system/components");
135
+ const MANIFESTS_DIR = opts.manifestsDir ? path2.resolve(opts.manifestsDir) : path2.resolve("manifests");
136
+ const LEGACY_PRESETS_DIR = path2.resolve("presets");
119
137
  const themesResource = versionedFileResourceServer({
120
138
  dir: THEMES_DIR
121
139
  });
@@ -128,7 +146,7 @@ function themeFileApi(opts) {
128
146
  }
129
147
  return r;
130
148
  }
131
- const presetsResource = versionedFileResourceServer({ dir: PRESETS_DIR });
149
+ const manifestsResource = versionedFileResourceServer({ dir: MANIFESTS_DIR });
132
150
  function ensureThemesDir() {
133
151
  themesResource.ensureDir();
134
152
  if (!fs2.existsSync(path2.join(THEMES_DIR, "default.json"))) {
@@ -324,25 +342,63 @@ ${newVars}
324
342
  r.ensureMeta();
325
343
  }
326
344
  }
327
- function ensurePresetsDir() {
328
- presetsResource.ensureDir();
329
- const defaultPath = path2.join(PRESETS_DIR, "default.json");
345
+ function ensureManifestsDir() {
346
+ if (!fs2.existsSync(MANIFESTS_DIR) && fs2.existsSync(LEGACY_PRESETS_DIR)) {
347
+ fs2.renameSync(LEGACY_PRESETS_DIR, MANIFESTS_DIR);
348
+ const legacyProd = path2.join(MANIFESTS_DIR, "_production.json");
349
+ if (fs2.existsSync(legacyProd)) fs2.unlinkSync(legacyProd);
350
+ }
351
+ manifestsResource.ensureDir();
352
+ const defaultPath = path2.join(MANIFESTS_DIR, "default.json");
330
353
  if (!fs2.existsSync(defaultPath)) {
331
354
  const componentConfigs = {};
332
355
  for (const comp of listComponentNames()) {
333
356
  componentConfigs[comp] = componentResource(comp).getActiveName();
334
357
  }
335
358
  const now = (/* @__PURE__ */ new Date()).toISOString();
336
- const defaultPreset = {
337
- name: "Default Preset",
359
+ const defaultManifest = {
360
+ name: "Default",
338
361
  createdAt: now,
339
362
  updatedAt: now,
340
363
  theme: themesResource.getActiveName(),
341
364
  componentConfigs
342
365
  };
343
- fs2.writeFileSync(defaultPath, JSON.stringify(defaultPreset, null, 2));
366
+ fs2.writeFileSync(defaultPath, JSON.stringify(defaultManifest, null, 2));
367
+ }
368
+ if (!fs2.existsSync(manifestsResource.activePath)) {
369
+ fs2.writeFileSync(
370
+ manifestsResource.activePath,
371
+ JSON.stringify({ activeFile: "default" })
372
+ );
373
+ } else {
374
+ const activeName = manifestsResource.getActiveName();
375
+ if (!fs2.existsSync(manifestsResource.filePath(activeName))) {
376
+ manifestsResource.setActiveName("default");
377
+ }
344
378
  }
345
- presetsResource.ensureMeta();
379
+ const stragglerProd = path2.join(MANIFESTS_DIR, "_production.json");
380
+ if (fs2.existsSync(stragglerProd)) fs2.unlinkSync(stragglerProd);
381
+ }
382
+ function patchActiveManifest(field, comp, fileName) {
383
+ const activeFile = manifestsResource.getActiveName();
384
+ if (activeFile === "default") return false;
385
+ const manifestPath = manifestsResource.filePath(activeFile);
386
+ if (!fs2.existsSync(manifestPath)) return false;
387
+ let manifest;
388
+ try {
389
+ manifest = JSON.parse(fs2.readFileSync(manifestPath, "utf-8"));
390
+ } catch {
391
+ return false;
392
+ }
393
+ if (field === "theme") {
394
+ manifest.theme = fileName;
395
+ } else if (field === "component" && comp) {
396
+ manifest.componentConfigs = manifest.componentConfigs ?? {};
397
+ manifest.componentConfigs[comp] = fileName;
398
+ }
399
+ manifest.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
400
+ fs2.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
401
+ return true;
346
402
  }
347
403
  function readComponentConfig(comp, name) {
348
404
  const filePath = componentResource(comp).filePath(name);
@@ -407,16 +463,15 @@ ${COMPONENT_OVERRIDES_END}
407
463
  const THEMES_ACTIVE_ROUTE = `${API_BASE}/themes/active`;
408
464
  const THEMES_PRODUCTION_ROUTE = `${API_BASE}/themes/production`;
409
465
  const COMPONENT_CONFIGS_ROUTE = `${API_BASE}/component-configs`;
410
- const PRESETS_ROUTE = `${API_BASE}/presets`;
411
- const PRESETS_ACTIVE_ROUTE = `${API_BASE}/presets/active`;
412
- const PRESETS_PRODUCTION_ROUTE = `${API_BASE}/presets/production`;
466
+ const MANIFESTS_ROUTE = `${API_BASE}/manifests`;
467
+ const MANIFESTS_ACTIVE_ROUTE = `${API_BASE}/manifests/active`;
413
468
  const THEME_BY_NAME_REGEX = new RegExp(`^${escapedBase}/themes/([a-z0-9\\-_]+)$`);
414
469
  const COMP_LIST_REGEX = new RegExp(`^${escapedBase}/component-configs/([a-z0-9\\-_]+)$`);
415
470
  const COMP_ACTIVE_REGEX = new RegExp(`^${escapedBase}/component-configs/([a-z0-9\\-_]+)/active$`);
416
471
  const COMP_PRODUCTION_REGEX = new RegExp(`^${escapedBase}/component-configs/([a-z0-9\\-_]+)/production$`);
417
472
  const COMP_BY_NAME_REGEX = new RegExp(`^${escapedBase}/component-configs/([a-z0-9\\-_]+)/([a-z0-9\\-_]+)$`);
418
- const PRESET_APPLY_REGEX = new RegExp(`^${escapedBase}/presets/([a-z0-9\\-_]+)/apply$`);
419
- const PRESET_BY_NAME_REGEX = new RegExp(`^${escapedBase}/presets/([a-z0-9\\-_]+)$`);
473
+ const MANIFEST_APPLY_REGEX = new RegExp(`^${escapedBase}/manifests/([a-z0-9\\-_]+)/apply$`);
474
+ const MANIFEST_BY_NAME_REGEX = new RegExp(`^${escapedBase}/manifests/([a-z0-9\\-_]+)$`);
420
475
  async function handleListThemes(_ctx) {
421
476
  const activeFile = themesResource.getActiveName();
422
477
  const files = fs2.readdirSync(THEMES_DIR).filter((f) => f.endsWith(".json") && !f.startsWith("_")).map((f) => {
@@ -475,10 +530,18 @@ ${COMPONENT_OVERRIDES_END}
475
530
  jsonResponse(res, 404, { error: "Theme not found" });
476
531
  return;
477
532
  }
533
+ if (manifestsResource.getActiveName() === "default") {
534
+ jsonResponse(res, 409, {
535
+ error: "Active manifest is protected. Save As first.",
536
+ code: "ACTIVE_IS_PROTECTED"
537
+ });
538
+ return;
539
+ }
478
540
  themesResource.setProductionName(fileName);
479
541
  syncTokensToCss(fileName);
480
542
  syncFontsToCss(fileName);
481
543
  syncComponentsToCss();
544
+ patchActiveManifest("theme", null, fileName);
482
545
  const data = JSON.parse(fs2.readFileSync(themesResource.filePath(fileName), "utf-8"));
483
546
  jsonResponse(res, 200, {
484
547
  ok: true,
@@ -525,6 +588,13 @@ ${COMPONENT_OVERRIDES_END}
525
588
  jsonResponse(res, 403, { error: "Cannot delete the default theme" });
526
589
  return;
527
590
  }
591
+ if (themesResource.getProductionName() === fileName) {
592
+ jsonResponse(res, 403, {
593
+ error: "Cannot delete the production theme. Adopt a different theme first.",
594
+ code: "PRODUCTION_THEME"
595
+ });
596
+ return;
597
+ }
528
598
  if (fs2.existsSync(filePath)) {
529
599
  fs2.unlinkSync(filePath);
530
600
  if (themesResource.getActiveName() === fileName) {
@@ -592,9 +662,17 @@ ${COMPONENT_OVERRIDES_END}
592
662
  jsonResponse(res, 404, { error: "Config not found" });
593
663
  return;
594
664
  }
665
+ if (manifestsResource.getActiveName() === "default") {
666
+ jsonResponse(res, 409, {
667
+ error: "Active manifest is protected. Save As first.",
668
+ code: "ACTIVE_IS_PROTECTED"
669
+ });
670
+ return;
671
+ }
595
672
  r.ensureDir();
596
673
  r.setProductionName(fileName);
597
674
  syncComponentsToCss();
675
+ patchActiveManifest("component", comp, fileName);
598
676
  const cfg = readComponentConfig(comp, fileName);
599
677
  jsonResponse(res, 200, {
600
678
  ok: true,
@@ -684,112 +762,46 @@ ${COMPONENT_OVERRIDES_END}
684
762
  });
685
763
  jsonResponse(res, 200, { component: comp, files, activeFile, productionFile });
686
764
  }
687
- async function handleListPresets({ res }) {
688
- const activeFile = presetsResource.getActiveName();
689
- const files = fs2.readdirSync(PRESETS_DIR).filter((f) => f.endsWith(".json") && !f.startsWith("_")).map((f) => {
690
- const filePath = path2.join(PRESETS_DIR, f);
765
+ async function handleListManifests({ res }) {
766
+ const activeFile = manifestsResource.getActiveName();
767
+ const files = fs2.readdirSync(MANIFESTS_DIR).filter((f) => f.endsWith(".json") && !f.startsWith("_")).map((f) => {
768
+ const filePath = path2.join(MANIFESTS_DIR, f);
691
769
  const data = JSON.parse(fs2.readFileSync(filePath, "utf-8"));
692
770
  const fileName = f.replace(".json", "");
693
771
  return {
694
772
  name: data.name || fileName,
695
773
  fileName,
696
774
  updatedAt: data.updatedAt || "",
697
- isActive: fileName === activeFile
775
+ isActive: fileName === activeFile,
776
+ isProtected: fileName === "default"
698
777
  };
699
778
  });
700
779
  jsonResponse(res, 200, { files, activeFile });
701
780
  }
702
- async function handleGetActivePreset({ res }) {
703
- const activeFile = presetsResource.getActiveName();
704
- const filePath = presetsResource.filePath(activeFile);
781
+ async function handleGetActiveManifest({ res }) {
782
+ const activeFile = manifestsResource.getActiveName();
783
+ const filePath = manifestsResource.filePath(activeFile);
705
784
  if (!fs2.existsSync(filePath)) {
706
- jsonResponse(res, 404, { error: "Active preset not found" });
785
+ jsonResponse(res, 404, { error: "Active manifest not found" });
707
786
  return;
708
787
  }
709
788
  const data = JSON.parse(fs2.readFileSync(filePath, "utf-8"));
710
789
  data._fileName = activeFile;
711
790
  jsonResponse(res, 200, data);
712
791
  }
713
- async function handleSetActivePreset({ req, res }) {
792
+ async function handleSetActiveManifest({ req, res }) {
714
793
  const body = JSON.parse(await readBody(req));
715
794
  const fileName = sanitizeFileName(body.name || "default");
716
- if (!fs2.existsSync(presetsResource.filePath(fileName))) {
717
- jsonResponse(res, 404, { error: "Preset not found" });
795
+ if (!fs2.existsSync(manifestsResource.filePath(fileName))) {
796
+ jsonResponse(res, 404, { error: "Manifest not found" });
718
797
  return;
719
798
  }
720
- presetsResource.setActiveName(fileName);
799
+ manifestsResource.setActiveName(fileName);
721
800
  jsonResponse(res, 200, { ok: true, activeFile: fileName });
722
801
  }
723
- async function handleGetProductionPreset({ res }) {
724
- const prodFile = presetsResource.getProductionName();
725
- const filePath = presetsResource.filePath(prodFile);
726
- if (!fs2.existsSync(filePath)) {
727
- jsonResponse(res, 200, {
728
- fileName: prodFile,
729
- name: prodFile,
730
- theme: "default",
731
- componentConfigs: {},
732
- updatedAt: ""
733
- });
734
- return;
735
- }
736
- const data = JSON.parse(fs2.readFileSync(filePath, "utf-8"));
737
- jsonResponse(res, 200, {
738
- fileName: prodFile,
739
- name: data.name || prodFile,
740
- theme: data.theme || "default",
741
- componentConfigs: data.componentConfigs || {},
742
- updatedAt: data.updatedAt || ""
743
- });
744
- }
745
- async function handleSetProductionPreset({ req, res }) {
746
- const body = JSON.parse(await readBody(req));
747
- const fileName = sanitizeFileName(body.name || "default");
748
- const presetPath = presetsResource.filePath(fileName);
749
- if (!fs2.existsSync(presetPath)) {
750
- jsonResponse(res, 404, { error: "Preset not found" });
751
- return;
752
- }
753
- const preset = JSON.parse(fs2.readFileSync(presetPath, "utf-8"));
754
- const themeName = sanitizeFileName(preset.theme || "default");
755
- if (!fs2.existsSync(themesResource.filePath(themeName))) {
756
- jsonResponse(res, 422, { error: `Preset references missing theme: ${themeName}` });
757
- return;
758
- }
759
- const knownComponents = new Set(listComponentNames());
760
- const componentConfigs = preset.componentConfigs ?? {};
761
- const apply = [];
762
- for (const [comp, configFile] of Object.entries(componentConfigs)) {
763
- if (!knownComponents.has(comp)) continue;
764
- const sanitized = sanitizeFileName(String(configFile) || "default");
765
- if (!fs2.existsSync(componentResource(comp).filePath(sanitized))) {
766
- jsonResponse(res, 422, {
767
- error: `Preset references missing config: ${comp}/${sanitized}`
768
- });
769
- return;
770
- }
771
- apply.push([comp, sanitized]);
772
- }
773
- themesResource.setProductionName(themeName);
774
- for (const [comp, configFile] of apply) {
775
- componentResource(comp).setProductionName(configFile);
776
- }
777
- presetsResource.setProductionName(fileName);
778
- syncTokensToCss(themeName);
779
- syncFontsToCss(themeName);
780
- syncComponentsToCss();
781
- jsonResponse(res, 200, {
782
- ok: true,
783
- fileName,
784
- name: preset.name || fileName,
785
- theme: themeName,
786
- componentConfigs: Object.fromEntries(apply),
787
- updatedAt: preset.updatedAt || ""
788
- });
789
- }
790
- async function handlePresetByName({ params, req, res }) {
802
+ async function handleManifestByName({ params, req, res }) {
791
803
  const [fileName] = params;
792
- const filePath = presetsResource.filePath(fileName);
804
+ const filePath = manifestsResource.filePath(fileName);
793
805
  if (req.method === "GET") {
794
806
  if (!fs2.existsSync(filePath)) {
795
807
  jsonResponse(res, 404, { error: "Not found" });
@@ -802,7 +814,7 @@ ${COMPONENT_OVERRIDES_END}
802
814
  }
803
815
  if (req.method === "PUT") {
804
816
  if (fileName === "default") {
805
- jsonResponse(res, 403, { error: "Cannot overwrite the default preset" });
817
+ jsonResponse(res, 403, { error: "Cannot overwrite the default manifest" });
806
818
  return;
807
819
  }
808
820
  const body = JSON.parse(await readBody(req));
@@ -821,35 +833,35 @@ ${COMPONENT_OVERRIDES_END}
821
833
  }
822
834
  if (req.method === "DELETE") {
823
835
  if (fileName === "default") {
824
- jsonResponse(res, 403, { error: "Cannot delete the default preset" });
836
+ jsonResponse(res, 403, { error: "Cannot delete the default manifest" });
825
837
  return;
826
838
  }
827
839
  if (fs2.existsSync(filePath)) {
828
840
  fs2.unlinkSync(filePath);
829
- if (presetsResource.getActiveName() === fileName) {
830
- presetsResource.setActiveName("default");
841
+ if (manifestsResource.getActiveName() === fileName) {
842
+ manifestsResource.setActiveName("default");
831
843
  }
832
844
  }
833
845
  jsonResponse(res, 200, { ok: true });
834
846
  return;
835
847
  }
836
848
  }
837
- async function handleApplyPreset({ params, res }) {
849
+ async function handleApplyManifest({ params, res }) {
838
850
  const [fileName] = params;
839
- const presetPath = presetsResource.filePath(fileName);
840
- if (!fs2.existsSync(presetPath)) {
841
- jsonResponse(res, 404, { error: "Preset not found" });
851
+ const manifestPath = manifestsResource.filePath(fileName);
852
+ if (!fs2.existsSync(manifestPath)) {
853
+ jsonResponse(res, 404, { error: "Manifest not found" });
842
854
  return;
843
855
  }
844
- const preset = JSON.parse(fs2.readFileSync(presetPath, "utf-8"));
845
- const themeName = sanitizeFileName(preset.theme || "default");
856
+ const manifest = JSON.parse(fs2.readFileSync(manifestPath, "utf-8"));
857
+ const themeName = sanitizeFileName(manifest.theme || "default");
846
858
  const themePath = themesResource.filePath(themeName);
847
859
  if (!fs2.existsSync(themePath)) {
848
- jsonResponse(res, 422, { error: `Preset references missing theme: ${themeName}` });
860
+ jsonResponse(res, 422, { error: `Manifest references missing theme: ${themeName}` });
849
861
  return;
850
862
  }
851
863
  const knownComponents = new Set(listComponentNames());
852
- const componentConfigs = preset.componentConfigs ?? {};
864
+ const componentConfigs = manifest.componentConfigs ?? {};
853
865
  const resolvedConfigs = {};
854
866
  const apply = [];
855
867
  for (const [comp, configFile] of Object.entries(componentConfigs)) {
@@ -859,7 +871,7 @@ ${COMPONENT_OVERRIDES_END}
859
871
  const cfgPath = r.filePath(sanitized);
860
872
  if (!fs2.existsSync(cfgPath)) {
861
873
  jsonResponse(res, 422, {
862
- error: `Preset references missing config: ${comp}/${sanitized}`
874
+ error: `Manifest references missing config: ${comp}/${sanitized}`
863
875
  });
864
876
  return;
865
877
  }
@@ -880,10 +892,10 @@ ${COMPONENT_OVERRIDES_END}
880
892
  const cfg = readComponentConfig(comp, activeName);
881
893
  if (cfg) resolvedConfigs[comp] = { ...cfg, _fileName: activeName };
882
894
  }
883
- presetsResource.setActiveName(fileName);
895
+ manifestsResource.setActiveName(fileName);
884
896
  jsonResponse(res, 200, {
885
897
  ok: true,
886
- preset: { ...preset, _fileName: fileName },
898
+ manifest: { ...manifest, _fileName: fileName },
887
899
  theme: themeData,
888
900
  componentConfigs: resolvedConfigs
889
901
  });
@@ -921,21 +933,19 @@ ${COMPONENT_OVERRIDES_END}
921
933
  { method: "GET", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
922
934
  { method: "PUT", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
923
935
  { method: "DELETE", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
924
- // Presets — list / active / production are exact strings, must run before regexes
925
- { method: "GET", pattern: PRESETS_ROUTE, handler: handleListPresets },
926
- { method: "GET", pattern: PRESETS_ACTIVE_ROUTE, handler: handleGetActivePreset },
927
- { method: "PUT", pattern: PRESETS_ACTIVE_ROUTE, handler: handleSetActivePreset },
928
- { method: "GET", pattern: PRESETS_PRODUCTION_ROUTE, handler: handleGetProductionPreset },
929
- { method: "PUT", pattern: PRESETS_PRODUCTION_ROUTE, handler: handleSetProductionPreset },
930
- // Presets :name/apply (more specific than :name)
931
- { method: "PUT", pattern: PRESET_APPLY_REGEX, handler: handleApplyPreset },
932
- { method: "POST", pattern: PRESET_APPLY_REGEX, handler: methodNotAllowed },
933
- { method: "GET", pattern: PRESET_APPLY_REGEX, handler: methodNotAllowed },
934
- { method: "DELETE", pattern: PRESET_APPLY_REGEX, handler: methodNotAllowed },
935
- // Presets :name CRUD (broadest preset route, runs last)
936
- { method: "GET", pattern: PRESET_BY_NAME_REGEX, handler: handlePresetByName },
937
- { method: "PUT", pattern: PRESET_BY_NAME_REGEX, handler: handlePresetByName },
938
- { method: "DELETE", pattern: PRESET_BY_NAME_REGEX, handler: handlePresetByName }
936
+ // Manifests — list / active are exact strings, must run before regexes
937
+ { method: "GET", pattern: MANIFESTS_ROUTE, handler: handleListManifests },
938
+ { method: "GET", pattern: MANIFESTS_ACTIVE_ROUTE, handler: handleGetActiveManifest },
939
+ { method: "PUT", pattern: MANIFESTS_ACTIVE_ROUTE, handler: handleSetActiveManifest },
940
+ // Manifests :name/apply (more specific than :name)
941
+ { method: "PUT", pattern: MANIFEST_APPLY_REGEX, handler: handleApplyManifest },
942
+ { method: "POST", pattern: MANIFEST_APPLY_REGEX, handler: methodNotAllowed },
943
+ { method: "GET", pattern: MANIFEST_APPLY_REGEX, handler: methodNotAllowed },
944
+ { method: "DELETE", pattern: MANIFEST_APPLY_REGEX, handler: methodNotAllowed },
945
+ // Manifests :name CRUD (broadest manifest route, runs last)
946
+ { method: "GET", pattern: MANIFEST_BY_NAME_REGEX, handler: handleManifestByName },
947
+ { method: "PUT", pattern: MANIFEST_BY_NAME_REGEX, handler: handleManifestByName },
948
+ { method: "DELETE", pattern: MANIFEST_BY_NAME_REGEX, handler: handleManifestByName }
939
949
  ];
940
950
  return {
941
951
  name: "theme-file-api",
@@ -950,7 +960,7 @@ ${COMPONENT_OVERRIDES_END}
950
960
  configureServer(server) {
951
961
  ensureThemesDir();
952
962
  ensureComponentConfigsDir();
953
- ensurePresetsDir();
963
+ ensureManifestsDir();
954
964
  server.middlewares.use(async (req, res, next) => {
955
965
  const handled = await dispatch(req, res, routes);
956
966
  if (!handled) next();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motion-proto/live-tokens",
3
- "version": "0.6.2",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "description": "Design token editor with live CSS variable editing. Svelte 5 + Vite 6/7.",
6
6
  "keywords": [
@@ -19,24 +19,9 @@
19
19
  "homepage": "https://github.com/motionproto/live-tokens",
20
20
  "bugs": "https://github.com/motionproto/live-tokens/issues",
21
21
  "files": [
22
- "src/lib",
23
- "src/ui",
24
- "src/component-editor",
25
- "src/components",
26
- "src/pages/Editor.svelte",
27
- "src/pages/Editor.svelte.d.ts",
28
- "src/pages/EditorShell.svelte",
29
- "src/pages/ComponentEditorPage.svelte",
30
- "src/pages/ComponentEditorPage.svelte.d.ts",
31
- "src/styles/ui-editor.css",
32
- "src/styles/ui-form-controls.css",
33
- "src/styles/fonts.css",
34
- "src/styles/fonts",
35
- "src/styles/_padding.scss",
36
- "src/styles/tokens.css",
37
- "src/styles/site.css",
38
- "src/data",
39
- "src/assets",
22
+ "src/editor",
23
+ "src/system",
24
+ "src/app/site.css",
40
25
  "dist-plugin",
41
26
  "!**/*.test.ts",
42
27
  "!**/*.spec.ts",
@@ -44,43 +29,43 @@
44
29
  ],
45
30
  "exports": {
46
31
  ".": {
47
- "svelte": "./src/lib/index.ts",
48
- "types": "./src/lib/index.ts",
49
- "default": "./src/lib/index.ts"
32
+ "svelte": "./src/editor/index.ts",
33
+ "types": "./src/editor/index.ts",
34
+ "default": "./src/editor/index.ts"
50
35
  },
51
36
  "./component-editor": {
52
- "svelte": "./src/component-editor/index.ts",
53
- "types": "./src/component-editor/index.ts",
54
- "default": "./src/component-editor/index.ts"
37
+ "svelte": "./src/editor/component-editor/index.ts",
38
+ "types": "./src/editor/component-editor/index.ts",
39
+ "default": "./src/editor/component-editor/index.ts"
55
40
  },
56
41
  "./ui": {
57
- "svelte": "./src/ui/index.ts",
58
- "types": "./src/ui/index.ts",
59
- "default": "./src/ui/index.ts"
42
+ "svelte": "./src/editor/ui/index.ts",
43
+ "types": "./src/editor/ui/index.ts",
44
+ "default": "./src/editor/ui/index.ts"
60
45
  },
61
46
  "./editor": {
62
- "types": "./src/pages/Editor.svelte.d.ts",
63
- "svelte": "./src/pages/Editor.svelte",
64
- "default": "./src/pages/Editor.svelte"
47
+ "types": "./src/editor/pages/Editor.svelte.d.ts",
48
+ "svelte": "./src/editor/pages/Editor.svelte",
49
+ "default": "./src/editor/pages/Editor.svelte"
65
50
  },
66
51
  "./component-editor-page": {
67
- "types": "./src/pages/ComponentEditorPage.svelte.d.ts",
68
- "svelte": "./src/pages/ComponentEditorPage.svelte",
69
- "default": "./src/pages/ComponentEditorPage.svelte"
52
+ "types": "./src/editor/pages/ComponentEditorPage.svelte.d.ts",
53
+ "svelte": "./src/editor/pages/ComponentEditorPage.svelte",
54
+ "default": "./src/editor/pages/ComponentEditorPage.svelte"
70
55
  },
71
56
  "./components/*": {
72
- "svelte": "./src/components/*",
73
- "default": "./src/components/*"
57
+ "svelte": "./src/system/components/*",
58
+ "default": "./src/system/components/*"
74
59
  },
75
60
  "./vite-plugin": {
76
61
  "types": "./dist-plugin/index.d.ts",
77
62
  "import": "./dist-plugin/index.js",
78
63
  "require": "./dist-plugin/index.cjs"
79
64
  },
80
- "./styles/ui-editor.css": "./src/styles/ui-editor.css",
81
- "./starter/tokens.css": "./src/styles/tokens.css",
82
- "./starter/site.css": "./src/styles/site.css",
83
- "./starter/fonts.css": "./src/styles/fonts.css"
65
+ "./styles/ui-editor.css": "./src/editor/styles/ui-editor.css",
66
+ "./app/tokens.css": "./src/system/styles/tokens.css",
67
+ "./app/site.css": "./src/app/site.css",
68
+ "./app/fonts.css": "./src/system/styles/fonts.css"
84
69
  },
85
70
  "scripts": {
86
71
  "dev": "vite",