@arbor-css/modes 0.0.49 → 0.0.52

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/LICENSE.md ADDED
@@ -0,0 +1,7 @@
1
+ Copyright 2026 Grant Forrest
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,5 +1,5 @@
1
- import { Token, TokenPurpose } from '@arbor-css/tokens';
2
- import { TrackedValue } from './tracking.js';
1
+ import { Equation } from '@arbor-css/calc';
2
+ import { CreateToken, Token, TokenPurpose } from '@arbor-css/tokens';
3
3
  export type ModePropertyType = TokenPurpose;
4
4
  export type ModeSchemaProperty = ModePropertyType | {
5
5
  type: ModePropertyType;
@@ -9,7 +9,7 @@ export type ModeSchemaLevel = {
9
9
  /**
10
10
  * Special key: creates a token at the current group path without appending
11
11
  * a `-$root` segment. For example, `{ colors: { main: { $root: 'color', mid: 'color' } } }`
12
- * generates `--Ⓜ️-colors-main` (for `$root`) and `--Ⓜ️-colors-main-mid` (for `mid`).
12
+ * generates `--$-colors-main` (for `$root`) and `--$-colors-main-mid` (for `mid`).
13
13
  * Optional at any level.
14
14
  */
15
15
  $root?: ModeSchemaProperty;
@@ -18,20 +18,21 @@ export type ModeSchemaLevel = {
18
18
  export type ModeSchema<TSchema extends ModeSchemaLevel = ModeSchemaLevel> = {
19
19
  definition: TSchema;
20
20
  tag: string;
21
- $tokens: AsPropertyDefinitions<TSchema>;
21
+ $tokens: ModeTokens<TSchema>;
22
22
  createBase: (def: ModeValues<TSchema>) => ModeInstance<TSchema>;
23
23
  createPartial: (name: string, def: DeepPartial<ModeValues<TSchema>>) => PartialModeInstance<TSchema>;
24
24
  extend: <TExtensionSchema extends ModeSchemaLevel>(extension: TExtensionSchema) => ModeSchema<TSchema & TExtensionSchema>;
25
25
  extraCss?: string;
26
26
  };
27
- export declare function createModeSchema<T extends ModeSchemaLevel>(input: T, { tag, extraCss }?: {
27
+ export declare function createModeSchema<T extends ModeSchemaLevel>(input: T, { tag, extraCss, createToken: createTokenValue, }: {
28
28
  tag?: string;
29
29
  extraCss?: string;
30
+ createToken: CreateToken;
30
31
  }): ModeSchema<T>;
31
32
  export type DeepPartial<T> = {
32
33
  [P in keyof T]?: DeepPartial<T[P]> | undefined;
33
34
  };
34
- export type ModeValue = string | number | Token | TrackedValue;
35
+ export type ModeValue = string | number | Token | Equation;
35
36
  export declare function isModeValue(value: any): value is ModeValue;
36
37
  export type ModeValues<T extends ModeSchemaLevel> = {
37
38
  [P in keyof T]: NonNullable<T[P]> extends ModeSchemaProperty ? ModeValue : NonNullable<T[P]> extends ModeSchemaLevel ? ModeValues<NonNullable<T[P]>> : never;
@@ -47,9 +48,8 @@ export type ModeInstance<T extends ModeSchemaLevel> = {
47
48
  export type PartialModeInstance<T extends ModeSchemaLevel> = Omit<ModeInstance<T>, 'values'> & {
48
49
  values: DeepPartial<ModeValues<T>>;
49
50
  };
50
- type AsPropertyDefinitions<T> = T extends object ? {
51
- [P in keyof T]: NonNullable<T[P]> extends string ? Token : NonNullable<T[P]> extends object ? AsPropertyDefinitions<NonNullable<T[P]>> : never;
51
+ export type ModeTokens<T> = T extends object ? {
52
+ [P in keyof T]: NonNullable<T[P]> extends string ? Token : NonNullable<T[P]> extends object ? ModeTokens<NonNullable<T[P]>> : never;
52
53
  } : never;
53
54
  export declare function flattenToPropsList(obj: any): Token[];
54
- export {};
55
55
  //# sourceMappingURL=createModeSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createModeSchema.d.ts","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createModeSchema.d.ts","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { createToken, isToken } from '@arbor-css/tokens';
2
- import { isTrackedValue } from './tracking.js';
1
+ import { isCalcEquation } from '@arbor-css/calc';
2
+ import { isToken } from '@arbor-css/tokens';
3
3
  function isModeSchemaProperty(value) {
4
4
  return (typeof value === 'string' ||
5
5
  (typeof value === 'object' &&
@@ -7,20 +7,20 @@ function isModeSchemaProperty(value) {
7
7
  'type' in value &&
8
8
  value.type !== undefined));
9
9
  }
10
- function getModeSchemaPropertyAsPropertyDefinition(name, prop, group) {
10
+ function getModeSchemaPropertyAsPropertyDefinition(name, prop, createTokenValue, group) {
11
11
  if (typeof prop === 'string') {
12
- return createToken(name, { purpose: prop, group });
12
+ return createTokenValue(name, { purpose: prop, group });
13
13
  }
14
14
  else {
15
- return createToken(name, {
15
+ return createTokenValue(name, {
16
16
  purpose: prop.type,
17
17
  fallback: prop.fallback,
18
18
  group,
19
19
  });
20
20
  }
21
21
  }
22
- export function createModeSchema(input, { tag = 'Ⓜ️', extraCss } = {}) {
23
- const PROPS = createModeTokens(input, tag);
22
+ export function createModeSchema(input, { tag = '', extraCss, createToken: createTokenValue, }) {
23
+ const PROPS = createModeTokens(input, tag, createTokenValue);
24
24
  const schema = {
25
25
  definition: input,
26
26
  tag,
@@ -51,18 +51,19 @@ export function createModeSchema(input, { tag = 'Ⓜ️', extraCss } = {}) {
51
51
  };
52
52
  return createModeSchema(extendedDefinition, {
53
53
  tag: schema.tag,
54
+ createToken: createTokenValue,
54
55
  });
55
56
  },
56
57
  };
57
58
  return schema;
58
59
  }
59
60
  export function isModeValue(value) {
60
- return (isTrackedValue(value) ||
61
+ return (isCalcEquation(value) ||
61
62
  isToken(value) ||
62
63
  typeof value === 'string' ||
63
64
  typeof value === 'number');
64
65
  }
65
- function createModeTokens(root, tag) {
66
+ function createModeTokens(root, tag, createTokenValue) {
66
67
  function generatePropsForSchemaLevel(schemaLevel, propPrefix) {
67
68
  const propsLevel = {};
68
69
  for (const key in schemaLevel) {
@@ -70,13 +71,15 @@ function createModeTokens(root, tag) {
70
71
  if (key === '$root') {
71
72
  // $root generates a token at the current group path (no segment appended)
72
73
  if (isModeSchemaProperty(value)) {
73
- propsLevel.$root = getModeSchemaPropertyAsPropertyDefinition(propPrefix, value, propPrefix);
74
+ propsLevel.$root = getModeSchemaPropertyAsPropertyDefinition(propPrefix, value, createTokenValue, propPrefix);
74
75
  }
75
76
  continue;
76
77
  }
77
- const currentPrefix = `${propPrefix}-${key.toLowerCase()}`;
78
+ const currentPrefix = [propPrefix, key.toLowerCase()]
79
+ .filter(Boolean)
80
+ .join('-');
78
81
  if (isModeSchemaProperty(value)) {
79
- const propertyDefinition = getModeSchemaPropertyAsPropertyDefinition(currentPrefix, value, propPrefix);
82
+ const propertyDefinition = getModeSchemaPropertyAsPropertyDefinition(currentPrefix, value, createTokenValue, propPrefix);
80
83
  propsLevel[key] = propertyDefinition;
81
84
  }
82
85
  else if (typeof value === 'object' && value !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"createModeSchema.js","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createModeSchema.js","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from './createModeSchema.js';
2
2
  export * from './modeToCss.js';
3
- export * from './tracking.js';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from './createModeSchema.js';
2
2
  export * from './modeToCss.js';
3
- export * from './tracking.js';
4
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC"}
@@ -1,3 +1,6 @@
1
+ import { SystemTokens } from '@arbor-css/globals';
1
2
  import { ModeInstance, ModeSchemaLevel, PartialModeInstance } from './createModeSchema.js';
2
- export declare function modeToCss<TModeShape extends ModeSchemaLevel>(mode: PartialModeInstance<TModeShape>, baseMode: ModeInstance<TModeShape>): string;
3
+ export declare function modeToCss<TModeShape extends ModeSchemaLevel>(mode: PartialModeInstance<TModeShape>, baseMode: ModeInstance<TModeShape>, { systemProps, }: {
4
+ systemProps: SystemTokens;
5
+ }): string;
3
6
  //# sourceMappingURL=modeToCss.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modeToCss.d.ts","sourceRoot":"","sources":["../src/modeToCss.ts"],"names":[],"mappings":"AAGA,OAAO,EAEN,YAAY,EACZ,eAAe,EAEf,mBAAmB,EACnB,MAAM,uBAAuB,CAAC;AA8C/B,wBAAgB,SAAS,CAAC,UAAU,SAAS,eAAe,EAC3D,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACrC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GAChC,MAAM,CAkDR"}
1
+ {"version":3,"file":"modeToCss.d.ts","sourceRoot":"","sources":["../src/modeToCss.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAEN,YAAY,EACZ,eAAe,EAEf,mBAAmB,EACnB,MAAM,uBAAuB,CAAC;AAgD/B,wBAAgB,SAAS,CAAC,UAAU,SAAS,eAAe,EAC3D,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACrC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,EACC,WAAW,GACX,EAAE;IACF,WAAW,EAAE,YAAY,CAAC;CAC1B,GACC,MAAM,CAoDR"}
package/dist/modeToCss.js CHANGED
@@ -1,8 +1,7 @@
1
- import { $systemProps } from '@arbor-css/globals';
1
+ import { isCalcEquation, printEquation } from '@arbor-css/calc';
2
2
  import { isToken } from '@arbor-css/tokens';
3
3
  import { toFlatKeys } from '@arbor-css/util';
4
4
  import { isModeValue, } from './createModeSchema.js';
5
- import { isTrackedValue } from './tracking.js';
6
5
  /**
7
6
  * For a given Token, returns which values in the base mode depend on it.
8
7
  * When any mode defines a value, we check the corresponding token with
@@ -11,11 +10,13 @@ import { isTrackedValue } from './tracking.js';
11
10
  * evaluated at declaration and won't update due to downstream changes to
12
11
  * properties they derive from.
13
12
  */
14
- function getBaseModeDependents(baseMode, token, seen = new Set()) {
15
- if (seen.has(token)) {
16
- throw new Error(`Circular dependency detected for token ${token.name} in mode ${baseMode.config.name}`);
13
+ function getBaseModeDependents(baseMode, token, visiting = []) {
14
+ const cycleStart = visiting.findIndex((name) => name === token.name);
15
+ if (cycleStart !== -1) {
16
+ const cycleChain = [...visiting.slice(cycleStart), token.name].join(' -> ');
17
+ throw new Error(`Circular dependency detected in mode ${baseMode.config.name}: ${cycleChain}`);
17
18
  }
18
- seen.add(token);
19
+ const nextVisiting = [...visiting, token.name];
19
20
  const dependents = {};
20
21
  const flatBase = toFlatKeys(baseMode.values, isModeValue, { separator: '-' });
21
22
  const flatTokens = toFlatKeys(baseMode.schema.$tokens, isToken, {
@@ -23,20 +24,21 @@ function getBaseModeDependents(baseMode, token, seen = new Set()) {
23
24
  });
24
25
  for (const key in flatBase) {
25
26
  const value = flatBase[key];
26
- if (isTrackedValue(value)) {
27
- if (value.dependencies.some((dep) => dep.name === token.name)) {
27
+ if (isCalcEquation(value)) {
28
+ if (value.tokens.some((dep) => dep.name === token.name)) {
28
29
  const tokenForKey = flatTokens[key];
29
- dependents[tokenForKey.name] = value.value;
30
- // recurse to find any values that depend on this dependent as well
31
- if (tokenForKey) {
32
- Object.assign(dependents, getBaseModeDependents(baseMode, tokenForKey, seen));
30
+ if (!tokenForKey) {
31
+ continue;
33
32
  }
33
+ dependents[tokenForKey.name] = printEquation(value);
34
+ // recurse to find any values that depend on this dependent as well
35
+ Object.assign(dependents, getBaseModeDependents(baseMode, tokenForKey, nextVisiting));
34
36
  }
35
37
  }
36
38
  }
37
39
  return dependents;
38
40
  }
39
- export function modeToCss(mode, baseMode) {
41
+ export function modeToCss(mode, baseMode, { systemProps, }) {
40
42
  const flatValues = toFlatKeys(mode.values, isModeValue, {
41
43
  separator: '-',
42
44
  });
@@ -55,8 +57,10 @@ export function modeToCss(mode, baseMode) {
55
57
  if (isToken(value)) {
56
58
  cssVars[tokenVar.name] = value.var;
57
59
  }
58
- else if (isTrackedValue(value)) {
59
- cssVars[tokenVar.name] = value.value;
60
+ else if (isCalcEquation(value)) {
61
+ // TODO: add globals to parameters of this function and computeEquation
62
+ // instead?
63
+ cssVars[tokenVar.name] = printEquation(value);
60
64
  }
61
65
  else if (typeof value === 'string' || typeof value === 'number') {
62
66
  cssVars[tokenVar.name] = value.toString();
@@ -73,13 +77,13 @@ export function modeToCss(mode, baseMode) {
73
77
  ...cssVars,
74
78
  }).reduce((acc, [key, value]) => `${acc}${key}: ${value};\n`, '');
75
79
  const content = [valuesCss, mode.schema.extraCss].filter(Boolean).join('\n');
76
- return `.\\@mode-${mode.config.name},
77
- [data-mode-${mode.config.name}=""],
78
- :where(.\\@mode-${mode.config.name} [class^="\\@scheme-"]),
79
- :where([data-mode-${mode.config.name}=""] [class^="\\@scheme-"]) {
80
- ${$systemProps.labels.mode.assign(mode.config.name)}
81
- ${content}
82
- }
80
+ return `.\\@mode-${mode.config.name},
81
+ [data-mode-${mode.config.name}=""],
82
+ :where(.\\@mode-${mode.config.name} [class^="\\@scheme-"]),
83
+ :where([data-mode-${mode.config.name}=""] [class^="\\@scheme-"]) {
84
+ ${systemProps.labels.mode.assign(mode.config.name)}
85
+ ${content}
86
+ }
83
87
  `;
84
88
  }
85
89
  //# sourceMappingURL=modeToCss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modeToCss.js","sourceRoot":"","sources":["../src/modeToCss.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modeToCss.js","sourceRoot":"","sources":["../src/modeToCss.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ import { css } from '@arbor-css/calc';
2
+ import { createGlobalContext } from '@arbor-css/globals';
1
3
  import { expect, it } from 'vitest';
2
4
  import { createModeSchema } from './createModeSchema.js';
3
5
  import { modeToCss } from './modeToCss.js';
4
- import { derive } from './tracking.js';
6
+ const ctx = createGlobalContext();
7
+ const systemProps = ctx.$systemTokens;
5
8
  const testSchema = createModeSchema({
6
9
  value: 'color',
7
10
  derived: {
@@ -9,13 +12,15 @@ const testSchema = createModeSchema({
9
12
  twice: 'color',
10
13
  again: 'color',
11
14
  },
15
+ }, {
16
+ createToken: ctx.createToken,
12
17
  });
13
18
  const baseMode = testSchema.createBase({
14
19
  value: 'red',
15
20
  derived: {
16
- once: derive `color-mix(in hsl, ${testSchema.$tokens.value}, black)`,
17
- twice: derive `color-mix(in hsl, ${testSchema.$tokens.derived.once}, transparent)`,
18
- again: derive `color-mix(in hsl, ${testSchema.$tokens.value}, red)`,
21
+ once: css `color-mix(in hsl, ${testSchema.$tokens.value}, black)`,
22
+ twice: css `color-mix(in hsl, ${testSchema.$tokens.derived.once}, transparent)`,
23
+ again: css `color-mix(in hsl, ${testSchema.$tokens.value}, red)`,
19
24
  },
20
25
  });
21
26
  const partialMode = testSchema.createPartial('partial', {
@@ -27,52 +32,52 @@ const underivedMode = testSchema.createPartial('underived', {
27
32
  },
28
33
  });
29
34
  it('prints a base mode with derived values', () => {
30
- const css = modeToCss(baseMode, baseMode);
31
- expect(css).toMatchInlineSnapshot(`
32
- ".\\@mode-base,
33
- [data-mode-base=""],
34
- :where(.\\@mode-base [class^="\\@scheme-"]),
35
- :where([data-mode-base=""] [class^="\\@scheme-"]) {
36
- --ℹ️-mode: base;
37
- --Ⓜ️-derived-once: color-mix(in hsl, var(--Ⓜ️-value), black);
38
- --Ⓜ️-derived-twice: color-mix(in hsl, var(--Ⓜ️-derived-once), transparent);
39
- --Ⓜ️-derived-again: color-mix(in hsl, var(--Ⓜ️-value), red);
40
- --Ⓜ️-value: red;
41
-
42
- }
43
- "
35
+ const css = modeToCss(baseMode, baseMode, { systemProps });
36
+ expect(css).toMatchInlineSnapshot(`
37
+ ".\\@mode-base,
38
+ [data-mode-base=""],
39
+ :where(.\\@mode-base [class^="\\@scheme-"]),
40
+ :where([data-mode-base=""] [class^="\\@scheme-"]) {
41
+ --x-system-mode: base;
42
+ --x-derived-once: color-mix(in hsl, var(--x-value), black);
43
+ --x-derived-twice: color-mix(in hsl, var(--x-derived-once), transparent);
44
+ --x-derived-again: color-mix(in hsl, var(--x-value), red);
45
+ --x-value: red;
46
+
47
+ }
48
+ "
44
49
  `);
45
50
  });
46
51
  it('prints a partial mode with derived dependencies it doesnt declare', () => {
47
- const css = modeToCss(partialMode, baseMode);
48
- expect(css).toMatchInlineSnapshot(`
49
- ".\\@mode-partial,
50
- [data-mode-partial=""],
51
- :where(.\\@mode-partial [class^="\\@scheme-"]),
52
- :where([data-mode-partial=""] [class^="\\@scheme-"]) {
53
- --ℹ️-mode: partial;
54
- --Ⓜ️-derived-once: color-mix(in hsl, var(--Ⓜ️-value), black);
55
- --Ⓜ️-derived-twice: color-mix(in hsl, var(--Ⓜ️-derived-once), transparent);
56
- --Ⓜ️-derived-again: color-mix(in hsl, var(--Ⓜ️-value), red);
57
- --Ⓜ️-value: blue;
58
-
59
- }
60
- "
52
+ const css = modeToCss(partialMode, baseMode, { systemProps });
53
+ expect(css).toMatchInlineSnapshot(`
54
+ ".\\@mode-partial,
55
+ [data-mode-partial=""],
56
+ :where(.\\@mode-partial [class^="\\@scheme-"]),
57
+ :where([data-mode-partial=""] [class^="\\@scheme-"]) {
58
+ --x-system-mode: partial;
59
+ --x-derived-once: color-mix(in hsl, var(--x-value), black);
60
+ --x-derived-twice: color-mix(in hsl, var(--x-derived-once), transparent);
61
+ --x-derived-again: color-mix(in hsl, var(--x-value), red);
62
+ --x-value: blue;
63
+
64
+ }
65
+ "
61
66
  `);
62
67
  });
63
68
  it('prints a partial mode which overrides derived dependencies from base and doesnt go upstream from there, but does go downstream to further derivations', () => {
64
- const css = modeToCss(underivedMode, baseMode);
65
- expect(css).toMatchInlineSnapshot(`
66
- ".\\@mode-underived,
67
- [data-mode-underived=""],
68
- :where(.\\@mode-underived [class^="\\@scheme-"]),
69
- :where([data-mode-underived=""] [class^="\\@scheme-"]) {
70
- --ℹ️-mode: underived;
71
- --Ⓜ️-derived-twice: color-mix(in hsl, var(--Ⓜ️-derived-once), transparent);
72
- --Ⓜ️-derived-once: green;
73
-
74
- }
75
- "
69
+ const css = modeToCss(underivedMode, baseMode, { systemProps });
70
+ expect(css).toMatchInlineSnapshot(`
71
+ ".\\@mode-underived,
72
+ [data-mode-underived=""],
73
+ :where(.\\@mode-underived [class^="\\@scheme-"]),
74
+ :where([data-mode-underived=""] [class^="\\@scheme-"]) {
75
+ --x-system-mode: underived;
76
+ --x-derived-twice: color-mix(in hsl, var(--x-derived-once), transparent);
77
+ --x-derived-once: green;
78
+
79
+ }
80
+ "
76
81
  `);
77
82
  });
78
83
  // $root tests
@@ -83,6 +88,8 @@ const rootSchema = createModeSchema({
83
88
  mid: 'color',
84
89
  },
85
90
  },
91
+ }, {
92
+ createToken: ctx.createToken,
86
93
  });
87
94
  const rootBase = rootSchema.createBase({
88
95
  colors: {
@@ -93,14 +100,14 @@ const rootBase = rootSchema.createBase({
93
100
  },
94
101
  });
95
102
  it('$root at nested level generates CSS var at group path (no -$root suffix)', () => {
96
- const css = modeToCss(rootBase, rootBase);
97
- expect(css).toContain('--Ⓜ️-colors-main: oklch(0.5 0.1 240)');
98
- expect(css).not.toContain('--Ⓜ️-colors-main-$root');
103
+ const css = modeToCss(rootBase, rootBase, { systemProps });
104
+ expect(css).toContain('--x-colors-main: oklch(0.5 0.1 240)');
105
+ expect(css).not.toContain('--x-colors-main-$root');
99
106
  });
100
107
  it('$root and sibling keys coexist and both emit correctly', () => {
101
- const css = modeToCss(rootBase, rootBase);
102
- expect(css).toContain('--Ⓜ️-colors-main: oklch(0.5 0.1 240)');
103
- expect(css).toContain('--Ⓜ️-colors-main-mid: oklch(0.6 0.1 240)');
108
+ const css = modeToCss(rootBase, rootBase, { systemProps });
109
+ expect(css).toContain('--x-colors-main: oklch(0.5 0.1 240)');
110
+ expect(css).toContain('--x-colors-main-mid: oklch(0.6 0.1 240)');
104
111
  });
105
112
  it('partial mode override of $root maps correctly', () => {
106
113
  const partial = rootSchema.createPartial('alt', {
@@ -110,8 +117,27 @@ it('partial mode override of $root maps correctly', () => {
110
117
  },
111
118
  },
112
119
  });
113
- const css = modeToCss(partial, rootBase);
114
- expect(css).toContain('--Ⓜ️-colors-main: oklch(0.7 0.2 30)');
115
- expect(css).not.toContain('--Ⓜ️-colors-main-mid');
120
+ const css = modeToCss(partial, rootBase, { systemProps });
121
+ expect(css).toContain('--x-colors-main: oklch(0.7 0.2 30)');
122
+ expect(css).not.toContain('--x-colors-main-mid');
123
+ });
124
+ it('throws with full token chain for circular derived dependencies', () => {
125
+ const circularSchema = createModeSchema({
126
+ value: 'color',
127
+ derived: {
128
+ a: 'color',
129
+ b: 'color',
130
+ },
131
+ }, {
132
+ createToken: ctx.createToken,
133
+ });
134
+ const circularBase = circularSchema.createBase({
135
+ value: 'red',
136
+ derived: {
137
+ a: css `color-mix(in hsl, ${circularSchema.$tokens.derived.b}, white)`,
138
+ b: css `color-mix(in hsl, ${circularSchema.$tokens.derived.a}, black)`,
139
+ },
140
+ });
141
+ expect(() => modeToCss(circularBase, circularBase, { systemProps })).toThrow(/Circular dependency detected in mode base: .*--x-derived-a.*->.*--x-derived-b.*->.*--x-derived-a/);
116
142
  });
117
143
  //# sourceMappingURL=modeToCss.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modeToCss.test.js","sourceRoot":"","sources":["../src/modeToCss.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modeToCss.test.js","sourceRoot":"","sources":["../src/modeToCss.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbor-css/modes",
3
- "version": "0.0.49",
3
+ "version": "0.0.52",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -25,13 +25,15 @@
25
25
  "vitest": "^4.1.5"
26
26
  },
27
27
  "dependencies": {
28
- "@arbor-css/tokens": "0.0.49",
29
- "@arbor-css/util": "0.0.49",
30
- "@arbor-css/globals": "0.0.49"
28
+ "@arbor-css/tokens": "0.0.52",
29
+ "@arbor-css/util": "0.0.52",
30
+ "@arbor-css/calc": "0.0.52",
31
+ "@arbor-css/globals": "0.0.52"
31
32
  },
32
33
  "scripts": {
33
34
  "build": "tsc",
34
35
  "dev": "tsc -w --preserveWatchOutput",
35
- "test": "vitest"
36
+ "test": "vitest",
37
+ "test:ci": "vitest --run"
36
38
  }
37
39
  }
@@ -1,17 +0,0 @@
1
- import { Token } from '@arbor-css/tokens';
2
- export type TrackedValue = {
3
- '@@TRACKED': true;
4
- dependencies: Token[];
5
- value: string;
6
- };
7
- export declare function isTrackedValue(value: any): value is TrackedValue;
8
- export type DeriveEntry = Token | {
9
- value: Token;
10
- fallback: DeriveEntry;
11
- };
12
- /**
13
- * A tagged template literal which interpolates Tokens and
14
- * tracks them as dependencies.
15
- */
16
- export declare const derive: (strings: TemplateStringsArray, ...values: DeriveEntry[]) => TrackedValue;
17
- //# sourceMappingURL=tracking.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE,IAAI,CAAC;IAClB,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,YAAY,CAEhE;AAED,MAAM,MAAM,WAAW,GACpB,KAAK,GACL;IACA,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;CACrB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,MAAM,GAClB,SAAS,oBAAoB,EAC7B,GAAG,QAAQ,WAAW,EAAE,KACtB,YAkBF,CAAC"}
package/dist/tracking.js DELETED
@@ -1,48 +0,0 @@
1
- import { isToken } from '@arbor-css/tokens';
2
- export function isTrackedValue(value) {
3
- return value && typeof value === 'object' && '@@TRACKED' in value;
4
- }
5
- /**
6
- * A tagged template literal which interpolates Tokens and
7
- * tracks them as dependencies.
8
- */
9
- export const derive = (strings, ...values) => {
10
- const dependencies = [];
11
- const result = strings.reduce((acc, str, i) => {
12
- const value = values[i - 1];
13
- if (value) {
14
- if (isToken(value)) {
15
- dependencies.push(value);
16
- acc += value.var;
17
- }
18
- else {
19
- const flattened = flattenDeriveEntry(value);
20
- dependencies.push(...flattened);
21
- acc += writeVarFallbacks(flattened);
22
- }
23
- }
24
- acc += str;
25
- return acc;
26
- }, '');
27
- return { value: result, dependencies, '@@TRACKED': true };
28
- };
29
- function flattenDeriveEntry(entry) {
30
- if (isToken(entry)) {
31
- return [entry];
32
- }
33
- else {
34
- return [entry.value, ...flattenDeriveEntry(entry.fallback)];
35
- }
36
- }
37
- function writeVarFallbacks(tokens) {
38
- const copy = [...tokens];
39
- let latest = copy.pop()?.var;
40
- if (!latest)
41
- return '';
42
- while (copy.length > 0) {
43
- const next = copy.pop();
44
- latest = next.varFallback(latest);
45
- }
46
- return latest;
47
- }
48
- //# sourceMappingURL=tracking.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,mBAAmB,CAAC;AAQnD,MAAM,UAAU,cAAc,CAAC,KAAU;IACxC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC;AACnE,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACrB,OAA6B,EAC7B,GAAG,MAAqB,EACT,EAAE;IACjB,MAAM,YAAY,GAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACP,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC5C,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBAChC,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;QACD,GAAG,IAAI,GAAG,CAAC;QACX,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAkB;IAC7C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe;IACzC,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACzB,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC;IAC7B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tracking.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking.test.d.ts","sourceRoot":"","sources":["../src/tracking.test.ts"],"names":[],"mappings":""}
@@ -1,35 +0,0 @@
1
- import { createToken } from '@arbor-css/tokens';
2
- import { expect, it } from 'vitest';
3
- import { derive } from './tracking.js';
4
- const a = createToken('a', {});
5
- const b = createToken('b', {});
6
- const c = createToken('c', {});
7
- it('tracks simple token values', () => {
8
- expect(derive `${a}`).toEqual({
9
- value: a.var,
10
- dependencies: [a],
11
- '@@TRACKED': true,
12
- });
13
- });
14
- it('interpolates tokens into other things', () => {
15
- expect(derive `calc(${a} + 1px)`).toEqual({
16
- value: `calc(${a.var} + 1px)`,
17
- dependencies: [a],
18
- '@@TRACKED': true,
19
- });
20
- });
21
- it('handles fallbacks', () => {
22
- expect(derive `${{ value: a, fallback: b }}`).toEqual({
23
- value: a.varFallback(b.var),
24
- dependencies: [a, b],
25
- '@@TRACKED': true,
26
- });
27
- });
28
- it('handles nested fallbacks', () => {
29
- expect(derive `${{ value: a, fallback: { value: b, fallback: c } }}`).toEqual({
30
- value: a.varFallback(b.varFallback(c.var)),
31
- dependencies: [a, b, c],
32
- '@@TRACKED': true,
33
- });
34
- });
35
- //# sourceMappingURL=tracking.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking.test.js","sourceRoot":"","sources":["../src/tracking.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE/B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACrC,MAAM,CAAC,MAAM,CAAA,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,GAAG;QACZ,YAAY,EAAE,CAAC,CAAC,CAAC;QACjB,WAAW,EAAE,IAAI;KACjB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;IAChD,MAAM,CAAC,MAAM,CAAA,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;QACxC,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS;QAC7B,YAAY,EAAE,CAAC,CAAC,CAAC;QACjB,WAAW,EAAE,IAAI;KACjB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC5B,MAAM,CAAC,MAAM,CAAA,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;QACpD,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3B,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,WAAW,EAAE,IAAI;KACjB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACnC,MAAM,CAAC,MAAM,CAAA,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;QAC5E,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1C,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvB,WAAW,EAAE,IAAI;KACjB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}