UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

1 lines 4.05 kB
{"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"}