{"version":3,"file":"factory.cjs","names":[],"sources":["../../../src/core/factory/factory.tsx"],"sourcesContent":["import type { MantineThemeComponent } from '../MantineProvider';\nimport type { ClassNames, PartialVarsResolver, Styles, VarsResolver } 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\n  // Compound components cannot have classNames, styles and vars on MantineProvider\n  compound?: boolean;\n\n  // Component signature, used only for generic components\n  signature?: any;\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 & { component?: any };\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>) => MantineThemeComponent;\n}\n\nexport type ComponentClasses<Payload extends FactoryPayload> = {\n  classes: Payload['stylesNames'] extends string ? Record<string, string> : never;\n};\n\nexport type MantineComponentStaticProperties<Payload extends FactoryPayload> =\n  ThemeExtend<Payload> &\n    ComponentClasses<Payload> &\n    StaticComponents<Payload['staticComponents']> &\n    ComponentVariablesResolver<Payload> &\n    FactoryComponentWithProps<Payload>;\n\nexport interface PlaceholderPolymorphicProps {\n  component?: any;\n  renderRoot?: (props: Record<string, any>) => React.ReactNode;\n}\n\nexport type FactoryComponentWithProps<Payload extends FactoryPayload> = {\n  withProps: (\n    props: Partial<Payload['props']>\n  ) => React.NamedExoticComponent<\n    Payload['props'] & React.RefAttributes<Payload['ref']> & PlaceholderPolymorphicProps\n  >;\n};\n\nexport type ComponentVariablesResolver<Payload extends FactoryPayload> =\n  Payload['vars'] extends Record<string, any> ? { varsResolver: VarsResolver<Payload> } : {};\n\nexport type MantineComponent<Payload extends FactoryPayload> = React.NamedExoticComponent<\n  Payload['props'] &\n    React.RefAttributes<Payload['ref']> & {\n      component?: any;\n      renderRoot?: (props: Record<string, any>) => React.ReactNode;\n    }\n> &\n  MantineComponentStaticProperties<Payload>;\n\nexport function identity<T>(value: T): T {\n  return value;\n}\n\nexport function factory<Payload extends FactoryPayload>(\n  ui: (props: Payload['props'] & { ref?: React.Ref<Payload['ref']> }) => React.ReactNode\n) {\n  const Component = ui as any;\n  Component.extend = identity as any;\n  Component.withProps = (fixedProps: any) => {\n    const Extended = (props: any) => <Component {...fixedProps} {...props} />;\n    Extended.extend = Component.extend;\n    Extended.displayName = `WithProps(${Component.displayName})`;\n    return Extended;\n  };\n\n  return Component as MantineComponent<Payload>;\n}\n\nexport function genericFactory<Payload extends FactoryPayload>(ui: Payload['signature']) {\n  return factory(ui as any) as Payload['signature'] &\n    MantineComponentStaticProperties<Payload> & { displayName?: string };\n}\n"],"mappings":";;;;AA+EA,SAAgB,SAAY,OAAa;AACvC,QAAO;;AAGT,SAAgB,QACd,IACA;CACA,MAAM,YAAY;AAClB,WAAU,SAAS;AACnB,WAAU,aAAa,eAAoB;EACzC,MAAM,YAAY,UAAe,iBAAA,GAAA,kBAAA,KAAC,WAAD;GAAW,GAAI;GAAY,GAAI;GAAS,CAAA;AACzE,WAAS,SAAS,UAAU;AAC5B,WAAS,cAAc,aAAa,UAAU,YAAY;AAC1D,SAAO;;AAGT,QAAO;;AAGT,SAAgB,eAA+C,IAA0B;AACvF,QAAO,QAAQ,GAAU"}