@arbor-css/modes 0.0.75 → 0.0.77

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.
@@ -9,19 +9,9 @@ export declare function isModeValue(value: any): value is ModeValue;
9
9
  export type ModeValues<T extends SimpleTokenSchema> = {
10
10
  [P in keyof T]: NonNullable<T[P]> extends ModeSchemaProperty ? ModeValue : NonNullable<T[P]> extends SimpleTokenSchema ? ModeValues<NonNullable<T[P]>> : never;
11
11
  };
12
- export interface ModeConfig {
13
- name: string;
14
- }
15
- export type ModeInstance<T extends SimpleTokenSchema> = {
16
- values: ModeValues<T>;
17
- schema: T;
18
- config: ModeConfig;
19
- };
20
- export type PartialModeInstance<T extends SimpleTokenSchema> = Omit<ModeInstance<T>, 'values'> & {
21
- values: DeepPartial<ModeValues<T>>;
22
- };
23
- export declare function flattenToPropsList(obj: any): Token[];
24
12
  export declare function createModeSchema<T extends SimpleTokenSchema>(input: T): T;
25
- export declare function createModeInstance<T extends SimpleTokenSchema>(schema: T, values: ModeValues<T>, config: ModeConfig): ModeInstance<T>;
26
- export declare function createPartialModeInstance<T extends SimpleTokenSchema>(schema: T, values: DeepPartial<ModeValues<T>>, config: ModeConfig): PartialModeInstance<T>;
13
+ export type ModeInstance<T extends SimpleTokenSchema> = DeepPartial<ModeValues<T>> & {
14
+ $name: string;
15
+ };
16
+ export declare function createModeInstance<T extends SimpleTokenSchema>(name: string, values: DeepPartial<ModeValues<T>>): ModeInstance<T>;
27
17
  //# sourceMappingURL=createModeSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createModeSchema.d.ts","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAEN,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,EACL,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEvD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAAE,CAAC;AAEhF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAO1D;AACD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,iBAAiB,IAAI;KACpD,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,kBAAkB,GAAG,SAAS,GACtE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3E,KAAK;CACP,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,iBAAiB,IAAI;IACvD,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,UAAU,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,iBAAiB,IAAI,IAAI,CAClE,YAAY,CAAC,CAAC,CAAC,EACf,QAAQ,CACR,GAAG;IACH,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,EAAE,CAUpD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,EAC7D,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,UAAU,GAChB,YAAY,CAAC,CAAC,CAAC,CAMjB;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,iBAAiB,EACpE,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAClC,MAAM,EAAE,UAAU,GAChB,mBAAmB,CAAC,CAAC,CAAC,CAMxB"}
1
+ {"version":3,"file":"createModeSchema.d.ts","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAEN,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,EACL,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEvD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAAE,CAAC;AAEhF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAO1D;AACD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,iBAAiB,IAAI;KACpD,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,kBAAkB,GAAG,SAAS,GACtE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3E,KAAK;CACP,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEzE;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,iBAAiB,IAAI,WAAW,CAClE,UAAU,CAAC,CAAC,CAAC,CACb,GAAG;IACH,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,EAC7D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAChC,YAAY,CAAC,CAAC,CAAC,CAKjB"}
@@ -6,33 +6,13 @@ export function isModeValue(value) {
6
6
  typeof value === 'string' ||
7
7
  typeof value === 'number');
8
8
  }
9
- export function flattenToPropsList(obj) {
10
- const propsList = [];
11
- for (const key in obj) {
12
- if (isToken(obj[key])) {
13
- propsList.push(obj[key]);
14
- }
15
- else if (typeof obj[key] === 'object' && obj[key] !== null) {
16
- propsList.push(...flattenToPropsList(obj[key]));
17
- }
18
- }
19
- return propsList;
20
- }
21
9
  export function createModeSchema(input) {
22
10
  return input;
23
11
  }
