genStyleUtils.d.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import React from 'react';
  2. import type { CSSInterpolation, CSSObject, TokenType } from '@ant-design/cssinjs';
  3. import { useStyleRegister } from '@ant-design/cssinjs';
  4. import type { ComponentTokenKey, GlobalTokenWithComponent, TokenMap, TokenMapKey, UseComponentStyleResult } from '../interface';
  5. import type AbstractCalculator from './calc/calculator';
  6. import type { UseCSP } from '../hooks/useCSP';
  7. import type { UsePrefix } from '../hooks/usePrefix';
  8. import type { UseToken } from '../hooks/useToken';
  9. type LayerConfig = Parameters<typeof useStyleRegister>[0]['layer'];
  10. export interface StyleInfo {
  11. hashId: string;
  12. prefixCls: string;
  13. rootPrefixCls: string;
  14. iconPrefixCls: string;
  15. }
  16. export type CSSUtil = {
  17. calc: (number: any) => AbstractCalculator;
  18. max: (...values: (number | string)[]) => number | string;
  19. min: (...values: (number | string)[]) => number | string;
  20. };
  21. export type TokenWithCommonCls<T> = T & {
  22. /** Wrap component class with `.` prefix */
  23. componentCls: string;
  24. /** Origin prefix which do not have `.` prefix */
  25. prefixCls: string;
  26. /** Wrap icon class with `.` prefix */
  27. iconCls: string;
  28. /** Wrap ant prefixCls class with `.` prefix */
  29. antCls: string;
  30. } & CSSUtil;
  31. export type FullToken<CompTokenMap extends TokenMap, AliasToken extends TokenType, C extends TokenMapKey<CompTokenMap>> = TokenWithCommonCls<GlobalTokenWithComponent<CompTokenMap, AliasToken, C>>;
  32. export type GenStyleFn<CompTokenMap extends TokenMap, AliasToken extends TokenType, C extends TokenMapKey<CompTokenMap>> = (token: FullToken<CompTokenMap, AliasToken, C>, info: StyleInfo) => CSSInterpolation;
  33. export type GetDefaultTokenFn<CompTokenMap extends TokenMap, AliasToken extends TokenType, C extends TokenMapKey<CompTokenMap>> = (token: AliasToken & Partial<CompTokenMap[C]>) => CompTokenMap[C];
  34. export type GetDefaultToken<CompTokenMap extends TokenMap, AliasToken extends TokenType, C extends TokenMapKey<CompTokenMap>> = null | CompTokenMap[C] | GetDefaultTokenFn<CompTokenMap, AliasToken, C>;
  35. export interface SubStyleComponentProps {
  36. prefixCls: string;
  37. rootCls?: string;
  38. }
  39. export type CSSVarRegisterProps = {
  40. rootCls: string;
  41. component: string;
  42. cssVar: {
  43. prefix?: string;
  44. key?: string;
  45. };
  46. };
  47. type GetResetStylesConfig = {
  48. prefix: ReturnType<UsePrefix>;
  49. csp: ReturnType<UseCSP>;
  50. };
  51. export type GetResetStyles<AliasToken extends TokenType> = (token: AliasToken, config?: GetResetStylesConfig) => CSSInterpolation;
  52. export type GetCompUnitless<CompTokenMap extends TokenMap, AliasToken extends TokenType> = <C extends TokenMapKey<CompTokenMap>>(component: C | [C, string]) => Partial<Record<ComponentTokenKey<CompTokenMap, AliasToken, C>, boolean>>;
  53. declare function genStyleUtils<CompTokenMap extends TokenMap, AliasToken extends TokenType, DesignToken extends TokenType>(config: {
  54. usePrefix: UsePrefix;
  55. useToken: UseToken<CompTokenMap, AliasToken, DesignToken>;
  56. useCSP?: UseCSP;
  57. getResetStyles?: GetResetStyles<AliasToken>;
  58. getCommonStyle?: (token: AliasToken, componentPrefixCls: string, rootCls?: string, resetFont?: boolean) => CSSObject;
  59. getCompUnitless?: GetCompUnitless<CompTokenMap, AliasToken>;
  60. layer?: LayerConfig;
  61. }): {
  62. genStyleHooks: <C extends TokenMapKey<CompTokenMap>>(component: C | [C, string], styleFn: GenStyleFn<CompTokenMap, AliasToken, C>, getDefaultToken?: GetDefaultToken<CompTokenMap, AliasToken, C>, options?: {
  63. resetStyle?: boolean;
  64. resetFont?: boolean;
  65. deprecatedTokens?: [keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C], undefined>, keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C], undefined>][];
  66. /**
  67. * Component tokens that do not need unit.
  68. */
  69. unitless?: Partial<Record<keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C], undefined>, boolean>>;
  70. /**
  71. * Only use component style in client side. Ignore in SSR.
  72. */
  73. clientOnly?: boolean;
  74. /**
  75. * Set order of component style.
  76. * @default -999
  77. */
  78. order?: number;
  79. /**
  80. * Whether generate styles
  81. * @default true
  82. */
  83. injectStyle?: boolean;
  84. }) => (prefixCls: string, rootCls?: string) => readonly [(node: React.ReactElement) => React.ReactElement, string, string];
  85. genSubStyleComponent: <C_1 extends TokenMapKey<CompTokenMap>>(componentName: C_1 | [C_1, string], styleFn: GenStyleFn<CompTokenMap, AliasToken, C_1>, getDefaultToken?: GetDefaultToken<CompTokenMap, AliasToken, C_1>, options?: {
  86. resetStyle?: boolean;
  87. resetFont?: boolean;
  88. deprecatedTokens?: [keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C_1], undefined>, keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C_1], undefined>][];
  89. /**
  90. * Only use component style in client side. Ignore in SSR.
  91. */
  92. clientOnly?: boolean;
  93. /**
  94. * Set order of component style. Default is -999.
  95. */
  96. order?: number;
  97. injectStyle?: boolean;
  98. unitless?: Partial<Record<keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C_1], undefined>, boolean>>;
  99. }) => React.FunctionComponent<SubStyleComponentProps>;
  100. genComponentStyleHook: <C_2 extends TokenMapKey<CompTokenMap>>(componentName: C_2 | [C_2, string], styleFn: GenStyleFn<CompTokenMap, AliasToken, C_2>, getDefaultToken?: GetDefaultToken<CompTokenMap, AliasToken, C_2>, options?: {
  101. resetStyle?: boolean;
  102. resetFont?: boolean;
  103. deprecatedTokens?: [keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C_2], undefined>, keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C_2], undefined>][];
  104. /**
  105. * Only use component style in client side. Ignore in SSR.
  106. */
  107. clientOnly?: boolean;
  108. /**
  109. * Set order of component style. Default is -999.
  110. */
  111. order?: number;
  112. injectStyle?: boolean;
  113. unitless?: Partial<Record<keyof Exclude<import("../interface").OverrideTokenMap<CompTokenMap, AliasToken>[C_2], undefined>, boolean>>;
  114. }) => (prefixCls: string, rootCls?: string) => UseComponentStyleResult;
  115. };
  116. export default genStyleUtils;