{"version":3,"file":"polymorphic-factory.cjs","names":["identity"],"sources":["../../../src/core/factory/polymorphic-factory.tsx"],"sourcesContent":["import { PolymorphicComponentProps } from './create-polymorphic-component';\nimport {\n  ComponentClasses,\n  ComponentVariablesResolver,\n  FactoryPayload,\n  identity,\n  StaticComponents,\n  ThemeExtend,\n} from './factory';\n\nexport interface PolymorphicFactoryPayload extends FactoryPayload {\n  defaultComponent: any;\n  defaultRef: any;\n}\n\nexport type PolymorphicComponentWithProps<Payload extends PolymorphicFactoryPayload> = {\n  withProps: <C = Payload['defaultComponent']>(\n    fixedProps: PolymorphicComponentProps<C, Payload['props']>\n  ) => <L = C>(props: PolymorphicComponentProps<L, Payload['props']>) => React.ReactElement;\n};\n\nexport function polymorphicFactory<Payload extends PolymorphicFactoryPayload>(\n  ui: (props: Payload['props'] & { ref?: React.Ref<any> }) => React.ReactNode\n) {\n  type ComponentProps<C> = PolymorphicComponentProps<C, Payload['props']>;\n\n  type _PolymorphicComponent = <C = Payload['defaultComponent']>(\n    props: ComponentProps<C>\n  ) => React.ReactElement;\n\n  type ComponentProperties = Omit<React.FunctionComponent<ComponentProps<any>>, never>;\n\n  type PolymorphicComponent = _PolymorphicComponent &\n    ComponentProperties &\n    ThemeExtend<Payload> &\n    ComponentClasses<Payload> &\n    ComponentVariablesResolver<Payload> &\n    PolymorphicComponentWithProps<Payload> &\n    StaticComponents<Payload['staticComponents']>;\n\n  const Component = ui as unknown as PolymorphicComponent;\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  Component.extend = identity as any;\n\n  return Component as PolymorphicComponent;\n}\n\nexport type MantinePolymorphicComponent<Payload extends PolymorphicFactoryPayload> = (<\n  C = Payload['defaultComponent'],\n>(\n  props: PolymorphicComponentProps<C, Payload['props']>\n) => React.ReactElement) &\n  Omit<React.FunctionComponent<PolymorphicComponentProps<any, Payload['props']>>, never> &\n  ThemeExtend<Payload> &\n  ComponentClasses<Payload> &\n  ComponentVariablesResolver<Payload> &\n  PolymorphicComponentWithProps<Payload> &\n  StaticComponents<Payload['staticComponents']>;\n"],"mappings":";;;;;AAqBA,SAAgB,mBACd,IACA;CAiBA,MAAM,YAAY;AAClB,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,WAAU,SAASA,gBAAAA;AAEnB,QAAO"}