@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.
@@ -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":"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"}
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;EAIZ,aAAiB,EAAA,UAEU,GAFV,GAEgB,gBAFhB,EAAA;EACR,MAAA,EAAA,UAEW,UAFX,IAEyB,MAFzB,EAAA;EACkB,aAAA,EAAA,UAEA,UAFA,IAEc,aAFd,EAAA;EAAM,OAAA,EAAA,UAGZ,GAHY,GAAA,MAAA,EAAA;EACb,UAAA,EAAA;IAAc,IAAA,EAAA,UAId,GAJc,GAIR,oBAJQ,EAAA;EACP,CAAA;EAAc,YAAA,EAAA,UAQf,GARe,GAAA,MAAA,EAAA;EACpB,MAAA,EAAA,UAST,GATS,GAAA;IAED,KAAA,EAQP,QARO;EAAM,CAAA,EAAA;EAKA,OAAA,EAAA,UASd,GATc,GAAA;IAEd,KAAA,EAQC,QARD;IACC,MAAA,EAAA,MAAA;EAMD,CAAA,EAAA;EACC,IAAA,EAAA;IAWD,IAAA,EAAA;MAAA,MAAA,EAAA,MAAA;;;;ECtCZ,UAAiB,EAAA,UDsCL,GCtCK,GAAA;IACC,QAAA,EAAA,MAAA;EACQ,CAAA,EAAA;;;;UAFT,aAAA,SAAsB;EDHvC,SAAY,KAAA,ECIM,UDJN;EAEZ,SAAY,aAAA,ECGc,kBDHd;EAEZ;AAIA;;EAE2B,SAAA,MAAA,ECDR,WDCQ;EAAM;;;EAEN,SAAA,aAAA,ECCD,kBDDC;EAAc,SAAA,OAAA,ECErB,ODFqB;EACpB,SAAA,UAAA,EAAA;IAED,SAAA,IAAA,ECCD,UDDC;EAAM,CAAA;EAKA,SAAA,YAAA,ECFD,YDEC;EAEd,SAAA,MAAA,EAAA;IACC,SAAA,OAAA,EAAA;MAMD,SAAA,KAAA,ECRU,QDQV;IACC,CAAA;EAWD,CAAA;EAAA,SAAA,OAAA,EAAA;;;;ICtCZ,CAAA;IACkB,SAAA,SAAA,EAAA;MACQ,SAAA,KAAA,EAAA,MAAA;MAIP,SAAA,MAAA,EAAA,CAAA;IAIO,CAAA;EACN,CAAA;EAED,SAAA,UAAA,EAkBI,UAlBJ;;AAKG,KAgBV,UAAA,GAhBU;EAaC,SAAA,WAAA,EAIC,QAJD;EA/BgB,SAAA,WAAA,EAoCf,QApCe;EAAA,SAAA,WAAA,EAqCf,QArCe;EAkCvC,SAAY,QAAA,EAIS,QAJT;EACY,SAAA,QAAA,EAIH,QAJG;EACA,SAAA,QAAA,EAIH,QAJG;EACA,SAAA,QAAA,EAIH,QAJG;EACH,SAAA,QAAA,EAKA,QALA;EACA,SAAA,QAAA,EAKA,QALA;EACA,SAAA,QAAA,EAKA,QALA;EACA,SAAA,QAAA,EAKA,QALA;EAEA,SAAA,SAAA,EAIC,QAJD;EACA,SAAA,KAAA,EAIH,QAJG;EACA,SAAA,KAAA,EAIH,QAJG;EACA,SAAA,KAAA,EAIH,QAJG;EACC,SAAA,KAAA,EAIJ,QAJI;EACJ,SAAA,KAAA,EAIA,QAJA;EACA,SAAA,KAAA,EAIA,QAJA;EACA,SAAA,KAAA,EAIA,QAJA;EACA,SAAA,KAAA,EAIA,QAJA;EACA,SAAA,KAAA,EAIA,QAJA;EACA,SAAA,SAAA,EAII,QAJJ;EACA,SAAA,OAAA,EAIE,QAJF;EACA,SAAA,OAAA,EAIE,QAJF;EACA,SAAA,WAAA,EAIM,QAJN;EACI,SAAA,MAAA,EAIH,QAJG;CACF;AACA,KAKR,WAAA,GALQ;EACI,SAAA,KAAA,EAKN,MALM;EACL,SAAA,KAAA,EAKD,MALC;CAAA;AAGP,KAKA,kBAAA,GAJM;EAIlB,SAAY,QAAA,EACS,aADT;AAIZ,CAAA;AAKY,KALA,kBAAA,GAKA;EACK,SAAA,QAAA,EALI,gBAKJ;EACA,SAAA,YAAA,EALQ,gBAKR;CACA;AACA,KAJL,UAAA,GAIK;EACA,UAAA,EAAA,CAAA,EAJA,oBAIA;EAAA,UAAA,EAAA,CAAA,EAHA,oBAGA;EAGjB,UAAY,EAAA,CAAA,EALK,oBAKL;EAOZ,UAAY,EAAA,CAAA,EAXK,oBAWL;EAAuC,UAAA,EAAA,CAAA,EAVlC,oBAUkC;CAApB;AAAT,KAPV,UAAA,GAOU;EAAA,SAAA,OAAA,EAAA,MAAA;EACtB,SAAY,OAAA,EAAA,MAAA;EAA4C,SAAA,OAAA,EAAA,MAAA;EAApB,SAAA,OAAA,EAAA,MAAA;CAAT;AAAA,KADf,OAAA,GAAU,QACK,CADI,MACJ,CAAA,MAAA,OADwB,OACxB,EAAA,MAAA,CAAA,CAAA;KAAf,YAAA,GAAe,SAAS,oBAAoB;;;cCC3CA,OAAO;AFlGR,cEmJCC,IFnJD,EEmJO,aFnJP"}
@@ -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":"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"}
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\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"}
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;EAAA,KAAA,EAAA,MAAA;;AAEkB,KAKX,MAAA,GALW;QACjB,MAAA,CAAA,EAKW,UALX;CAAA;AAGM,KAIA,eAAA,GAJA;EACZ,CAAA,QAAY,EAAA,MAAA,CAAA,EAIU,MAHL;AAEjB,CAAA;KAIK,aAAA,CAAA,UAAA,MAAA,OAAqC,UAC9B,GAAA,KAAA,EAAA,IAAA,KAAA,EAAA,EAAA,GAAA,QAAA,CAAA,GAAI,aAAJ,CAAkB,CAAlB,EAAqB,CAArB,CAAA,EAAA,GAAA,QACA,CADA,GACI,CADJ,EAAA;AAAkB,KAGlB,WAHkB,CAAA,UAGI,MAHJ,CAAA,GAGc,mBAHd,CAAA,QAAA,MAId,CAJc,GAIV,aAJU,CAII,CAJJ,GAAA,MAAA,EAIgB,CAJhB,CAIkB,CAJlB,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,MAIuC,CAJvC,CAAA,CAAA;;;KCLzB,oBDVA,MAAA,EAAA,UAAA,MAAA,GAAA,GAAA,ICaD,UDXD,GAAA,KAAA,EAAA,GCWwB,CDXxB,GAAA,KAAA,EAAA,EAAA,GAAA,GCYI,SDZJ,CCYc,CDZd,CAAA,GCYmB,UDZnB,CCY8B,SDZ9B,CCYwC,CDZxC,ECY2C,CDZ3C,CAAA,CAAA,EAAA,GCaC,CDbD;KCeE,aDfkB,WCgBX,MDfN,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,UAAA,MAAA,GAAA,GAAA,CAGN,GAAY,QAAA,MCeE,CDfF,ICeO,SDfP,CCeiB,CDfjB,GAAA,MAAA,ECe6B,CDf7B,CAAA,GCekC,CDflC,CCeoC,CDfpC,CAAA,SCe+C,MDf/C,CAAA,MAAA,EAAA,OAAA,CAAA,GCmBN,aDnBM,CCmBQ,CDnBR,CCmBU,CDnBV,CAAA,ECmBc,CDnBd,CAAA,GCoBN,CDpBM,CCoBJ,CDpBI,CAAA,EAAA;AACA,cCsBC,aDrBI,EAAA,CAEjB,UCoBY,MDpBA,CAAA,MAAA,EAAA,OACU,CAAA,oBAGjB,MAAA,GAAA,GAAA,CAAA,CAAA,GAAA,ECmBE,CDnBF,EAAA,GCoBF,aDpBE,CCoBY,CDpBZ,ECoBe,SDpBf,CAAA;;;AAdA,cEOQ,iBFPR,EAAA,CAAA,UEOuC,eFPvC,CAAA,CAAA,eAAA,EEQc,CFRd,EAAA,mBAAA,EESkB,eFTlB,EAAA,GAAA,QAAA,MEUY,CFVZ,GEUgB,WFVhB,CEU4B,CFV5B,CEU8B,CFV9B,CAAA,CAAA,EAAA;AAEF,cEgCU,oBFhCV,EAAA,CAAA,UEgC4C,eFhC5C,CAAA,CAAA,eAAA,EEiCgB,CFjChB,EAAA,MAAA,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,GAAA,QAAA,MEmCc,CFnCd,GEmCkB,WFnClB,CEmC8B,CFnC9B,CEmCgC,CFnChC,CAAA,CAAA,EAAA"}
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;EAAA,KAAA,EAAA,MAAA;;AAEkB,KAKX,MAAA,GALW;QACjB,MAAA,CAAA,EAKW,UALX;CAAA;AAGM,KAIA,eAAA,GAJA;EACZ,CAAA,QAAY,EAAA,MAAA,CAAA,EAIU,MAHL;AAEjB,CAAA;KAIK,aAAA,CAAA,UAAA,MAAA,OAAqC,UAC9B,GAAA,KAAA,EAAA,IAAA,KAAA,EAAA,EAAA,GAAA,QAAA,CAAA,GAAI,aAAJ,CAAkB,CAAlB,EAAqB,CAArB,CAAA,EAAA,GAAA,QACA,CADA,GACI,CADJ,EAAA;AAAkB,KAGlB,WAHkB,CAAA,UAGI,MAHJ,CAAA,GAGc,mBAHd,CAAA,QAAA,MAId,CAJc,GAIV,aAJU,CAII,CAJJ,GAAA,MAAA,EAIgB,CAJhB,CAIkB,CAJlB,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,MAIuC,CAJvC,CAAA,CAAA;;;KCLzB,oBDVA,MAAA,EAAA,UAAA,MAAA,GAAA,GAAA,ICaD,UDXD,GAAA,KAAA,EAAA,GCWwB,CDXxB,GAAA,KAAA,EAAA,EAAA,GAAA,GCYI,SDZJ,CCYc,CDZd,CAAA,GCYmB,UDZnB,CCY8B,SDZ9B,CCYwC,CDZxC,ECY2C,CDZ3C,CAAA,CAAA,EAAA,GCaC,CDbD;KCeE,aDfkB,WCgBX,MDfN,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,UAAA,MAAA,GAAA,GAAA,CAGN,GAAY,QAAA,MCeE,CDfF,ICeO,SDfP,CCeiB,CDfjB,GAAA,MAAA,ECe6B,CDf7B,CAAA,GCekC,CDflC,CCeoC,CDfpC,CAAA,SCe+C,MDf/C,CAAA,MAAA,EAAA,OAAA,CAAA,GCmBN,aDnBM,CCmBQ,CDnBR,CCmBU,CDnBV,CAAA,ECmBc,CDnBd,CAAA,GCoBN,CDpBM,CCoBJ,CDpBI,CAAA,EAAA;AACA,cCsBC,aDrBI,EAAA,CAEjB,UCoBY,MDpBA,CAAA,MAAA,EAAA,OACU,CAAA,oBAGjB,MAAA,GAAA,GAAA,CAAA,CAAA,GAAA,ECmBE,CDnBF,EAAA,GCoBF,aDpBE,CCoBY,CDpBZ,ECoBe,SDpBf,CAAA;;;AAdA,cEOQ,iBFPR,EAAA,CAAA,UEOuC,eFPvC,CAAA,CAAA,eAAA,EEQc,CFRd,EAAA,mBAAA,EESkB,eFTlB,EAAA,GAAA,QAAA,MEUY,CFVZ,GEUgB,WFVhB,CEU4B,CFV5B,CEU8B,CFV9B,CAAA,CAAA,EAAA;AAEF,cEgCU,oBFhCV,EAAA,CAAA,UEgC4C,eFhC5C,CAAA,CAAA,eAAA,EEiCgB,CFjChB,EAAA,MAAA,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,GAAA,QAAA,MEmCc,CFnCd,GEmCkB,WFnClB,CEmC8B,CFnC9B,CEmCgC,CFnChC,CAAA,CAAA,EAAA"}
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\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"}
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.4",
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.4",
50
- "@charcoal-ui/utils": "5.0.0-beta.4"
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",
@@ -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((acc, key) => {
98
- if (typeof acc === 'string') return acc
97
+ const variable = splitted.reduce(
98
+ (acc, key) => {
99
+ if (typeof acc === 'string') return acc
99
100
 
100
- const next = acc[key]
101
- if (typeof next === 'string') return next
101
+ const next = acc[key]
102
+ if (typeof next === 'string') return next
102
103
 
103
- return isObject(next) ? next : acc
104
- }, theme[_category] as Record<string, unknown> | string)
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({