@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
1 lines • 2.72 kB
Source Map (JSON)
{"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"}