{"version":3,"file":"index.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","styleMap","options","atomicCss","compoundMap","key","JSON","stringify","cached","cache","output","default","css","i","mapKeys","length","_key2","value","push","concat","emptyObj","Object","keys","assign","compoundOptions","_compoundOptions$atom","atomic","classes","cls"],"mappings":"AAoBA,SAASA,EACPC,GAQA,OAAO,SAaLC,EACAC,GAKA,SAASC,EAAUC,GAGjB,IAAMC,EAAMC,KAAKC,UAAUH,GACrBI,EAASC,EAAMJ,GACrB,GAAIG,EAAQ,OAAOA,EAWnB,IATA,IAAME,EAEwB,mBAArBT,EAASU,QACZ,CAEEV,EAASU,QAAQC,OAEnB,GAEGC,EAAI,EAAGA,EAAIC,EAAQC,OAAQF,IAAK,CAAA,IAAAG,EACjCX,EAAMS,EAAQD,GACpB,GAAY,YAARR,EAAJ,CACA,IAAMY,EAASb,EAAoBC,GAC/BY,SACJP,EAAOQ,KAAP,QAAajB,EAAAA,EAAiBI,UAA9B,IAAAW,OAAA,EAAYA,EAAwBJ,IAAIK,GAHjB,CAIxB,CAED,OAAQR,EAAMJ,GAAOK,CACtB,CAED,SAASE,EAAIR,GAGX,MAAO,GAAGe,UAAUhB,EAAUC,GAC/B,MAnCiC,IADlCF,IAAAA,EAAiCkB,GAEjC,IAAMX,EAAkC,CAAA,EAClCK,EAAoBO,OAAOC,KAAKrB,GAuDtC,OAAOoB,OAAOE,QApBd,SACEnB,EAGAoB,GACQ,IAAAC,EACR,QADQ,IAJRrB,IAAAA,EAEI,CAAA,QAEI,IADRoB,IAAAA,EAAyCJ,WAEzCK,EAAID,EAAgBE,sBAAUxB,EAAQwB,OAAQ,CAI5C,IAHA,IAAMd,EAAMT,EAAUC,GAClBuB,EAAU,GAELd,EAAI,EAAGA,EAAID,EAAIG,OAAQF,IAC9Bc,GAAW3B,EAAO4B,IAAIhB,EAAIC,KAAOA,IAAMD,EAAIG,OAAS,EAAI,GAAK,KAG/D,OAAOY,CACR,CAED,OAAO3B,EAAO4B,IAAIhB,EAAIR,GACvB,GAEmC,CAClCQ,MACAT,YACAH,OAAQC,IAGb,CAED,IAAMmB,EAAW,CAAjB"}