{"version":3,"file":"useSV.cjs","sources":["../../../src/hooks/useSV/useSV.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { useEnvironment } from '../useEnvironment'\n\nimport type { Environment } from '../useEnvironment'\n\n// tailwind-variantsのslotsから型を抽出する型ヘルパー\ntype Slots<T> = T extends { slots: infer S }\n  ? keyof S\n  : T extends { base: infer B }\n    ? B extends any[]\n      ? never\n      : B extends object\n        ? keyof B\n        : never\n    : never\n\ntype SVReturnType<T> = Slots<T> extends never ? string : { [K in Slots<T>]: string }\n\nexport const defineSV = <T>(f: (environment: Environment) => T) => f\n\n// VariantPropsの実装に必要な型ヘルパー\ntype ConfigVariants<T> = T extends { variants: infer V } ? V : object\n\ntype VariantValue<T> =\n  T extends Record<string, any>\n    ? 'true' extends keyof T\n      ? boolean\n      : 'false' extends keyof T\n        ? boolean\n        : keyof T\n    : never\n\nexport type VariantProps<T extends (environment: Environment) => any> = {\n  [K in keyof ConfigVariants<ReturnType<T>>]?: VariantValue<ConfigVariants<ReturnType<T>>[K]>\n}\n\n// TODO: propsのanyをTから導出できるようにする\nexport const useSV = <T extends Omit<Parameters<typeof tv>[0], 'base'>>(\n  f: (environment: Environment) => T,\n  props: any,\n): SVReturnType<T> => {\n  const environment = useEnvironment()\n\n  const applyTV = useMemo(() => {\n    const config = f(environment)\n\n    // config.base がオブジェクトの場合は slots として扱う\n    if ('base' in config && typeof config.base === 'object' && !Array.isArray(config.base)) {\n      const { base, ...rest } = config\n\n      return tv({\n        ...rest,\n        slots: base,\n      })\n    }\n    return tv(config)\n  }, [f, environment])\n\n  const classNames = applyTV(props)\n\n  if (typeof classNames === 'object' && classNames !== null && !Array.isArray(classNames)) {\n    const ret: Record<string, string> = {}\n    for (const key in classNames) {\n      const value = classNames[key]\n      ret[key] = typeof value === 'function' ? value() : value\n    }\n    return ret as SVReturnType<T>\n  }\n  return classNames as SVReturnType<T>\n}\n"],"names":["useEnvironment","useMemo","tv"],"mappings":";;;;;;;;;;;;;;;;;;AAoBO,MAAM,QAAQ,GAAG,CAAI,CAAkC,KAAK;AAkBnE;MACa,KAAK,GAAG,CACnB,CAAkC,EAClC,KAAU,KACS;AACnB,IAAA,MAAM,WAAW,GAAGA,kDAAc,EAAE;AAEpC,IAAA,MAAM,OAAO,GAAGC,aAAO,CAAC,MAAK;AAC3B,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC;;QAG7B,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACtF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;AAEhC,YAAA,OAAOC,QAAE,CAAC;AACR,gBAAA,GAAG,IAAI;AACP,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA,CAAC;QACJ;AACA,QAAA,OAAOA,QAAE,CAAC,MAAM,CAAC;AACnB,IAAA,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAEpB,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;AAEjC,IAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QACvF,MAAM,GAAG,GAA2B,EAAE;AACtC,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;AAC7B,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK;QAC1D;AACA,QAAA,OAAO,GAAsB;IAC/B;AACA,IAAA,OAAO,UAA6B;AACtC;;;;;"}