@dash-ui/compound
Version:
A utility for creating compound styles with dash-ui
1 lines • 6.44 kB
Source Map (JSON)
{"version":3,"file":"index.dev.mjs","sources":["../../src/index.ts"],"sourcesContent":["import type {\n ResponsiveLazy,\n ResponsiveOne,\n ResponsiveStyle,\n ResponsiveStyles,\n} from \"@dash-ui/responsive\";\nimport type {\n DashThemes,\n DashTokens,\n Style,\n Styles,\n StylesLazy,\n StylesOne,\n} from \"@dash-ui/styles\";\n\n/**\n * A factory function that creates a compound styles utility\n *\n * @param styles\n */\nfunction compound<Tokens extends DashTokens, Themes extends DashThemes>(\n styles: Styles<Tokens, Themes> | ResponsiveStyles<Tokens, Themes, any>\n) {\n /**\n * A function for creating compound/multi-variant styles\n *\n * @param styleMap\n * @param options\n */\n return function compoundStyles<\n Keys extends string,\n T extends Record<\n Keys,\n | ResponsiveStyle<any, any, any, any>\n | Style<any>\n | StylesOne\n | ResponsiveOne<any>\n | StylesLazy<any>\n | ResponsiveLazy<any, any>\n >,\n StyleMap extends { [Name in keyof T]: T[Name] }\n >(\n styleMap: StyleMap,\n options: CompoundStylesOptions = emptyObj\n ): CompoundStyle<Keys, T, StyleMap> {\n const cache: Record<string, string[]> = {};\n const mapKeys: string[] = Object.keys(styleMap);\n\n function atomicCss(compoundMap: {\n [Name in keyof StyleMap]?: Parameters<StyleMap[Name]>[0];\n }): string[] {\n const key = JSON.stringify(compoundMap);\n const cached = cache[key];\n if (cached) return cached;\n\n const output: string[] =\n // @ts-expect-error\n typeof styleMap.default === \"function\"\n ? [\n // @ts-expect-error\n styleMap.default.css(),\n ]\n : [];\n\n for (let i = 0; i < mapKeys.length; i++) {\n const key = mapKeys[i];\n if (key === \"default\") continue;\n const value = (compoundMap as any)[key];\n if (value === void 0 || value === null) continue;\n output.push((styleMap as any)[key]?.css(value));\n }\n\n return (cache[key] = output);\n }\n\n function css(compoundMap: {\n [Name in keyof StyleMap]?: Parameters<StyleMap[Name]>[0];\n }): string {\n return \"\".concat(...atomicCss(compoundMap));\n }\n\n function compoundStyle(\n compoundMap: {\n [Name in keyof StyleMap]?: Parameters<StyleMap[Name]>[0];\n } = {},\n compoundOptions: CompoundStylesOptions = emptyObj\n ): string {\n if (compoundOptions.atomic ?? options.atomic) {\n const css = atomicCss(compoundMap);\n let classes = \"\";\n\n for (let i = 0; i < css.length; i++) {\n classes += styles.cls(css[i]) + (i === css.length - 1 ? \"\" : \" \");\n }\n\n return classes;\n }\n\n return styles.cls(css(compoundMap));\n }\n\n return Object.assign(compoundStyle, {\n css,\n atomicCss,\n styles: styleMap,\n });\n };\n}\n\nconst emptyObj = {};\n\nexport type CompoundStyle<\n Keys extends string,\n T extends Record<\n Keys,\n | ResponsiveStyle<any, any, any, any>\n | Style<any>\n | StylesOne\n | ResponsiveOne<any>\n | StylesLazy<any>\n | ResponsiveLazy<any, any>\n >,\n StyleMap extends { [Name in keyof T]: T[Name] }\n> = {\n (\n compoundMap?: {\n [Name in keyof StyleMap]?: Parameters<StyleMap[Name]>[0] | undefined;\n },\n compoundOptions?: CompoundStylesOptions\n ): string;\n\n atomicCss(compoundMap: {\n [Name in keyof StyleMap]?: Parameters<StyleMap[Name]>[0];\n }): string[];\n\n css(compoundMap: {\n [Name in keyof StyleMap]?: Parameters<StyleMap[Name]>[0];\n }): string;\n\n styles: StyleMap;\n};\n\nexport type CompoundStylesOptions = {\n atomic?: boolean;\n};\n\nexport default compound;\n"],"names":["compound","styles","compoundStyles","styleMap","options","emptyObj","cache","mapKeys","Object","keys","atomicCss","compoundMap","key","JSON","stringify","cached","output","default","css","i","length","value","push","concat","compoundStyle","compoundOptions","atomic","classes","cls","assign"],"mappings":"AAeA;AACA;AACA;AACA;AACA;AACA,SAASA,QAAT,CACEC,MADF,EAEE;AACA;AACF;AACA;AACA;AACA;AACA;AACE,EAAA,OAAO,SAASC,cAAT,CAaLC,QAbK,EAcLC,OAdK,EAe6B;AAAA,IAAA,IADlCA,OACkC,KAAA,KAAA,CAAA,EAAA;AADlCA,MAAAA,OACkC,GADDC,QACC,CAAA;AAAA,KAAA;;IAClC,IAAMC,KAA+B,GAAG,EAAxC,CAAA;AACA,IAAA,IAAMC,OAAiB,GAAGC,MAAM,CAACC,IAAP,CAAYN,QAAZ,CAA1B,CAAA;;IAEA,SAASO,SAAT,CAAmBC,WAAnB,EAEa;AACX,MAAA,IAAMC,GAAG,GAAGC,IAAI,CAACC,SAAL,CAAeH,WAAf,CAAZ,CAAA;AACA,MAAA,IAAMI,MAAM,GAAGT,KAAK,CAACM,GAAD,CAApB,CAAA;MACA,IAAIG,MAAJ,EAAY,OAAOA,MAAP,CAAA;AAEZ,MAAA,IAAMC,MAAgB;AAEpB,MAAA,OAAOb,QAAQ,CAACc,OAAhB,KAA4B,UAA5B,GACI;AAEEd,MAAAA,QAAQ,CAACc,OAAT,CAAiBC,GAAjB,EAFF,CADJ,GAKI,EAPN,CAAA;;AASA,MAAA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGZ,OAAO,CAACa,MAA5B,EAAoCD,CAAC,EAArC,EAAyC;AAAA,QAAA,IAAA,KAAA,CAAA;;AACvC,QAAA,IAAMP,IAAG,GAAGL,OAAO,CAACY,CAAD,CAAnB,CAAA;QACA,IAAIP,IAAG,KAAK,SAAZ,EAAuB,SAAA;AACvB,QAAA,IAAMS,KAAK,GAAIV,WAAD,CAAqBC,IAArB,CAAd,CAAA;QACA,IAAIS,KAAK,KAAK,KAAK,CAAf,IAAoBA,KAAK,KAAK,IAAlC,EAAwC,SAAA;AACxCL,QAAAA,MAAM,CAACM,IAAP,CAAanB,CAAAA,KAAAA,GAAAA,QAAD,CAAkBS,IAAlB,CAAZ,MAAA,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAY,KAAwBM,CAAAA,GAAxB,CAA4BG,KAA5B,CAAZ,CAAA,CAAA;AACD,OAAA;;AAED,MAAA,OAAQf,KAAK,CAACM,GAAD,CAAL,GAAaI,MAArB,CAAA;AACD,KAAA;;IAED,SAASE,GAAT,CAAaP,WAAb,EAEW;MACT,OAAO,EAAA,CAAGY,MAAH,CAAU,GAAGb,SAAS,CAACC,WAAD,CAAtB,CAAP,CAAA;AACD,KAAA;;AAED,IAAA,SAASa,aAAT,CACEb,WADF,EAIEc,eAJF,EAKU;AAAA,MAAA,IAAA,qBAAA,CAAA;;AAAA,MAAA,IAJRd,WAIQ,KAAA,KAAA,CAAA,EAAA;AAJRA,QAAAA,WAIQ,GAFJ,EAEI,CAAA;AAAA,OAAA;;AAAA,MAAA,IADRc,eACQ,KAAA,KAAA,CAAA,EAAA;AADRA,QAAAA,eACQ,GADiCpB,QACjC,CAAA;AAAA,OAAA;;AACR,MAAA,IAAA,CAAA,qBAAA,GAAIoB,eAAe,CAACC,MAApB,yEAA8BtB,OAAO,CAACsB,MAAtC,EAA8C;AAC5C,QAAA,IAAMR,IAAG,GAAGR,SAAS,CAACC,WAAD,CAArB,CAAA;;QACA,IAAIgB,OAAO,GAAG,EAAd,CAAA;;AAEA,QAAA,KAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,IAAG,CAACE,MAAxB,EAAgCD,CAAC,EAAjC,EAAqC;UACnCQ,OAAO,IAAI1B,MAAM,CAAC2B,GAAP,CAAWV,IAAG,CAACC,CAAD,CAAd,CAAA,IAAsBA,CAAC,KAAKD,IAAG,CAACE,MAAJ,GAAa,CAAnB,GAAuB,EAAvB,GAA4B,GAAlD,CAAX,CAAA;AACD,SAAA;;AAED,QAAA,OAAOO,OAAP,CAAA;AACD,OAAA;;MAED,OAAO1B,MAAM,CAAC2B,GAAP,CAAWV,GAAG,CAACP,WAAD,CAAd,CAAP,CAAA;AACD,KAAA;;AAED,IAAA,OAAOH,MAAM,CAACqB,MAAP,CAAcL,aAAd,EAA6B;MAClCN,GADkC;MAElCR,SAFkC;AAGlCT,MAAAA,MAAM,EAAEE,QAAAA;AAH0B,KAA7B,CAAP,CAAA;GAxEF,CAAA;AA8ED,CAAA;;AAED,IAAME,QAAQ,GAAG,EAAjB;;;;"}