// import type { CSSObject } from '@ant-design/cssinjs';
// import { Keyframes } from '@ant-design/cssinjs';
//
// import { resetComponent } from '../../style';
// import type { GlobalToken } from '../../theme';
// import type { FullToken, GenerateStyle } from '../../theme/internal';
// import { genPresetColor, mergeToken } from '../../theme/internal';
// import type { GenStyleFn } from '../../theme/util/genComponentStyleHook';
//
// export default function genComponentStyleHook<ComponentName extends OverrideComponent>(
//   componentName: ComponentName | [ComponentName, string],
//   styleFn: GenStyleFn<ComponentName>,
//   getDefaultToken?:
//     | null
//     | OverrideTokenWithoutDerivative[ComponentName]
//     | ((token: GlobalToken) => OverrideTokenWithoutDerivative[ComponentName]),
//   options: {
//     resetStyle?: boolean;
//     // Deprecated token key map [["oldTokenKey", "newTokenKey"], ["oldTokenKey", "newTokenKey"]]
//     deprecatedTokens?: [ComponentTokenKey<ComponentName>, ComponentTokenKey<ComponentName>][];
//     /**
//      * Only use component style in client side. Ignore in SSR.
//      */
//     clientOnly?: boolean;
//     /**
//      * Set order of component style. Default is -999.
//      */
//     order?: number;
//   } = {},
// ) {
//   const cells = (Array.isArray(componentName) ? componentName : [componentName, componentName]) as [
//     ComponentName,
//     string,
//   ];
//
//   const [component] = cells;
//   const concatComponent = cells.join('-');
//
//   return (prefixCls: string): UseComponentStyleResult => {
//     const [theme, token, hashId] = useToken();
//     const { getPrefixCls, iconPrefixCls, csp } = useContext(ConfigContext);
//     const rootPrefixCls = getPrefixCls();
//
//     // Shared config
//     const sharedConfig: Omit<Parameters<typeof useStyleRegister>[0], 'path'> = {
//       theme,
//       token,
//       hashId,
//       nonce: () => csp?.nonce!,
//       clientOnly: options.clientOnly,
//
//       // antd is always at top of styles
//       order: options.order || -999,
//     };
//
//     // Generate style for all a tags in antd component.
//     useStyleRegister(
//       { ...sharedConfig, clientOnly: false, path: ['Shared', rootPrefixCls] },
//       () => [
//         {
//           // Link
//           '&': genLinkStyle(token),
//         },
//       ],
//     );
//
//     // Generate style for icons
//     useResetIconStyle(iconPrefixCls, csp);
//
//     return [
//       useStyleRegister(
//         { ...sharedConfig, path: [concatComponent, prefixCls, iconPrefixCls] },
//         () => {
//           const { token: proxyToken, flush } = statisticToken(token);
//
//           const customComponentToken = { ...(token[component] as ComponentToken<ComponentName>) };
//           if (options.deprecatedTokens) {
//             const { deprecatedTokens } = options;
//             deprecatedTokens.forEach(([oldTokenKey, newTokenKey]) => {
//               if (process.env.NODE_ENV !== 'production') {
//                 warning(
//                   !customComponentToken?.[oldTokenKey],
//                   `The token '${String(oldTokenKey)}' of ${component} had deprecated, use '${String(
//                     newTokenKey,
//                   )}' instead.`,
//                 );
//               }
//
//               // Should wrap with `if` clause, or there will be `undefined` in object.
//               if (customComponentToken?.[oldTokenKey] || customComponentToken?.[newTokenKey]) {
//                 customComponentToken[newTokenKey] ??= customComponentToken?.[oldTokenKey];
//               }
//             });
//           }
//           const defaultComponentToken =
//             typeof getDefaultToken === 'function'
//               ? getDefaultToken(mergeToken(proxyToken, customComponentToken ?? {}))
//               : getDefaultToken;
//
//           const mergedComponentToken = { ...defaultComponentToken, ...customComponentToken };
//
//           const componentCls = `.${prefixCls}`;
//           const mergedToken = mergeToken<
//             TokenWithCommonCls<GlobalTokenWithComponent<OverrideComponent>>
//             >(
//             proxyToken,
//             {
//               componentCls,
//               prefixCls,
//               iconCls: `.${iconPrefixCls}`,
//               antCls: `.${rootPrefixCls}`,
//             },
//             mergedComponentToken,
//           );
//
//           const styleInterpolation = styleFn(mergedToken as unknown as FullToken<ComponentName>, {
//             hashId,
//             prefixCls,
//             rootPrefixCls,
//             iconPrefixCls,
//             overrideComponentToken: customComponentToken as any,
//           });
//           flush(component, mergedComponentToken);
//           return [
//             options.resetStyle === false ? null : genCommonStyle(mergedToken, prefixCls),
//             styleInterpolation,
//           ];
//         },
//       ),
//       hashId,
//     ];
//   };
// }
"use strict";