{"version":3,"file":"factory.mjs","sources":["../../../src/core/factory/factory.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport type { RaikouThemeComponent } from '../RaikouProvider';\nimport type { ClassNames, PartialVarsResolver, Styles } from '../styles-api';\n\nexport type DataAttributes = Record<`data-${string}`, any>;\n\nexport interface FactoryPayload {\n  props: Record<string, any>;\n  ctx?: any;\n  ref?: any;\n  stylesNames?: string;\n  vars?: any;\n  variant?: string;\n  staticComponents?: Record<string, any>;\n  // Compound components cannot have classNames, styles and vars on RaikouProvider\n  compound?: boolean;\n}\n\nexport interface ExtendCompoundComponent<Payload extends FactoryPayload> {\n  defaultProps?: Partial<Payload['props']> & DataAttributes;\n}\n\nexport interface ExtendsRootComponent<Payload extends FactoryPayload> {\n  defaultProps?: Partial<Payload['props']> & DataAttributes;\n  classNames?: ClassNames<Payload>;\n  styles?: Styles<Payload>;\n  vars?: PartialVarsResolver<Payload>;\n}\n\nexport type ExtendComponent<Payload extends FactoryPayload> = Payload['compound'] extends true\n  ? ExtendCompoundComponent<Payload>\n  : ExtendsRootComponent<Payload>;\n\nexport type StaticComponents<Input> =\n  Input extends Record<string, any> ? Input : Record<string, never>;\n\nexport interface ThemeExtend<Payload extends FactoryPayload> {\n  extend: (input: ExtendComponent<Payload>) => RaikouThemeComponent;\n}\n\nexport type ComponentClasses<Payload extends FactoryPayload> = {\n  classes: Payload['stylesNames'] extends string ? Record<string, string> : never;\n};\n\nexport type RaikouComponentStaticProperties<Payload extends FactoryPayload> = ThemeExtend<Payload> &\n  ComponentClasses<Payload> &\n  StaticComponents<Payload['staticComponents']> &\n  FactoryComponentWithProps<Payload>;\n\nexport type FactoryComponentWithProps<Payload extends FactoryPayload> = {\n  withProps: (props: Partial<Payload['props']>) => React.ForwardRefExoticComponent<\n    Payload['props'] &\n      React.RefAttributes<Payload['ref']> & {\n        component?: any;\n        renderRoot?: (props: Record<string, any>) => React.ReactNode;\n      }\n  >;\n};\n\nexport type RaikouComponent<Payload extends FactoryPayload> = React.ForwardRefExoticComponent<\n  Payload['props'] &\n    React.RefAttributes<Payload['ref']> & {\n      component?: any;\n      renderRoot?: (props: Record<string, any>) => React.ReactNode;\n    }\n> &\n  RaikouComponentStaticProperties<Payload>;\n\nexport function identity<T>(value: T): T {\n  return value;\n}\n\nexport function getWithProps<T, Props>(Component: T): (props: Partial<Props>) => T {\n  const _Component = Component as any;\n  return (fixedProps: any) => {\n    const Extended = forwardRef((props, ref) => (\n      <_Component {...fixedProps} {...props} ref={ref as any} />\n    )) as any;\n    Extended.extend = _Component.extend;\n    Extended.displayName = `WithProps(${_Component.displayName})`;\n    return Extended;\n  };\n}\n\nexport function factory<Payload extends FactoryPayload>(\n  ui: React.ForwardRefRenderFunction<Payload['ref'], Payload['props']>\n) {\n  const Component = forwardRef(ui) as any;\n\n  Component.extend = identity as any;\n  Component.withProps = (fixedProps: any) => {\n    const Extended = forwardRef((props, ref) => (\n      <Component {...fixedProps} {...props} ref={ref as any} />\n    )) as any;\n    Extended.extend = Component.extend;\n    Extended.displayName = `WithProps(${Component.displayName})`;\n    return Extended;\n  };\n\n  return Component as RaikouComponent<Payload>;\n}\n"],"names":[],"mappings":";;;AAoEO,SAAS,SAAY,KAAa,EAAA;AACvC,EAAO,OAAA,KAAA;AACT;AAEO,SAAS,aAAuB,SAA4C,EAAA;AACjF,EAAA,MAAM,UAAa,GAAA,SAAA;AACnB,EAAA,OAAO,CAAC,UAAoB,KAAA;AAC1B,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,CAAC,KAAA,EAAO,GAClC,qBAAA,GAAA,CAAC,UAAY,EAAA,EAAA,GAAG,UAAa,EAAA,GAAG,KAAO,EAAA,GAAA,EAAiB,CACzD,CAAA;AACD,IAAA,QAAA,CAAS,SAAS,UAAW,CAAA,MAAA;AAC7B,IAAS,QAAA,CAAA,WAAA,GAAc,CAAa,UAAA,EAAA,UAAA,CAAW,WAAW,CAAA,CAAA,CAAA;AAC1D,IAAO,OAAA,QAAA;AAAA,GACT;AACF;AAEO,SAAS,QACd,EACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAY,WAAW,EAAE,CAAA;AAE/B,EAAA,SAAA,CAAU,MAAS,GAAA,QAAA;AACnB,EAAU,SAAA,CAAA,SAAA,GAAY,CAAC,UAAoB,KAAA;AACzC,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,CAAC,KAAA,EAAO,GAClC,qBAAA,GAAA,CAAC,SAAW,EAAA,EAAA,GAAG,UAAa,EAAA,GAAG,KAAO,EAAA,GAAA,EAAiB,CACxD,CAAA;AACD,IAAA,QAAA,CAAS,SAAS,SAAU,CAAA,MAAA;AAC5B,IAAS,QAAA,CAAA,WAAA,GAAc,CAAa,UAAA,EAAA,SAAA,CAAU,WAAW,CAAA,CAAA,CAAA;AACzD,IAAO,OAAA,QAAA;AAAA,GACT;AAEA,EAAO,OAAA,SAAA;AACT;;;;"}