@charcoal-ui/theme 5.0.0-beta.4 → 5.0.0-beta.6
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/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/unstable-token-object/index.cjs.map +1 -1
- package/dist/unstable-token-object/index.d.cts +3 -3
- package/dist/unstable-token-object/index.d.cts.map +1 -1
- package/dist/unstable-token-object/index.d.ts +3 -3
- package/dist/unstable-token-object/index.d.ts.map +1 -1
- package/dist/unstable-token-object/index.js.map +1 -1
- package/package.json +3 -3
- package/src/default.test.ts +3 -3
- package/src/unstable-token-object/helpers/changecase-keys.ts +5 -5
- package/src/unstable-token-object/helpers/nest-object.test.ts +1 -1
- package/src/unstable-token-object/helpers/nest-object.ts +2 -2
- package/src/unstable-token-object/index.ts +6 -6
- package/src/unstable-token-object/reference-token.ts +3 -3
- package/src/unstable-token-object/token-object.test.ts +16 -13
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":["light: CharcoalTheme","dark: CharcoalTheme"],"sources":["../src/abstract-theme.ts","../src/theme.ts","../src/default.ts"],"sourcesContent":[],"mappings":";;;KAQY,UAAA;KAEA,GAAA;AAFA,KAIA,eAAA,GAJA,UAKF,GALE,GAKI,QALJ,EAAA;AAEA,UAMK,qBAAA,CANL;EAEZ,KAAY,EAKH,eALG;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":["light: CharcoalTheme","dark: CharcoalTheme"],"sources":["../src/abstract-theme.ts","../src/theme.ts","../src/default.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["light: CharcoalTheme","dark: CharcoalTheme"],"sources":["../src/abstract-theme.ts","../src/theme.ts","../src/default.ts"],"sourcesContent":[],"mappings":";;;KAQY,UAAA;KAEA,GAAA;AAFA,KAIA,eAAA,GAJA,UAKF,GALE,GAKI,QALJ,EAAA;AAEA,UAMK,qBAAA,CANL;EAEZ,KAAY,EAKH,eALG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["light: CharcoalTheme","dark: CharcoalTheme"],"sources":["../src/abstract-theme.ts","../src/theme.ts","../src/default.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["value"],"sources":["../../src/unstable-token-object/reference-token.ts","../../src/unstable-token-object/helpers/is-empty-array.ts","../../src/unstable-token-object/helpers/nest-object.ts","../../src/unstable-token-object/to-token-object.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":["import { TokenDictionary, Tokens } from './types'\n\nexport type ReferenceToken = `{${string}}`\n\nconst isReferenceToken = (value: string): value is ReferenceToken =>\n value.startsWith('{') && value.endsWith('}')\n\nconst parseReferenceToken = (\n value: ReferenceToken
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["value"],"sources":["../../src/unstable-token-object/reference-token.ts","../../src/unstable-token-object/helpers/is-empty-array.ts","../../src/unstable-token-object/helpers/nest-object.ts","../../src/unstable-token-object/to-token-object.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":["import { TokenDictionary, Tokens } from './types'\n\nexport type ReferenceToken = `{${string}}`\n\nconst isReferenceToken = (value: string): value is ReferenceToken =>\n value.startsWith('{') && value.endsWith('}')\n\nconst parseReferenceToken = (\n value: ReferenceToken,\n): [category: string, key: string] => {\n const [category, key] = value.slice(1, -1).split('.')\n\n return [category, key]\n}\n\nexport const createReferenceTokenResolver = <T extends TokenDictionary>(\n tokenDictionary: T,\n baseTokenDictionary: TokenDictionary,\n): ((value: string) => string) => {\n const resolver = (value: string): string => {\n if (!isReferenceToken(value)) return value\n\n const [category, tokenKey] = parseReferenceToken(value)\n const baseTokens = baseTokenDictionary[category] as Tokens | undefined\n\n return resolver(\n (baseTokens?.[tokenKey] ?? tokenDictionary[category][tokenKey]).value,\n )\n }\n\n return resolver\n}\n","export const isNonEmptyArray = <T>(arr: T[]): arr is [T, ...T[]] =>\n arr.length > 0\n","import { isNonEmptyArray } from './is-empty-array'\n\ntype MakeNestObject<P extends readonly string[], T> = P extends [\n infer Head,\n ...infer Tail,\n]\n ? Head extends string\n ? Tail extends string[]\n ? {\n [K in Head]: MakeNestObject<Tail, T>\n }\n : { [K in Head]: T }\n : T\n : T\n\nexport const nestObject = <P extends [string, ...string[]], T>(\n path: P,\n value: T,\n): MakeNestObject<P, T> => {\n if (!isNonEmptyArray(path)) throw new Error('Path must be a non-empty array')\n\n const [key, ...rest] = path\n if (!isNonEmptyArray(rest)) return { [key]: value } as MakeNestObject<P, T>\n\n return {\n [key]: nestObject(rest, value),\n } as MakeNestObject<P, T>\n}\n","import deepmerge from 'deepmerge'\nimport { isNonEmptyArray } from './helpers/is-empty-array'\nimport { nestObject } from './helpers/nest-object'\nimport { Tokens, TokenObject } from './types'\n\nexport const toTokenObject = <T extends Tokens>(tokens: T): TokenObject<T> => {\n let result = {}\n for (const key in tokens) {\n const { value } = tokens[key]\n const splitted = key.split('/')\n if (!isNonEmptyArray(splitted)) continue\n\n const v = nestObject(splitted, value)\n result = deepmerge(result, v)\n }\n\n return result as TokenObject<T>\n}\n","import { camelCase } from 'change-case-all'\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n if (value instanceof Error) return false\n\n return typeof value === 'object' && value !== null\n}\n\ntype CamelCase<\n T extends string,\n D extends string = '-',\n> = T extends `${infer A}${D}${infer B}`\n ? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}`\n : T\n\ntype CamelCaseKeys<\n T extends Record<string, unknown>,\n D extends string = '-',\n> = {\n [K in keyof T as CamelCase<K & string, D>]: T[K] extends Record<\n string,\n unknown\n >\n ? CamelCaseKeys<T[K], D>\n : T[K]\n}\n\nexport const camelCaseKeys = <\n T extends Record<string, unknown>,\n Delimiter extends string = '-',\n>(\n obj: T,\n): CamelCaseKeys<T, Delimiter> => {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n camelCase(key),\n isObject(value) ? camelCaseKeys(value) : value,\n ]),\n ) as CamelCaseKeys<T, Delimiter>\n}\n","import { createReferenceTokenResolver } from './reference-token'\nimport { toTokenObject } from './to-token-object'\nimport type { TokenObject, TokenDictionary, TokenValue } from './types'\n\nimport { kebabCase } from 'change-case-all'\nexport { camelCaseKeys } from './helpers/changecase-keys'\n\nexport const createTokenObject = <T extends TokenDictionary>(\n tokenDictionary: T,\n baseTokenDictionary: TokenDictionary,\n): { [K in keyof T]: TokenObject<T[K]> } => {\n const result = {} as { [K in keyof T]: TokenObject<T[K]> }\n const referenceTokenResolver = createReferenceTokenResolver(\n tokenDictionary,\n baseTokenDictionary,\n )\n\n for (const category in tokenDictionary) {\n const value = tokenDictionary[category]\n\n // category ごとに template を展開していく\n const resolvedTokens = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [\n key,\n { value: referenceTokenResolver(value.value) } satisfies TokenValue,\n ]),\n ) as typeof value\n\n result[category] = toTokenObject(resolvedTokens)\n }\n\n return result\n}\n\nexport const createCSSTokenObject = <T extends TokenDictionary>(\n tokenDictionary: T,\n format: (value: string) => string = (value) => value,\n): { [K in keyof T]: TokenObject<T[K]> } => {\n const result = {} as { [K in keyof T]: TokenObject<T[K]> }\n\n for (const category in tokenDictionary) {\n const value = tokenDictionary[category]\n\n // category ごとに template を展開していく\n const resolvedTokens = Object.fromEntries(\n Object.entries(value).map(([key]) => [\n key,\n {\n value: `var(--${format(\n [category, ...key.split('/')].map((x) => kebabCase(x)).join('-'),\n )})`,\n } satisfies TokenValue,\n ]),\n ) as typeof value\n\n result[category] = toTokenObject(resolvedTokens)\n }\n\n return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,oBAAoB,UACxB,MAAM,WAAW,IAAI,IAAI,MAAM,SAAS,IAAI;AAE9C,MAAM,uBACJ,UACoC;CACpC,MAAM,CAAC,UAAU,OAAO,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI;AAErD,QAAO,CAAC,UAAU,IAAI;;AAGxB,MAAa,gCACX,iBACA,wBACgC;CAChC,MAAM,YAAY,UAA0B;AAC1C,MAAI,CAAC,iBAAiB,MAAM,CAAE,QAAO;EAErC,MAAM,CAAC,UAAU,YAAY,oBAAoB,MAAM;EACvD,MAAM,aAAa,oBAAoB;AAEvC,SAAO,UACJ,aAAa,aAAa,gBAAgB,UAAU,WAAW,MACjE;;AAGH,QAAO;;;;;AC9BT,MAAa,mBAAsB,QACjC,IAAI,SAAS;;;;ACcf,MAAa,cACX,MACA,UACyB;AACzB,KAAI,CAAC,gBAAgB,KAAK,CAAE,OAAM,IAAI,MAAM,iCAAiC;CAE7E,MAAM,CAAC,KAAK,GAAG,QAAQ;AACvB,KAAI,CAAC,gBAAgB,KAAK,CAAE,QAAO,GAAG,MAAM,OAAO;AAEnD,QAAO,GACJ,MAAM,WAAW,MAAM,MAAM,EAC/B;;;;;ACrBH,MAAa,iBAAmC,WAA8B;CAC5E,IAAI,SAAS,EAAE;AACf,MAAK,MAAM,OAAO,QAAQ;EACxB,MAAM,EAAE,UAAU,OAAO;EACzB,MAAM,WAAW,IAAI,MAAM,IAAI;AAC/B,MAAI,CAAC,gBAAgB,SAAS,CAAE;EAEhC,MAAM,IAAI,WAAW,UAAU,MAAM;AACrC,kCAAmB,QAAQ,EAAE;;AAG/B,QAAO;;;;;ACdT,MAAM,YAAY,UAAqD;AACrE,KAAI,iBAAiB,OAAQ,QAAO;AACpC,KAAI,iBAAiB,KAAM,QAAO;AAClC,KAAI,iBAAiB,MAAO,QAAO;AAEnC,QAAO,OAAO,UAAU,YAAY,UAAU;;AAsBhD,MAAa,iBAIX,QACgC;AAChC,QAAO,OAAO,YACZ,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,gCAC9B,IAAI,EACd,SAAS,MAAM,GAAG,cAAc,MAAM,GAAG,MAC1C,CAAC,CACH;;;;;ACjCH,MAAa,qBACX,iBACA,wBAC0C;CAC1C,MAAM,SAAS,EAAE;CACjB,MAAM,yBAAyB,6BAC7B,iBACA,oBACD;AAED,MAAK,MAAM,YAAY,iBAAiB;EACtC,MAAM,QAAQ,gBAAgB;AAU9B,SAAO,YAAY,cAPI,OAAO,YAC5B,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,KAAKA,aAAW,CAC1C,KACA,EAAE,OAAO,uBAAuBA,QAAM,MAAM,EAAE,CAC/C,CAAC,CACH,CAE+C;;AAGlD,QAAO;;AAGT,MAAa,wBACX,iBACA,UAAqC,UAAU,UACL;CAC1C,MAAM,SAAS,EAAE;AAEjB,MAAK,MAAM,YAAY,iBAAiB;EACtC,MAAM,QAAQ,gBAAgB;AAc9B,SAAO,YAAY,cAXI,OAAO,YAC5B,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,SAAS,CACnC,KACA,EACE,OAAO,SAAS,OACd,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,CAAC,CAAC,KAAK,qCAAgB,EAAE,CAAC,CAAC,KAAK,IAAI,CACjE,CAAC,IACH,CACF,CAAC,CACH,CAE+C;;AAGlD,QAAO"}
|
|
@@ -10,11 +10,11 @@ type TokenDictionary = {
|
|
|
10
10
|
[category: string]: Tokens;
|
|
11
11
|
};
|
|
12
12
|
type TokenToObject<S extends string, V> = S extends `${infer F}/${infer R}` ? { [K in F]: TokenToObject<R, V> } : { [K in S]: V };
|
|
13
|
-
type TokenObject<T extends Tokens> = UnionToIntersection<{ [K in keyof T]: TokenToObject<K & string, T[K]["value"]> }[keyof T]>;
|
|
13
|
+
type TokenObject<T$1 extends Tokens> = UnionToIntersection<{ [K in keyof T$1]: TokenToObject<K & string, T$1[K]["value"]> }[keyof T$1]>;
|
|
14
14
|
//#endregion
|
|
15
15
|
//#region src/unstable-token-object/helpers/changecase-keys.d.ts
|
|
16
|
-
type CamelCase<T extends string, D extends string = "-"> = T extends `${infer A}${D}${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}` : T;
|
|
17
|
-
type CamelCaseKeys<T extends Record<string, unknown>, D extends string = "-"> = { [K in keyof T as CamelCase<K & string, D>]: T[K] extends Record<string, unknown> ? CamelCaseKeys<T[K], D> : T[K] };
|
|
16
|
+
type CamelCase<T$1 extends string, D extends string = "-"> = T$1 extends `${infer A}${D}${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}` : T$1;
|
|
17
|
+
type CamelCaseKeys<T$1 extends Record<string, unknown>, D extends string = "-"> = { [K in keyof T$1 as CamelCase<K & string, D>]: T$1[K] extends Record<string, unknown> ? CamelCaseKeys<T$1[K], D> : T$1[K] };
|
|
18
18
|
declare const camelCaseKeys: <T extends Record<string, unknown>, Delimiter extends string = "-">(obj: T) => CamelCaseKeys<T, Delimiter>;
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/unstable-token-object/index.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/unstable-token-object/types.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":[],"mappings":";KAAK,0BAEF,oBAAoB,qDACjB;AAHD,KAMO,UAAA,GANP;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/unstable-token-object/types.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":[],"mappings":";KAAK,0BAEF,oBAAoB,qDACjB;AAHD,KAMO,UAAA,GANP;EAEF,KAAA,EAAA,MAAA;CAAoB;AACjB,KAIM,MAAA,GAJN;EAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAKW,UALX;AAGN,CAAA;AACY,KAGA,eAAA,GAFK;EAEjB,CAAA,QAAY,EAAA,MAAA,CAAA,EACU,MADV;;KAIP,aAAqC,CAC9B,UAAA,MAAA,EAAkB,CAAA,CAAG,GADS,CACT,SAAA,GAAA,KAAA,EAAA,IAAA,KAAA,EAAA,EAAA,GAAA,QAArB,CAAqB,GAAjB,aAAiB,CAAH,CAAG,EAAA,CAAA,CAAA,EAAA,GAAA,QACrB,CADqB,GACjB,CADiB,EAAA;AAAjB,KAGJ,WAHI,CAAA,YAGkB,MAHlB,CAAA,GAG4B,mBAH5B,CAAA,QAAA,MAIA,GAJA,GAII,aAJJ,CAIkB,CAJlB,GAAA,MAAA,EAI8B,GAJ9B,CAIgC,CAJhC,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,MAIqD,GAJrD,CAAA,CAAA;;;KCLX,sBDVA,MAAA,EAEF,UAAA,MAAA,GAAA,GAAA,CAAoB,GCWnB,GDXmB,SAAA,GAAA,KAAA,EAAA,GCWI,CDXJ,GAAA,KAAA,EAAA,EAAA,GAAA,GCYhB,SDZgB,CCYN,CDZM,CAAA,GCYD,UDZC,CCYU,SDZV,CCYoB,CDZpB,ECYuB,CDZvB,CAAA,CAAA,EAAA,GCanB,GDbmB;KCelB,aDdC,CAAA,YCeM,MDfN,CAAA,MAAA,EAAA,OAAA,CAAA,EAGN,UAAY,MAAA,GAAA,GAAA,CACZ,GAAY,QAAA,MCcE,GDdF,ICcO,SDbF,CCaY,CDbZ,GAAA,MAAA,ECawB,CDbxB,CAAA,GCa6B,GDb7B,CCa+B,CDb/B,CAAA,SCa0C,MDb1C,CAAA,MAAA,EAAA,OAAA,CAAA,GCiBX,aDjBW,CCiBG,GDjBH,CCiBK,CDjBL,CAAA,ECiBS,CDjBT,CAAA,GCkBX,GDlBW,CCkBT,CDlBS,CAAA,EAAA;AAEL,cCmBC,aDlBS,EAAA,WCmBV,MDhBP,CAAA,MAAA,EAAA,OAAA,CAAA,EAAqC,kBAAA,MAAA,GAAA,GAAA,CAC9B,CAAA,GAAA,ECkBL,CDlBK,EAAA,GCmBT,aDnBS,CCmBK,CDnBL,ECmBQ,SDnBR,CAAA;;;AAbT,cEKU,iBFLV,EAAA,CAAA,UEKyC,eFLzC,CAAA,CAAA,eAAA,EEMgB,CFNhB,EAAA,mBAAA,EEOoB,eFPpB,EAAA,GAAA,QAAA,MEQc,CFRd,GEQkB,WFRlB,CEQ8B,CFR9B,CEQgC,CFRhC,CAAA,CAAA,EAAA;AAAoB,cEgCV,oBFhCU,EAAA,CAAA,UEgCwB,eFhCxB,CAAA,CAAA,eAAA,EEiCJ,CFjCI,EAAA,MAAA,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,GAAA,QAAA,MEmCN,CFnCM,GEmCF,WFnCE,CEmCU,CFnCV,CEmCY,CFnCZ,CAAA,CAAA,EAAA"}
|
|
@@ -10,11 +10,11 @@ type TokenDictionary = {
|
|
|
10
10
|
[category: string]: Tokens;
|
|
11
11
|
};
|
|
12
12
|
type TokenToObject<S extends string, V> = S extends `${infer F}/${infer R}` ? { [K in F]: TokenToObject<R, V> } : { [K in S]: V };
|
|
13
|
-
type TokenObject<T extends Tokens> = UnionToIntersection<{ [K in keyof T]: TokenToObject<K & string, T[K]["value"]> }[keyof T]>;
|
|
13
|
+
type TokenObject<T$1 extends Tokens> = UnionToIntersection<{ [K in keyof T$1]: TokenToObject<K & string, T$1[K]["value"]> }[keyof T$1]>;
|
|
14
14
|
//#endregion
|
|
15
15
|
//#region src/unstable-token-object/helpers/changecase-keys.d.ts
|
|
16
|
-
type CamelCase<T extends string, D extends string = "-"> = T extends `${infer A}${D}${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}` : T;
|
|
17
|
-
type CamelCaseKeys<T extends Record<string, unknown>, D extends string = "-"> = { [K in keyof T as CamelCase<K & string, D>]: T[K] extends Record<string, unknown> ? CamelCaseKeys<T[K], D> : T[K] };
|
|
16
|
+
type CamelCase<T$1 extends string, D extends string = "-"> = T$1 extends `${infer A}${D}${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}` : T$1;
|
|
17
|
+
type CamelCaseKeys<T$1 extends Record<string, unknown>, D extends string = "-"> = { [K in keyof T$1 as CamelCase<K & string, D>]: T$1[K] extends Record<string, unknown> ? CamelCaseKeys<T$1[K], D> : T$1[K] };
|
|
18
18
|
declare const camelCaseKeys: <T extends Record<string, unknown>, Delimiter extends string = "-">(obj: T) => CamelCaseKeys<T, Delimiter>;
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/unstable-token-object/index.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/unstable-token-object/types.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":[],"mappings":";KAAK,0BAEF,oBAAoB,qDACjB;AAHD,KAMO,UAAA,GANP;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/unstable-token-object/types.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":[],"mappings":";KAAK,0BAEF,oBAAoB,qDACjB;AAHD,KAMO,UAAA,GANP;EAEF,KAAA,EAAA,MAAA;CAAoB;AACjB,KAIM,MAAA,GAJN;EAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAKW,UALX;AAGN,CAAA;AACY,KAGA,eAAA,GAFK;EAEjB,CAAA,QAAY,EAAA,MAAA,CAAA,EACU,MADV;;KAIP,aAAqC,CAC9B,UAAA,MAAA,EAAkB,CAAA,CAAG,GADS,CACT,SAAA,GAAA,KAAA,EAAA,IAAA,KAAA,EAAA,EAAA,GAAA,QAArB,CAAqB,GAAjB,aAAiB,CAAH,CAAG,EAAA,CAAA,CAAA,EAAA,GAAA,QACrB,CADqB,GACjB,CADiB,EAAA;AAAjB,KAGJ,WAHI,CAAA,YAGkB,MAHlB,CAAA,GAG4B,mBAH5B,CAAA,QAAA,MAIA,GAJA,GAII,aAJJ,CAIkB,CAJlB,GAAA,MAAA,EAI8B,GAJ9B,CAIgC,CAJhC,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,MAIqD,GAJrD,CAAA,CAAA;;;KCLX,sBDVA,MAAA,EAEF,UAAA,MAAA,GAAA,GAAA,CAAoB,GCWnB,GDXmB,SAAA,GAAA,KAAA,EAAA,GCWI,CDXJ,GAAA,KAAA,EAAA,EAAA,GAAA,GCYhB,SDZgB,CCYN,CDZM,CAAA,GCYD,UDZC,CCYU,SDZV,CCYoB,CDZpB,ECYuB,CDZvB,CAAA,CAAA,EAAA,GCanB,GDbmB;KCelB,aDdC,CAAA,YCeM,MDfN,CAAA,MAAA,EAAA,OAAA,CAAA,EAGN,UAAY,MAAA,GAAA,GAAA,CACZ,GAAY,QAAA,MCcE,GDdF,ICcO,SDbF,CCaY,CDbZ,GAAA,MAAA,ECawB,CDbxB,CAAA,GCa6B,GDb7B,CCa+B,CDb/B,CAAA,SCa0C,MDb1C,CAAA,MAAA,EAAA,OAAA,CAAA,GCiBX,aDjBW,CCiBG,GDjBH,CCiBK,CDjBL,CAAA,ECiBS,CDjBT,CAAA,GCkBX,GDlBW,CCkBT,CDlBS,CAAA,EAAA;AAEL,cCmBC,aDlBS,EAAA,WCmBV,MDhBP,CAAA,MAAA,EAAA,OAAA,CAAA,EAAqC,kBAAA,MAAA,GAAA,GAAA,CAC9B,CAAA,GAAA,ECkBL,CDlBK,EAAA,GCmBT,aDnBS,CCmBK,CDnBL,ECmBQ,SDnBR,CAAA;;;AAbT,cEKU,iBFLV,EAAA,CAAA,UEKyC,eFLzC,CAAA,CAAA,eAAA,EEMgB,CFNhB,EAAA,mBAAA,EEOoB,eFPpB,EAAA,GAAA,QAAA,MEQc,CFRd,GEQkB,WFRlB,CEQ8B,CFR9B,CEQgC,CFRhC,CAAA,CAAA,EAAA;AAAoB,cEgCV,oBFhCU,EAAA,CAAA,UEgCwB,eFhCxB,CAAA,CAAA,eAAA,EEiCJ,CFjCI,EAAA,MAAA,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,GAAA,QAAA,MEmCN,CFnCM,GEmCF,WFnCE,CEmCU,CFnCV,CEmCY,CFnCZ,CAAA,CAAA,EAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["value"],"sources":["../../src/unstable-token-object/reference-token.ts","../../src/unstable-token-object/helpers/is-empty-array.ts","../../src/unstable-token-object/helpers/nest-object.ts","../../src/unstable-token-object/to-token-object.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":["import { TokenDictionary, Tokens } from './types'\n\nexport type ReferenceToken = `{${string}}`\n\nconst isReferenceToken = (value: string): value is ReferenceToken =>\n value.startsWith('{') && value.endsWith('}')\n\nconst parseReferenceToken = (\n value: ReferenceToken
|
|
1
|
+
{"version":3,"file":"index.js","names":["value"],"sources":["../../src/unstable-token-object/reference-token.ts","../../src/unstable-token-object/helpers/is-empty-array.ts","../../src/unstable-token-object/helpers/nest-object.ts","../../src/unstable-token-object/to-token-object.ts","../../src/unstable-token-object/helpers/changecase-keys.ts","../../src/unstable-token-object/index.ts"],"sourcesContent":["import { TokenDictionary, Tokens } from './types'\n\nexport type ReferenceToken = `{${string}}`\n\nconst isReferenceToken = (value: string): value is ReferenceToken =>\n value.startsWith('{') && value.endsWith('}')\n\nconst parseReferenceToken = (\n value: ReferenceToken,\n): [category: string, key: string] => {\n const [category, key] = value.slice(1, -1).split('.')\n\n return [category, key]\n}\n\nexport const createReferenceTokenResolver = <T extends TokenDictionary>(\n tokenDictionary: T,\n baseTokenDictionary: TokenDictionary,\n): ((value: string) => string) => {\n const resolver = (value: string): string => {\n if (!isReferenceToken(value)) return value\n\n const [category, tokenKey] = parseReferenceToken(value)\n const baseTokens = baseTokenDictionary[category] as Tokens | undefined\n\n return resolver(\n (baseTokens?.[tokenKey] ?? tokenDictionary[category][tokenKey]).value,\n )\n }\n\n return resolver\n}\n","export const isNonEmptyArray = <T>(arr: T[]): arr is [T, ...T[]] =>\n arr.length > 0\n","import { isNonEmptyArray } from './is-empty-array'\n\ntype MakeNestObject<P extends readonly string[], T> = P extends [\n infer Head,\n ...infer Tail,\n]\n ? Head extends string\n ? Tail extends string[]\n ? {\n [K in Head]: MakeNestObject<Tail, T>\n }\n : { [K in Head]: T }\n : T\n : T\n\nexport const nestObject = <P extends [string, ...string[]], T>(\n path: P,\n value: T,\n): MakeNestObject<P, T> => {\n if (!isNonEmptyArray(path)) throw new Error('Path must be a non-empty array')\n\n const [key, ...rest] = path\n if (!isNonEmptyArray(rest)) return { [key]: value } as MakeNestObject<P, T>\n\n return {\n [key]: nestObject(rest, value),\n } as MakeNestObject<P, T>\n}\n","import deepmerge from 'deepmerge'\nimport { isNonEmptyArray } from './helpers/is-empty-array'\nimport { nestObject } from './helpers/nest-object'\nimport { Tokens, TokenObject } from './types'\n\nexport const toTokenObject = <T extends Tokens>(tokens: T): TokenObject<T> => {\n let result = {}\n for (const key in tokens) {\n const { value } = tokens[key]\n const splitted = key.split('/')\n if (!isNonEmptyArray(splitted)) continue\n\n const v = nestObject(splitted, value)\n result = deepmerge(result, v)\n }\n\n return result as TokenObject<T>\n}\n","import { camelCase } from 'change-case-all'\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n if (value instanceof Error) return false\n\n return typeof value === 'object' && value !== null\n}\n\ntype CamelCase<\n T extends string,\n D extends string = '-',\n> = T extends `${infer A}${D}${infer B}`\n ? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}`\n : T\n\ntype CamelCaseKeys<\n T extends Record<string, unknown>,\n D extends string = '-',\n> = {\n [K in keyof T as CamelCase<K & string, D>]: T[K] extends Record<\n string,\n unknown\n >\n ? CamelCaseKeys<T[K], D>\n : T[K]\n}\n\nexport const camelCaseKeys = <\n T extends Record<string, unknown>,\n Delimiter extends string = '-',\n>(\n obj: T,\n): CamelCaseKeys<T, Delimiter> => {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n camelCase(key),\n isObject(value) ? camelCaseKeys(value) : value,\n ]),\n ) as CamelCaseKeys<T, Delimiter>\n}\n","import { createReferenceTokenResolver } from './reference-token'\nimport { toTokenObject } from './to-token-object'\nimport type { TokenObject, TokenDictionary, TokenValue } from './types'\n\nimport { kebabCase } from 'change-case-all'\nexport { camelCaseKeys } from './helpers/changecase-keys'\n\nexport const createTokenObject = <T extends TokenDictionary>(\n tokenDictionary: T,\n baseTokenDictionary: TokenDictionary,\n): { [K in keyof T]: TokenObject<T[K]> } => {\n const result = {} as { [K in keyof T]: TokenObject<T[K]> }\n const referenceTokenResolver = createReferenceTokenResolver(\n tokenDictionary,\n baseTokenDictionary,\n )\n\n for (const category in tokenDictionary) {\n const value = tokenDictionary[category]\n\n // category ごとに template を展開していく\n const resolvedTokens = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [\n key,\n { value: referenceTokenResolver(value.value) } satisfies TokenValue,\n ]),\n ) as typeof value\n\n result[category] = toTokenObject(resolvedTokens)\n }\n\n return result\n}\n\nexport const createCSSTokenObject = <T extends TokenDictionary>(\n tokenDictionary: T,\n format: (value: string) => string = (value) => value,\n): { [K in keyof T]: TokenObject<T[K]> } => {\n const result = {} as { [K in keyof T]: TokenObject<T[K]> }\n\n for (const category in tokenDictionary) {\n const value = tokenDictionary[category]\n\n // category ごとに template を展開していく\n const resolvedTokens = Object.fromEntries(\n Object.entries(value).map(([key]) => [\n key,\n {\n value: `var(--${format(\n [category, ...key.split('/')].map((x) => kebabCase(x)).join('-'),\n )})`,\n } satisfies TokenValue,\n ]),\n ) as typeof value\n\n result[category] = toTokenObject(resolvedTokens)\n }\n\n return result\n}\n"],"mappings":";;;;AAIA,MAAM,oBAAoB,UACxB,MAAM,WAAW,IAAI,IAAI,MAAM,SAAS,IAAI;AAE9C,MAAM,uBACJ,UACoC;CACpC,MAAM,CAAC,UAAU,OAAO,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI;AAErD,QAAO,CAAC,UAAU,IAAI;;AAGxB,MAAa,gCACX,iBACA,wBACgC;CAChC,MAAM,YAAY,UAA0B;AAC1C,MAAI,CAAC,iBAAiB,MAAM,CAAE,QAAO;EAErC,MAAM,CAAC,UAAU,YAAY,oBAAoB,MAAM;EACvD,MAAM,aAAa,oBAAoB;AAEvC,SAAO,UACJ,aAAa,aAAa,gBAAgB,UAAU,WAAW,MACjE;;AAGH,QAAO;;;;;AC9BT,MAAa,mBAAsB,QACjC,IAAI,SAAS;;;;ACcf,MAAa,cACX,MACA,UACyB;AACzB,KAAI,CAAC,gBAAgB,KAAK,CAAE,OAAM,IAAI,MAAM,iCAAiC;CAE7E,MAAM,CAAC,KAAK,GAAG,QAAQ;AACvB,KAAI,CAAC,gBAAgB,KAAK,CAAE,QAAO,GAAG,MAAM,OAAO;AAEnD,QAAO,GACJ,MAAM,WAAW,MAAM,MAAM,EAC/B;;;;;ACrBH,MAAa,iBAAmC,WAA8B;CAC5E,IAAI,SAAS,EAAE;AACf,MAAK,MAAM,OAAO,QAAQ;EACxB,MAAM,EAAE,UAAU,OAAO;EACzB,MAAM,WAAW,IAAI,MAAM,IAAI;AAC/B,MAAI,CAAC,gBAAgB,SAAS,CAAE;EAEhC,MAAM,IAAI,WAAW,UAAU,MAAM;AACrC,WAAS,UAAU,QAAQ,EAAE;;AAG/B,QAAO;;;;;ACdT,MAAM,YAAY,UAAqD;AACrE,KAAI,iBAAiB,OAAQ,QAAO;AACpC,KAAI,iBAAiB,KAAM,QAAO;AAClC,KAAI,iBAAiB,MAAO,QAAO;AAEnC,QAAO,OAAO,UAAU,YAAY,UAAU;;AAsBhD,MAAa,iBAIX,QACgC;AAChC,QAAO,OAAO,YACZ,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,CACxC,UAAU,IAAI,EACd,SAAS,MAAM,GAAG,cAAc,MAAM,GAAG,MAC1C,CAAC,CACH;;;;;ACjCH,MAAa,qBACX,iBACA,wBAC0C;CAC1C,MAAM,SAAS,EAAE;CACjB,MAAM,yBAAyB,6BAC7B,iBACA,oBACD;AAED,MAAK,MAAM,YAAY,iBAAiB;EACtC,MAAM,QAAQ,gBAAgB;AAU9B,SAAO,YAAY,cAPI,OAAO,YAC5B,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,KAAKA,aAAW,CAC1C,KACA,EAAE,OAAO,uBAAuBA,QAAM,MAAM,EAAE,CAC/C,CAAC,CACH,CAE+C;;AAGlD,QAAO;;AAGT,MAAa,wBACX,iBACA,UAAqC,UAAU,UACL;CAC1C,MAAM,SAAS,EAAE;AAEjB,MAAK,MAAM,YAAY,iBAAiB;EACtC,MAAM,QAAQ,gBAAgB;AAc9B,SAAO,YAAY,cAXI,OAAO,YAC5B,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,SAAS,CACnC,KACA,EACE,OAAO,SAAS,OACd,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,CAAC,CAAC,KAAK,MAAM,UAAU,EAAE,CAAC,CAAC,KAAK,IAAI,CACjE,CAAC,IACH,CACF,CAAC,CACH,CAE+C;;AAGlD,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@charcoal-ui/theme",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.6",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"change-case-all": "^2.1.0",
|
|
48
48
|
"deepmerge": "^4.3.1",
|
|
49
|
-
"@charcoal-ui/foundation": "5.0.0-beta.
|
|
50
|
-
"@charcoal-ui/utils": "5.0.0-beta.
|
|
49
|
+
"@charcoal-ui/foundation": "5.0.0-beta.6",
|
|
50
|
+
"@charcoal-ui/utils": "5.0.0-beta.6"
|
|
51
51
|
},
|
|
52
52
|
"files": [
|
|
53
53
|
"src",
|
package/src/default.test.ts
CHANGED
|
@@ -186,7 +186,7 @@ const sortReplacer = (_: string, value: any): any => {
|
|
|
186
186
|
return value
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
it('writes default.ts', () => {
|
|
189
|
+
it('writes default.ts', async () => {
|
|
190
190
|
const code = `
|
|
191
191
|
/** This file is auto generated. DO NOT EDIT BY HAND. */
|
|
192
192
|
import { CharcoalTheme } from './theme'
|
|
@@ -202,10 +202,10 @@ export const dark: CharcoalTheme = {
|
|
|
202
202
|
...common,
|
|
203
203
|
...${JSON.stringify(dark, sortReplacer, 2)}
|
|
204
204
|
}`
|
|
205
|
-
const fmt = prettier.format(code, {
|
|
205
|
+
const fmt = await prettier.format(code, {
|
|
206
206
|
parser: 'typescript',
|
|
207
207
|
singleQuote: true,
|
|
208
208
|
semi: false,
|
|
209
209
|
})
|
|
210
|
-
expect(fmt).toMatchFileSnapshot('./default.ts')
|
|
210
|
+
await expect(fmt).toMatchFileSnapshot('./default.ts')
|
|
211
211
|
})
|
|
@@ -10,14 +10,14 @@ const isObject = (value: unknown): value is Record<string, unknown> => {
|
|
|
10
10
|
|
|
11
11
|
type CamelCase<
|
|
12
12
|
T extends string,
|
|
13
|
-
D extends string = '-'
|
|
13
|
+
D extends string = '-',
|
|
14
14
|
> = T extends `${infer A}${D}${infer B}`
|
|
15
15
|
? `${Lowercase<A>}${Capitalize<CamelCase<B, D>>}`
|
|
16
16
|
: T
|
|
17
17
|
|
|
18
18
|
type CamelCaseKeys<
|
|
19
19
|
T extends Record<string, unknown>,
|
|
20
|
-
D extends string = '-'
|
|
20
|
+
D extends string = '-',
|
|
21
21
|
> = {
|
|
22
22
|
[K in keyof T as CamelCase<K & string, D>]: T[K] extends Record<
|
|
23
23
|
string,
|
|
@@ -29,14 +29,14 @@ type CamelCaseKeys<
|
|
|
29
29
|
|
|
30
30
|
export const camelCaseKeys = <
|
|
31
31
|
T extends Record<string, unknown>,
|
|
32
|
-
Delimiter extends string = '-'
|
|
32
|
+
Delimiter extends string = '-',
|
|
33
33
|
>(
|
|
34
|
-
obj: T
|
|
34
|
+
obj: T,
|
|
35
35
|
): CamelCaseKeys<T, Delimiter> => {
|
|
36
36
|
return Object.fromEntries(
|
|
37
37
|
Object.entries(obj).map(([key, value]) => [
|
|
38
38
|
camelCase(key),
|
|
39
39
|
isObject(value) ? camelCaseKeys(value) : value,
|
|
40
|
-
])
|
|
40
|
+
]),
|
|
41
41
|
) as CamelCaseKeys<T, Delimiter>
|
|
42
42
|
}
|
|
@@ -33,7 +33,7 @@ describe('nestObject test', () => {
|
|
|
33
33
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
34
34
|
// @ts-expect-error
|
|
35
35
|
expect(() => nestObject([], 'value')).toThrowError(
|
|
36
|
-
'Path must be a non-empty array'
|
|
36
|
+
'Path must be a non-empty array',
|
|
37
37
|
)
|
|
38
38
|
})
|
|
39
39
|
})
|
|
@@ -2,7 +2,7 @@ import { isNonEmptyArray } from './is-empty-array'
|
|
|
2
2
|
|
|
3
3
|
type MakeNestObject<P extends readonly string[], T> = P extends [
|
|
4
4
|
infer Head,
|
|
5
|
-
...infer Tail
|
|
5
|
+
...infer Tail,
|
|
6
6
|
]
|
|
7
7
|
? Head extends string
|
|
8
8
|
? Tail extends string[]
|
|
@@ -15,7 +15,7 @@ type MakeNestObject<P extends readonly string[], T> = P extends [
|
|
|
15
15
|
|
|
16
16
|
export const nestObject = <P extends [string, ...string[]], T>(
|
|
17
17
|
path: P,
|
|
18
|
-
value: T
|
|
18
|
+
value: T,
|
|
19
19
|
): MakeNestObject<P, T> => {
|
|
20
20
|
if (!isNonEmptyArray(path)) throw new Error('Path must be a non-empty array')
|
|
21
21
|
|
|
@@ -7,12 +7,12 @@ export { camelCaseKeys } from './helpers/changecase-keys'
|
|
|
7
7
|
|
|
8
8
|
export const createTokenObject = <T extends TokenDictionary>(
|
|
9
9
|
tokenDictionary: T,
|
|
10
|
-
baseTokenDictionary: TokenDictionary
|
|
10
|
+
baseTokenDictionary: TokenDictionary,
|
|
11
11
|
): { [K in keyof T]: TokenObject<T[K]> } => {
|
|
12
12
|
const result = {} as { [K in keyof T]: TokenObject<T[K]> }
|
|
13
13
|
const referenceTokenResolver = createReferenceTokenResolver(
|
|
14
14
|
tokenDictionary,
|
|
15
|
-
baseTokenDictionary
|
|
15
|
+
baseTokenDictionary,
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
for (const category in tokenDictionary) {
|
|
@@ -23,7 +23,7 @@ export const createTokenObject = <T extends TokenDictionary>(
|
|
|
23
23
|
Object.entries(value).map(([key, value]) => [
|
|
24
24
|
key,
|
|
25
25
|
{ value: referenceTokenResolver(value.value) } satisfies TokenValue,
|
|
26
|
-
])
|
|
26
|
+
]),
|
|
27
27
|
) as typeof value
|
|
28
28
|
|
|
29
29
|
result[category] = toTokenObject(resolvedTokens)
|
|
@@ -34,7 +34,7 @@ export const createTokenObject = <T extends TokenDictionary>(
|
|
|
34
34
|
|
|
35
35
|
export const createCSSTokenObject = <T extends TokenDictionary>(
|
|
36
36
|
tokenDictionary: T,
|
|
37
|
-
format: (value: string) => string = (value) => value
|
|
37
|
+
format: (value: string) => string = (value) => value,
|
|
38
38
|
): { [K in keyof T]: TokenObject<T[K]> } => {
|
|
39
39
|
const result = {} as { [K in keyof T]: TokenObject<T[K]> }
|
|
40
40
|
|
|
@@ -47,10 +47,10 @@ export const createCSSTokenObject = <T extends TokenDictionary>(
|
|
|
47
47
|
key,
|
|
48
48
|
{
|
|
49
49
|
value: `var(--${format(
|
|
50
|
-
[category, ...key.split('/')].map((x) => kebabCase(x)).join('-')
|
|
50
|
+
[category, ...key.split('/')].map((x) => kebabCase(x)).join('-'),
|
|
51
51
|
)})`,
|
|
52
52
|
} satisfies TokenValue,
|
|
53
|
-
])
|
|
53
|
+
]),
|
|
54
54
|
) as typeof value
|
|
55
55
|
|
|
56
56
|
result[category] = toTokenObject(resolvedTokens)
|
|
@@ -6,7 +6,7 @@ const isReferenceToken = (value: string): value is ReferenceToken =>
|
|
|
6
6
|
value.startsWith('{') && value.endsWith('}')
|
|
7
7
|
|
|
8
8
|
const parseReferenceToken = (
|
|
9
|
-
value: ReferenceToken
|
|
9
|
+
value: ReferenceToken,
|
|
10
10
|
): [category: string, key: string] => {
|
|
11
11
|
const [category, key] = value.slice(1, -1).split('.')
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ const parseReferenceToken = (
|
|
|
15
15
|
|
|
16
16
|
export const createReferenceTokenResolver = <T extends TokenDictionary>(
|
|
17
17
|
tokenDictionary: T,
|
|
18
|
-
baseTokenDictionary: TokenDictionary
|
|
18
|
+
baseTokenDictionary: TokenDictionary,
|
|
19
19
|
): ((value: string) => string) => {
|
|
20
20
|
const resolver = (value: string): string => {
|
|
21
21
|
if (!isReferenceToken(value)) return value
|
|
@@ -24,7 +24,7 @@ export const createReferenceTokenResolver = <T extends TokenDictionary>(
|
|
|
24
24
|
const baseTokens = baseTokenDictionary[category] as Tokens | undefined
|
|
25
25
|
|
|
26
26
|
return resolver(
|
|
27
|
-
(baseTokens?.[tokenKey] ?? tokenDictionary[category][tokenKey]).value
|
|
27
|
+
(baseTokens?.[tokenKey] ?? tokenDictionary[category][tokenKey]).value,
|
|
28
28
|
)
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -45,9 +45,9 @@ describe.each([
|
|
|
45
45
|
|
|
46
46
|
expect(theme).toHaveProperty(
|
|
47
47
|
[_category, ...splitted],
|
|
48
|
-
templateResolver(tokenValue.value)
|
|
48
|
+
templateResolver(tokenValue.value),
|
|
49
49
|
)
|
|
50
|
-
}
|
|
50
|
+
},
|
|
51
51
|
)
|
|
52
52
|
})
|
|
53
53
|
})
|
|
@@ -92,24 +92,27 @@ describe.each([
|
|
|
92
92
|
|
|
93
93
|
expect(theme).toHaveProperty(
|
|
94
94
|
[_category, ...splitted],
|
|
95
|
-
expect.any(String)
|
|
95
|
+
expect.any(String),
|
|
96
96
|
)
|
|
97
|
-
const variable = splitted.reduce(
|
|
98
|
-
|
|
97
|
+
const variable = splitted.reduce(
|
|
98
|
+
(acc, key) => {
|
|
99
|
+
if (typeof acc === 'string') return acc
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
const next = acc[key]
|
|
102
|
+
if (typeof next === 'string') return next
|
|
102
103
|
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
return isObject(next) ? next : acc
|
|
105
|
+
},
|
|
106
|
+
theme[_category] as Record<string, unknown> | string,
|
|
107
|
+
)
|
|
105
108
|
|
|
106
109
|
expect(
|
|
107
|
-
Array.from(cssVariables.keys()).map((x) => `var(${x})`)
|
|
110
|
+
Array.from(cssVariables.keys()).map((x) => `var(${x})`),
|
|
108
111
|
).toContain(variable)
|
|
109
|
-
}
|
|
112
|
+
},
|
|
110
113
|
)
|
|
111
114
|
})
|
|
112
|
-
}
|
|
115
|
+
},
|
|
113
116
|
)
|
|
114
117
|
|
|
115
118
|
describe('toTokenObject test', () => {
|
|
@@ -147,7 +150,7 @@ describe('toTokenObject test', () => {
|
|
|
147
150
|
|
|
148
151
|
const mergedResult = deepmerge(
|
|
149
152
|
toTokenObject(tokens),
|
|
150
|
-
toTokenObject(additionalTokens)
|
|
153
|
+
toTokenObject(additionalTokens),
|
|
151
154
|
)
|
|
152
155
|
|
|
153
156
|
expect(mergedResult).toEqual({
|