{"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":"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"}