24
- export function createModeInstance(schema, values, config) {
25
- return {
26
- schema,
27
- values,
28
- config,
29
- };
30
- }
31
- export function createPartialModeInstance(schema, values, config) {
12
+ export function createModeInstance(name, values) {
32
13
  return {
33
- schema,
34
- values,
35
- config,
14
+ ...values,
15
+ $name: name,
36
16
  };
37
17
  }
38
18
  //# sourceMappingURL=createModeSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createModeSchema.js","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACN,OAAO,GAIP,MAAM,mBAAmB,CAAC;AAO3B,MAAM,UAAU,WAAW,CAAC,KAAU;IACrC,OAAO,CACN,cAAc,CAAC,KAAK,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ,CACzB,CAAC;AACH,CAAC;AAuBD,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IAC1C,MAAM,SAAS,GAAY,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9D,SAAS,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAA8B,KAAQ;IACrE,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,MAAS,EACT,MAAqB,EACrB,MAAkB;IAElB,OAAO;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACxC,MAAS,EACT,MAAkC,EAClC,MAAkB;IAElB,OAAO;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"createModeSchema.js","sourceRoot":"","sources":["../src/createModeSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACN,OAAO,GAIP,MAAM,mBAAmB,CAAC;AAO3B,MAAM,UAAU,WAAW,CAAC,KAAU;IACrC,OAAO,CACN,cAAc,CAAC,KAAK,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ,CACzB,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAA8B,KAAQ;IACrE,OAAO,KAAK,CAAC;AACd,CAAC;AAQD,MAAM,UAAU,kBAAkB,CACjC,IAAY,EACZ,MAAkC;IAElC,OAAO;QACN,GAAG,MAAM;QACT,KAAK,EAAE,IAAI;KACX,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export * from './createModeSchema.js';
2
- export * from './modeToCss.js';
3
2
  //# 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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
1
1
  export * from './createModeSchema.js';
2
- export * from './modeToCss.js';
3
2
  //# 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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbor-css/modes",
3
- "version": "0.0.75",
3
+ "version": "0.0.77",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -25,15 +25,15 @@
25
25
  "vitest": "^4.1.7"
26
26
  },
27
27
  "dependencies": {
28
- "@arbor-css/tokens": "0.0.75",
29
- "@arbor-css/util": "0.0.75",
30
- "@arbor-css/calc": "0.0.75",
31
- "@arbor-css/globals": "0.0.75"
28
+ "@arbor-css/tokens": "0.0.77",
29
+ "@arbor-css/util": "0.0.77",
30
+ "@arbor-css/globals": "0.0.77",
31
+ "@arbor-css/calc": "0.0.77"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "tsc",
35
35
  "dev": "tsc -w --preserveWatchOutput",
36
- "test": "vitest",
37
- "test:ci": "vitest --run"
36
+ "test": "vitest --passWithNoTests",
37
+ "test:ci": "pnpm test --run"
38
38
  }
39
39
  }
