import React from 'react'; import type { CSSInterpolation, CSSObject, TokenType } from '@ant-design/cssinjs'; import { useStyleRegister } from '@ant-design/cssinjs'; import type { ComponentTokenKey, GlobalTokenWithComponent, TokenMap, TokenMapKey, UseComponentStyleResult } from '../interface'; import type AbstractCalculator from './calc/calculator'; import type { UseCSP } from '../hooks/useCSP'; import type { UsePrefix } from '../hooks/usePrefix'; import type { UseToken } from '../hooks/useToken'; type LayerConfig = Parameters[0]['layer']; export interface StyleInfo { hashId: string; prefixCls: string; rootPrefixCls: string; iconPrefixCls: string; } export type CSSUtil = { calc: (number: any) => AbstractCalculator; max: (...values: (number | string)[]) => number | string; min: (...values: (number | string)[]) => number | string; }; export type TokenWithCommonCls = T & { /** Wrap component class with `.` prefix */ componentCls: string; /** Origin prefix which do not have `.` prefix */ prefixCls: string; /** Wrap icon class with `.` prefix */ iconCls: string; /** Wrap ant prefixCls class with `.` prefix */ antCls: string; } & CSSUtil; export type FullToken> = TokenWithCommonCls>; export type GenStyleFn> = (token: FullToken, info: StyleInfo) => CSSInterpolation; export type GetDefaultTokenFn> = (token: AliasToken & Partial) => CompTokenMap[C]; export type GetDefaultToken> = null | CompTokenMap[C] | GetDefaultTokenFn; export interface SubStyleComponentProps { prefixCls: string; rootCls?: string; } export type CSSVarRegisterProps = { rootCls: string; component: string; cssVar: { prefix?: string; key?: string; }; }; type GetResetStylesConfig = { prefix: ReturnType; csp: ReturnType; }; export type GetResetStyles = (token: AliasToken, config?: GetResetStylesConfig) => CSSInterpolation; export type GetCompUnitless = >(component: C | [C, string]) => Partial, boolean>>; declare function genStyleUtils(config: { usePrefix: UsePrefix; useToken: UseToken; useCSP?: UseCSP; getResetStyles?: GetResetStyles; getCommonStyle?: (token: AliasToken, componentPrefixCls: string, rootCls?: string, resetFont?: boolean) => CSSObject; getCompUnitless?: GetCompUnitless; layer?: LayerConfig; }): { genStyleHooks: >(component: C | [C, string], styleFn: GenStyleFn, getDefaultToken?: GetDefaultToken, options?: { resetStyle?: boolean; resetFont?: boolean; deprecatedTokens?: [keyof Exclude[C], undefined>, keyof Exclude[C], undefined>][]; /** * Component tokens that do not need unit. */ unitless?: Partial[C], undefined>, boolean>>; /** * Only use component style in client side. Ignore in SSR. */ clientOnly?: boolean; /** * Set order of component style. * @default -999 */ order?: number; /** * Whether generate styles * @default true */ injectStyle?: boolean; }) => (prefixCls: string, rootCls?: string) => readonly [(node: React.ReactElement) => React.ReactElement, string, string]; genSubStyleComponent: >(componentName: C_1 | [C_1, string], styleFn: GenStyleFn, getDefaultToken?: GetDefaultToken, options?: { resetStyle?: boolean; resetFont?: boolean; deprecatedTokens?: [keyof Exclude[C_1], undefined>, keyof Exclude[C_1], undefined>][]; /** * Only use component style in client side. Ignore in SSR. */ clientOnly?: boolean; /** * Set order of component style. Default is -999. */ order?: number; injectStyle?: boolean; unitless?: Partial[C_1], undefined>, boolean>>; }) => React.FunctionComponent; genComponentStyleHook: >(componentName: C_2 | [C_2, string], styleFn: GenStyleFn, getDefaultToken?: GetDefaultToken, options?: { resetStyle?: boolean; resetFont?: boolean; deprecatedTokens?: [keyof Exclude[C_2], undefined>, keyof Exclude[C_2], undefined>][]; /** * Only use component style in client side. Ignore in SSR. */ clientOnly?: boolean; /** * Set order of component style. Default is -999. */ order?: number; injectStyle?: boolean; unitless?: Partial[C_2], undefined>, boolean>>; }) => (prefixCls: string, rootCls?: string) => UseComponentStyleResult; }; export default genStyleUtils;