@charcoal-ui/theme
Advanced tools
+2
-3
@@ -1,3 +0,2 @@ | ||
| Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | ||
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | ||
| //#region src/default.ts | ||
@@ -174,6 +173,6 @@ const common = { | ||
| }; | ||
| //#endregion | ||
| exports.dark = dark; | ||
| exports.light = light; | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.cjs","names":[],"sources":["../src/default.ts"],"sourcesContent":["/** This file is auto generated. DO NOT EDIT BY HAND. */\nimport { CharcoalTheme } from './theme'\n\nconst common = {\n borderRadius: {\n '4': 4,\n '8': 8,\n '16': 16,\n '24': 24,\n none: 0,\n oval: 999999,\n },\n breakpoint: {\n screen1: 744,\n screen2: 952,\n screen3: 1160,\n screen4: 1368,\n },\n elementEffect: {\n disabled: {\n opacity: 0.32,\n type: 'opacity',\n },\n },\n gradientColor: {\n callToAction: [\n {\n color: '#d1ff1a',\n ratio: 0,\n },\n {\n color: '#1ad1ff',\n ratio: 100,\n },\n ],\n surface5: [\n {\n color: 'rgba(0,0,0,0.32)',\n ratio: 0,\n },\n {\n color: 'rgba(0,0,0,0)',\n ratio: 100,\n },\n ],\n },\n grid: {\n unit: {\n column: 80,\n gutter: 24,\n },\n },\n outline: {\n assertive: {\n color: 'rgba(255,43,0,0.32)',\n weight: 4,\n },\n default: {\n color: 'rgba(0,150,250,0.32)',\n weight: 4,\n },\n },\n spacing: {\n '0': 0,\n '4': 4,\n '8': 8,\n '16': 16,\n '24': 24,\n '40': 40,\n '64': 64,\n '104': 104,\n '168': 168,\n '272': 272,\n '440': 440,\n },\n transition: {\n default: {\n duration: 0.2,\n },\n },\n typography: {\n size: {\n '12': {\n fontSize: 12,\n lineHeight: 20,\n },\n '14': {\n fontSize: 14,\n lineHeight: 22,\n },\n '16': {\n fontSize: 16,\n lineHeight: 24,\n },\n '20': {\n fontSize: 20,\n lineHeight: 28,\n },\n '32': {\n fontSize: 32,\n lineHeight: 40,\n },\n },\n },\n} as const\n\nexport const light: CharcoalTheme = {\n ...common,\n ...{\n border: {\n default: {\n color: 'rgba(0,0,0,0.08)',\n },\n },\n color: {\n assertive: '#ff2b00',\n background1: '#ffffff',\n background2: '#f5f5f5',\n border: 'rgba(0,0,0,0.08)',\n brand: '#0096fa',\n icon6: 'rgba(255,255,255,0.28)',\n link1: '#3d7699',\n link2: 'rgba(255,255,255,0.36)',\n success: '#b1cc29',\n surface1: '#ffffff',\n surface10: 'rgba(0,0,0,0.16)',\n surface2: 'rgba(0,0,0,0.02)',\n surface3: 'rgba(0,0,0,0.04)',\n surface4: 'rgba(0,0,0,0.32)',\n surface6: 'rgba(0,0,0,0.88)',\n surface7: 'rgba(0,0,0,0.02)',\n surface8: 'rgba(0,0,0,0.88)',\n surface9: '#ffffff',\n text1: '#1f1f1f',\n text2: '#474747',\n text3: '#858585',\n text4: '#adadad',\n text5: '#ffffff',\n transparent: 'rgba(0,0,0,0)',\n updatedItem: 'rgba(0,150,250,0.04)',\n warning: '#ffaf0f',\n },\n effect: {\n hover: {\n color: 'rgba(0,0,0,0.04)',\n type: 'alpha',\n },\n press: {\n color: 'rgba(0,0,0,0.16)',\n type: 'alpha',\n },\n },\n },\n}\n\nexport const dark: CharcoalTheme = {\n ...common,\n ...{\n border: {\n default: {\n color: 'rgba(255,255,255,0.12)',\n },\n },\n color: {\n assertive: '#ff2b00',\n background1: '#1f1f1f',\n background2: '#000000',\n border: 'rgba(255,255,255,0.12)',\n brand: '#0096fa',\n icon6: 'rgba(255,255,255,0.28)',\n link1: '#669FC2',\n link2: 'rgba(255,255,255,0.36)',\n success: '#b1cc29',\n surface1: '#1f1f1f',\n surface10: 'rgba(255,255,255,0.2)',\n surface2: 'rgba(0,0,0,0.16)',\n surface3: 'rgba(255,255,255,0.12)',\n surface4: 'rgba(0,0,0,0.32)',\n surface6: 'rgba(255,255,255,0.12)',\n surface7: 'rgba(0,0,0,0)',\n surface8: 'rgba(0,0,0,0.88)',\n surface9: '#333333',\n text1: '#f5f5f5',\n text2: '#d6d6d6',\n text3: '#858585',\n text4: '#5c5c5c',\n text5: '#f5f5f5',\n transparent: 'rgba(0,0,0,0)',\n updatedItem: 'rgba(0,150,250,0.12)',\n warning: '#ffaf0f',\n },\n effect: {\n hover: {\n color: 'rgba(255,255,255,0.12)',\n type: 'alpha',\n },\n press: {\n color: 'rgba(255,255,255,0.2)',\n type: 'alpha',\n },\n },\n },\n}\n"],"mappings":";;;AAGA,MAAM,SAAS;CACb,cAAc;EACZ,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACP;CACD,YAAY;EACV,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACV;CACD,eAAe,EACb,UAAU;EACR,SAAS;EACT,MAAM;EACP,EACF;CACD,eAAe;EACb,cAAc,CACZ;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF;EACD,UAAU,CACR;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF;EACF;CACD,MAAM,EACJ,MAAM;EACJ,QAAQ;EACR,QAAQ;EACT,EACF;CACD,SAAS;EACP,WAAW;GACT,OAAO;GACP,QAAQ;GACT;EACD,SAAS;GACP,OAAO;GACP,QAAQ;GACT;EACF;CACD,SAAS;EACP,KAAK;EACL,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACR;CACD,YAAY,EACV,SAAS,EACP,UAAU,IACX,EACF;CACD,YAAY,EACV,MAAM;EACJ,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACF,EACF;CACF;AAED,MAAa,QAAuB;CAClC,GAAG;CAED,QAAQ,EACN,SAAS,EACP,OAAO,oBACR,EACF;CACD,OAAO;EACL,WAAW;EACX,aAAa;EACb,aAAa;EACb,QAAQ;EACR,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,SAAS;EACT,UAAU;EACV,WAAW;EACX,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,aAAa;EACb,aAAa;EACb,SAAS;EACV;CACD,QAAQ;EACN,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACD,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACF;CAEJ;AAED,MAAa,OAAsB;CACjC,GAAG;CAED,QAAQ,EACN,SAAS,EACP,OAAO,0BACR,EACF;CACD,OAAO;EACL,WAAW;EACX,aAAa;EACb,aAAa;EACb,QAAQ;EACR,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,SAAS;EACT,UAAU;EACV,WAAW;EACX,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,aAAa;EACb,aAAa;EACb,SAAS;EACV;CACD,QAAQ;EACN,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACD,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACF;CAEJ"} | ||
| {"version":3,"file":"index.cjs","names":[],"sources":["../src/default.ts"],"sourcesContent":["/** This file is auto generated. DO NOT EDIT BY HAND. */\nimport { CharcoalTheme } from './theme'\n\nconst common = {\n borderRadius: {\n '4': 4,\n '8': 8,\n '16': 16,\n '24': 24,\n none: 0,\n oval: 999999,\n },\n breakpoint: {\n screen1: 744,\n screen2: 952,\n screen3: 1160,\n screen4: 1368,\n },\n elementEffect: {\n disabled: {\n opacity: 0.32,\n type: 'opacity',\n },\n },\n gradientColor: {\n callToAction: [\n {\n color: '#d1ff1a',\n ratio: 0,\n },\n {\n color: '#1ad1ff',\n ratio: 100,\n },\n ],\n surface5: [\n {\n color: 'rgba(0,0,0,0.32)',\n ratio: 0,\n },\n {\n color: 'rgba(0,0,0,0)',\n ratio: 100,\n },\n ],\n },\n grid: {\n unit: {\n column: 80,\n gutter: 24,\n },\n },\n outline: {\n assertive: {\n color: 'rgba(255,43,0,0.32)',\n weight: 4,\n },\n default: {\n color: 'rgba(0,150,250,0.32)',\n weight: 4,\n },\n },\n spacing: {\n '0': 0,\n '4': 4,\n '8': 8,\n '16': 16,\n '24': 24,\n '40': 40,\n '64': 64,\n '104': 104,\n '168': 168,\n '272': 272,\n '440': 440,\n },\n transition: {\n default: {\n duration: 0.2,\n },\n },\n typography: {\n size: {\n '12': {\n fontSize: 12,\n lineHeight: 20,\n },\n '14': {\n fontSize: 14,\n lineHeight: 22,\n },\n '16': {\n fontSize: 16,\n lineHeight: 24,\n },\n '20': {\n fontSize: 20,\n lineHeight: 28,\n },\n '32': {\n fontSize: 32,\n lineHeight: 40,\n },\n },\n },\n} as const\n\nexport const light: CharcoalTheme = {\n ...common,\n ...{\n border: {\n default: {\n color: 'rgba(0,0,0,0.08)',\n },\n },\n color: {\n assertive: '#ff2b00',\n background1: '#ffffff',\n background2: '#f5f5f5',\n border: 'rgba(0,0,0,0.08)',\n brand: '#0096fa',\n icon6: 'rgba(255,255,255,0.28)',\n link1: '#3d7699',\n link2: 'rgba(255,255,255,0.36)',\n success: '#b1cc29',\n surface1: '#ffffff',\n surface10: 'rgba(0,0,0,0.16)',\n surface2: 'rgba(0,0,0,0.02)',\n surface3: 'rgba(0,0,0,0.04)',\n surface4: 'rgba(0,0,0,0.32)',\n surface6: 'rgba(0,0,0,0.88)',\n surface7: 'rgba(0,0,0,0.02)',\n surface8: 'rgba(0,0,0,0.88)',\n surface9: '#ffffff',\n text1: '#1f1f1f',\n text2: '#474747',\n text3: '#858585',\n text4: '#adadad',\n text5: '#ffffff',\n transparent: 'rgba(0,0,0,0)',\n updatedItem: 'rgba(0,150,250,0.04)',\n warning: '#ffaf0f',\n },\n effect: {\n hover: {\n color: 'rgba(0,0,0,0.04)',\n type: 'alpha',\n },\n press: {\n color: 'rgba(0,0,0,0.16)',\n type: 'alpha',\n },\n },\n },\n}\n\nexport const dark: CharcoalTheme = {\n ...common,\n ...{\n border: {\n default: {\n color: 'rgba(255,255,255,0.12)',\n },\n },\n color: {\n assertive: '#ff2b00',\n background1: '#1f1f1f',\n background2: '#000000',\n border: 'rgba(255,255,255,0.12)',\n brand: '#0096fa',\n icon6: 'rgba(255,255,255,0.28)',\n link1: '#669FC2',\n link2: 'rgba(255,255,255,0.36)',\n success: '#b1cc29',\n surface1: '#1f1f1f',\n surface10: 'rgba(255,255,255,0.2)',\n surface2: 'rgba(0,0,0,0.16)',\n surface3: 'rgba(255,255,255,0.12)',\n surface4: 'rgba(0,0,0,0.32)',\n surface6: 'rgba(255,255,255,0.12)',\n surface7: 'rgba(0,0,0,0)',\n surface8: 'rgba(0,0,0,0.88)',\n surface9: '#333333',\n text1: '#f5f5f5',\n text2: '#d6d6d6',\n text3: '#858585',\n text4: '#5c5c5c',\n text5: '#f5f5f5',\n transparent: 'rgba(0,0,0,0)',\n updatedItem: 'rgba(0,150,250,0.12)',\n warning: '#ffaf0f',\n },\n effect: {\n hover: {\n color: 'rgba(255,255,255,0.12)',\n type: 'alpha',\n },\n press: {\n color: 'rgba(255,255,255,0.2)',\n type: 'alpha',\n },\n },\n },\n}\n"],"mappings":";;AAGA,MAAM,SAAS;CACb,cAAc;EACZ,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACP;CACD,YAAY;EACV,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACV;CACD,eAAe,EACb,UAAU;EACR,SAAS;EACT,MAAM;EACP,EACF;CACD,eAAe;EACb,cAAc,CACZ;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF;EACD,UAAU,CACR;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF;EACF;CACD,MAAM,EACJ,MAAM;EACJ,QAAQ;EACR,QAAQ;EACT,EACF;CACD,SAAS;EACP,WAAW;GACT,OAAO;GACP,QAAQ;GACT;EACD,SAAS;GACP,OAAO;GACP,QAAQ;GACT;EACF;CACD,SAAS;EACP,KAAK;EACL,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACR;CACD,YAAY,EACV,SAAS,EACP,UAAU,IACX,EACF;CACD,YAAY,EACV,MAAM;EACJ,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACD,MAAM;GACJ,UAAU;GACV,YAAY;GACb;EACF,EACF;CACF;AAED,MAAa,QAAuB;CAClC,GAAG;CAED,QAAQ,EACN,SAAS,EACP,OAAO,oBACR,EACF;CACD,OAAO;EACL,WAAW;EACX,aAAa;EACb,aAAa;EACb,QAAQ;EACR,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,SAAS;EACT,UAAU;EACV,WAAW;EACX,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,aAAa;EACb,aAAa;EACb,SAAS;EACV;CACD,QAAQ;EACN,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACD,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACF;CAEJ;AAED,MAAa,OAAsB;CACjC,GAAG;CAED,QAAQ,EACN,SAAS,EACP,OAAO,0BACR,EACF;CACD,OAAO;EACL,WAAW;EACX,aAAa;EACb,aAAa;EACb,QAAQ;EACR,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,SAAS;EACT,UAAU;EACV,WAAW;EACX,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,aAAa;EACb,aAAa;EACb,SAAS;EACV;CACD,QAAQ;EACN,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACD,OAAO;GACL,OAAO;GACP,MAAM;GACP;EACF;CAEJ"} |
+1
-1
@@ -172,5 +172,5 @@ //#region src/default.ts | ||
| }; | ||
| //#endregion | ||
| export { dark, light }; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,2 +0,2 @@ | ||
| Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | ||
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | ||
| //#region \0rolldown/runtime.js | ||
@@ -10,12 +10,8 @@ var __create = Object.create; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { | ||
| key = keys[i]; | ||
| if (!__hasOwnProp.call(to, key) && key !== except) { | ||
| __defProp(to, key, { | ||
| get: ((k) => from[k]).bind(null, key), | ||
| enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable | ||
| }); | ||
| } | ||
| } | ||
| if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { | ||
| key = keys[i]; | ||
| if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { | ||
| get: ((k) => from[k]).bind(null, key), | ||
| enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable | ||
| }); | ||
| } | ||
@@ -28,8 +24,6 @@ return to; | ||
| }) : target, mod)); | ||
| //#endregion | ||
| let deepmerge = require("deepmerge"); | ||
| deepmerge = __toESM(deepmerge); | ||
| deepmerge = __toESM(deepmerge, 1); | ||
| let change_case_all = require("change-case-all"); | ||
| //#region src/unstable-token-object/reference-token.ts | ||
@@ -50,7 +44,5 @@ const isReferenceToken = (value) => value.startsWith("{") && value.endsWith("}"); | ||
| }; | ||
| //#endregion | ||
| //#region src/unstable-token-object/helpers/is-empty-array.ts | ||
| const isNonEmptyArray = (arr) => arr.length > 0; | ||
| //#endregion | ||
@@ -64,3 +56,2 @@ //#region src/unstable-token-object/helpers/nest-object.ts | ||
| }; | ||
| //#endregion | ||
@@ -79,3 +70,2 @@ //#region src/unstable-token-object/to-token-object.ts | ||
| }; | ||
| //#endregion | ||
@@ -92,3 +82,2 @@ //#region src/unstable-token-object/helpers/changecase-keys.ts | ||
| }; | ||
| //#endregion | ||
@@ -113,3 +102,2 @@ //#region src/unstable-token-object/index.ts | ||
| }; | ||
| //#endregion | ||
@@ -119,2 +107,3 @@ exports.camelCaseKeys = camelCaseKeys; | ||
| exports.createTokenObject = createTokenObject; | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.cjs","names":[],"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,KAAK,WAAW,CAC1C,KACA,EAAE,OAAO,uBAAuB,MAAM,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"} | ||
| {"version":3,"file":"index.cjs","names":[],"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,YAAA,GAAA,UAAA,SAAmB,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,EAAA,GAAA,gBAAA,WAC9B,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,KAAK,WAAW,CAC1C,KACA,EAAE,OAAO,uBAAuB,MAAM,MAAM,EAAE,CAC/C,CAAC,CAG2C,CAAC;;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,OAAA,GAAA,gBAAA,WAAgB,EAAE,CAAC,CAAC,KAAK,IAAI,CACjE,CAAC,IACH,CACF,CAAC,CAG2C,CAAC;;AAGlD,QAAO"} |
| import deepmerge from "deepmerge"; | ||
| import { camelCase, kebabCase } from "change-case-all"; | ||
| //#region src/unstable-token-object/reference-token.ts | ||
@@ -19,7 +18,5 @@ const isReferenceToken = (value) => value.startsWith("{") && value.endsWith("}"); | ||
| }; | ||
| //#endregion | ||
| //#region src/unstable-token-object/helpers/is-empty-array.ts | ||
| const isNonEmptyArray = (arr) => arr.length > 0; | ||
| //#endregion | ||
@@ -33,3 +30,2 @@ //#region src/unstable-token-object/helpers/nest-object.ts | ||
| }; | ||
| //#endregion | ||
@@ -48,3 +44,2 @@ //#region src/unstable-token-object/to-token-object.ts | ||
| }; | ||
| //#endregion | ||
@@ -61,3 +56,2 @@ //#region src/unstable-token-object/helpers/changecase-keys.ts | ||
| }; | ||
| //#endregion | ||
@@ -82,5 +76,5 @@ //#region src/unstable-token-object/index.ts | ||
| }; | ||
| //#endregion | ||
| export { camelCaseKeys, createCSSTokenObject, createTokenObject }; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":[],"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,KAAK,WAAW,CAC1C,KACA,EAAE,OAAO,uBAAuB,MAAM,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"} | ||
| {"version":3,"file":"index.js","names":[],"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,KAAK,WAAW,CAC1C,KACA,EAAE,OAAO,uBAAuB,MAAM,MAAM,EAAE,CAC/C,CAAC,CAG2C,CAAC;;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,CAG2C,CAAC;;AAGlD,QAAO"} |
+3
-3
| { | ||
| "name": "@charcoal-ui/theme", | ||
| "version": "5.11.0-beta.1", | ||
| "version": "5.11.0-beta.2", | ||
| "license": "Apache-2.0", | ||
@@ -49,4 +49,4 @@ "type": "module", | ||
| "deepmerge": "^4.3.1", | ||
| "@charcoal-ui/foundation": "5.11.0-beta.1", | ||
| "@charcoal-ui/utils": "5.11.0-beta.1" | ||
| "@charcoal-ui/foundation": "5.11.0-beta.2", | ||
| "@charcoal-ui/utils": "5.11.0-beta.2" | ||
| }, | ||
@@ -53,0 +53,0 @@ "files": [ |
448320
09092
-0.04%+ Added
+ Added
- Removed
- Removed