{"version":3,"file":"index.cjs","names":["forwardRef","cx","Element"],"sources":["../src/split-props.ts","../src/create-styled.tsx"],"sourcesContent":["const RESERVED_CONFIG_KEYS = new Set([\n  'base',\n  'variants',\n  'compoundVariants',\n  'defaultVariants',\n  'slots',\n]);\n\nexport function splitVariantProps<P extends Record<string, unknown>>(\n  props: P,\n  variantKeys: readonly string[],\n): {\n  variants: Record<string, unknown>;\n  rest: Omit<P, (typeof variantKeys)[number] | 'className' | 'css'>;\n} {\n  const variants: Record<string, unknown> = {};\n  const rest = { ...props } as Record<string, unknown>;\n\n  for (const key of variantKeys) {\n    if (key in rest) {\n      variants[key] = rest[key];\n      delete rest[key];\n    }\n  }\n\n  delete rest.className;\n  delete rest.css;\n\n  return {\n    variants,\n    rest: rest as Omit<P, (typeof variantKeys)[number] | 'className' | 'css'>,\n  };\n}\n\nexport function getVariantKeysFromConfig(\n  config: Record<string, unknown> | ((ctx: unknown) => Record<string, unknown>),\n): readonly string[] {\n  if (typeof config === 'function') {\n    return [];\n  }\n\n  if ('variants' in config && config.variants && typeof config.variants === 'object') {\n    return Object.keys(config.variants);\n  }\n\n  return Object.keys(config).filter((key) => !RESERVED_CONFIG_KEYS.has(key));\n}\n","import {\n  forwardRef,\n  type ComponentPropsWithoutRef,\n  type ElementType,\n  type ForwardRefExoticComponent,\n  type RefAttributes,\n} from 'react';\nimport type {\n  ComponentConfigInput,\n  ComponentReturn,\n  ComponentVariants,\n  FlatComponentConfigInput,\n  FlatComponentReturn,\n  StylesApi,\n  TypeStylesApi,\n  VariantDefinitions,\n} from 'typestyles';\nimport { cx } from 'typestyles';\nimport { getVariantKeysFromConfig, splitVariantProps } from './split-props';\n\ntype StyledComponentType<Tag extends ElementType, Recipe> = ForwardRefExoticComponent<\n  ComponentPropsWithoutRef<Tag> & ComponentVariants<Recipe> & RefAttributes<Element>\n>;\n\nexport type StyledFactory = {\n  <Tag extends ElementType, const V extends VariantDefinitions>(\n    tag: Tag,\n    config: ComponentConfigInput<V>,\n  ): StyledComponentType<Tag, ComponentReturn<V>>;\n  <Tag extends ElementType, const V extends VariantDefinitions, const N extends string>(\n    tag: Tag,\n    namespace: N,\n    config: ComponentConfigInput<V>,\n  ): StyledComponentType<Tag, ComponentReturn<V>>;\n  <Tag extends ElementType, const K extends string>(\n    tag: Tag,\n    config: FlatComponentConfigInput<K>,\n  ): StyledComponentType<Tag, FlatComponentReturn<K>>;\n  <Tag extends ElementType, const K extends string, const N extends string>(\n    tag: Tag,\n    namespace: N,\n    config: FlatComponentConfigInput<K>,\n  ): StyledComponentType<Tag, FlatComponentReturn<K>>;\n};\n\ntype RecipeFactory = StylesApi['component'];\n\n/** Accepts `createTypeStyles()` (preferred) or a lower-level `createStyles()` instance. */\nexport type StyledApi = Pick<TypeStylesApi, 'recipe'> | StylesApi;\n\nfunction resolveRecipeFactory(api: StyledApi): RecipeFactory {\n  if ('recipe' in api) return api.recipe;\n  return api.component;\n}\n\nfunction resolveStyledArgs(\n  tag: ElementType,\n  configOrNamespace:\n    | string\n    | ComponentConfigInput<VariantDefinitions>\n    | FlatComponentConfigInput<string>,\n  maybeConfig?: ComponentConfigInput<VariantDefinitions> | FlatComponentConfigInput<string>,\n): {\n  tag: ElementType;\n  namespace: string;\n  config: ComponentConfigInput<VariantDefinitions> | FlatComponentConfigInput<string>;\n} {\n  if (typeof configOrNamespace === 'string' && maybeConfig != null) {\n    return { tag, namespace: configOrNamespace, config: maybeConfig };\n  }\n\n  const namespace = typeof tag === 'string' ? tag : 'styled';\n  return {\n    tag,\n    namespace,\n    config: configOrNamespace as\n      | ComponentConfigInput<VariantDefinitions>\n      | FlatComponentConfigInput<string>,\n  };\n}\n\nexport function createStyled(api: StyledApi): StyledFactory {\n  const makeRecipe = resolveRecipeFactory(api);\n\n  function styled<Tag extends ElementType>(\n    tag: Tag,\n    configOrNamespace:\n      | string\n      | ComponentConfigInput<VariantDefinitions>\n      | FlatComponentConfigInput<string>,\n    maybeConfig?: ComponentConfigInput<VariantDefinitions> | FlatComponentConfigInput<string>,\n  ) {\n    const {\n      tag: element,\n      namespace,\n      config,\n    } = resolveStyledArgs(tag, configOrNamespace, maybeConfig);\n    // `styled` still takes the legacy config object (`base`, `variants`, flat keys).\n    // The engine accepts that shape as `styles`; axes stay on `recipe()` itself.\n    const recipe = (\n      makeRecipe as (input: {\n        name: string;\n        styles: unknown;\n      }) => (selections?: Record<string, unknown>) => { toString(): string }\n    )({\n      name: namespace,\n      styles: config,\n    });\n    const variantKeys = getVariantKeysFromConfig(\n      config as Record<string, unknown> | ((ctx: unknown) => Record<string, unknown>),\n    );\n\n    const Component = forwardRef<Element, ComponentPropsWithoutRef<Tag> & Record<string, unknown>>(\n      function StyledComponent(props, ref) {\n        const { className, ...propsWithoutClassName } = props;\n        const { variants, rest } = splitVariantProps(\n          propsWithoutClassName as Record<string, unknown>,\n          variantKeys,\n        );\n        const mergedClassName = cx(recipe(variants), className);\n        const Element = element;\n\n        return <Element {...rest} ref={ref} className={mergedClassName} />;\n      },\n    );\n\n    Component.displayName = namespace.charAt(0).toUpperCase() + namespace.slice(1);\n\n    return Component;\n  }\n\n  return styled as StyledFactory;\n}\n"],"mappings":";;;;;;;;AAAA,MAAM,uBAAuB,IAAI,IAAI;CACnC;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAgB,kBACd,OACA,aAIA;CACA,MAAM,WAAoC,CAAC;CAC3C,MAAM,OAAO,EAAE,GAAG,MAAM;CAExB,KAAK,MAAM,OAAO,aAChB,IAAI,OAAO,MAAM;EACf,SAAS,OAAO,KAAK;EACrB,OAAO,KAAK;CACd;CAGF,OAAO,KAAK;CACZ,OAAO,KAAK;CAEZ,OAAO;EACL;EACM;CACR;AACF;AAEA,SAAgB,yBACd,QACmB;CACnB,IAAI,OAAO,WAAW,YACpB,OAAO,CAAC;CAGV,IAAI,cAAc,UAAU,OAAO,YAAY,OAAO,OAAO,aAAa,UACxE,OAAO,OAAO,KAAK,OAAO,QAAQ;CAGpC,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,QAAQ,QAAQ,CAAC,qBAAqB,IAAI,GAAG,CAAC;AAC3E;;;ACIA,SAAS,qBAAqB,KAA+B;CAC3D,IAAI,YAAY,KAAK,OAAO,IAAI;CAChC,OAAO,IAAI;AACb;AAEA,SAAS,kBACP,KACA,mBAIA,aAKA;CACA,IAAI,OAAO,sBAAsB,YAAY,eAAe,MAC1D,OAAO;EAAE;EAAK,WAAW;EAAmB,QAAQ;CAAY;CAIlE,OAAO;EACL;EACA,WAHgB,OAAO,QAAQ,WAAW,MAAM;EAIhD,QAAQ;CAGV;AACF;AAEA,SAAgB,aAAa,KAA+B;CAC1D,MAAM,aAAa,qBAAqB,GAAG;CAE3C,SAAS,OACP,KACA,mBAIA,aACA;EACA,MAAM,EACJ,KAAK,SACL,WACA,WACE,kBAAkB,KAAK,mBAAmB,WAAW;EAGzD,MAAM,SACJ,WAIA;GACA,MAAM;GACN,QAAQ;EACV,CAAC;EACD,MAAM,cAAc,yBAClB,MACF;EAEA,MAAM,aAAA,GAAYA,MAAAA,WAAAA,CAChB,SAAS,gBAAgB,OAAO,KAAK;GACnC,MAAM,EAAE,WAAW,GAAG,0BAA0B;GAChD,MAAM,EAAE,UAAU,SAAS,kBACzB,uBACA,WACF;GACA,MAAM,mBAAA,GAAkBC,WAAAA,GAAAA,CAAG,OAAO,QAAQ,GAAG,SAAS;GAGtD,QAAO,GAAA,kBAAA,IAAA,CAACC,SAAD;IAAS,GAAI;IAAW;IAAK,WAAW;GAAkB,CAAA;EACnE,CACF;EAEA,UAAU,cAAc,UAAU,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,UAAU,MAAM,CAAC;EAE7E,OAAO;CACT;CAEA,OAAO;AACT"}