@motion-proto/live-tokens 0.67.1 → 0.68.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.
- package/CHANGELOG.md +32 -0
- package/bin/generate-theme.mjs +5 -4
- package/dist-plugin/adjust/index.d.cts +1 -1
- package/dist-plugin/adjust/index.d.ts +1 -1
- package/dist-plugin/{chunk-J2JT4UEA.js → chunk-2UX6EVVA.js} +25 -25
- package/dist-plugin/{dataPaths-DZUzVv8H.d.cts → dataPaths-bJTCEO4H.d.cts} +1 -1
- package/dist-plugin/{dataPaths-DZUzVv8H.d.ts → dataPaths-bJTCEO4H.d.ts} +1 -1
- package/dist-plugin/fontPairing/index.d.cts +1 -1
- package/dist-plugin/fontPairing/index.d.ts +1 -1
- package/dist-plugin/generateColorsAndType/index.d.cts +1 -1
- package/dist-plugin/generateColorsAndType/index.d.ts +1 -1
- package/dist-plugin/index.cjs +27 -27
- package/dist-plugin/index.d.cts +1 -1
- package/dist-plugin/index.d.ts +1 -1
- package/dist-plugin/index.js +5 -5
- package/dist-plugin/migrateData/index.cjs +25 -25
- package/dist-plugin/migrateData/index.d.cts +1 -1
- package/dist-plugin/migrateData/index.d.ts +1 -1
- package/dist-plugin/migrateData/index.js +1 -1
- package/dist-plugin/tokensCssMigrations/index.d.cts +1 -1
- package/dist-plugin/tokensCssMigrations/index.d.ts +1 -1
- package/package.json +4 -4
- package/src/editor/bootstrap.ts +6 -6
- package/src/editor/component-editor/ImageLightboxEditor.svelte +1 -1
- package/src/editor/component-editor/scaffolding/ComponentFileManager.svelte +4 -4
- package/src/editor/core/fonts/fontLoader.ts +2 -2
- package/src/editor/core/preview/{lookPreview.ts → themePreview.ts} +27 -27
- package/src/editor/core/productionPulse.ts +3 -3
- package/src/editor/core/sketch/index.ts +52 -44
- package/src/editor/core/sketch/maskField.ts +9 -9
- package/src/editor/core/sketch/sketchLayer.ts +9 -9
- package/src/editor/core/sketch/sketchRegistry.ts +34 -34
- package/src/editor/core/sketch/sketchStore.ts +98 -83
- package/src/editor/core/sketch/sketchStyleService.ts +4 -4
- package/src/editor/core/sketch/sketchStyles.ts +28 -28
- package/src/editor/core/themes/colorsAndTypeService.ts +1 -1
- package/src/editor/core/themes/loadRows.ts +8 -8
- package/src/editor/core/themes/themeDocumentSync.ts +2 -2
- package/src/editor/core/themes/themeInit.ts +2 -2
- package/src/editor/core/themes/themeService.ts +17 -17
- package/src/editor/core/themes/{lookSummary.ts → themeSummary.ts} +9 -9
- package/src/editor/core/themes/themeTypes.ts +10 -6
- package/src/editor/docs/content/getting-started.md +1 -1
- package/src/editor/docs/content/sketch-mode.md +22 -17
- package/src/editor/docs/content/themes-workflow.md +11 -11
- package/src/editor/docs/content/where-themes-live.md +6 -6
- package/src/editor/docs/content.generated.ts +4 -4
- package/src/editor/index.ts +2 -2
- package/src/editor/ui/ThemePanel.svelte +52 -52
- package/src/editor/ui/sketch/SketchPreview.svelte +2 -2
- package/src/editor/ui/sketch/SketchTab.svelte +64 -38
- package/src/live-tokens/data/sketch-styles/dry.json +5 -5
- package/src/live-tokens/data/sketch-styles/hatched.json +9 -9
- package/src/live-tokens/data/themes/autumn.json +1 -1
- package/src/live-tokens/data/themes/halloween.json +1 -1
- package/src/live-tokens/data/themes/midnight-study.json +1 -1
- package/src/live-tokens/data/themes/ocean.json +1 -1
- package/src/live-tokens/data/themes/royal-velvet.json +1 -1
- package/src/live-tokens/data/themes/sketchy.json +1 -1
- package/src/live-tokens/data/themes/spring-meadow.json +1 -1
- package/src/live-tokens/data/themes/sunset.json +1 -1
- package/src/system/backdrop/backdrop.ts +1 -1
- package/src/system/components/SectionDivider.svelte +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.68.1 — A look is a Theme, or it's a sketch style
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- **"Look" is gone from the public surface.** The word covered two different
|
|
8
|
+
things, a whole design identity and the hand-drawn sketch effect, and every
|
|
9
|
+
export now names the one it means. `adoptLook` is `adoptTheme`,
|
|
10
|
+
`AdoptLookResult` is `AdoptThemeResult`. From `@motion-proto/live-tokens/sketch`,
|
|
11
|
+
`registerSketchLook` is `registerSketchStyle`, `SketchLook` is `SketchStyle`,
|
|
12
|
+
`SketchLookSource` is `SketchStyleSource`, `RegisterSketchLookInput` is
|
|
13
|
+
`RegisterSketchStyleInput`, the `sketchLooks` store is `sketchStyles`, and
|
|
14
|
+
`themeSketchLook` is `unsavedSketchStyle`. `bootLiveTokens`'s `sketchLooks`
|
|
15
|
+
option is `sketchStyles`.
|
|
16
|
+
|
|
17
|
+
- **A theme's embedded sketch settings moved from `sketchStyle` to
|
|
18
|
+
`sketchSettings`.** The field holds a sketchstyle's settings, not a
|
|
19
|
+
sketchstyle, so it is named for what it holds. Reading a theme accepts
|
|
20
|
+
either key, so nothing breaks on upgrade; the boot migration rewrites the
|
|
21
|
+
file to the new key the next time it saves. Schema version 5.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **Picking a sketchstyle in the Sketchstyle view now updates a page's own
|
|
26
|
+
picker.** Selection went through `selectSketchStyle`/`selectUnsavedSketchStyle`,
|
|
27
|
+
separate from the door a page picker calls, so the two could disagree about
|
|
28
|
+
what was on screen. Both go through `setSketch` now: one call applies the
|
|
29
|
+
style, turns the effect on, and keeps every picker in step.
|
|
30
|
+
|
|
31
|
+
- **The mask's Rotation dial appears whenever its two axes differ**, not only
|
|
32
|
+
when they were never linked. Un-linking the axes and moving just one used to
|
|
33
|
+
leave Rotation hidden even though the mask was no longer round.
|
|
34
|
+
|
|
3
35
|
## 0.67.1 — The Napkin you tuned is the Napkin that ships
|
|
4
36
|
|
|
5
37
|
### Changed
|
package/bin/generate-theme.mjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Reads a seed brief (JSON), builds a full validated colors-and-type layer via
|
|
4
4
|
// the compiled engine (dist-plugin/generateColorsAndType — the CLI never imports
|
|
5
5
|
// TS sources), enforces the AA contrast gate, and saves the result as a theme:
|
|
6
|
-
// <themesDir>/<slug>.json, the document that carries the whole
|
|
6
|
+
// <themesDir>/<slug>.json, the document that carries the whole theme by value.
|
|
7
7
|
// Unless --no-activate it then opens that theme the way the dev server's apply
|
|
8
8
|
// door does — existing `_working` buffers are cleared and
|
|
9
9
|
// `themes/_active.json` names it. Nothing else moves, so generating a theme
|
|
@@ -21,9 +21,10 @@ import { fileURLToPath } from 'node:url';
|
|
|
21
21
|
const pkgRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
22
22
|
const ENGINE = resolve(pkgRoot, 'dist-plugin/generateColorsAndType/index.js');
|
|
23
23
|
const packageDataDir = join(pkgRoot, 'src/live-tokens/data');
|
|
24
|
-
// Source of truth:
|
|
25
|
-
//
|
|
26
|
-
|
|
24
|
+
// Source of truth: src/editor/core/themes/themeTypes.ts, which
|
|
25
|
+
// normalizeTheme.ts re-exports. This copy cannot import TS, so
|
|
26
|
+
// `check:preset-themes` and generate-theme.test.ts are what catch a drift.
|
|
27
|
+
const THEME_SCHEMA_VERSION = 5;
|
|
27
28
|
|
|
28
29
|
async function loadEngine() {
|
|
29
30
|
if (!existsSync(ENGINE)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A as AliasDiskValue, a as ComponentConfig } from '../themeTypes-DSV3Zisf.cjs';
|
|
2
|
-
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-
|
|
2
|
+
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-bJTCEO4H.cjs';
|
|
3
3
|
export { C as CURRENT_COMPONENT_SCHEMA_VERSION } from '../index-4N-Orzzi.cjs';
|
|
4
4
|
|
|
5
5
|
type AdjustKind = 'radius' | 'padding' | 'gap' | 'border-width';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A as AliasDiskValue, a as ComponentConfig } from '../themeTypes-DSV3Zisf.js';
|
|
2
|
-
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-
|
|
2
|
+
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-bJTCEO4H.js';
|
|
3
3
|
export { C as CURRENT_COMPONENT_SCHEMA_VERSION } from '../index-4N-Orzzi.js';
|
|
4
4
|
|
|
5
5
|
type AdjustKind = 'radius' | 'padding' | 'gap' | 'border-width';
|
|
@@ -135,7 +135,7 @@ function versionedFileResourceServer(opts) {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
// src/editor/core/themes/themeTypes.ts
|
|
138
|
-
var THEME_SCHEMA_VERSION =
|
|
138
|
+
var THEME_SCHEMA_VERSION = 5;
|
|
139
139
|
|
|
140
140
|
// src/editor/core/themes/migrateComponentConfig.ts
|
|
141
141
|
function migrateComponentConfig(component, aliasesIn, rawConfig, fileVersion) {
|
|
@@ -438,15 +438,15 @@ var hatched_default = {
|
|
|
438
438
|
pressureMod: 0.45,
|
|
439
439
|
pooling: 0.8,
|
|
440
440
|
strokeInk: 1,
|
|
441
|
-
maskOn:
|
|
442
|
-
maskBlobX:
|
|
443
|
-
maskBlobY:
|
|
444
|
-
maskBlobLinked:
|
|
445
|
-
maskAngle:
|
|
446
|
-
maskOutputMin: 0.
|
|
441
|
+
maskOn: true,
|
|
442
|
+
maskBlobX: 10,
|
|
443
|
+
maskBlobY: 600,
|
|
444
|
+
maskBlobLinked: false,
|
|
445
|
+
maskAngle: 150,
|
|
446
|
+
maskOutputMin: 0.35,
|
|
447
447
|
maskOutputMax: 1,
|
|
448
448
|
maskOctaves: 2,
|
|
449
|
-
maskGrain: "
|
|
449
|
+
maskGrain: "turbulence",
|
|
450
450
|
maskPosterize: 1,
|
|
451
451
|
maskSoftness: 1.5,
|
|
452
452
|
jitterX: 1.5,
|
|
@@ -460,7 +460,7 @@ var hatched_default = {
|
|
|
460
460
|
iconMaskOn: false,
|
|
461
461
|
iconMaskScale: 1
|
|
462
462
|
},
|
|
463
|
-
updatedAt: "2026-08-
|
|
463
|
+
updatedAt: "2026-08-28T21:17:18.232Z",
|
|
464
464
|
createdAt: "2026-08-28T15:47:36.934Z"
|
|
465
465
|
};
|
|
466
466
|
|
|
@@ -586,11 +586,11 @@ var dry_default = {
|
|
|
586
586
|
pooling: 1.5,
|
|
587
587
|
strokeInk: 0.4,
|
|
588
588
|
maskOn: true,
|
|
589
|
-
maskBlobX:
|
|
590
|
-
maskBlobY:
|
|
589
|
+
maskBlobX: 170,
|
|
590
|
+
maskBlobY: 170,
|
|
591
591
|
maskBlobLinked: true,
|
|
592
592
|
maskAngle: 0,
|
|
593
|
-
maskOutputMin: 0.
|
|
593
|
+
maskOutputMin: 0.57,
|
|
594
594
|
maskOutputMax: 0.91,
|
|
595
595
|
maskOctaves: 2,
|
|
596
596
|
maskGrain: "fractal",
|
|
@@ -607,18 +607,18 @@ var dry_default = {
|
|
|
607
607
|
iconMaskOn: true,
|
|
608
608
|
iconMaskScale: 3.8
|
|
609
609
|
},
|
|
610
|
-
updatedAt: "2026-08-
|
|
610
|
+
updatedAt: "2026-08-28T21:19:51.383Z",
|
|
611
611
|
createdAt: "2026-08-28T15:47:36.934Z"
|
|
612
612
|
};
|
|
613
613
|
|
|
614
614
|
// src/editor/core/sketch/sketchStyles.ts
|
|
615
615
|
var SHIPPED_FILES = { pencil: pencil_default, marker: marker_default, whiteboard: whiteboard_default, hatched: hatched_default, dashed: dashed_default, napkin: napkin_default, dry: dry_default };
|
|
616
|
-
var
|
|
616
|
+
var SHIPPED_SKETCH_SETTINGS = Object.fromEntries(
|
|
617
617
|
Object.entries(SHIPPED_FILES).map(([id, file]) => [id, file.settings])
|
|
618
618
|
);
|
|
619
619
|
var DEFAULT_SKETCH_STYLE = "marker";
|
|
620
|
-
function
|
|
621
|
-
const base =
|
|
620
|
+
function hydrateSketchSettings(raw) {
|
|
621
|
+
const base = SHIPPED_SKETCH_SETTINGS[DEFAULT_SKETCH_STYLE];
|
|
622
622
|
const stored = raw ?? {};
|
|
623
623
|
const out = { ...base };
|
|
624
624
|
for (const key of Object.keys(base)) {
|
|
@@ -782,10 +782,10 @@ function normalizeTheme(raw, resolvers) {
|
|
|
782
782
|
}
|
|
783
783
|
const componentConfigs = {};
|
|
784
784
|
for (const [comp, value] of Object.entries(asObject(src.componentConfigs) ?? {})) {
|
|
785
|
-
const
|
|
785
|
+
const embedded2 = asObject(value);
|
|
786
786
|
let resolvedConfig;
|
|
787
|
-
if (
|
|
788
|
-
resolvedConfig = stripFileMarker(
|
|
787
|
+
if (embedded2) {
|
|
788
|
+
resolvedConfig = stripFileMarker(embedded2);
|
|
789
789
|
} else {
|
|
790
790
|
const configName = asString(value, "default");
|
|
791
791
|
const resolved = asObject(resolvers.readComponentConfig(comp, configName));
|
|
@@ -820,8 +820,8 @@ function normalizeTheme(raw, resolvers) {
|
|
|
820
820
|
if (!(key in baseAliases)) filled.orphans++;
|
|
821
821
|
}
|
|
822
822
|
}
|
|
823
|
-
const
|
|
824
|
-
const
|
|
823
|
+
const embedded = asObject(src.sketchSettings) ?? asObject(src.sketchStyle);
|
|
824
|
+
const sketchSettings = embedded ? hydrateSketchSettings(embedded) : void 0;
|
|
825
825
|
return {
|
|
826
826
|
theme: {
|
|
827
827
|
name: asString(src.name, "Untitled"),
|
|
@@ -831,7 +831,7 @@ function normalizeTheme(raw, resolvers) {
|
|
|
831
831
|
colorsAndType,
|
|
832
832
|
componentConfigs,
|
|
833
833
|
componentSchemaVersion: CURRENT_COMPONENT_SCHEMA_VERSION,
|
|
834
|
-
...
|
|
834
|
+
...sketchSettings ? { sketchSettings } : {}
|
|
835
835
|
},
|
|
836
836
|
dropped,
|
|
837
837
|
migrated,
|
|
@@ -886,7 +886,7 @@ function detectLegacyLayout(input) {
|
|
|
886
886
|
const manifestsDir = input.configuredManifestsDir ?? path2.join(input.dataDir, "manifests");
|
|
887
887
|
const themesHoldAThemeFile = holdsATheme(input.themesDir);
|
|
888
888
|
if (isDirectory(manifestsDir) && !themesHoldAThemeFile) {
|
|
889
|
-
return { manifestsDir, evidence: `${manifestsDir} is the pre-0.48 whole-
|
|
889
|
+
return { manifestsDir, evidence: `${manifestsDir} is the pre-0.48 whole-theme directory` };
|
|
890
890
|
}
|
|
891
891
|
if (jsonFiles(input.colorsAndTypeDir).length > 0) return null;
|
|
892
892
|
for (const file of jsonFiles(input.themesDir)) {
|
|
@@ -909,12 +909,12 @@ function planLegacyRenames(layout, input) {
|
|
|
909
909
|
const defaultThemes = path2.join(input.dataDir, "themes");
|
|
910
910
|
if (input.configuredManifestsDir && path2.resolve(input.configuredManifestsDir) !== path2.join(input.dataDir, "manifests")) {
|
|
911
911
|
throw new Error(
|
|
912
|
-
`This project uses the pre-0.48 data layout (${layout.evidence}), and live-tokens.config.json sets the retired "manifestsDir" key to ${input.configuredManifestsDir}. That directory holds the whole
|
|
912
|
+
`This project uses the pre-0.48 data layout (${layout.evidence}), and live-tokens.config.json sets the retired "manifestsDir" key to ${input.configuredManifestsDir}. That directory holds the whole themes, which now belong in ${input.themesDir}. Move it there by hand, drop the "manifestsDir" key, then run the migration again.`
|
|
913
913
|
);
|
|
914
914
|
}
|
|
915
915
|
if (path2.resolve(input.colorsAndTypeDir) !== path2.resolve(defaultColorsAndType) || path2.resolve(input.themesDir) !== path2.resolve(defaultThemes)) {
|
|
916
916
|
throw new Error(
|
|
917
|
-
`This project uses the pre-0.48 data layout (${layout.evidence}), and its data directories are configured to custom paths (colorsAndTypeDir=${input.colorsAndTypeDir}, themesDir=${input.themesDir}). The migration cannot tell which directory holds what. Move the old colors-and-type directory to ${input.colorsAndTypeDir} and the old whole-
|
|
917
|
+
`This project uses the pre-0.48 data layout (${layout.evidence}), and its data directories are configured to custom paths (colorsAndTypeDir=${input.colorsAndTypeDir}, themesDir=${input.themesDir}). The migration cannot tell which directory holds what. Move the old colors-and-type directory to ${input.colorsAndTypeDir} and the old whole-theme directory to ${input.themesDir} by hand, then run the migration again.`
|
|
918
918
|
);
|
|
919
919
|
}
|
|
920
920
|
const renames = [];
|
|
@@ -6,7 +6,7 @@ interface LiveTokensFileConfig {
|
|
|
6
6
|
/**
|
|
7
7
|
* Retired in 0.48, where `themesDir` took over the meaning. Still recognised
|
|
8
8
|
* so an unmigrated project is not told its key is a typo, and so the
|
|
9
|
-
* migration can find (or refuse to guess at) a whole-
|
|
9
|
+
* migration can find (or refuse to guess at) a whole-theme directory the
|
|
10
10
|
* consumer moved.
|
|
11
11
|
*/
|
|
12
12
|
manifestsDir?: string;
|
|
@@ -6,7 +6,7 @@ interface LiveTokensFileConfig {
|
|
|
6
6
|
/**
|
|
7
7
|
* Retired in 0.48, where `themesDir` took over the meaning. Still recognised
|
|
8
8
|
* so an unmigrated project is not told its key is a typo, and so the
|
|
9
|
-
* migration can find (or refuse to guess at) a whole-
|
|
9
|
+
* migration can find (or refuse to guess at) a whole-theme directory the
|
|
10
10
|
* consumer moved.
|
|
11
11
|
*/
|
|
12
12
|
manifestsDir?: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as FontStackVariable, C as ColorsAndType, b as FontStack, F as FontSource } from '../themeTypes-DSV3Zisf.cjs';
|
|
2
|
-
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-
|
|
2
|
+
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-bJTCEO4H.cjs';
|
|
3
3
|
|
|
4
4
|
type PairingSlot = 'display' | 'body' | 'serif' | 'mono' | 'editorial';
|
|
5
5
|
interface PairingFace {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as FontStackVariable, C as ColorsAndType, b as FontStack, F as FontSource } from '../themeTypes-DSV3Zisf.js';
|
|
2
|
-
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-
|
|
2
|
+
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-bJTCEO4H.js';
|
|
3
3
|
|
|
4
4
|
type PairingSlot = 'display' | 'body' | 'serif' | 'mono' | 'editorial';
|
|
5
5
|
interface PairingFace {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { F as FontSource, b as FontStack, G as GradientDiskToken, O as Oklch, H as HarmonyMode, C as ColorsAndType } from '../themeTypes-DSV3Zisf.cjs';
|
|
2
|
-
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-
|
|
2
|
+
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-bJTCEO4H.cjs';
|
|
3
3
|
export { C as CURRENT_COMPONENT_SCHEMA_VERSION } from '../index-4N-Orzzi.cjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { F as FontSource, b as FontStack, G as GradientDiskToken, O as Oklch, H as HarmonyMode, C as ColorsAndType } from '../themeTypes-DSV3Zisf.js';
|
|
2
|
-
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-
|
|
2
|
+
export { r as readLiveTokensConfig, a as resolveDataDirs } from '../dataPaths-bJTCEO4H.js';
|
|
3
3
|
export { C as CURRENT_COMPONENT_SCHEMA_VERSION } from '../index-4N-Orzzi.js';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist-plugin/index.cjs
CHANGED
|
@@ -1888,7 +1888,7 @@ function synthesizeSectionDividerGradients(stringPart, objectPart) {
|
|
|
1888
1888
|
}
|
|
1889
1889
|
|
|
1890
1890
|
// src/editor/core/themes/themeTypes.ts
|
|
1891
|
-
var THEME_SCHEMA_VERSION =
|
|
1891
|
+
var THEME_SCHEMA_VERSION = 5;
|
|
1892
1892
|
|
|
1893
1893
|
// src/editor/core/components/componentConfigKeys.ts
|
|
1894
1894
|
var KNOWN_COMPONENT_CONFIG_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -2074,15 +2074,15 @@ var hatched_default = {
|
|
|
2074
2074
|
pressureMod: 0.45,
|
|
2075
2075
|
pooling: 0.8,
|
|
2076
2076
|
strokeInk: 1,
|
|
2077
|
-
maskOn:
|
|
2078
|
-
maskBlobX:
|
|
2079
|
-
maskBlobY:
|
|
2080
|
-
maskBlobLinked:
|
|
2081
|
-
maskAngle:
|
|
2082
|
-
maskOutputMin: 0.
|
|
2077
|
+
maskOn: true,
|
|
2078
|
+
maskBlobX: 10,
|
|
2079
|
+
maskBlobY: 600,
|
|
2080
|
+
maskBlobLinked: false,
|
|
2081
|
+
maskAngle: 150,
|
|
2082
|
+
maskOutputMin: 0.35,
|
|
2083
2083
|
maskOutputMax: 1,
|
|
2084
2084
|
maskOctaves: 2,
|
|
2085
|
-
maskGrain: "
|
|
2085
|
+
maskGrain: "turbulence",
|
|
2086
2086
|
maskPosterize: 1,
|
|
2087
2087
|
maskSoftness: 1.5,
|
|
2088
2088
|
jitterX: 1.5,
|
|
@@ -2096,7 +2096,7 @@ var hatched_default = {
|
|
|
2096
2096
|
iconMaskOn: false,
|
|
2097
2097
|
iconMaskScale: 1
|
|
2098
2098
|
},
|
|
2099
|
-
updatedAt: "2026-08-
|
|
2099
|
+
updatedAt: "2026-08-28T21:17:18.232Z",
|
|
2100
2100
|
createdAt: "2026-08-28T15:47:36.934Z"
|
|
2101
2101
|
};
|
|
2102
2102
|
|
|
@@ -2222,11 +2222,11 @@ var dry_default = {
|
|
|
2222
2222
|
pooling: 1.5,
|
|
2223
2223
|
strokeInk: 0.4,
|
|
2224
2224
|
maskOn: true,
|
|
2225
|
-
maskBlobX:
|
|
2226
|
-
maskBlobY:
|
|
2225
|
+
maskBlobX: 170,
|
|
2226
|
+
maskBlobY: 170,
|
|
2227
2227
|
maskBlobLinked: true,
|
|
2228
2228
|
maskAngle: 0,
|
|
2229
|
-
maskOutputMin: 0.
|
|
2229
|
+
maskOutputMin: 0.57,
|
|
2230
2230
|
maskOutputMax: 0.91,
|
|
2231
2231
|
maskOctaves: 2,
|
|
2232
2232
|
maskGrain: "fractal",
|
|
@@ -2243,18 +2243,18 @@ var dry_default = {
|
|
|
2243
2243
|
iconMaskOn: true,
|
|
2244
2244
|
iconMaskScale: 3.8
|
|
2245
2245
|
},
|
|
2246
|
-
updatedAt: "2026-08-
|
|
2246
|
+
updatedAt: "2026-08-28T21:19:51.383Z",
|
|
2247
2247
|
createdAt: "2026-08-28T15:47:36.934Z"
|
|
2248
2248
|
};
|
|
2249
2249
|
|
|
2250
2250
|
// src/editor/core/sketch/sketchStyles.ts
|
|
2251
2251
|
var SHIPPED_FILES = { pencil: pencil_default, marker: marker_default, whiteboard: whiteboard_default, hatched: hatched_default, dashed: dashed_default, napkin: napkin_default, dry: dry_default };
|
|
2252
|
-
var
|
|
2252
|
+
var SHIPPED_SKETCH_SETTINGS = Object.fromEntries(
|
|
2253
2253
|
Object.entries(SHIPPED_FILES).map(([id, file]) => [id, file.settings])
|
|
2254
2254
|
);
|
|
2255
2255
|
var DEFAULT_SKETCH_STYLE = "marker";
|
|
2256
|
-
function
|
|
2257
|
-
const base =
|
|
2256
|
+
function hydrateSketchSettings(raw) {
|
|
2257
|
+
const base = SHIPPED_SKETCH_SETTINGS[DEFAULT_SKETCH_STYLE];
|
|
2258
2258
|
const stored = raw ?? {};
|
|
2259
2259
|
const out = { ...base };
|
|
2260
2260
|
for (const key of Object.keys(base)) {
|
|
@@ -2418,10 +2418,10 @@ function normalizeTheme(raw, resolvers) {
|
|
|
2418
2418
|
}
|
|
2419
2419
|
const componentConfigs = {};
|
|
2420
2420
|
for (const [comp, value] of Object.entries(asObject(src.componentConfigs) ?? {})) {
|
|
2421
|
-
const
|
|
2421
|
+
const embedded2 = asObject(value);
|
|
2422
2422
|
let resolvedConfig;
|
|
2423
|
-
if (
|
|
2424
|
-
resolvedConfig = stripFileMarker(
|
|
2423
|
+
if (embedded2) {
|
|
2424
|
+
resolvedConfig = stripFileMarker(embedded2);
|
|
2425
2425
|
} else {
|
|
2426
2426
|
const configName = asString(value, "default");
|
|
2427
2427
|
const resolved = asObject(resolvers.readComponentConfig(comp, configName));
|
|
@@ -2456,8 +2456,8 @@ function normalizeTheme(raw, resolvers) {
|
|
|
2456
2456
|
if (!(key in baseAliases)) filled.orphans++;
|
|
2457
2457
|
}
|
|
2458
2458
|
}
|
|
2459
|
-
const
|
|
2460
|
-
const
|
|
2459
|
+
const embedded = asObject(src.sketchSettings) ?? asObject(src.sketchStyle);
|
|
2460
|
+
const sketchSettings = embedded ? hydrateSketchSettings(embedded) : void 0;
|
|
2461
2461
|
return {
|
|
2462
2462
|
theme: {
|
|
2463
2463
|
name: asString(src.name, "Untitled"),
|
|
@@ -2467,7 +2467,7 @@ function normalizeTheme(raw, resolvers) {
|
|
|
2467
2467
|
colorsAndType,
|
|
2468
2468
|
componentConfigs,
|
|
2469
2469
|
componentSchemaVersion: CURRENT_COMPONENT_SCHEMA_VERSION,
|
|
2470
|
-
...
|
|
2470
|
+
...sketchSettings ? { sketchSettings } : {}
|
|
2471
2471
|
},
|
|
2472
2472
|
dropped,
|
|
2473
2473
|
migrated,
|
|
@@ -2571,7 +2571,7 @@ function detectLegacyLayout(input) {
|
|
|
2571
2571
|
const manifestsDir = input.configuredManifestsDir ?? import_path3.default.join(input.dataDir, "manifests");
|
|
2572
2572
|
const themesHoldAThemeFile = holdsATheme(input.themesDir);
|
|
2573
2573
|
if (isDirectory(manifestsDir) && !themesHoldAThemeFile) {
|
|
2574
|
-
return { manifestsDir, evidence: `${manifestsDir} is the pre-0.48 whole-
|
|
2574
|
+
return { manifestsDir, evidence: `${manifestsDir} is the pre-0.48 whole-theme directory` };
|
|
2575
2575
|
}
|
|
2576
2576
|
if (jsonFiles(input.colorsAndTypeDir).length > 0) return null;
|
|
2577
2577
|
for (const file of jsonFiles(input.themesDir)) {
|
|
@@ -3607,7 +3607,7 @@ ${lines.join("\n")}
|
|
|
3607
3607
|
}
|
|
3608
3608
|
function warnOnLegacyLayout(evidence, warn) {
|
|
3609
3609
|
warn(
|
|
3610
|
-
`[live-tokens] This project still uses the data layout from 0.47 and earlier: ${evidence}. Since 0.48 the whole-
|
|
3610
|
+
`[live-tokens] This project still uses the data layout from 0.47 and earlier: ${evidence}. Since 0.48 the whole-theme theme files live in \`themes/\` and the colors and type live in \`colors-and-type/\`. Nothing in the data directory was written, the editor cannot save, and ${import_path4.default.basename(GENERATED_CSS_PATH)} is left exactly as it is. Run \`npx live-tokens migrate\` to move the directories and heal the tree, then restart the dev server.`
|
|
3611
3611
|
);
|
|
3612
3612
|
}
|
|
3613
3613
|
function warnOnUnmigratedSketchStyles(warn) {
|
|
@@ -4364,7 +4364,7 @@ ${lines.join("\n")}
|
|
|
4364
4364
|
filled
|
|
4365
4365
|
});
|
|
4366
4366
|
}
|
|
4367
|
-
async function
|
|
4367
|
+
async function handleAdoptTheme({ res }) {
|
|
4368
4368
|
const activeName = themesResource.getActiveName();
|
|
4369
4369
|
if (activeName === "default") {
|
|
4370
4370
|
jsonResponse(res, 409, {
|
|
@@ -4529,7 +4529,7 @@ ${lines.join("\n")}
|
|
|
4529
4529
|
{ method: "GET", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
|
|
4530
4530
|
{ method: "PUT", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
|
|
4531
4531
|
{ method: "DELETE", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
|
|
4532
|
-
// Production — the whole-
|
|
4532
|
+
// Production — the whole-theme adopt door
|
|
4533
4533
|
{ method: "GET", pattern: SKETCH_STYLES_ROUTE, handler: handleListSketchStyles },
|
|
4534
4534
|
{ method: "PUT", pattern: SKETCH_STYLES_ROUTE, handler: methodNotAllowed },
|
|
4535
4535
|
{ method: "POST", pattern: SKETCH_STYLES_ROUTE, handler: methodNotAllowed },
|
|
@@ -4538,7 +4538,7 @@ ${lines.join("\n")}
|
|
|
4538
4538
|
{ method: "PUT", pattern: SKETCH_STYLE_BY_NAME_REGEX, handler: handleSketchStyleByName },
|
|
4539
4539
|
{ method: "DELETE", pattern: SKETCH_STYLE_BY_NAME_REGEX, handler: handleSketchStyleByName },
|
|
4540
4540
|
{ method: "POST", pattern: SKETCH_STYLE_BY_NAME_REGEX, handler: methodNotAllowed },
|
|
4541
|
-
{ method: "PUT", pattern: PRODUCTION_ROUTE, handler:
|
|
4541
|
+
{ method: "PUT", pattern: PRODUCTION_ROUTE, handler: handleAdoptTheme },
|
|
4542
4542
|
{ method: "GET", pattern: PRODUCTION_ROUTE, handler: methodNotAllowed },
|
|
4543
4543
|
{ method: "POST", pattern: PRODUCTION_ROUTE, handler: methodNotAllowed },
|
|
4544
4544
|
{ method: "DELETE", pattern: PRODUCTION_ROUTE, handler: methodNotAllowed }
|
package/dist-plugin/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
2
|
export { ComponentSource, MissingToken, RunResult, TOKENS_CSS_MIGRATIONS, TokensCssMigration, ValidateInput, runTokensCssMigrations, validateTokensCss } from './tokensCssMigrations/index.cjs';
|
|
3
|
-
import './dataPaths-
|
|
3
|
+
import './dataPaths-bJTCEO4H.cjs';
|
|
4
4
|
|
|
5
5
|
interface ThemeFileApiOptions {
|
|
6
6
|
tokensCssPath: string;
|
package/dist-plugin/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
2
|
export { ComponentSource, MissingToken, RunResult, TOKENS_CSS_MIGRATIONS, TokensCssMigration, ValidateInput, runTokensCssMigrations, validateTokensCss } from './tokensCssMigrations/index.js';
|
|
3
|
-
import './dataPaths-
|
|
3
|
+
import './dataPaths-bJTCEO4H.js';
|
|
4
4
|
|
|
5
5
|
interface ThemeFileApiOptions {
|
|
6
6
|
tokensCssPath: string;
|
package/dist-plugin/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
nextAvailableName,
|
|
14
14
|
normalizeTheme,
|
|
15
15
|
versionedFileResourceServer
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2UX6EVVA.js";
|
|
17
17
|
import {
|
|
18
18
|
CURRENT_COMPONENT_SCHEMA_VERSION
|
|
19
19
|
} from "./chunk-NE6N66EE.js";
|
|
@@ -620,7 +620,7 @@ ${lines.join("\n")}
|
|
|
620
620
|
}
|
|
621
621
|
function warnOnLegacyLayout(evidence, warn) {
|
|
622
622
|
warn(
|
|
623
|
-
`[live-tokens] This project still uses the data layout from 0.47 and earlier: ${evidence}. Since 0.48 the whole-
|
|
623
|
+
`[live-tokens] This project still uses the data layout from 0.47 and earlier: ${evidence}. Since 0.48 the whole-theme theme files live in \`themes/\` and the colors and type live in \`colors-and-type/\`. Nothing in the data directory was written, the editor cannot save, and ${path.basename(GENERATED_CSS_PATH)} is left exactly as it is. Run \`npx live-tokens migrate\` to move the directories and heal the tree, then restart the dev server.`
|
|
624
624
|
);
|
|
625
625
|
}
|
|
626
626
|
function warnOnUnmigratedSketchStyles(warn) {
|
|
@@ -1377,7 +1377,7 @@ ${lines.join("\n")}
|
|
|
1377
1377
|
filled
|
|
1378
1378
|
});
|
|
1379
1379
|
}
|
|
1380
|
-
async function
|
|
1380
|
+
async function handleAdoptTheme({ res }) {
|
|
1381
1381
|
const activeName = themesResource.getActiveName();
|
|
1382
1382
|
if (activeName === "default") {
|
|
1383
1383
|
jsonResponse(res, 409, {
|
|
@@ -1542,7 +1542,7 @@ ${lines.join("\n")}
|
|
|
1542
1542
|
{ method: "GET", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
|
|
1543
1543
|
{ method: "PUT", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
|
|
1544
1544
|
{ method: "DELETE", pattern: THEME_BY_NAME_REGEX, handler: handleThemeByName },
|
|
1545
|
-
// Production — the whole-
|
|
1545
|
+
// Production — the whole-theme adopt door
|
|
1546
1546
|
{ method: "GET", pattern: SKETCH_STYLES_ROUTE, handler: handleListSketchStyles },
|
|
1547
1547
|
{ method: "PUT", pattern: SKETCH_STYLES_ROUTE, handler: methodNotAllowed },
|
|
1548
1548
|
{ method: "POST", pattern: SKETCH_STYLES_ROUTE, handler: methodNotAllowed },
|
|
@@ -1551,7 +1551,7 @@ ${lines.join("\n")}
|
|
|
1551
1551
|
{ method: "PUT", pattern: SKETCH_STYLE_BY_NAME_REGEX, handler: handleSketchStyleByName },
|
|
1552
1552
|
{ method: "DELETE", pattern: SKETCH_STYLE_BY_NAME_REGEX, handler: handleSketchStyleByName },
|
|
1553
1553
|
{ method: "POST", pattern: SKETCH_STYLE_BY_NAME_REGEX, handler: methodNotAllowed },
|
|
1554
|
-
{ method: "PUT", pattern: PRODUCTION_ROUTE, handler:
|
|
1554
|
+
{ method: "PUT", pattern: PRODUCTION_ROUTE, handler: handleAdoptTheme },
|
|
1555
1555
|
{ method: "GET", pattern: PRODUCTION_ROUTE, handler: methodNotAllowed },
|
|
1556
1556
|
{ method: "POST", pattern: PRODUCTION_ROUTE, handler: methodNotAllowed },
|
|
1557
1557
|
{ method: "DELETE", pattern: PRODUCTION_ROUTE, handler: methodNotAllowed }
|
|
@@ -1037,7 +1037,7 @@ function synthesizeSectionDividerGradients(stringPart, objectPart) {
|
|
|
1037
1037
|
}
|
|
1038
1038
|
|
|
1039
1039
|
// src/editor/core/themes/themeTypes.ts
|
|
1040
|
-
var THEME_SCHEMA_VERSION =
|
|
1040
|
+
var THEME_SCHEMA_VERSION = 5;
|
|
1041
1041
|
|
|
1042
1042
|
// src/editor/core/components/componentConfigKeys.ts
|
|
1043
1043
|
var KNOWN_COMPONENT_CONFIG_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -1223,15 +1223,15 @@ var hatched_default = {
|
|
|
1223
1223
|
pressureMod: 0.45,
|
|
1224
1224
|
pooling: 0.8,
|
|
1225
1225
|
strokeInk: 1,
|
|
1226
|
-
maskOn:
|
|
1227
|
-
maskBlobX:
|
|
1228
|
-
maskBlobY:
|
|
1229
|
-
maskBlobLinked:
|
|
1230
|
-
maskAngle:
|
|
1231
|
-
maskOutputMin: 0.
|
|
1226
|
+
maskOn: true,
|
|
1227
|
+
maskBlobX: 10,
|
|
1228
|
+
maskBlobY: 600,
|
|
1229
|
+
maskBlobLinked: false,
|
|
1230
|
+
maskAngle: 150,
|
|
1231
|
+
maskOutputMin: 0.35,
|
|
1232
1232
|
maskOutputMax: 1,
|
|
1233
1233
|
maskOctaves: 2,
|
|
1234
|
-
maskGrain: "
|
|
1234
|
+
maskGrain: "turbulence",
|
|
1235
1235
|
maskPosterize: 1,
|
|
1236
1236
|
maskSoftness: 1.5,
|
|
1237
1237
|
jitterX: 1.5,
|
|
@@ -1245,7 +1245,7 @@ var hatched_default = {
|
|
|
1245
1245
|
iconMaskOn: false,
|
|
1246
1246
|
iconMaskScale: 1
|
|
1247
1247
|
},
|
|
1248
|
-
updatedAt: "2026-08-
|
|
1248
|
+
updatedAt: "2026-08-28T21:17:18.232Z",
|
|
1249
1249
|
createdAt: "2026-08-28T15:47:36.934Z"
|
|
1250
1250
|
};
|
|
1251
1251
|
|
|
@@ -1371,11 +1371,11 @@ var dry_default = {
|
|
|
1371
1371
|
pooling: 1.5,
|
|
1372
1372
|
strokeInk: 0.4,
|
|
1373
1373
|
maskOn: true,
|
|
1374
|
-
maskBlobX:
|
|
1375
|
-
maskBlobY:
|
|
1374
|
+
maskBlobX: 170,
|
|
1375
|
+
maskBlobY: 170,
|
|
1376
1376
|
maskBlobLinked: true,
|
|
1377
1377
|
maskAngle: 0,
|
|
1378
|
-
maskOutputMin: 0.
|
|
1378
|
+
maskOutputMin: 0.57,
|
|
1379
1379
|
maskOutputMax: 0.91,
|
|
1380
1380
|
maskOctaves: 2,
|
|
1381
1381
|
maskGrain: "fractal",
|
|
@@ -1392,18 +1392,18 @@ var dry_default = {
|
|
|
1392
1392
|
iconMaskOn: true,
|
|
1393
1393
|
iconMaskScale: 3.8
|
|
1394
1394
|
},
|
|
1395
|
-
updatedAt: "2026-08-
|
|
1395
|
+
updatedAt: "2026-08-28T21:19:51.383Z",
|
|
1396
1396
|
createdAt: "2026-08-28T15:47:36.934Z"
|
|
1397
1397
|
};
|
|
1398
1398
|
|
|
1399
1399
|
// src/editor/core/sketch/sketchStyles.ts
|
|
1400
1400
|
var SHIPPED_FILES = { pencil: pencil_default, marker: marker_default, whiteboard: whiteboard_default, hatched: hatched_default, dashed: dashed_default, napkin: napkin_default, dry: dry_default };
|
|
1401
|
-
var
|
|
1401
|
+
var SHIPPED_SKETCH_SETTINGS = Object.fromEntries(
|
|
1402
1402
|
Object.entries(SHIPPED_FILES).map(([id, file]) => [id, file.settings])
|
|
1403
1403
|
);
|
|
1404
1404
|
var DEFAULT_SKETCH_STYLE = "marker";
|
|
1405
|
-
function
|
|
1406
|
-
const base =
|
|
1405
|
+
function hydrateSketchSettings(raw) {
|
|
1406
|
+
const base = SHIPPED_SKETCH_SETTINGS[DEFAULT_SKETCH_STYLE];
|
|
1407
1407
|
const stored = raw ?? {};
|
|
1408
1408
|
const out = { ...base };
|
|
1409
1409
|
for (const key of Object.keys(base)) {
|
|
@@ -1567,10 +1567,10 @@ function normalizeTheme(raw, resolvers) {
|
|
|
1567
1567
|
}
|
|
1568
1568
|
const componentConfigs = {};
|
|
1569
1569
|
for (const [comp, value] of Object.entries(asObject(src.componentConfigs) ?? {})) {
|
|
1570
|
-
const
|
|
1570
|
+
const embedded2 = asObject(value);
|
|
1571
1571
|
let resolvedConfig;
|
|
1572
|
-
if (
|
|
1573
|
-
resolvedConfig = stripFileMarker(
|
|
1572
|
+
if (embedded2) {
|
|
1573
|
+
resolvedConfig = stripFileMarker(embedded2);
|
|
1574
1574
|
} else {
|
|
1575
1575
|
const configName = asString(value, "default");
|
|
1576
1576
|
const resolved = asObject(resolvers.readComponentConfig(comp, configName));
|
|
@@ -1605,8 +1605,8 @@ function normalizeTheme(raw, resolvers) {
|
|
|
1605
1605
|
if (!(key in baseAliases)) filled.orphans++;
|
|
1606
1606
|
}
|
|
1607
1607
|
}
|
|
1608
|
-
const
|
|
1609
|
-
const
|
|
1608
|
+
const embedded = asObject(src.sketchSettings) ?? asObject(src.sketchStyle);
|
|
1609
|
+
const sketchSettings = embedded ? hydrateSketchSettings(embedded) : void 0;
|
|
1610
1610
|
return {
|
|
1611
1611
|
theme: {
|
|
1612
1612
|
name: asString(src.name, "Untitled"),
|
|
@@ -1616,7 +1616,7 @@ function normalizeTheme(raw, resolvers) {
|
|
|
1616
1616
|
colorsAndType,
|
|
1617
1617
|
componentConfigs,
|
|
1618
1618
|
componentSchemaVersion: CURRENT_COMPONENT_SCHEMA_VERSION,
|
|
1619
|
-
...
|
|
1619
|
+
...sketchSettings ? { sketchSettings } : {}
|
|
1620
1620
|
},
|
|
1621
1621
|
dropped,
|
|
1622
1622
|
migrated,
|
|
@@ -1671,7 +1671,7 @@ function detectLegacyLayout(input) {
|
|
|
1671
1671
|
const manifestsDir = input.configuredManifestsDir ?? import_path2.default.join(input.dataDir, "manifests");
|
|
1672
1672
|
const themesHoldAThemeFile = holdsATheme(input.themesDir);
|
|
1673
1673
|
if (isDirectory(manifestsDir) && !themesHoldAThemeFile) {
|
|
1674
|
-
return { manifestsDir, evidence: `${manifestsDir} is the pre-0.48 whole-
|
|
1674
|
+
return { manifestsDir, evidence: `${manifestsDir} is the pre-0.48 whole-theme directory` };
|
|
1675
1675
|
}
|
|
1676
1676
|
if (jsonFiles(input.colorsAndTypeDir).length > 0) return null;
|
|
1677
1677
|
for (const file of jsonFiles(input.themesDir)) {
|
|
@@ -1694,12 +1694,12 @@ function planLegacyRenames(layout, input) {
|
|
|
1694
1694
|
const defaultThemes = import_path2.default.join(input.dataDir, "themes");
|
|
1695
1695
|
if (input.configuredManifestsDir && import_path2.default.resolve(input.configuredManifestsDir) !== import_path2.default.join(input.dataDir, "manifests")) {
|
|
1696
1696
|
throw new Error(
|
|
1697
|
-
`This project uses the pre-0.48 data layout (${layout.evidence}), and live-tokens.config.json sets the retired "manifestsDir" key to ${input.configuredManifestsDir}. That directory holds the whole
|
|
1697
|
+
`This project uses the pre-0.48 data layout (${layout.evidence}), and live-tokens.config.json sets the retired "manifestsDir" key to ${input.configuredManifestsDir}. That directory holds the whole themes, which now belong in ${input.themesDir}. Move it there by hand, drop the "manifestsDir" key, then run the migration again.`
|
|
1698
1698
|
);
|
|
1699
1699
|
}
|
|
1700
1700
|
if (import_path2.default.resolve(input.colorsAndTypeDir) !== import_path2.default.resolve(defaultColorsAndType) || import_path2.default.resolve(input.themesDir) !== import_path2.default.resolve(defaultThemes)) {
|
|
1701
1701
|
throw new Error(
|
|
1702
|
-
`This project uses the pre-0.48 data layout (${layout.evidence}), and its data directories are configured to custom paths (colorsAndTypeDir=${input.colorsAndTypeDir}, themesDir=${input.themesDir}). The migration cannot tell which directory holds what. Move the old colors-and-type directory to ${input.colorsAndTypeDir} and the old whole-
|
|
1702
|
+
`This project uses the pre-0.48 data layout (${layout.evidence}), and its data directories are configured to custom paths (colorsAndTypeDir=${input.colorsAndTypeDir}, themesDir=${input.themesDir}). The migration cannot tell which directory holds what. Move the old colors-and-type directory to ${input.colorsAndTypeDir} and the old whole-theme directory to ${input.themesDir} by hand, then run the migration again.`
|
|
1703
1703
|
);
|
|
1704
1704
|
}
|
|
1705
1705
|
const renames = [];
|