@@ -1,8 +0,0 @@
1
- import { SystemTokens } from '@arbor-css/globals';
2
- import { SimpleTokensAsTokenDefinitions, SimpleTokenSchema } from '@arbor-css/tokens';
3
- import { ModeInstance, PartialModeInstance } from './createModeSchema.js';
4
- export declare function modeToCss<TModeShape extends SimpleTokenSchema>(mode: PartialModeInstance<TModeShape>, baseMode: ModeInstance<TModeShape>, { systemProps, modeTokens, }: {
5
- systemProps: SystemTokens;
6
- modeTokens: SimpleTokensAsTokenDefinitions<TModeShape>;
7
- }): string;
8
- //# sourceMappingURL=modeToCss.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modeToCss.d.ts","sourceRoot":"","sources":["../src/modeToCss.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAEN,8BAA8B,EAC9B,iBAAiB,EAEjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEN,YAAY,EAEZ,mBAAmB,EACnB,MAAM,uBAAuB,CAAC;AAsD/B,wBAAgB,SAAS,CAAC,UAAU,SAAS,iBAAiB,EAC7D,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,EAErC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,EACC,WAAW,EACX,UAAU,GACV,EAAE;IACF,WAAW,EAAE,YAAY,CAAC;IAC1B,UAAU,EAAE,8BAA8B,CAAC,UAAU,CAAC,CAAC;CACvD,GACC,MAAM,CAoDR"}
package/dist/modeToCss.js DELETED
@@ -1,91 +0,0 @@
1
- import { isCalcEquation, printEquation } from '@arbor-css/calc';
2
- import { isToken, } from '@arbor-css/tokens';
3
- import { toFlatKeys } from '@arbor-css/util';
4
- import { isModeValue, } from './createModeSchema.js';
5
- /**
6
- * For a given Token, returns which values in the base mode depend on it.
7
- * When any mode defines a value, we check the corresponding token with
8
- * this function to decide if we need to interpolate any base values that
9
- * must be recomputed alongside it since CSS custom properties are eagerly
10
- * evaluated at declaration and won't update due to downstream changes to
11
- * properties they derive from.
12
- */
13
- function getBaseModeDependents(baseMode, token, modeTokens, 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}`);
18
- }
19
- const nextVisiting = [...visiting, token.name];
20
- const dependents = {};
21
- const flatBase = toFlatKeys(baseMode.values, isModeValue, { separator: '-' });
22
- const flatTokens = toFlatKeys(modeTokens, isToken, {
23
- separator: '-',
24
- });
25
- for (const key in flatBase) {
26
- const value = flatBase[key];
27
- if (isCalcEquation(value)) {
28
- if (value.tokens.some((dep) => dep.name === token.name)) {
29
- const tokenForKey = flatTokens[key];
30
- if (!tokenForKey) {
31
- continue;
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, modeTokens, nextVisiting));
36
- }
37
- }
38
- }
39
- return dependents;
40
- }
41
- export function modeToCss(mode,
42
- // TODO: move to core, use Preset instead of these options
43
- baseMode, { systemProps, modeTokens, }) {
44
- const flatValues = toFlatKeys(mode.values, isModeValue, {
45
- separator: '-',
46
- });
47
- const flatTokens = toFlatKeys(modeTokens, isToken, {
48
- separator: '-',
49
- });
50
- const cssVars = {};
51
- const lowPriorityVars = {};
52
- for (const key in flatValues) {
53
- const value = flatValues[key];
54
- const tokenVar = flatTokens[key];
55
- if (!tokenVar) {
56
- // ignore values which don't align with schema
57
- continue;
58
- }
59
- if (isToken(value)) {
60
- cssVars[tokenVar.name] = value.var;
61
- }
62
- else if (isCalcEquation(value)) {
63
- // TODO: add globals to parameters of this function and computeEquation
64
- // instead?
65
- cssVars[tokenVar.name] = printEquation(value);
66
- }
67
- else if (typeof value === 'string' || typeof value === 'number') {
68
- cssVars[tokenVar.name] = value.toString();
69
- }
70
- else {
71
- throw new Error(`Invalid value for token ${tokenVar.name}: ${value}. Must be a string, number, or $token (in mode ${mode.config.name})`);
72
- }
73
- // If this value corresponds to a token in the base mode, we need to check if any other base mode values depend on it and include them as well since CSS custom properties are eagerly evaluated.
74
- const baseDeps = getBaseModeDependents(baseMode, tokenVar, modeTokens);
75
- Object.assign(lowPriorityVars, baseDeps);
76
- }
77
- const valuesCss = Object.entries({
78
- ...lowPriorityVars,
79
- ...cssVars,
80
- }).reduce((acc, [key, value]) => `${acc}${key}: ${value};\n`, '');
81
- const content = [valuesCss, mode.schema.extraCss].filter(Boolean).join('\n');
82
- return `.\\@mode-${mode.config.name},
83
- [data-mode-${mode.config.name}=""],
84
- :where(.\\@mode-${mode.config.name} [class^="\\@scheme-"]),
85
- :where([data-mode-${mode.config.name}=""] [class^="\\@scheme-"]) {
86
- ${systemProps.meta.modeName.assign(mode.config.name)}
87
- ${content}
88
- }
89
- `;
90
- }
91
- //# sourceMappingURL=modeToCss.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modeToCss.js","sourceRoot":"","sources":["../src/modeToCss.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=modeToCss.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modeToCss.test.d.ts","sourceRoot":"","sources":["../src/modeToCss.test.ts"],"names":[],"mappings":""}
@@ -1,171 +0,0 @@
1
- import { css } from '@arbor-css/calc';
2
- import { createGlobalContext } from '@arbor-css/globals';
3
- import { convertSimpleTokenSchema } from '@arbor-css/tokens';
4
- import { expect, it } from 'vitest';
5
- import { createModeInstance, createModeSchema, createPartialModeInstance, } from './createModeSchema.js';
6
- import { modeToCss } from './modeToCss.js';
7
- const ctx = createGlobalContext();
8
- const systemProps = ctx.$systemTokens;
9
- const testSchema = createModeSchema({
10
- value: 'color',
11
- derived: {
12
- once: 'color',
13
- twice: 'color',
14
- again: 'color',
15
- },
16
- });
17
- const $mode = convertSimpleTokenSchema(testSchema, '', ctx.createModeToken);
18
- const baseMode = createModeInstance(testSchema, {
19
- value: 'red',
20
- derived: {
21
- once: css `color-mix(in hsl, ${$mode.value}, black)`,
22
- twice: css `color-mix(in hsl, ${$mode.derived.once}, transparent)`,
23
- again: css `color-mix(in hsl, ${$mode.value}, red)`,
24
- },
25
- }, {
26
- name: 'base',
27
- });
28
- const partialMode = createPartialModeInstance(testSchema, {
29
- value: 'blue',
30
- }, {
31
- name: 'partial',
32
- });
33
- const underivedMode = createPartialModeInstance(testSchema, {
34
- derived: {
35
- once: 'green',
36
- },
37
- }, {
38
- name: 'underived',
39
- });
40
- it('prints a base mode with derived values', () => {
41
- const css = modeToCss(baseMode, baseMode, { systemProps, modeTokens: $mode });
42
- expect(css).toMatchInlineSnapshot(`
43
- ".\\@mode-base,
44
- [data-mode-base=""],
45
- :where(.\\@mode-base [class^="\\@scheme-"]),
46
- :where([data-mode-base=""] [class^="\\@scheme-"]) {
47
- --_-system-modeName: base;
48
- --m-derived-once: color-mix(in hsl, var(--m-value), black);
49
- --m-derived-twice: color-mix(in hsl, var(--m-derived-once), transparent);
50
- --m-derived-again: color-mix(in hsl, var(--m-value), red);
51
- --m-value: red;
52
-
53
- }
54
- "
55
- `);
56
- });
57
- it('prints a partial mode with derived dependencies it doesnt declare', () => {
58
- const css = modeToCss(partialMode, baseMode, {
59
- systemProps,
60
- modeTokens: $mode,
61
- });
62
- expect(css).toMatchInlineSnapshot(`
63
- ".\\@mode-partial,
64
- [data-mode-partial=""],
65
- :where(.\\@mode-partial [class^="\\@scheme-"]),
66
- :where([data-mode-partial=""] [class^="\\@scheme-"]) {
67
- --_-system-modeName: partial;
68
- --m-derived-once: color-mix(in hsl, var(--m-value), black);
69
- --m-derived-twice: color-mix(in hsl, var(--m-derived-once), transparent);
70
- --m-derived-again: color-mix(in hsl, var(--m-value), red);
71
- --m-value: blue;
72
-
73
- }
74
- "
75
- `);
76
- });
77
- it('prints a partial mode which overrides derived dependencies from base and doesnt go upstream from there, but does go downstream to further derivations', () => {
78
- const css = modeToCss(underivedMode, baseMode, {
79
- systemProps,
80
- modeTokens: $mode,
81
- });
82
- expect(css).toMatchInlineSnapshot(`
83
- ".\\@mode-underived,
84
- [data-mode-underived=""],
85
- :where(.\\@mode-underived [class^="\\@scheme-"]),
86
- :where([data-mode-underived=""] [class^="\\@scheme-"]) {
87
- --_-system-modeName: underived;
88
- --m-derived-twice: color-mix(in hsl, var(--m-derived-once), transparent);
89
- --m-derived-once: green;
90
-
91
- }
92
- "
93
- `);
94
- });
95
- // $root tests
96
- const rootSchema = createModeSchema({
97
- colors: {
98
- main: {
99
- $root: 'color',
100
- mid: 'color',
101
- },
102
- },
103
- });
104
- const $rootMode = convertSimpleTokenSchema(rootSchema, '', ctx.createModeToken);
105
- const rootBase = createModeInstance(rootSchema, {
106
- colors: {
107
- main: {
108
- $root: 'oklch(0.5 0.1 240)',
109
- mid: 'oklch(0.6 0.1 240)',
110
- },
111
- },
112
- }, {
113
- name: 'rootBase',
114
- });
115
- it('$root at nested level generates CSS var at group path (no -$root suffix)', () => {
116
- const css = modeToCss(rootBase, rootBase, {
117
- systemProps,
118
- modeTokens: $rootMode,
119
- });
120
- expect(css).toContain('--m-colors-main: oklch(0.5 0.1 240)');
121
- expect(css).not.toContain('--m-colors-main-$root');
122
- });
123
- it('$root and sibling keys coexist and both emit correctly', () => {
124
- const css = modeToCss(rootBase, rootBase, {
125
- systemProps,
126
- modeTokens: $rootMode,
127
- });
128
- expect(css).toContain('--m-colors-main: oklch(0.5 0.1 240)');
129
- expect(css).toContain('--m-colors-main-mid: oklch(0.6 0.1 240)');
130
- });
131
- it('partial mode override of $root maps correctly', () => {
132
- const partial = createPartialModeInstance(rootSchema, {
133
- colors: {
134
- main: {
135
- $root: 'oklch(0.7 0.2 30)',
136
- },
137
- },
138
- }, {
139
- name: 'partial',
140
- });
141
- const css = modeToCss(partial, rootBase, {
142
- systemProps,
143
- modeTokens: $rootMode,
144
- });
145
- expect(css).toContain('--m-colors-main: oklch(0.7 0.2 30)');
146
- expect(css).not.toContain('--m-colors-main-mid');
147
- });
148
- it('throws with full token chain for circular derived dependencies', () => {
149
- const circularSchema = createModeSchema({
150
- value: 'color',
151
- derived: {
152
- a: 'color',
153
- b: 'color',
154
- },
155
- });
156
- const $circularMode = convertSimpleTokenSchema(circularSchema, '', ctx.createModeToken);
157
- const circularBase = createModeInstance(circularSchema, {
158
- value: 'red',
159
- derived: {
160
- a: css `color-mix(in hsl, ${$circularMode.derived.b}, white)`,
161
- b: css `color-mix(in hsl, ${$circularMode.derived.a}, black)`,
162
- },
163
- }, {
164
- name: 'circularBase',
165
- });
166
- expect(() => modeToCss(circularBase, circularBase, {
167
- systemProps,
168
- modeTokens: $circularMode,
169
- })).toThrow(/Circular dependency detected in mode circularBase: .*--m-derived-a.*->.*--m-derived-b.*->.*--m-derived-a/);
170
- });
171
- //# sourceMappingURL=modeToCss.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modeToCss.test.js","sourceRoot":"","sources":["../src/modeToCss.test.ts"],"names":[],"mappings":"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"}