{"version":3,"file":"polymorphic-factory.cjs","sources":["../../../src/core/factory/polymorphic-factory.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { PolymorphicComponentProps } from './create-polymorphic-component';\nimport {\n  ComponentClasses,\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: React.ForwardRefRenderFunction<Payload['defaultRef'], Payload['props']>\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    PolymorphicComponentWithProps<Payload> &\n    StaticComponents<Payload['staticComponents']>;\n\n  const Component = forwardRef(ui) as unknown as PolymorphicComponent;\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  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  PolymorphicComponentWithProps<Payload> &\n  StaticComponents<Payload['staticComponents']>;\n"],"names":["forwardRef","jsx","identity"],"mappings":"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"}