@996-design/996-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +35 -0
- package/README.md +31 -0
- package/dist/cjs/index.cjs +4228 -0
- package/dist/cjs/index.cjs.map +41 -0
- package/dist/cjs/legacy-index.cjs +17297 -0
- package/dist/cjs/legacy-index.cjs.map +96 -0
- package/dist/cjs/pro/index.cjs +8544 -0
- package/dist/cjs/pro/index.cjs.map +35 -0
- package/dist/esm/index.js +4063 -0
- package/dist/esm/index.js.map +41 -0
- package/dist/esm/legacy-index.js +17294 -0
- package/dist/esm/legacy-index.js.map +96 -0
- package/dist/esm/pro/index.js +8554 -0
- package/dist/esm/pro/index.js.map +35 -0
- package/dist/styles.css +5816 -0
- package/dist/theme.css +601 -0
- package/dist/types/ConfigProvider.d.ts +195 -0
- package/dist/types/antd-theme.d.ts +12 -0
- package/dist/types/components/Alert.d.ts +51 -0
- package/dist/types/components/Avatar.d.ts +44 -0
- package/dist/types/components/Badge.d.ts +31 -0
- package/dist/types/components/Breadcrumb.d.ts +45 -0
- package/dist/types/components/Button.d.ts +42 -0
- package/dist/types/components/ButtonGroup.d.ts +13 -0
- package/dist/types/components/Card.d.ts +55 -0
- package/dist/types/components/Carousel.d.ts +70 -0
- package/dist/types/components/Checkbox.d.ts +43 -0
- package/dist/types/components/Collapse.d.ts +23 -0
- package/dist/types/components/ColorPicker.d.ts +143 -0
- package/dist/types/components/DataDisplayPrimitives.d.ts +205 -0
- package/dist/types/components/DataEntryPrimitives.d.ts +454 -0
- package/dist/types/components/Divider.d.ts +24 -0
- package/dist/types/components/Drawer.d.ts +68 -0
- package/dist/types/components/Dropdown.d.ts +41 -0
- package/dist/types/components/Empty.d.ts +14 -0
- package/dist/types/components/EmptyState.d.ts +6 -0
- package/dist/types/components/FeedbackPrimitives.d.ts +102 -0
- package/dist/types/components/Form.d.ts +67 -0
- package/dist/types/components/GameCover.d.ts +8 -0
- package/dist/types/components/Grid.d.ts +50 -0
- package/dist/types/components/Icon.d.ts +13 -0
- package/dist/types/components/IconButton.d.ts +14 -0
- package/dist/types/components/Input.d.ts +110 -0
- package/dist/types/components/InputNumber.d.ts +29 -0
- package/dist/types/components/LayoutPrimitives.d.ts +130 -0
- package/dist/types/components/List.d.ts +64 -0
- package/dist/types/components/Masonry.d.ts +43 -0
- package/dist/types/components/MenuList.d.ts +24 -0
- package/dist/types/components/Message.d.ts +58 -0
- package/dist/types/components/MessageToast.d.ts +27 -0
- package/dist/types/components/Modal.d.ts +123 -0
- package/dist/types/components/NavigationPrimitives.d.ts +73 -0
- package/dist/types/components/OtherPrimitives.d.ts +36 -0
- package/dist/types/components/Pagination.d.ts +18 -0
- package/dist/types/components/Panel.d.ts +8 -0
- package/dist/types/components/Popconfirm.d.ts +18 -0
- package/dist/types/components/Popover.d.ts +10 -0
- package/dist/types/components/PriceText.d.ts +9 -0
- package/dist/types/components/Progress.d.ts +57 -0
- package/dist/types/components/ProgressBar.d.ts +8 -0
- package/dist/types/components/ProgressButton.d.ts +9 -0
- package/dist/types/components/Radio.d.ts +67 -0
- package/dist/types/components/Rate.d.ts +17 -0
- package/dist/types/components/Result.d.ts +11 -0
- package/dist/types/components/SectionHeader.d.ts +11 -0
- package/dist/types/components/Segmented.d.ts +41 -0
- package/dist/types/components/SegmentedTabs.d.ts +42 -0
- package/dist/types/components/SelectInput.d.ts +33 -0
- package/dist/types/components/Skeleton.d.ts +54 -0
- package/dist/types/components/Slider.d.ts +48 -0
- package/dist/types/components/Spin.d.ts +21 -0
- package/dist/types/components/Splitter.d.ts +7 -0
- package/dist/types/components/StatCard.d.ts +10 -0
- package/dist/types/components/Statistic.d.ts +48 -0
- package/dist/types/components/StatusItem.d.ts +12 -0
- package/dist/types/components/Steps.d.ts +40 -0
- package/dist/types/components/Switch.d.ts +41 -0
- package/dist/types/components/Table.d.ts +61 -0
- package/dist/types/components/Tabs.d.ts +50 -0
- package/dist/types/components/Tag.d.ts +52 -0
- package/dist/types/components/TagPill.d.ts +7 -0
- package/dist/types/components/Tooltip.d.ts +64 -0
- package/dist/types/components/Typography.d.ts +374 -0
- package/dist/types/components/affix/utils.d.ts +10 -0
- package/dist/types/components/feedback/FloatButton.d.ts +51 -0
- package/dist/types/components/feedback/Watermark.d.ts +33 -0
- package/dist/types/components/feedback/globalHolder.d.ts +17 -0
- package/dist/types/components/form/statusContext.d.ts +18 -0
- package/dist/types/components/form/statusContext.type-smoke.d.ts +24 -0
- package/dist/types/components/splitter/Panel.d.ts +6 -0
- package/dist/types/components/splitter/SplitBar.d.ts +32 -0
- package/dist/types/components/splitter/interface.d.ts +89 -0
- package/dist/types/components/splitter/sizeUtil.d.ts +5 -0
- package/dist/types/components/splitter/useItems.d.ts +3 -0
- package/dist/types/components/splitter/useResizable.d.ts +9 -0
- package/dist/types/components/splitter/useResize.d.ts +9 -0
- package/dist/types/components/splitter/useSizes.d.ts +11 -0
- package/dist/types/components/table/columnState.d.ts +36 -0
- package/dist/types/components/table/pagination.d.ts +34 -0
- package/dist/types/components/table/selection.d.ts +23 -0
- package/dist/types/components/table/types.d.ts +163 -0
- package/dist/types/hooks/useReducedMotion.d.ts +1 -0
- package/dist/types/index.d.ts +44 -0
- package/dist/types/legacy-index.d.ts +136 -0
- package/dist/types/pro/index.d.ts +17 -0
- package/dist/types/tokens.d.ts +266 -0
- package/dist/types/utils/cn.d.ts +3 -0
- package/dist/types/utils/slots.d.ts +5 -0
- package/package.json +126 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ConfigProvider.tsx", "../../src/utils/cn.ts", "../../src/tokens.ts", "../../src/hooks/useReducedMotion.ts", "../../src/components/Alert.tsx", "../../src/components/Avatar.tsx", "../../src/components/Popover.tsx", "../../src/components/Tooltip.tsx", "../../src/utils/slots.ts", "../../src/components/Badge.tsx", "../../src/components/DataEntryPrimitives.tsx", "../../src/components/Button.tsx", "../../src/components/Icon.tsx", "../../src/components/Input.tsx", "../../src/components/form/statusContext.ts", "../../src/components/DataDisplayPrimitives.tsx", "../../src/components/Grid.tsx", "../../src/components/Steps.tsx", "../../src/components/Progress.tsx", "../../src/components/OtherPrimitives.tsx", "../../src/components/affix/utils.ts", "../../src/components/FeedbackPrimitives.tsx", "../../src/components/Message.tsx", "../../src/components/MessageToast.tsx", "../../src/components/feedback/globalHolder.tsx", "../../src/components/Modal.tsx", "../../src/components/feedback/FloatButton.tsx", "../../src/components/feedback/Watermark.tsx", "../../src/components/NavigationPrimitives.tsx", "../../src/components/LayoutPrimitives.tsx", "../../src/components/Splitter.tsx", "../../src/components/splitter/Panel.tsx", "../../src/components/splitter/SplitBar.tsx", "../../src/components/splitter/useItems.ts", "../../src/components/splitter/useResizable.ts", "../../src/components/splitter/useResize.ts", "../../src/components/splitter/sizeUtil.ts", "../../src/components/splitter/useSizes.ts", "../../src/components/Masonry.tsx", "../../src/components/Breadcrumb.tsx", "../../src/components/Dropdown.tsx", "../../src/components/ButtonGroup.tsx", "../../src/components/Card.tsx", "../../src/components/Skeleton.tsx", "../../src/components/Tabs.tsx", "../../src/components/Carousel.tsx", "../../src/components/Checkbox.tsx", "../../src/components/Collapse.tsx", "../../src/components/ColorPicker.tsx", "../../src/components/Segmented.tsx", "../../src/components/Divider.tsx", "../../src/components/Drawer.tsx", "../../src/components/Empty.tsx", "../../src/components/EmptyState.tsx", "../../src/components/Form.tsx", "../../src/components/GameCover.tsx", "../../src/components/IconButton.tsx", "../../src/components/InputNumber.tsx", "../../src/components/List.tsx", "../../src/components/Pagination.tsx", "../../src/components/Spin.tsx", "../../src/components/MenuList.tsx", "../../src/components/Panel.tsx", "../../src/components/Popconfirm.tsx", "../../src/components/PriceText.tsx", "../../src/components/ProgressBar.tsx", "../../src/components/ProgressButton.tsx", "../../src/components/Radio.tsx", "../../src/components/Rate.tsx", "../../src/components/Result.tsx", "../../src/components/Typography.tsx", "../../src/components/SectionHeader.tsx", "../../src/components/SelectInput.tsx", "../../src/components/SegmentedTabs.tsx", "../../src/components/Slider.tsx", "../../src/components/StatCard.tsx", "../../src/components/Statistic.tsx", "../../src/components/StatusItem.tsx", "../../src/components/Switch.tsx", "../../src/components/Table.tsx", "../../src/components/table/columnState.tsx", "../../src/components/table/selection.tsx", "../../src/components/table/types.ts", "../../src/components/table/pagination.tsx", "../../src/components/Tag.tsx", "../../src/components/TagPill.tsx", "../../src/legacy-index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { CSSProperties, FC, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useId, useMemo } from \"react\";\nimport { cn } from \"./utils/cn\";\n\nexport type UiSurface = \"web\" | \"admin\";\nexport type AntdSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type UiSize = AntdSize | \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type UiVisualSize = \"sm\" | \"md\" | \"lg\";\nexport type UiMotionConfig = boolean | { readonly disabled?: boolean };\nexport type DirectionType = \"ltr\" | \"rtl\";\n\nexport const Variants = [\"outlined\", \"borderless\", \"filled\", \"underlined\"] as const;\nexport type Variant = (typeof Variants)[number];\n\nexport const defaultPrefixCls = \"hj\";\nexport const defaultIconPrefixCls = \"hjicon\";\n\nexport type PopupContainer = HTMLElement;\nexport type TargetContainer = HTMLElement | Window | ShadowRoot;\nexport type GetPrefixCls = (suffixCls?: string, customizePrefixCls?: string) => string;\nexport type GetPopupContainer = (triggerNode?: HTMLElement) => PopupContainer;\nexport type GetTargetContainer = () => TargetContainer;\nexport type RenderEmptyHandler = (componentName?: string) => ReactNode;\nexport type Locale = Readonly<Record<string, unknown>>;\n\nexport interface ThemeCssVarConfig {\n readonly key?: string;\n readonly prefix?: string;\n}\n\nexport type ThemeToken = Readonly<Record<string, unknown>>;\nexport type ThemeComponentTokens = Readonly<Record<string, ThemeToken>>;\n\nexport interface ThemeConfig {\n readonly algorithm?: unknown;\n readonly components?: ThemeComponentTokens;\n readonly cssVar?: boolean | ThemeCssVarConfig;\n readonly hashed?: boolean;\n readonly inherit?: boolean;\n readonly token?: ThemeToken;\n readonly zeroRuntime?: boolean;\n}\n\nexport interface ComponentDefaults {\n readonly [componentName: string]: object | undefined;\n readonly Button?: {\n readonly size?: UiSize;\n readonly disabled?: boolean;\n readonly motion?: UiMotionConfig;\n };\n readonly Input?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n };\n readonly SelectInput?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n readonly popupOffset?: number;\n };\n readonly Select?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n };\n readonly AutoComplete?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n };\n readonly Cascader?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n };\n readonly TreeSelect?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n };\n readonly Mentions?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n };\n readonly MenuList?: {\n readonly disabled?: boolean;\n readonly variant?: \"menu\" | \"user\" | \"dropdown\";\n };\n readonly SegmentedTabs?: {\n readonly size?: UiSize;\n readonly disabled?: boolean;\n readonly motion?: UiMotionConfig;\n };\n readonly Segmented?: {\n readonly size?: UiSize;\n readonly disabled?: boolean;\n };\n readonly Modal?: {\n readonly motion?: UiMotionConfig;\n readonly width?: number | string;\n };\n readonly Tooltip?: {\n readonly arrow?: boolean;\n readonly disabled?: boolean;\n readonly placement?:\n | \"topLeft\"\n | \"top\"\n | \"topRight\"\n | \"bottomLeft\"\n | \"bottom\"\n | \"bottomRight\"\n | \"leftTop\"\n | \"left\"\n | \"leftBottom\"\n | \"rightTop\"\n | \"right\"\n | \"rightBottom\";\n readonly trigger?: \"hover\" | \"focus\" | \"click\" | readonly (\"hover\" | \"focus\" | \"click\")[];\n readonly variant?: \"dark\" | \"light\";\n };\n readonly MessageToast?: {\n readonly showIcon?: boolean;\n readonly variant?: \"dark\" | \"light\";\n };\n readonly Checkbox?: {\n readonly disabled?: boolean;\n };\n readonly Switch?: {\n readonly disabled?: boolean;\n };\n readonly AdminButton?: {\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly disabled?: boolean;\n readonly motion?: UiMotionConfig;\n };\n readonly AdminInput?: {\n readonly disabled?: boolean;\n };\n readonly DataTable?: {\n readonly pageSize?: number;\n };\n}\n\nexport interface UiConfig {\n readonly componentDisabled: boolean;\n readonly componentSize: AntdSize;\n readonly components: ComponentDefaults;\n readonly direction?: DirectionType;\n readonly disabled: boolean;\n readonly getPopupContainer?: GetPopupContainer;\n readonly getPrefixCls: GetPrefixCls;\n readonly getTargetContainer?: GetTargetContainer;\n readonly iconPrefixCls: string;\n readonly locale?: Locale;\n readonly motion: UiMotionConfig;\n readonly popupMatchSelectWidth?: boolean | number;\n readonly prefixCls: string;\n readonly renderEmpty?: RenderEmptyHandler;\n readonly rootPrefixCls: string;\n readonly size: UiVisualSize;\n readonly surface: UiSurface;\n readonly theme?: ThemeConfig;\n readonly variant?: Variant;\n readonly virtual?: boolean;\n}\n\nexport type ConfigConsumerProps = UiConfig;\n\nexport interface ConfigProviderProps {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly componentDisabled?: boolean;\n readonly componentSize?: AntdSize;\n readonly components?: ComponentDefaults;\n readonly direction?: DirectionType;\n readonly disabled?: boolean;\n /** @deprecated Use `popupMatchSelectWidth`. */\n readonly dropdownMatchSelectWidth?: boolean | number;\n readonly getPopupContainer?: GetPopupContainer;\n readonly getTargetContainer?: GetTargetContainer;\n readonly iconPrefixCls?: string;\n readonly locale?: Locale;\n readonly motion?: UiMotionConfig;\n readonly popupMatchSelectWidth?: boolean | number;\n readonly prefixCls?: string;\n readonly renderEmpty?: RenderEmptyHandler;\n readonly size?: Exclude<UiSize, \"xs\">;\n readonly style?: CSSProperties;\n readonly surface?: UiSurface;\n readonly theme?: ThemeConfig;\n readonly variant?: Variant;\n readonly virtual?: boolean;\n}\n\nexport type HolderRender = (children: ReactNode) => ReactNode;\n\nexport interface GlobalConfigProps {\n readonly holderRender?: HolderRender;\n readonly iconPrefixCls?: string;\n readonly prefixCls?: string;\n readonly theme?: ThemeConfig;\n}\n\nexport interface GlobalConfig {\n readonly getIconPrefixCls: () => string;\n readonly getPrefixCls: GetPrefixCls;\n readonly getRootPrefixCls: () => string;\n readonly getTheme: () => ThemeConfig | undefined;\n readonly holderRender?: HolderRender;\n}\n\nconst defaultGetPrefixCls: GetPrefixCls = (suffixCls, customizePrefixCls) => {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? `${defaultPrefixCls}-${suffixCls}` : defaultPrefixCls;\n};\n\nexport const defaultConfig: UiConfig = {\n componentDisabled: false,\n componentSize: \"medium\",\n components: {},\n disabled: false,\n getPrefixCls: defaultGetPrefixCls,\n iconPrefixCls: defaultIconPrefixCls,\n motion: true,\n prefixCls: defaultPrefixCls,\n rootPrefixCls: defaultPrefixCls,\n size: \"md\",\n surface: \"web\",\n};\n\nexport const ConfigContext = createContext<UiConfig>(defaultConfig);\nexport const { Consumer: ConfigConsumer } = ConfigContext;\n\nlet globalPrefixCls: string | undefined;\nlet globalIconPrefixCls: string | undefined;\nlet globalTheme: ThemeConfig | undefined;\nlet globalHolderRender: HolderRender | undefined;\n\nfunction getGlobalPrefixCls() {\n return globalPrefixCls ?? defaultPrefixCls;\n}\n\nfunction getGlobalIconPrefixCls() {\n return globalIconPrefixCls ?? defaultIconPrefixCls;\n}\n\nfunction setGlobalConfig(props: GlobalConfigProps) {\n if (props.prefixCls !== undefined) globalPrefixCls = props.prefixCls;\n if (props.iconPrefixCls !== undefined) globalIconPrefixCls = props.iconPrefixCls;\n if (Object.prototype.hasOwnProperty.call(props, \"holderRender\")) {\n globalHolderRender = props.holderRender;\n }\n if (props.theme) globalTheme = props.theme;\n}\n\nexport function globalConfig(): GlobalConfig {\n const prefixCls = getGlobalPrefixCls();\n return {\n getIconPrefixCls: getGlobalIconPrefixCls,\n getPrefixCls: (suffixCls, customizePrefixCls) => {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? `${prefixCls}-${suffixCls}` : prefixCls;\n },\n getRootPrefixCls: () => prefixCls,\n getTheme: () => globalTheme,\n holderRender: globalHolderRender,\n };\n}\n\nexport function isMotionDisabled(motion: UiMotionConfig | undefined) {\n return motion === false || (typeof motion === \"object\" && motion.disabled === true);\n}\n\nexport function normalizeUiSize(\n size: Exclude<UiSize, \"xs\"> | undefined,\n fallback: UiVisualSize = \"md\",\n): UiVisualSize {\n if (size === \"small\" || size === \"sm\") return \"sm\";\n if (size === \"large\" || size === \"lg\") return \"lg\";\n if (size === \"medium\" || size === \"middle\" || size === \"md\") return \"md\";\n return fallback;\n}\n\nfunction normalizeComponentSize(\n size: Exclude<UiSize, \"xs\"> | undefined,\n fallback: AntdSize,\n): AntdSize {\n if (size === \"small\" || size === \"sm\") return \"small\";\n if (size === \"large\" || size === \"lg\") return \"large\";\n if (size === \"middle\") return \"middle\";\n if (size === \"medium\" || size === \"md\") return \"medium\";\n return fallback;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction mergeObjectMap<T extends object>(parent: T, current: T | undefined): T {\n if (!current) return parent;\n\n const merged: Record<string, unknown> = {\n ...(parent as Record<string, unknown>),\n };\n for (const [name, value] of Object.entries(current)) {\n const parentValue = merged[name];\n merged[name] = isRecord(parentValue) && isRecord(value) ? { ...parentValue, ...value } : value;\n }\n return merged as T;\n}\n\nfunction normalizeLocale(locale: Locale | undefined): Locale | undefined {\n if (!locale) return undefined;\n const defaultLocale = locale.default;\n return isRecord(defaultLocale) && defaultLocale.locale ? defaultLocale : locale;\n}\n\nfunction normalizeCssVarConfig(\n theme: ThemeConfig,\n parentTheme: ThemeConfig | undefined,\n prefixCls: string,\n generatedKey: string,\n): ThemeConfig[\"cssVar\"] {\n if (theme.cssVar === false) return false;\n\n const inherited = parentTheme?.cssVar;\n const effective = theme.cssVar ?? inherited;\n if (!effective) return effective;\n\n const parentConfig = isRecord(inherited) ? inherited : {};\n const currentConfig = isRecord(theme.cssVar) ? theme.cssVar : {};\n return {\n ...parentConfig,\n ...currentConfig,\n key: typeof currentConfig.key === \"string\" ? currentConfig.key : generatedKey,\n prefix:\n typeof currentConfig.prefix === \"string\"\n ? currentConfig.prefix\n : typeof parentConfig.prefix === \"string\"\n ? parentConfig.prefix\n : prefixCls,\n };\n}\n\nfunction mergeTheme(\n theme: ThemeConfig | undefined,\n parentTheme: ThemeConfig | undefined,\n prefixCls: string,\n generatedKey: string,\n): ThemeConfig | undefined {\n if (!theme) return parentTheme;\n\n const inheritedTheme = theme.inherit === false ? undefined : parentTheme;\n const mergedComponents = mergeObjectMap<ThemeComponentTokens>(\n inheritedTheme?.components ?? {},\n theme.components,\n );\n const cssVar = normalizeCssVarConfig(theme, parentTheme, prefixCls, generatedKey);\n\n return {\n ...inheritedTheme,\n ...theme,\n components: mergedComponents,\n cssVar,\n hashed: theme.hashed ?? parentTheme?.hashed,\n token: {\n ...inheritedTheme?.token,\n ...theme.token,\n },\n };\n}\n\nconst tokenCssVariableAliases: Readonly<Record<string, readonly string[]>> = {\n borderRadius: [\"--hj-radius-md\"],\n borderRadiusLG: [\"--hj-radius-lg\"],\n borderRadiusSM: [\"--hj-radius-sm\"],\n borderRadiusXS: [\"--hj-radius-xs\"],\n boxShadowSecondary: [\"--hj-shadow-lg\"],\n colorBgBase: [\"--hj-color-web-page\"],\n colorBgContainer: [\"--hj-color-web-surface\"],\n colorBgElevated: [\"--hj-color-web-surface-raised\"],\n colorBorder: [\"--hj-color-web-border\"],\n colorDanger: [\"--hj-color-danger\"],\n colorError: [\"--hj-color-danger\"],\n colorForeground: [\"--hj-color-web-foreground\"],\n colorInfo: [\"--hj-color-info\"],\n colorMuted: [\"--hj-color-web-muted\"],\n colorPrimary: [\"--hj-color-brand\"],\n colorPrimaryActive: [\"--hj-color-brand-active\"],\n colorPrimaryHover: [\"--hj-color-brand-hover\"],\n colorSuccess: [\"--hj-color-success\"],\n colorSurface: [\"--hj-color-web-surface\"],\n colorSurfaceElevated: [\"--hj-color-web-surface-raised\"],\n colorText: [\"--hj-color-web-foreground\"],\n colorTextSecondary: [\"--hj-color-web-muted\"],\n colorWarning: [\"--hj-color-warning\"],\n motionDurationMid: [\"--hj-motion-duration-normal\"],\n shadowPopup: [\"--hj-shadow-lg\"],\n zDropdown: [\"--hj-z-dropdown\"],\n zModal: [\"--hj-z-modal\"],\n zToast: [\"--hj-z-toast\"],\n};\n\nfunction toKebabCase(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1-$2\")\n .replace(/[^a-zA-Z0-9_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .toLowerCase();\n}\n\nfunction formatTokenValue(name: string, value: string | number) {\n if (typeof value !== \"number\") return value;\n if (/duration/i.test(name)) return `${value}ms`;\n if (\n /radius/i.test(name) ||\n /(fontSize|width|height|size|padding|margin|gap|offset|inset)$/i.test(name)\n ) {\n return `${value}px`;\n }\n return String(value);\n}\n\nfunction createThemeStyle(theme: ThemeConfig | undefined): CSSProperties {\n if (!theme) return {};\n\n const style: Record<string, string> = {};\n const cssVarConfig = isRecord(theme.cssVar) ? theme.cssVar : undefined;\n const customPrefix =\n typeof cssVarConfig?.prefix === \"string\" ? toKebabCase(cssVarConfig.prefix) : undefined;\n\n const assignToken = (name: string, value: unknown, namespace?: string) => {\n if (typeof value !== \"string\" && typeof value !== \"number\") return;\n const kebabName = toKebabCase(name);\n if (!kebabName) return;\n\n const formattedValue = formatTokenValue(name, value);\n const componentPrefix = namespace ? `${toKebabCase(namespace)}-` : \"\";\n style[`--hj-${componentPrefix}${kebabName}`] = formattedValue;\n\n if (customPrefix) {\n style[`--${customPrefix}-${componentPrefix}${kebabName}`] = formattedValue;\n }\n\n if (!namespace) {\n for (const variableName of tokenCssVariableAliases[name] ?? []) {\n style[variableName] = formattedValue;\n }\n }\n };\n\n for (const [name, value] of Object.entries(theme.token ?? {})) {\n assignToken(name, value);\n }\n for (const [componentName, componentToken] of Object.entries(theme.components ?? {})) {\n for (const [name, value] of Object.entries(componentToken)) {\n if (name !== \"algorithm\") assignToken(name, value, componentName);\n }\n }\n\n return style as CSSProperties;\n}\n\nconst InternalConfigProvider: FC<ConfigProviderProps> = ({\n children,\n className,\n componentDisabled,\n componentSize,\n components,\n direction,\n disabled,\n dropdownMatchSelectWidth,\n getPopupContainer,\n getTargetContainer,\n iconPrefixCls,\n locale,\n motion,\n popupMatchSelectWidth,\n prefixCls,\n renderEmpty,\n size,\n style,\n surface,\n theme,\n variant,\n virtual,\n}) => {\n const parent = useContext(ConfigContext);\n const themeId = useId().replace(/:/g, \"\");\n const rootPrefixCls = prefixCls ?? parent.getPrefixCls();\n const getPrefixCls = useCallback<GetPrefixCls>(\n (suffixCls, customizePrefixCls) => {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? `${rootPrefixCls}-${suffixCls}` : rootPrefixCls;\n },\n [rootPrefixCls],\n );\n const localSize = componentSize ?? size;\n const mergedTheme = useMemo(\n () => mergeTheme(theme, parent.theme, rootPrefixCls, `css-var-${themeId}`),\n [parent.theme, rootPrefixCls, theme, themeId],\n );\n const mergedComponents = useMemo(\n () => mergeObjectMap(parent.components, components),\n [components, parent.components],\n );\n\n const value = useMemo<UiConfig>(() => {\n const mergedDisabled = componentDisabled ?? disabled ?? parent.disabled;\n return {\n componentDisabled: mergedDisabled,\n componentSize: normalizeComponentSize(localSize, parent.componentSize),\n components: mergedComponents,\n direction: direction ?? parent.direction,\n disabled: mergedDisabled,\n getPopupContainer: getPopupContainer ?? parent.getPopupContainer,\n getPrefixCls,\n getTargetContainer: getTargetContainer ?? parent.getTargetContainer,\n iconPrefixCls: iconPrefixCls ?? parent.iconPrefixCls,\n locale: normalizeLocale(locale) ?? parent.locale,\n motion: motion ?? parent.motion,\n popupMatchSelectWidth:\n popupMatchSelectWidth ?? dropdownMatchSelectWidth ?? parent.popupMatchSelectWidth,\n prefixCls: rootPrefixCls,\n renderEmpty: renderEmpty ?? parent.renderEmpty,\n rootPrefixCls,\n size: normalizeUiSize(localSize, parent.size),\n surface: surface ?? parent.surface,\n theme: mergedTheme,\n variant: variant ?? parent.variant,\n virtual: virtual ?? parent.virtual,\n };\n }, [\n componentDisabled,\n direction,\n disabled,\n dropdownMatchSelectWidth,\n getPopupContainer,\n getPrefixCls,\n getTargetContainer,\n iconPrefixCls,\n localSize,\n locale,\n mergedComponents,\n mergedTheme,\n motion,\n parent,\n popupMatchSelectWidth,\n renderEmpty,\n rootPrefixCls,\n surface,\n variant,\n virtual,\n ]);\n const rootClass = value.surface === \"admin\" ? \"huaijiu-admin-root\" : \"huaijiu-web-root\";\n const cssVarClassName =\n isRecord(value.theme?.cssVar) && typeof value.theme.cssVar.key === \"string\"\n ? value.theme.cssVar.key\n : undefined;\n const themeStyle = useMemo(() => createThemeStyle(value.theme), [value.theme]);\n\n return (\n <ConfigContext.Provider value={value}>\n <div\n className={cn(\n rootClass,\n value.direction === \"rtl\" && `${value.rootPrefixCls}-rtl`,\n isMotionDisabled(value.motion) && \"huaijiu-motion-disabled\",\n cssVarClassName,\n className,\n )}\n dir={value.direction}\n style={{ ...themeStyle, ...style }}\n >\n {children}\n </div>\n </ConfigContext.Provider>\n );\n};\n\nexport function useConfig(): UiConfig {\n return useContext(ConfigContext);\n}\n\nexport interface ConfigProviderType extends FC<ConfigProviderProps> {\n readonly ConfigConsumer: typeof ConfigConsumer;\n readonly ConfigContext: typeof ConfigContext;\n readonly config: typeof setGlobalConfig;\n readonly useConfig: typeof useConfig;\n}\n\nexport const ConfigProvider: ConfigProviderType = Object.assign(InternalConfigProvider, {\n ConfigConsumer,\n ConfigContext,\n config: setGlobalConfig,\n useConfig,\n});\n\nConfigProvider.displayName = \"ConfigProvider\";\n\nexport default ConfigProvider;\n",
|
|
6
|
+
"type ClassValue = string | false | null | undefined;\n\nexport function cn(...values: readonly ClassValue[]) {\n return values.filter(Boolean).join(\" \");\n}\n",
|
|
7
|
+
"export const themeToken = {\n color: {\n brand: \"var(--hj-color-brand)\",\n brandHover: \"var(--hj-color-brand-hover)\",\n brandActive: \"var(--hj-color-brand-active)\",\n brandWeak: \"var(--hj-color-brand-weak)\",\n success: \"var(--hj-color-success)\",\n warning: \"var(--hj-color-warning)\",\n info: \"var(--hj-color-info)\",\n danger: \"var(--hj-color-danger)\",\n dangerSoft: \"var(--hj-color-danger-soft)\",\n purchase: \"var(--hj-color-purchase)\",\n webPage: \"var(--hj-color-web-page)\",\n webBg: \"var(--hj-color-web-bg)\",\n webSurface: \"var(--hj-color-web-surface)\",\n webControl: \"var(--hj-color-web-control)\",\n webSurfaceRaised: \"var(--hj-color-web-surface-raised)\",\n webSurfaceActive: \"var(--hj-color-web-surface-active)\",\n webBorder: \"var(--hj-color-web-border)\",\n webBorderStrong: \"var(--hj-color-web-border-strong)\",\n webForeground: \"var(--hj-color-web-foreground)\",\n webForeground80: \"var(--hj-color-web-foreground-80)\",\n webMuted: \"var(--hj-color-web-muted)\",\n webSubtle: \"var(--hj-color-web-subtle)\",\n webDisabled: \"var(--hj-color-web-disabled)\",\n adminBrand: \"var(--hj-color-admin-brand)\",\n adminBrandHover: \"var(--hj-color-admin-brand-hover)\",\n adminBg: \"var(--hj-color-admin-bg)\",\n adminSurface: \"var(--hj-color-admin-surface)\",\n adminSurfaceMuted: \"var(--hj-color-admin-surface-muted)\",\n adminBorder: \"var(--hj-color-admin-border)\",\n adminBorderStrong: \"var(--hj-color-admin-border-strong)\",\n adminForeground: \"var(--hj-color-admin-foreground)\",\n adminMuted: \"var(--hj-color-admin-muted)\",\n },\n radius: {\n xs: \"var(--hj-radius-xs)\",\n sm: \"var(--hj-radius-sm)\",\n md: \"var(--hj-radius-md)\",\n lg: \"var(--hj-radius-lg)\",\n },\n button: {\n fontFamily: \"var(--hj-button-font-family)\",\n fontWeight: \"var(--hj-button-font-weight)\",\n lightFontFamily: \"var(--hj-button-light-font-family)\",\n lightFontWeight: \"var(--hj-button-light-font-weight)\",\n heightXs: \"var(--hj-button-xs-height)\",\n heightSm: \"var(--hj-button-sm-height)\",\n heightMd: \"var(--hj-button-md-height)\",\n heightLg: \"var(--hj-button-lg-height)\",\n minWidthXs: \"var(--hj-button-xs-min-width)\",\n minWidthSm: \"var(--hj-button-sm-min-width)\",\n minWidthMd: \"var(--hj-button-md-min-width)\",\n minWidthLg: \"var(--hj-button-lg-min-width)\",\n lineHeightXs: \"var(--hj-button-xs-line-height)\",\n lineHeightSm: \"var(--hj-button-sm-line-height)\",\n lineHeightMd: \"var(--hj-button-md-line-height)\",\n lineHeightLg: \"var(--hj-button-lg-line-height)\",\n primaryBg: \"var(--hj-button-primary-bg)\",\n primaryBgHover: \"var(--hj-button-primary-bg-hover)\",\n primaryBgActive: \"var(--hj-button-primary-bg-active)\",\n defaultBg: \"var(--hj-button-default-bg)\",\n defaultBgHover: \"var(--hj-button-default-bg-hover)\",\n defaultBgActive: \"var(--hj-button-default-bg-active)\",\n lightBg: \"var(--hj-button-light-bg)\",\n lightBgHover: \"var(--hj-button-light-bg-hover)\",\n lightBgActive: \"var(--hj-button-light-bg-active)\",\n lightBorder: \"var(--hj-button-light-border)\",\n lightBorderHover: \"var(--hj-button-light-border-hover)\",\n lightForeground: \"var(--hj-button-light-fg)\",\n translucentBg: \"var(--hj-button-translucent-bg)\",\n translucentBgHover: \"var(--hj-button-translucent-bg-hover)\",\n translucentBgActive: \"var(--hj-button-translucent-bg-active)\",\n toggleBg: \"var(--hj-button-toggle-bg)\",\n toggleBgHover: \"var(--hj-button-toggle-bg-hover)\",\n toggleBgActive: \"var(--hj-button-toggle-bg-active)\",\n textForeground: \"var(--hj-button-text-fg)\",\n textDefaultForeground: \"var(--hj-button-text-default-fg)\",\n groupSeparator: \"var(--hj-button-group-separator)\",\n },\n iconButton: {\n defaultBorder: \"var(--hj-icon-button-default-border)\",\n defaultBackground: \"var(--hj-icon-button-default-bg)\",\n defaultForeground: \"var(--hj-icon-button-default-fg)\",\n defaultBorderHover: \"var(--hj-icon-button-default-border-hover)\",\n defaultForegroundHover: \"var(--hj-icon-button-default-fg-hover)\",\n primaryBorder: \"var(--hj-icon-button-primary-border)\",\n primaryBackground: \"var(--hj-icon-button-primary-bg)\",\n primaryBackgroundHover: \"var(--hj-icon-button-primary-bg-hover)\",\n primaryForeground: \"var(--hj-icon-button-primary-fg)\",\n ghostBorder: \"var(--hj-icon-button-ghost-border)\",\n ghostBackground: \"var(--hj-icon-button-ghost-bg)\",\n ghostForeground: \"var(--hj-icon-button-ghost-fg)\",\n ghostForegroundHover: \"var(--hj-icon-button-ghost-fg-hover)\",\n selectedBorder: \"var(--hj-icon-button-selected-border)\",\n selectedBackground: \"var(--hj-icon-button-selected-bg)\",\n selectedForeground: \"var(--hj-icon-button-selected-fg)\",\n },\n input: {\n heightSm: \"var(--hj-input-height-sm)\",\n heightMd: \"var(--hj-input-height-md)\",\n heightLg: \"var(--hj-input-height-lg)\",\n paddingX: \"var(--hj-input-padding-x)\",\n gap: \"var(--hj-input-gap)\",\n fontSize: \"var(--hj-input-font-size)\",\n lineHeight: \"var(--hj-input-line-height)\",\n radius: \"var(--hj-input-radius)\",\n background: \"var(--hj-input-bg)\",\n backgroundActive: \"var(--hj-input-bg-active)\",\n border: \"var(--hj-input-border)\",\n borderActive: \"var(--hj-input-border-active)\",\n foreground: \"var(--hj-input-fg)\",\n placeholder: \"var(--hj-input-placeholder)\",\n icon: \"var(--hj-input-icon)\",\n clear: \"var(--hj-input-clear)\",\n addon: \"var(--hj-input-addon)\",\n addonBackground: \"var(--hj-input-addon-bg)\",\n addonForeground: \"var(--hj-input-addon-fg)\",\n },\n checkbox: {\n size: \"var(--hj-checkbox-size)\",\n borderWidth: \"var(--hj-checkbox-border-width)\",\n border: \"var(--hj-checkbox-border)\",\n borderHover: \"var(--hj-checkbox-border-hover)\",\n background: \"var(--hj-checkbox-bg)\",\n backgroundChecked: \"var(--hj-checkbox-bg-checked)\",\n icon: \"var(--hj-checkbox-icon)\",\n label: \"var(--hj-checkbox-label)\",\n labelActive: \"var(--hj-checkbox-label-active)\",\n },\n switch: {\n width: \"var(--hj-switch-width)\",\n height: \"var(--hj-switch-height)\",\n padding: \"var(--hj-switch-padding)\",\n thumbSize: \"var(--hj-switch-thumb-size)\",\n background: \"var(--hj-switch-bg)\",\n backgroundChecked: \"var(--hj-switch-bg-checked)\",\n thumbBackground: \"var(--hj-switch-thumb-bg)\",\n },\n skeleton: {\n background: \"var(--hj-skeleton-bg)\",\n highlight: \"var(--hj-skeleton-highlight)\",\n gap: \"var(--hj-skeleton-gap)\",\n rowHeight: \"var(--hj-skeleton-row-height)\",\n rowGap: \"var(--hj-skeleton-row-gap)\",\n titleHeight: \"var(--hj-skeleton-title-height)\",\n titleMargin: \"var(--hj-skeleton-title-margin)\",\n radius: \"var(--hj-skeleton-radius)\",\n radiusSquare: \"var(--hj-skeleton-radius-square)\",\n sizeSm: \"var(--hj-skeleton-size-sm)\",\n sizeMd: \"var(--hj-skeleton-size-md)\",\n sizeLg: \"var(--hj-skeleton-size-lg)\",\n },\n tooltip: {\n radius: \"var(--hj-tooltip-radius)\",\n height: \"var(--hj-tooltip-height)\",\n minWidth: \"var(--hj-tooltip-min-width)\",\n paddingX: \"var(--hj-tooltip-padding-x)\",\n arrowSize: \"var(--hj-tooltip-arrow-size)\",\n gap: \"var(--hj-tooltip-gap)\",\n lightBg: \"var(--hj-tooltip-light-bg)\",\n lightFg: \"var(--hj-tooltip-light-fg)\",\n darkBg: \"var(--hj-tooltip-dark-bg)\",\n darkFg: \"var(--hj-tooltip-dark-fg)\",\n shadow: \"var(--hj-tooltip-shadow)\",\n },\n message: {\n height: \"var(--hj-message-height)\",\n radius: \"var(--hj-message-radius)\",\n paddingX: \"var(--hj-message-padding-x)\",\n gap: \"var(--hj-message-gap)\",\n background: \"var(--hj-message-bg)\",\n foreground: \"var(--hj-message-fg)\",\n lightBackground: \"var(--hj-message-light-bg)\",\n lightForeground: \"var(--hj-message-light-fg)\",\n actionForeground: \"var(--hj-message-action-fg)\",\n closeForeground: \"var(--hj-message-close-fg)\",\n closeForegroundHover: \"var(--hj-message-close-fg-hover)\",\n iconSize: \"var(--hj-message-icon-size)\",\n success: \"var(--hj-message-success)\",\n warning: \"var(--hj-message-warning)\",\n error: \"var(--hj-message-error)\",\n info: \"var(--hj-message-info)\",\n shadow: \"var(--hj-message-shadow)\",\n },\n modal: {\n background: \"var(--hj-modal-bg)\",\n foreground: \"var(--hj-modal-fg)\",\n bodyForeground: \"var(--hj-modal-body-fg)\",\n paddingX: \"var(--hj-modal-padding-x)\",\n paddingY: \"var(--hj-modal-padding-y)\",\n headerHeight: \"var(--hj-modal-header-height)\",\n wrapPaddingY: \"var(--hj-modal-wrap-padding-y)\",\n closeSize: \"var(--hj-modal-close-size)\",\n closeInset: \"var(--hj-modal-close-inset)\",\n maskBackground: \"var(--hj-modal-mask-bg)\",\n radius: \"var(--hj-modal-radius)\",\n shadow: \"var(--hj-modal-shadow)\",\n },\n menu: {\n background: \"var(--hj-menu-bg)\",\n border: \"var(--hj-menu-border)\",\n shadow: \"var(--hj-menu-shadow)\",\n itemBackground: \"var(--hj-menu-item-bg)\",\n itemBackgroundHover: \"var(--hj-menu-item-bg-hover)\",\n itemBackgroundActive: \"var(--hj-menu-item-bg-active)\",\n itemForeground: \"var(--hj-menu-item-fg)\",\n itemForegroundActive: \"var(--hj-menu-item-fg-active)\",\n itemMuted: \"var(--hj-menu-item-muted)\",\n avatarBackground: \"var(--hj-menu-avatar-bg)\",\n avatarForeground: \"var(--hj-menu-avatar-fg)\",\n divider: \"var(--hj-menu-divider)\",\n },\n tabs: {\n lineForeground: \"var(--hj-tabs-line-fg)\",\n lineForegroundHover: \"var(--hj-tabs-line-fg-hover)\",\n lineForegroundActive: \"var(--hj-tabs-line-fg-active)\",\n lineInk: \"var(--hj-tabs-line-ink)\",\n cardBackground: \"var(--hj-tabs-card-bg)\",\n cardBackgroundHover: \"var(--hj-tabs-card-bg-hover)\",\n cardBackgroundActive: \"var(--hj-tabs-card-bg-active)\",\n cardForeground: \"var(--hj-tabs-card-fg)\",\n cardForegroundActive: \"var(--hj-tabs-card-fg-active)\",\n boxedBackground: \"var(--hj-tabs-boxed-bg)\",\n boxedBorder: \"var(--hj-tabs-boxed-border)\",\n boxedItemBorder: \"var(--hj-tabs-boxed-item-border)\",\n boxedForeground: \"var(--hj-tabs-boxed-fg)\",\n boxedForegroundHover: \"var(--hj-tabs-boxed-fg-hover)\",\n boxedForegroundActive: \"var(--hj-tabs-boxed-fg-active)\",\n boxedIndicatorBackground: \"var(--hj-tabs-boxed-indicator-bg)\",\n boxedIndicatorBorder: \"var(--hj-tabs-boxed-indicator-border)\",\n boxedIndicatorShadow: \"var(--hj-tabs-boxed-indicator-shadow)\",\n },\n shadow: {\n sm: \"var(--hj-shadow-sm)\",\n md: \"var(--hj-shadow-md)\",\n lg: \"var(--hj-shadow-lg)\",\n },\n spacing: {\n xs: \"var(--hj-spacing-xs)\",\n sm: \"var(--hj-spacing-sm)\",\n md: \"var(--hj-spacing-md)\",\n lg: \"var(--hj-spacing-lg)\",\n xl: \"var(--hj-spacing-xl)\",\n },\n zIndex: {\n dropdown: \"var(--hj-z-dropdown)\",\n sticky: \"var(--hj-z-sticky)\",\n modal: \"var(--hj-z-modal)\",\n toast: \"var(--hj-z-toast)\",\n },\n motion: {\n durationFast: \"var(--hj-motion-duration-fast)\",\n durationNormal: \"var(--hj-motion-duration-normal)\",\n durationSlow: \"var(--hj-motion-duration-slow)\",\n easeIn: \"var(--hj-motion-ease-in)\",\n easeOut: \"var(--hj-motion-ease-out)\",\n easeInOut: \"var(--hj-motion-ease-in-out)\",\n easeOutCirc: \"var(--hj-motion-ease-out-circ)\",\n easeInOutCirc: \"var(--hj-motion-ease-in-out-circ)\",\n deadline: \"var(--hj-motion-deadline)\",\n },\n} as const;\n\nexport type ThemeToken = typeof themeToken;\nexport type CssVarName = `--hj-${string}`;\n\nexport function cssVar(name: CssVarName, fallback?: string) {\n return fallback ? `var(${name}, ${fallback})` : `var(${name})`;\n}\n",
|
|
8
|
+
"import { useEffect, useState } from \"react\";\n\nexport function useReducedMotion() {\n const [reduced, setReduced] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n const query = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const update = () => setReduced(query.matches);\n update();\n query.addEventListener(\"change\", update);\n return () => query.removeEventListener(\"change\", update);\n }, []);\n\n return reduced;\n}\n",
|
|
9
|
+
"import CSSMotion from \"@rc-component/motion\";\nimport type {\n AriaAttributes,\n ErrorInfo,\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport { PureComponent, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type AlertType = \"success\" | \"info\" | \"warning\" | \"error\";\nexport type AlertVariant = \"outlined\" | \"filled\";\n\nexport interface AlertClosableConfig extends AriaAttributes {\n readonly afterClose?: () => void;\n readonly closeIcon?: ReactNode;\n readonly disabled?: boolean;\n readonly onClose?: MouseEventHandler<HTMLButtonElement>;\n}\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onClose\" | \"title\"> {\n readonly action?: ReactNode;\n readonly afterClose?: () => void;\n readonly banner?: boolean;\n readonly closable?: boolean | AlertClosableConfig;\n readonly closeIcon?: ReactNode;\n readonly closeText?: ReactNode;\n readonly description?: ReactNode;\n readonly icon?: ReactNode;\n /** @deprecated Use `title` instead. */\n readonly message?: ReactNode;\n readonly rootClassName?: string;\n readonly showIcon?: boolean;\n readonly title?: ReactNode;\n readonly type?: AlertType;\n readonly variant?: AlertVariant;\n /** @deprecated Use `closable.onClose` instead. */\n readonly onClose?: MouseEventHandler<HTMLButtonElement>;\n}\n\nexport interface AlertErrorBoundaryProps {\n readonly children?: ReactNode;\n readonly description?: ReactNode;\n readonly id?: string;\n /** @deprecated Use `title` instead. */\n readonly message?: ReactNode;\n readonly title?: ReactNode;\n}\n\ninterface AlertErrorBoundaryState {\n readonly error?: Error;\n readonly info?: ErrorInfo;\n}\n\nconst toneClass: Record<AlertType, string> = {\n success:\n \"border-[color-mix(in_srgb,var(--hj-color-success)_34%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-success)_12%,transparent)] text-[var(--hj-color-web-foreground)]\",\n info: \"border-[color-mix(in_srgb,var(--hj-color-info)_34%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-info)_12%,transparent)] text-[var(--hj-color-web-foreground)]\",\n warning:\n \"border-[color-mix(in_srgb,var(--hj-color-warning)_34%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-warning)_12%,transparent)] text-[var(--hj-color-web-foreground)]\",\n error:\n \"border-[color-mix(in_srgb,var(--hj-color-danger)_34%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-danger)_12%,transparent)] text-[var(--hj-color-web-foreground)]\",\n};\n\nconst iconMap: Record<AlertType, string> = {\n success: \"\\u2713\",\n info: \"i\",\n warning: \"!\",\n error: \"!\",\n};\n\nfunction AlertRoot({\n action,\n afterClose,\n banner = false,\n className = \"\",\n closable = false,\n closeIcon,\n closeText,\n description,\n icon,\n message,\n onClose,\n rootClassName,\n showIcon,\n style,\n title,\n type: customType,\n variant = \"outlined\",\n ...props\n}: AlertProps) {\n const [closed, setClosed] = useState(false);\n const type = customType ?? (banner ? \"warning\" : \"info\");\n const closableConfig = typeof closable === \"object\" ? closable : undefined;\n const isClosable =\n closable === true || closableConfig !== undefined || closeText != null || closeIcon != null;\n const mergedCloseIcon = closableConfig?.closeIcon ?? closeText ?? closeIcon ?? \"\\u00d7\";\n const mergedShowIcon = showIcon ?? banner;\n const mergedTitle = title ?? message;\n\n return (\n <CSSMotion\n motionAppear={false}\n motionEnter={false}\n motionName=\"hj-alert-motion\"\n visible={!closed}\n onLeaveEnd={closableConfig?.afterClose ?? afterClose}\n >\n {({ className: motionClassName, style: motionStyle }, motionRef) => (\n <div\n className={cn(\n \"hj-alert flex items-start gap-3 border px-4 py-3 text-sm leading-5 shadow-[var(--hj-shadow-sm)]\",\n `hj-alert-${type}`,\n `hj-alert-${variant}`,\n banner ? \"hj-alert-banner rounded-none\" : \"rounded-[var(--hj-radius-md)]\",\n variant === \"filled\" && \"border-transparent\",\n toneClass[type],\n rootClassName,\n className,\n motionClassName,\n )}\n ref={motionRef}\n role=\"alert\"\n style={{ ...style, ...motionStyle }}\n {...props}\n >\n {mergedShowIcon ? (\n <span className=\"hj-alert-icon mt-0.5 inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-current text-[10px] font-bold text-[var(--hj-color-web-bg)]\">\n {icon ?? iconMap[type]}\n </span>\n ) : null}\n <div className=\"hj-alert-section min-w-0 flex-1\">\n {mergedTitle != null ? (\n <div className=\"hj-alert-title font-medium\">{mergedTitle}</div>\n ) : null}\n {description != null ? (\n <div className=\"hj-alert-description mt-1 text-[var(--hj-color-web-muted)]\">\n {description}\n </div>\n ) : null}\n </div>\n {action != null ? <div className=\"hj-alert-actions shrink-0\">{action}</div> : null}\n {isClosable ? (\n <button\n aria-label=\"Close\"\n className=\"hj-alert-close inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded text-[var(--hj-color-web-muted)] transition hover:bg-white/5 hover:text-white disabled:cursor-not-allowed disabled:opacity-45\"\n disabled={closableConfig?.disabled}\n onClick={(event) => {\n setClosed(true);\n (closableConfig?.onClose ?? onClose)?.(event);\n }}\n type=\"button\"\n >\n {mergedCloseIcon}\n </button>\n ) : null}\n </div>\n )}\n </CSSMotion>\n );\n}\n\nclass AlertErrorBoundary extends PureComponent<AlertErrorBoundaryProps, AlertErrorBoundaryState> {\n state: AlertErrorBoundaryState = {};\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n this.setState({ error, info });\n }\n\n render() {\n const { children, description, id, message, title } = this.props;\n const { error, info } = this.state;\n if (!error) return children;\n\n return (\n <AlertRoot\n description={\n <pre className=\"m-0 overflow-x-auto text-[0.9em]\">\n {description ?? info?.componentStack}\n </pre>\n }\n id={id}\n title={title ?? message ?? error.toString()}\n type=\"error\"\n />\n );\n }\n}\n\nexport const Alert = Object.assign(AlertRoot, { ErrorBoundary: AlertErrorBoundary });\n",
|
|
10
|
+
"import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { Children, createContext, isValidElement, useContext, useEffect, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Popover, type PopoverProps } from \"./Popover\";\n\nexport type AvatarShape = \"circle\" | \"square\";\nexport type AvatarNamedSize = \"small\" | \"medium\" | \"middle\" | \"default\" | \"large\";\nexport type AvatarResponsiveSize = Partial<\n Record<\"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\", number>\n>;\nexport type AvatarSize = AvatarNamedSize | AvatarResponsiveSize | number;\n\nexport interface AvatarProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"onError\"> {\n readonly alt?: string;\n readonly crossOrigin?: \"\" | \"anonymous\" | \"use-credentials\";\n readonly draggable?: boolean | \"true\" | \"false\";\n readonly gap?: number;\n readonly icon?: ReactNode;\n readonly rootClassName?: string;\n readonly shape?: AvatarShape;\n readonly size?: AvatarSize;\n readonly src?: ReactNode;\n readonly srcSet?: string;\n readonly onError?: () => boolean | undefined;\n}\n\nexport interface AvatarGroupMaxConfig {\n readonly count?: number;\n readonly popover?: Omit<PopoverProps, \"children\" | \"content\">;\n readonly style?: CSSProperties;\n}\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n readonly max?: AvatarGroupMaxConfig;\n /** @deprecated Use `max.count` instead. */\n readonly maxCount?: number;\n /** @deprecated Use `max.popover.placement` instead. */\n readonly maxPopoverPlacement?: PopoverProps[\"placement\"];\n /** @deprecated Use `max.popover.trigger` instead. */\n readonly maxPopoverTrigger?: PopoverProps[\"trigger\"];\n /** @deprecated Use `max.style` instead. */\n readonly maxStyle?: CSSProperties;\n readonly rootClassName?: string;\n readonly shape?: AvatarShape;\n readonly size?: AvatarSize;\n}\n\ninterface AvatarGroupContextValue {\n readonly shape?: AvatarShape;\n readonly size?: AvatarSize;\n}\n\nconst AvatarGroupContext = createContext<AvatarGroupContextValue>({});\n\ninterface AvatarImageProps {\n readonly alt: string;\n readonly crossOrigin?: \"\" | \"anonymous\" | \"use-credentials\";\n readonly draggable?: boolean | \"true\" | \"false\";\n readonly fallback: ReactNode;\n readonly src: string;\n readonly srcSet?: string;\n readonly onError?: () => boolean | undefined;\n}\n\nfunction AvatarImage({\n alt,\n crossOrigin,\n draggable,\n fallback,\n onError,\n src,\n srcSet,\n}: AvatarImageProps) {\n const [imageExists, setImageExists] = useState(true);\n if (!imageExists) return fallback;\n\n return (\n <img\n alt={alt}\n className=\"hj-avatar-image h-full w-full object-cover\"\n crossOrigin={crossOrigin}\n draggable={draggable}\n src={src}\n srcSet={srcSet}\n onError={() => {\n if (onError?.() !== false) setImageExists(false);\n }}\n />\n );\n}\n\nconst responsiveBreakpoints: readonly [keyof AvatarResponsiveSize, number][] = [\n [\"xxl\", 1600],\n [\"xl\", 1200],\n [\"lg\", 992],\n [\"md\", 768],\n [\"sm\", 576],\n [\"xs\", 0],\n];\n\nfunction useViewportWidth() {\n const [width, setWidth] = useState(() => (typeof window === \"undefined\" ? 0 : window.innerWidth));\n\n useEffect(() => {\n const update = () => setWidth(window.innerWidth);\n window.addEventListener(\"resize\", update);\n return () => window.removeEventListener(\"resize\", update);\n }, []);\n\n return width;\n}\n\nfunction resolveResponsiveSize(size: AvatarSize, viewportWidth: number): AvatarNamedSize | number {\n if (typeof size !== \"object\") return size;\n for (const [breakpoint, minWidth] of responsiveBreakpoints) {\n const value = size[breakpoint];\n if (viewportWidth >= minWidth && value !== undefined) return value;\n }\n return 32;\n}\n\nfunction sizeStyle(size: AvatarNamedSize | number): CSSProperties {\n if (typeof size === \"number\")\n return { width: size, height: size, fontSize: Math.max(12, Math.round(size * 0.42)) };\n if (size === \"small\") return { width: 24, height: 24, fontSize: 12 };\n if (size === \"large\") return { width: 40, height: 40, fontSize: 18 };\n return { width: 32, height: 32, fontSize: 14 };\n}\n\nfunction AvatarRoot({\n alt = \"\",\n children,\n className = \"\",\n crossOrigin,\n draggable,\n gap = 4,\n icon,\n onError,\n rootClassName,\n shape,\n size,\n src,\n srcSet,\n style,\n ...props\n}: AvatarProps) {\n const group = useContext(AvatarGroupContext);\n const viewportWidth = useViewportWidth();\n const mergedShape = shape ?? group.shape ?? \"circle\";\n const mergedSize = resolveResponsiveSize(size ?? group.size ?? \"medium\", viewportWidth);\n const fallback = icon ?? (\n <span className=\"hj-avatar-string\" style={{ maxWidth: `calc(100% - ${gap * 2}px)` }}>\n {children}\n </span>\n );\n\n let content: ReactNode;\n if (typeof src === \"string\") {\n content = (\n <AvatarImage\n alt={alt}\n crossOrigin={crossOrigin}\n draggable={draggable}\n fallback={fallback}\n key={src}\n onError={onError}\n src={src}\n srcSet={srcSet}\n />\n );\n } else if (isValidElement(src)) {\n content = src;\n } else {\n content = fallback;\n }\n\n return (\n <span\n className={cn(\n \"hj-avatar inline-flex shrink-0 items-center justify-center overflow-hidden bg-[var(--hj-menu-avatar-bg)] font-medium leading-none text-[var(--hj-menu-avatar-fg)]\",\n `hj-avatar-${mergedShape}`,\n mergedShape === \"circle\" ? \"rounded-full\" : \"rounded-[var(--hj-radius-md)]\",\n rootClassName,\n className,\n )}\n style={{ ...sizeStyle(mergedSize), ...style }}\n {...props}\n >\n {content}\n </span>\n );\n}\n\nfunction AvatarGroup({\n children,\n className,\n max,\n maxCount,\n maxPopoverPlacement,\n maxPopoverTrigger,\n maxStyle,\n rootClassName,\n shape,\n size,\n ...props\n}: AvatarGroupProps) {\n const childList = Children.toArray(children);\n const count = max?.count ?? maxCount;\n const hasOverflow = count !== undefined && count > 0 && count < childList.length;\n const visibleChildren = hasOverflow ? childList.slice(0, count) : childList;\n const hiddenChildren = hasOverflow ? childList.slice(count) : [];\n const overflowAvatar = hasOverflow ? (\n <AvatarRoot style={max?.style ?? maxStyle}>+{hiddenChildren.length}</AvatarRoot>\n ) : null;\n const overflowNode = overflowAvatar ? (\n <Popover\n {...max?.popover}\n content={<div className=\"hj-avatar-group-popover flex flex-wrap gap-2\">{hiddenChildren}</div>}\n placement={max?.popover?.placement ?? maxPopoverPlacement ?? \"top\"}\n trigger={max?.popover?.trigger ?? maxPopoverTrigger ?? \"hover\"}\n >\n {overflowAvatar}\n </Popover>\n ) : null;\n\n return (\n <AvatarGroupContext.Provider value={{ shape, size }}>\n <div\n className={cn(\"hj-avatar-group inline-flex -space-x-2\", rootClassName, className)}\n {...props}\n >\n {visibleChildren}\n {overflowNode}\n </div>\n </AvatarGroupContext.Provider>\n );\n}\n\nexport const Avatar = Object.assign(AvatarRoot, { Group: AvatarGroup });\n",
|
|
11
|
+
"import type { CSSProperties, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Tooltip, type TooltipProps, type TooltipRef } from \"./Tooltip\";\n\ntype PopoverContent = ReactNode | (() => ReactNode);\n\nexport interface PopoverProps extends Omit<TooltipProps, \"maxWidth\" | \"title\" | \"variant\"> {\n readonly content?: PopoverContent;\n readonly overlayStyle?: CSSProperties;\n readonly title?: PopoverContent;\n}\n\nfunction getRenderValue(value: PopoverContent | undefined) {\n return typeof value === \"function\" ? value() : value;\n}\n\nfunction isRenderable(value: ReactNode) {\n return value !== undefined && value !== null && value !== false;\n}\n\nexport const Popover = forwardRef<TooltipRef, PopoverProps>(function Popover(\n { className, content, overlayStyle, styles, title, ...props },\n ref,\n) {\n const titleNode = getRenderValue(title);\n const contentNode = getRenderValue(content);\n const overlayNode =\n isRenderable(titleNode) || isRenderable(contentNode) ? (\n <div className=\"hj-popover-inner\">\n {isRenderable(titleNode) ? <div className=\"hj-popover-title\">{titleNode}</div> : null}\n {isRenderable(contentNode) ? <div className=\"hj-popover-content\">{contentNode}</div> : null}\n </div>\n ) : null;\n\n return (\n <Tooltip\n {...props}\n className={cn(\"hj-popover\", className)}\n maxWidth={320}\n ref={ref}\n styles={{\n ...styles,\n popup: {\n minWidth: 220,\n padding: 0,\n whiteSpace: \"normal\",\n ...overlayStyle,\n ...styles?.popup,\n },\n content: { width: \"100%\", ...styles?.content },\n }}\n title={overlayNode}\n />\n );\n});\n\nPopover.displayName = \"Popover\";\n",
|
|
12
|
+
"import RcTooltip from \"@rc-component/tooltip\";\nimport type { TooltipRef as RcTooltipRef } from \"@rc-component/tooltip\";\nimport type { TooltipProps as RcTooltipProps } from \"@rc-component/tooltip/es/Tooltip\";\nimport { useControlledState } from \"@rc-component/util\";\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { Fragment, cloneElement, forwardRef, isValidElement, useMemo } from \"react\";\nimport { isMotionDisabled, useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type TooltipPlacement =\n | \"topLeft\"\n | \"top\"\n | \"topRight\"\n | \"bottomLeft\"\n | \"bottom\"\n | \"bottomRight\"\n | \"leftTop\"\n | \"left\"\n | \"leftBottom\"\n | \"rightTop\"\n | \"right\"\n | \"rightBottom\";\nexport type TooltipTrigger = \"hover\" | \"focus\" | \"click\" | \"contextMenu\";\n\nexport interface TooltipArrowOptions {\n readonly pointAtCenter?: boolean;\n}\n\nexport interface TooltipAdjustOverflow {\n readonly adjustX?: 0 | 1;\n readonly adjustY?: 0 | 1;\n}\n\nexport type TooltipRef = RcTooltipRef;\n\ntype TooltipSlot = \"root\" | \"trigger\" | \"popup\" | \"arrow\" | \"content\";\n\nexport interface TooltipProps {\n readonly afterOpenChange?: (open: boolean) => void;\n readonly afterVisibleChange?: (open: boolean) => void;\n readonly align?: RcTooltipProps[\"align\"];\n readonly arrow?: boolean | TooltipArrowOptions;\n readonly autoAdjustOverflow?: boolean | TooltipAdjustOverflow;\n readonly builtinPlacements?: RcTooltipProps[\"builtinPlacements\"];\n readonly children: ReactNode;\n readonly className?: string;\n readonly classNames?: SlotClassNames<TooltipSlot>;\n readonly color?: string;\n readonly defaultOpen?: boolean;\n readonly defaultVisible?: boolean;\n readonly disabled?: boolean;\n readonly destroyOnHidden?: boolean;\n readonly destroyTooltipOnHide?: boolean | { readonly keepParent?: boolean };\n readonly forceRender?: boolean;\n readonly fresh?: boolean;\n readonly getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly getTooltipContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly id?: string;\n readonly maxWidth?: number | string;\n readonly motion?: RcTooltipProps[\"motion\"];\n readonly mouseEnterDelay?: number;\n readonly mouseLeaveDelay?: number;\n readonly open?: boolean;\n readonly openClassName?: string;\n readonly overlay?: ReactNode | (() => ReactNode);\n readonly overlayClassName?: string;\n readonly overlayInnerStyle?: CSSProperties;\n readonly overlayStyle?: CSSProperties;\n readonly placement?: TooltipPlacement;\n readonly rootClassName?: string;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<TooltipSlot>;\n readonly title?: ReactNode | (() => ReactNode);\n readonly trigger?: TooltipTrigger | readonly TooltipTrigger[];\n readonly unique?: RcTooltipProps[\"unique\"];\n readonly variant?: \"dark\" | \"light\";\n readonly visible?: boolean;\n readonly zIndex?: number;\n readonly onOpenChange?: (open: boolean) => void;\n readonly onPopupAlign?: RcTooltipProps[\"onPopupAlign\"];\n readonly onVisibleChange?: (open: boolean) => void;\n}\n\nfunction getTooltipChild(children: ReactNode, className?: string): ReactElement {\n if (isValidElement<{ className?: string }>(children) && children.type !== Fragment) {\n if (!className) return children;\n return cloneElement(children, { className: cn(children.props.className, className) });\n }\n return <span className={className}>{children}</span>;\n}\n\nfunction getTooltipPlacements(\n pointAtCenter: boolean,\n autoAdjustOverflow: TooltipProps[\"autoAdjustOverflow\"],\n): NonNullable<RcTooltipProps[\"builtinPlacements\"]> {\n const overflow =\n autoAdjustOverflow === false\n ? { adjustX: 0 as const, adjustY: 0 as const }\n : {\n adjustX:\n typeof autoAdjustOverflow === \"object\"\n ? (autoAdjustOverflow.adjustX ?? 1)\n : (1 as const),\n adjustY:\n typeof autoAdjustOverflow === \"object\"\n ? (autoAdjustOverflow.adjustY ?? 1)\n : (1 as const),\n };\n const cornerOffset = 12;\n\n return {\n top: { points: [\"bc\", \"tc\"], offset: [0, -8], overflow },\n bottom: { points: [\"tc\", \"bc\"], offset: [0, 8], overflow },\n left: { points: [\"cr\", \"cl\"], offset: [-8, 0], overflow },\n right: { points: [\"cl\", \"cr\"], offset: [8, 0], overflow },\n topLeft: pointAtCenter\n ? { points: [\"bl\", \"tc\"], offset: [-cornerOffset, -8], overflow, autoArrow: false }\n : { points: [\"bl\", \"tl\"], offset: [0, -8], overflow, autoArrow: false },\n topRight: pointAtCenter\n ? { points: [\"br\", \"tc\"], offset: [cornerOffset, -8], overflow, autoArrow: false }\n : { points: [\"br\", \"tr\"], offset: [0, -8], overflow, autoArrow: false },\n bottomLeft: pointAtCenter\n ? { points: [\"tl\", \"bc\"], offset: [-cornerOffset, 8], overflow, autoArrow: false }\n : { points: [\"tl\", \"bl\"], offset: [0, 8], overflow, autoArrow: false },\n bottomRight: pointAtCenter\n ? { points: [\"tr\", \"bc\"], offset: [cornerOffset, 8], overflow, autoArrow: false }\n : { points: [\"tr\", \"br\"], offset: [0, 8], overflow, autoArrow: false },\n leftTop: pointAtCenter\n ? { points: [\"tr\", \"cl\"], offset: [-8, -cornerOffset], overflow, autoArrow: false }\n : { points: [\"tr\", \"tl\"], offset: [-8, 0], overflow, autoArrow: false },\n leftBottom: pointAtCenter\n ? { points: [\"br\", \"cl\"], offset: [-8, cornerOffset], overflow, autoArrow: false }\n : { points: [\"br\", \"bl\"], offset: [-8, 0], overflow, autoArrow: false },\n rightTop: pointAtCenter\n ? { points: [\"tl\", \"cr\"], offset: [8, -cornerOffset], overflow, autoArrow: false }\n : { points: [\"tl\", \"tr\"], offset: [8, 0], overflow, autoArrow: false },\n rightBottom: pointAtCenter\n ? { points: [\"bl\", \"cr\"], offset: [8, cornerOffset], overflow, autoArrow: false }\n : { points: [\"bl\", \"br\"], offset: [8, 0], overflow, autoArrow: false },\n };\n}\n\nexport const Tooltip = forwardRef<TooltipRef, TooltipProps>(function Tooltip(\n {\n afterOpenChange,\n afterVisibleChange,\n align,\n arrow,\n autoAdjustOverflow = true,\n builtinPlacements,\n children,\n className = \"\",\n classNames,\n color,\n defaultOpen,\n defaultVisible,\n disabled,\n destroyOnHidden,\n destroyTooltipOnHide,\n forceRender,\n fresh,\n getPopupContainer,\n getTooltipContainer,\n id,\n maxWidth,\n motion,\n mouseEnterDelay = 0.1,\n mouseLeaveDelay = 0.1,\n onOpenChange,\n onPopupAlign,\n onVisibleChange,\n open,\n openClassName,\n overlay,\n overlayClassName,\n overlayInnerStyle,\n overlayStyle,\n placement,\n rootClassName,\n style,\n styles,\n title,\n trigger,\n unique,\n variant,\n visible,\n zIndex,\n },\n ref,\n) {\n const config = useConfig();\n const motionDisabled = isMotionDisabled(config.motion);\n const mergedArrow = arrow ?? config.components.Tooltip?.arrow ?? true;\n const mergedDisabled = disabled || config.disabled || config.components.Tooltip?.disabled;\n const mergedPlacement = placement ?? config.components.Tooltip?.placement ?? \"top\";\n const mergedTrigger = trigger ?? config.components.Tooltip?.trigger ?? \"hover\";\n const mergedVariant = variant ?? config.components.Tooltip?.variant ?? \"dark\";\n const mergedTitle = title ?? overlay;\n const [mergedOpen, setMergedOpen] = useControlledState(\n defaultOpen ?? defaultVisible ?? false,\n open ?? visible,\n );\n const noTitle = !mergedTitle && mergedTitle !== 0;\n const popupVisible = mergedDisabled || noTitle ? false : mergedOpen;\n const pointAtCenter = typeof mergedArrow === \"object\" && mergedArrow.pointAtCenter === true;\n const placements = useMemo(\n () => builtinPlacements ?? getTooltipPlacements(pointAtCenter, autoAdjustOverflow),\n [autoAdjustOverflow, builtinPlacements, pointAtCenter],\n );\n const triggerNode = getTooltipChild(\n children,\n cn(slotClass(classNames, \"trigger\"), popupVisible && openClassName),\n );\n const popupStyle = slotStyle(\n styles,\n \"root\",\n slotStyle(styles, \"popup\", {\n ...(maxWidth == null ? undefined : { maxWidth, whiteSpace: \"normal\" }),\n ...(color ? { \"--hj-tooltip-color\": color, backgroundColor: color } : undefined),\n ...overlayStyle,\n ...style,\n }),\n );\n const popupClassName = cn(\n \"hj-tooltip-root\",\n `hj-tooltip-${mergedVariant}`,\n pointAtCenter && \"hj-tooltip-arrow-center\",\n className,\n overlayClassName,\n rootClassName,\n classNames?.root,\n classNames?.popup,\n );\n const rcTrigger: TooltipTrigger | TooltipTrigger[] =\n typeof mergedTrigger === \"string\" ? mergedTrigger : [...mergedTrigger];\n\n return (\n <RcTooltip\n afterVisibleChange={(nextOpen) => {\n afterOpenChange?.(nextOpen);\n afterVisibleChange?.(nextOpen);\n }}\n align={align}\n builtinPlacements={placements}\n classNames={{\n root: popupClassName,\n arrow: slotClass(classNames, \"arrow\", \"hj-tooltip-arrow-inner\"),\n container: slotClass(classNames, \"content\", \"hj-tooltip-container-inner\"),\n }}\n destroyOnHidden={\n destroyOnHidden ?? (typeof destroyTooltipOnHide === \"object\" ? true : destroyTooltipOnHide)\n }\n forceRender={forceRender}\n fresh={fresh}\n getTooltipContainer={\n getPopupContainer ??\n getTooltipContainer ??\n (config.getPopupContainer ? () => config.getPopupContainer?.() ?? document.body : undefined)\n }\n id={id}\n mouseEnterDelay={mouseEnterDelay}\n mouseLeaveDelay={mouseLeaveDelay}\n motion={motionDisabled ? undefined : (motion ?? { motionName: \"hj-zoom\" })}\n onPopupAlign={onPopupAlign}\n overlay={mergedTitle}\n placement={mergedPlacement}\n prefixCls=\"hj-tooltip\"\n ref={ref}\n showArrow={typeof mergedArrow === \"object\" ? true : mergedArrow}\n styles={{\n root: popupStyle,\n arrow: slotStyle(styles, \"arrow\"),\n container: slotStyle(styles, \"content\", overlayInnerStyle),\n }}\n trigger={rcTrigger}\n unique={unique}\n visible={popupVisible}\n zIndex={zIndex}\n onVisibleChange={(nextOpen) => {\n if (mergedDisabled || noTitle) return;\n setMergedOpen(nextOpen);\n onOpenChange?.(nextOpen);\n onVisibleChange?.(nextOpen);\n }}\n >\n {triggerNode}\n </RcTooltip>\n );\n});\n\nTooltip.displayName = \"Tooltip\";\n",
|
|
13
|
+
"import type { CSSProperties } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type SlotClassNames<TSlot extends string> = Partial<Record<TSlot, string>>;\nexport type SlotStyles<TSlot extends string> = Partial<Record<TSlot, CSSProperties>>;\n\nexport function slotClass<TSlot extends string>(\n classNames: SlotClassNames<TSlot> | undefined,\n slot: TSlot,\n ...defaults: readonly (string | false | null | undefined)[]\n) {\n return cn(...defaults, classNames?.[slot]);\n}\n\nexport function slotStyle<TSlot extends string>(\n styles: SlotStyles<TSlot> | undefined,\n slot: TSlot,\n defaults?: CSSProperties,\n): CSSProperties {\n return { ...defaults, ...styles?.[slot] };\n}\n",
|
|
14
|
+
"import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type BadgeStatus = \"success\" | \"processing\" | \"default\" | \"error\" | \"warning\";\nexport type BadgeSize = \"small\" | \"medium\" | \"middle\" | \"default\";\n\nexport interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"title\"> {\n readonly color?: string;\n readonly count?: ReactNode;\n readonly dot?: boolean;\n readonly offset?: readonly [number | string, number | string];\n readonly overflowCount?: number;\n readonly rootClassName?: string;\n readonly showZero?: boolean;\n readonly size?: BadgeSize;\n readonly status?: BadgeStatus;\n readonly text?: ReactNode;\n readonly title?: string | null | false;\n}\n\nexport interface BadgeRibbonProps {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly color?: string;\n readonly placement?: \"start\" | \"end\";\n readonly rootClassName?: string;\n readonly style?: CSSProperties;\n readonly text?: ReactNode;\n}\n\nconst statusClass: Record<BadgeStatus, string> = {\n success: \"bg-[var(--hj-color-success)]\",\n processing: \"bg-[var(--hj-color-info)]\",\n default: \"bg-[var(--hj-color-web-muted)]\",\n error: \"bg-[var(--hj-color-danger)]\",\n warning: \"bg-[var(--hj-color-warning)]\",\n};\n\nfunction cssOffset(value: number | string) {\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nfunction BadgeRoot({\n children,\n className = \"\",\n color,\n count = null,\n dot = false,\n offset,\n overflowCount = 99,\n rootClassName,\n showZero = false,\n size = \"medium\",\n status,\n text,\n title,\n style,\n ...props\n}: BadgeProps) {\n const numericCount = typeof count === \"number\" ? count : undefined;\n const displayCount =\n numericCount !== undefined && numericCount > overflowCount ? `${overflowCount}+` : count;\n const isZero = count === 0 || count === \"0\" || text === 0 || text === \"0\";\n const ignoreCount = count == null || (isZero && !showZero);\n const showAsDot = dot && !isZero;\n const hidden = !showAsDot && (ignoreCount || displayCount === false || displayCount === \"\");\n const showStatus = children == null && (status != null || color != null) && ignoreCount;\n const fallbackTitle =\n typeof count === \"string\" || typeof count === \"number\" ? String(count) : undefined;\n const titleValue = title === null || title === false ? undefined : (title ?? fallbackTitle);\n const indicatorStyle: CSSProperties = {\n backgroundColor: color,\n ...(offset\n ? {\n insetInlineEnd: `calc(-1 * ${cssOffset(offset[0])})`,\n marginTop: cssOffset(offset[1]),\n }\n : {}),\n };\n\n if (showStatus) {\n return (\n <span\n className={cn(\n \"hj-badge hj-badge-status inline-flex items-center gap-2 text-sm text-[var(--hj-color-web-foreground)]\",\n rootClassName,\n className,\n )}\n style={style}\n {...props}\n >\n <span\n className={cn(\n \"hj-badge-status-dot h-2 w-2 rounded-full\",\n status ? statusClass[status] : undefined,\n status === \"processing\" && \"animate-pulse motion-reduce:animate-none\",\n )}\n style={color ? { backgroundColor: color } : undefined}\n />\n {text != null && text !== true && ((text !== 0 && text !== \"0\") || showZero) ? (\n <span className=\"hj-badge-status-text\">{text}</span>\n ) : null}\n </span>\n );\n }\n\n return (\n <span\n className={cn(\n \"hj-badge relative inline-flex\",\n children == null && \"hj-badge-not-a-wrapper\",\n rootClassName,\n className,\n )}\n style={style}\n {...props}\n >\n {children}\n {hidden ? null : (\n <sup\n className={cn(\n \"hj-badge-indicator z-[1] inline-flex items-center justify-center rounded-full bg-[var(--hj-color-danger)] text-xs font-semibold leading-none text-white shadow-[var(--hj-shadow-sm)]\",\n children != null && \"absolute right-0 top-0 translate-x-1/2 -translate-y-1/2\",\n showAsDot\n ? \"h-2 w-2 min-w-2\"\n : size === \"small\"\n ? \"h-4 min-w-4 px-1 text-[10px]\"\n : \"h-5 min-w-5 px-1.5\",\n )}\n style={indicatorStyle}\n title={titleValue}\n >\n {showAsDot ? null : displayCount}\n </sup>\n )}\n </span>\n );\n}\n\nfunction Ribbon({\n children,\n className,\n color,\n placement = \"end\",\n rootClassName,\n style,\n text,\n}: BadgeRibbonProps) {\n return (\n <div className={cn(\"hj-ribbon-wrapper relative\", rootClassName)}>\n {children}\n <div\n className={cn(\n \"hj-ribbon absolute top-2 z-[1] bg-[var(--hj-color-danger)] px-3 py-1 text-xs font-medium leading-5 text-white shadow-[var(--hj-shadow-sm)]\",\n placement === \"start\" ? \"left-[-8px]\" : \"right-[-8px]\",\n className,\n )}\n style={{ backgroundColor: color, ...style }}\n >\n <span className=\"hj-ribbon-content\">{text}</span>\n </div>\n </div>\n );\n}\n\nexport const Badge = Object.assign(BadgeRoot, { Ribbon });\n",
|
|
15
|
+
"import RcCascader, { Panel as RcCascaderPanel } from \"@rc-component/cascader\";\nimport type {\n DefaultOptionType as RcCascaderDefaultOptionType,\n CascaderProps as RcCascaderProps,\n} from \"@rc-component/cascader\";\nimport type { PanelProps as RcCascaderPanelProps } from \"@rc-component/cascader/es/Panel\";\nimport RcDropdown from \"@rc-component/dropdown\";\nimport RcMentions from \"@rc-component/mentions\";\nimport type { MentionsProps as RcMentionsProps } from \"@rc-component/mentions\";\nimport RcMenu from \"@rc-component/menu\";\nimport RcPagination from \"@rc-component/pagination\";\nimport RcPicker, { RangePicker as RcRangePicker } from \"@rc-component/picker\";\nimport type {\n PickerRef,\n PickerProps as RcPickerProps,\n RangePickerProps as RcRangePickerProps,\n} from \"@rc-component/picker\";\nimport type { GenerateConfig } from \"@rc-component/picker/generate\";\nimport dayjsGenerateConfig from \"@rc-component/picker/generate/dayjs\";\nimport type {\n PickerMode,\n RangePickerRef,\n Locale as RcPickerLocale,\n} from \"@rc-component/picker/interface\";\nimport zhCN from \"@rc-component/picker/locale/zh_CN\";\nimport RcSelect, {\n OptGroup as RcSelectOptGroup,\n Option as RcSelectOption,\n} from \"@rc-component/select\";\nimport type {\n BaseOptionType as RcSelectBaseOptionType,\n SelectProps as RcSelectProps,\n} from \"@rc-component/select\";\nimport RcTreeSelect, {\n SHOW_ALL as TREE_SHOW_ALL,\n SHOW_CHILD as TREE_SHOW_CHILD,\n SHOW_PARENT as TREE_SHOW_PARENT,\n TreeNode as RcTreeNode,\n} from \"@rc-component/tree-select\";\nimport type { TreeSelectProps as RcTreeSelectProps } from \"@rc-component/tree-select\";\nimport RcUpload from \"@rc-component/upload\";\nimport type { RcFile, UploadProps as RcUploadProps } from \"@rc-component/upload\";\nimport { useControlledState } from \"@rc-component/util\";\nimport dayjs, { type Dayjs } from \"dayjs\";\nimport type {\n CSSProperties,\n ComponentRef,\n DragEvent,\n HTMLAttributes,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n RefAttributes,\n SyntheticEvent,\n UIEvent,\n} from \"react\";\nimport {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { type GetPopupContainer, useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./Button\";\nimport { Icon } from \"./Icon\";\nimport {\n type InputSize,\n type InputStatus,\n type InputVariant,\n type InputVisualSize,\n normalizeInputSize,\n} from \"./Input\";\nimport { useMergedFormItemStatus } from \"./form/statusContext\";\n\nexport interface SelectOption extends RcSelectBaseOptionType {\n readonly disabled?: boolean;\n readonly label: ReactNode;\n readonly value: string | number;\n}\n\ntype SelectVisualProps = {\n readonly rootClassName?: string;\n readonly size?: InputSize;\n readonly status?: InputStatus;\n readonly variant?: InputVariant;\n};\n\nconst selectSizeClass: Record<InputVisualSize, string> = {\n sm: \"hj-select-sm\",\n md: \"hj-select-md\",\n lg: \"hj-select-lg\",\n};\n\ntype CompatiblePopupContainerGetter =\n | GetPopupContainer\n | ((triggerNode: HTMLElement) => HTMLElement)\n | (() => HTMLElement);\n\nfunction useRcPopupContainer(\n localGetter: CompatiblePopupContainerGetter | undefined,\n configuredGetter: GetPopupContainer | undefined,\n) {\n return useMemo(() => {\n const getter = localGetter ?? configuredGetter;\n if (!getter) return undefined;\n return (triggerNode?: HTMLElement) => (getter as GetPopupContainer)(triggerNode) as HTMLElement;\n }, [configuredGetter, localGetter]);\n}\n\nexport interface SelectProps<\n ValueType = unknown,\n OptionType extends RcSelectBaseOptionType = SelectOption,\n> extends Omit<\n RcSelectProps<ValueType, OptionType>,\n \"onPopupVisibleChange\" | \"options\" | \"prefixCls\"\n >,\n SelectVisualProps {\n /** @deprecated Use onOpenChange instead. */\n readonly onDropdownVisibleChange?: (open: boolean) => void;\n readonly onOpenChange?: (open: boolean) => void;\n /** @deprecated Use onOpenChange instead. */\n readonly onPopupVisibleChange?: (open: boolean) => void;\n readonly options?: readonly OptionType[];\n}\n\nfunction InternalSelect<\n ValueType = unknown,\n OptionType extends RcSelectBaseOptionType = SelectOption,\n>({\n className,\n disabled,\n getPopupContainer,\n onDropdownVisibleChange,\n onOpenChange,\n onPopupVisibleChange,\n options,\n rootClassName,\n size,\n status,\n suffix,\n suffixIcon,\n variant = \"outlined\",\n ...props\n}: SelectProps<ValueType, OptionType>) {\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size ?? config.components.Select?.size, config.size);\n const mergedDisabled = disabled ?? config.components.Select?.disabled ?? config.disabled;\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n return (\n <RcSelect<ValueType, OptionType>\n {...props}\n className={cn(\n rootClassName,\n className,\n selectSizeClass[mergedSize],\n mergedStatus && `hj-select-status-${mergedStatus}`,\n `hj-select-variant-${variant}`,\n )}\n disabled={mergedDisabled}\n getPopupContainer={mergedGetPopupContainer}\n onPopupVisibleChange={onOpenChange ?? onPopupVisibleChange ?? onDropdownVisibleChange}\n options={options ? [...options] : undefined}\n prefixCls=\"hj-select\"\n suffix={suffix ?? suffixIcon ?? <Icon name=\"chevron-down\" size={16} strokeWidth={2} />}\n />\n );\n}\n\nexport const Select = Object.assign(InternalSelect, {\n OptGroup: RcSelectOptGroup,\n Option: RcSelectOption,\n});\n\nexport interface AutoCompleteOption extends SelectOption {\n readonly description?: ReactNode;\n}\n\nexport interface AutoCompleteProps<\n ValueType = string,\n OptionType extends RcSelectBaseOptionType = AutoCompleteOption,\n> extends Omit<\n SelectProps<ValueType, OptionType>,\n \"labelInValue\" | \"loading\" | \"mode\" | \"optionLabelProp\" | \"options\" | \"showSearch\"\n > {\n readonly options?: readonly OptionType[];\n readonly showSearch?: RcSelectProps<ValueType, OptionType>[\"showSearch\"];\n}\n\nfunction InternalAutoComplete<\n ValueType = string,\n OptionType extends RcSelectBaseOptionType = AutoCompleteOption,\n>({\n defaultOpen,\n defaultValue,\n className,\n disabled,\n filterOption,\n getPopupContainer,\n onChange,\n onDropdownVisibleChange,\n onOpenChange,\n onPopupVisibleChange,\n onSelect,\n open,\n optionRender,\n options,\n rootClassName,\n showSearch,\n size,\n status,\n suffix,\n suffixIcon,\n value,\n variant = \"outlined\",\n ...props\n}: AutoCompleteProps<ValueType, OptionType>) {\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size ?? config.components.AutoComplete?.size, config.size);\n const mergedDisabled = disabled ?? config.components.AutoComplete?.disabled ?? config.disabled;\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n return (\n <RcSelect<ValueType, OptionType>\n {...props}\n className={cn(\n rootClassName,\n className,\n \"hj-select-auto-complete\",\n selectSizeClass[mergedSize],\n mergedStatus && `hj-select-status-${mergedStatus}`,\n `hj-select-variant-${variant}`,\n )}\n defaultOpen={defaultOpen}\n defaultValue={defaultValue}\n disabled={mergedDisabled}\n filterOption={filterOption}\n getPopupContainer={mergedGetPopupContainer}\n mode=\"combobox\"\n onChange={onChange}\n onPopupVisibleChange={onOpenChange ?? onPopupVisibleChange ?? onDropdownVisibleChange}\n onSelect={onSelect}\n open={open}\n optionRender={\n optionRender ??\n ((option) => {\n const item = option.data as OptionType & { description?: ReactNode; label?: ReactNode };\n if (!item.description) return item.label;\n return (\n <span className=\"hj-select-option-content\">\n <span>{item.label}</span>\n <small>{item.description}</small>\n </span>\n );\n })\n }\n options={options ? [...options] : undefined}\n prefixCls=\"hj-select\"\n showSearch={showSearch}\n suffix={suffix ?? suffixIcon ?? null}\n value={value}\n />\n );\n}\n\nexport const AutoComplete = Object.assign(InternalAutoComplete, {\n Option: RcSelectOption,\n});\n\nexport interface CascaderOption extends RcCascaderDefaultOptionType {\n children?: CascaderOption[];\n readonly disabled?: boolean;\n readonly label: ReactNode;\n readonly value: string | number;\n}\n\nexport interface CascaderProps<\n OptionType extends RcCascaderDefaultOptionType = CascaderOption,\n ValueField extends keyof OptionType = keyof OptionType,\n Multiple extends boolean = false,\n> extends Omit<\n RcCascaderProps<OptionType, ValueField, Multiple>,\n \"checkable\" | \"onPopupVisibleChange\" | \"options\" | \"prefixCls\"\n >,\n SelectVisualProps {\n readonly multiple?: Multiple;\n /** @deprecated Use onOpenChange instead. */\n readonly onDropdownVisibleChange?: (open: boolean) => void;\n readonly onOpenChange?: (open: boolean) => void;\n /** @deprecated Use onOpenChange instead. */\n readonly onPopupVisibleChange?: (open: boolean) => void;\n readonly options?: readonly OptionType[];\n}\n\nfunction InternalCascader<\n OptionType extends RcCascaderDefaultOptionType = CascaderOption,\n ValueField extends keyof OptionType = keyof OptionType,\n Multiple extends boolean = false,\n>({\n className,\n disabled,\n getPopupContainer,\n multiple,\n onDropdownVisibleChange,\n onOpenChange,\n onPopupVisibleChange,\n options,\n rootClassName,\n size,\n status,\n suffix,\n suffixIcon,\n variant = \"outlined\",\n ...props\n}: CascaderProps<OptionType, ValueField, Multiple>) {\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size ?? config.components.Cascader?.size, config.size);\n const mergedDisabled = disabled ?? config.components.Cascader?.disabled ?? config.disabled;\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n return (\n <RcCascader<OptionType, ValueField, Multiple>\n {...props}\n className={cn(\n rootClassName,\n className,\n selectSizeClass[mergedSize],\n mergedStatus && `hj-select-status-${mergedStatus}`,\n `hj-select-variant-${variant}`,\n )}\n checkable={multiple}\n disabled={mergedDisabled}\n getPopupContainer={mergedGetPopupContainer}\n onPopupVisibleChange={onOpenChange ?? onPopupVisibleChange ?? onDropdownVisibleChange}\n options={options ? [...options] : undefined}\n prefixCls=\"hj-cascader\"\n suffix={suffix ?? suffixIcon ?? <Icon name=\"chevron-down\" size={16} strokeWidth={2} />}\n />\n );\n}\n\nexport type CascaderPanelProps<\n OptionType extends RcCascaderDefaultOptionType = CascaderOption,\n ValueField extends keyof OptionType = keyof OptionType,\n Multiple extends boolean = false,\n> = Omit<RcCascaderPanelProps<OptionType, ValueField, Multiple>, \"checkable\" | \"prefixCls\"> & {\n readonly multiple?: Multiple;\n readonly rootClassName?: string;\n};\n\nfunction CascaderPanel<\n OptionType extends RcCascaderDefaultOptionType = CascaderOption,\n ValueField extends keyof OptionType = keyof OptionType,\n Multiple extends boolean = false,\n>({\n className,\n direction,\n disabled,\n multiple,\n notFoundContent,\n rootClassName,\n ...props\n}: CascaderPanelProps<OptionType, ValueField, Multiple>) {\n const config = useConfig();\n return (\n <RcCascaderPanel<OptionType, ValueField, Multiple>\n {...props}\n checkable={multiple}\n className={cn(rootClassName, className)}\n direction={direction ?? config.direction}\n disabled={disabled ?? config.components.Cascader?.disabled ?? config.disabled}\n notFoundContent={notFoundContent ?? config.renderEmpty?.(\"Cascader\") ?? \"暂无数据\"}\n prefixCls=\"hj-cascader\"\n />\n );\n}\n\nexport const Cascader = Object.assign(InternalCascader, {\n Panel: CascaderPanel,\n SHOW_CHILD: RcCascader.SHOW_CHILD,\n SHOW_PARENT: RcCascader.SHOW_PARENT,\n} as const);\n\nexport type PickerValue = Dayjs | Date | string;\n\ntype PickerInputValue<ValueType, Multiple extends boolean> = Multiple extends true\n ? readonly ValueType[]\n : ValueType;\ntype PickerOutputValue<Multiple extends boolean> = Multiple extends true ? Dayjs[] : Dayjs;\ntype PickerStringValue<Multiple extends boolean> = Multiple extends true ? string[] : string;\n\nexport type DatePickerProps<\n ValueType extends PickerValue = PickerValue,\n Multiple extends boolean = false,\n> = Omit<\n RcPickerProps<Dayjs>,\n | \"defaultValue\"\n | \"generateConfig\"\n | \"locale\"\n | \"multiple\"\n | \"onChange\"\n | \"prefixCls\"\n | \"rootClassName\"\n | \"value\"\n> &\n SelectVisualProps & {\n readonly defaultValue?: PickerInputValue<ValueType, Multiple> | null;\n readonly locale?: RcPickerLocale;\n readonly multiple?: Multiple;\n readonly onChange?: (\n value: PickerOutputValue<Multiple> | null,\n dateString: PickerStringValue<Multiple>,\n ) => void;\n readonly value?: PickerInputValue<ValueType, Multiple> | null;\n };\n\nexport type PickerRangeValue = readonly [\n PickerValue | null | undefined,\n PickerValue | null | undefined,\n];\n\nexport interface RangePickerProps\n extends Omit<\n RcRangePickerProps<Dayjs>,\n | \"defaultValue\"\n | \"generateConfig\"\n | \"locale\"\n | \"onChange\"\n | \"prefixCls\"\n | \"rootClassName\"\n | \"value\"\n >,\n SelectVisualProps {\n readonly defaultValue?: PickerRangeValue;\n readonly locale?: RcPickerLocale;\n readonly onChange?: (\n value: [Dayjs | null, Dayjs | null] | null,\n dateString: [string, string],\n ) => void;\n readonly value?: PickerRangeValue | null;\n}\n\nfunction normalizePickerValue(value: PickerValue | null | undefined, pickerType: PickerMode) {\n if (value == null || dayjs.isDayjs(value)) return value;\n if (value instanceof Date) {\n const parsedDate = dayjs(value);\n return parsedDate.isValid() ? parsedDate : undefined;\n }\n const parsed =\n pickerType === \"time\" && !value.includes(\"T\") ? dayjs(`1970-01-01T${value}`) : dayjs(value);\n return parsed.isValid() ? parsed : undefined;\n}\n\nfunction normalizePickerInput(\n value: PickerValue | readonly PickerValue[] | null | undefined,\n pickerType: PickerMode,\n) {\n if (!isPickerValueList(value)) return normalizePickerValue(value, pickerType);\n return value\n .map((item) => normalizePickerValue(item, pickerType))\n .filter((item): item is Dayjs => Boolean(item));\n}\n\nfunction isPickerValueList(\n value: PickerValue | readonly PickerValue[] | null | undefined,\n): value is readonly PickerValue[] {\n return Array.isArray(value);\n}\n\nfunction normalizePickerRange(value: PickerRangeValue | null | undefined, pickerType: PickerMode) {\n if (value == null) return value;\n return value.map((item) => normalizePickerValue(item, pickerType)) as [\n Dayjs | null | undefined,\n Dayjs | null | undefined,\n ];\n}\n\nconst pickerDefaultFormat: Record<PickerMode, string> = {\n date: \"YYYY-MM-DD\",\n month: \"YYYY-MM\",\n quarter: \"YYYY-[Q]Q\",\n time: \"HH:mm:ss\",\n week: \"YYYY-wo\",\n year: \"YYYY\",\n};\n\ntype InternalDatePickerProps = Omit<DatePickerProps<PickerValue, boolean>, \"onChange\"> & {\n readonly fixedPicker?: PickerMode;\n readonly onChange?: (value: Dayjs | Dayjs[] | null, dateString: string | string[]) => void;\n};\n\nconst PickerControl = forwardRef<PickerRef, InternalDatePickerProps>(function PickerControl(\n {\n className,\n defaultValue,\n disabled,\n fixedPicker,\n format,\n getPopupContainer,\n locale,\n mode,\n onChange,\n picker,\n rootClassName,\n showTime,\n size,\n status = \"default\",\n suffixIcon,\n value,\n variant = \"outlined\",\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const mergedSize = normalizeInputSize(size, config.size);\n const mergedDisabled = disabled ?? config.disabled;\n const mergedPicker = fixedPicker ?? picker ?? \"date\";\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n return (\n <RcPicker<Dayjs>\n {...props}\n className={cn(\n rootClassName,\n className,\n `hj-picker-${mergedSize}`,\n `hj-picker-status-${status}`,\n `hj-picker-variant-${variant}`,\n )}\n defaultValue={normalizePickerInput(defaultValue, mergedPicker) ?? undefined}\n disabled={mergedDisabled}\n format={format ?? pickerDefaultFormat[mergedPicker]}\n generateConfig={dayjsGenerateConfig}\n getPopupContainer={mergedGetPopupContainer}\n locale={locale ?? zhCN}\n mode={mergedPicker === \"time\" ? undefined : mode}\n onChange={(next, dateString) => onChange?.(next ?? null, dateString)}\n picker={mergedPicker}\n prefixCls=\"hj-picker\"\n ref={ref}\n showTime={mergedPicker === \"time\" ? true : showTime}\n suffixIcon={suffixIcon ?? <Icon name=\"calendar\" size={16} strokeWidth={2} />}\n value={value === undefined ? undefined : normalizePickerInput(value, mergedPicker)}\n />\n );\n});\n\ntype DayjsPickerComponent = <\n ValueType extends PickerValue = PickerValue,\n Multiple extends boolean = false,\n>(\n props: DatePickerProps<ValueType, Multiple> & RefAttributes<PickerRef>,\n) => ReactElement;\n\nfunction createDayjsPicker(fixedPicker?: PickerMode) {\n return forwardRef<PickerRef, InternalDatePickerProps>((props, ref) => (\n <PickerControl {...props} fixedPicker={fixedPicker} ref={ref} />\n )) as DayjsPickerComponent;\n}\n\nconst InternalRangePicker = forwardRef<\n RangePickerRef,\n RangePickerProps & { readonly fixedPicker?: PickerMode }\n>(function InternalRangePicker(\n {\n className,\n defaultValue,\n disabled,\n fixedPicker,\n format,\n getPopupContainer,\n locale,\n mode,\n onChange,\n picker,\n rootClassName,\n showTime,\n size,\n status = \"default\",\n suffixIcon,\n value,\n variant = \"outlined\",\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const mergedSize = normalizeInputSize(size, config.size);\n const mergedDisabled = disabled ?? config.disabled;\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n const mergedPicker = fixedPicker ?? picker ?? \"date\";\n return (\n <RcRangePicker<Dayjs>\n {...props}\n className={cn(\n rootClassName,\n className,\n `hj-picker-${mergedSize}`,\n `hj-picker-status-${status}`,\n `hj-picker-variant-${variant}`,\n )}\n defaultValue={normalizePickerRange(defaultValue, mergedPicker) ?? undefined}\n disabled={mergedDisabled}\n format={format ?? pickerDefaultFormat[mergedPicker]}\n generateConfig={dayjsGenerateConfig}\n getPopupContainer={mergedGetPopupContainer}\n locale={locale ?? zhCN}\n mode={mergedPicker === \"time\" ? undefined : mode}\n onChange={onChange}\n picker={mergedPicker}\n prefixCls=\"hj-picker\"\n ref={ref}\n separator={\n <span aria-label=\"至\" className=\"hj-picker-separator\">\n /\n </span>\n }\n showTime={mergedPicker === \"time\" ? true : showTime}\n suffixIcon={suffixIcon ?? <Icon name=\"calendar\" size={16} strokeWidth={2} />}\n value={value === undefined ? undefined : normalizePickerRange(value, mergedPicker)}\n />\n );\n});\n\nexport type GeneratedDatePickerProps<DateType extends object> = Omit<\n RcPickerProps<DateType>,\n \"generateConfig\" | \"locale\" | \"prefixCls\" | \"rootClassName\"\n> &\n SelectVisualProps & { readonly locale?: RcPickerLocale };\nexport type GeneratedRangePickerProps<DateType extends object> = Omit<\n RcRangePickerProps<DateType>,\n \"generateConfig\" | \"locale\" | \"prefixCls\" | \"rootClassName\"\n> &\n SelectVisualProps & { readonly locale?: RcPickerLocale };\n\nfunction createGeneratedPicker<DateType extends object>(\n generateConfig: GenerateConfig<DateType>,\n fixedPicker?: PickerMode,\n) {\n return forwardRef<PickerRef, GeneratedDatePickerProps<DateType>>(function GeneratedPicker(\n {\n className,\n disabled,\n getPopupContainer,\n locale,\n picker,\n rootClassName,\n size,\n status = \"default\",\n suffixIcon,\n variant = \"outlined\",\n ...props\n },\n ref,\n ) {\n const config = useConfig();\n const mergedSize = normalizeInputSize(size, config.size);\n const mergedGetPopupContainer = useRcPopupContainer(\n getPopupContainer,\n config.getPopupContainer,\n );\n return (\n <RcPicker<DateType>\n {...props}\n className={cn(\n rootClassName,\n className,\n `hj-picker-${mergedSize}`,\n `hj-picker-status-${status}`,\n `hj-picker-variant-${variant}`,\n )}\n disabled={disabled ?? config.disabled}\n generateConfig={generateConfig}\n getPopupContainer={mergedGetPopupContainer}\n locale={locale ?? zhCN}\n picker={fixedPicker ?? picker}\n prefixCls=\"hj-picker\"\n ref={ref}\n suffixIcon={suffixIcon ?? <Icon name=\"calendar\" size={16} strokeWidth={2} />}\n />\n );\n });\n}\n\nexport function generatePicker<DateType extends object>(generateConfig: GenerateConfig<DateType>) {\n const GeneratedDatePicker = createGeneratedPicker(generateConfig);\n const GeneratedRangePicker = forwardRef<RangePickerRef, GeneratedRangePickerProps<DateType>>(\n function GeneratedRangePicker(\n {\n className,\n disabled,\n getPopupContainer,\n locale,\n rootClassName,\n size,\n status = \"default\",\n suffixIcon,\n variant = \"outlined\",\n ...props\n },\n ref,\n ) {\n const config = useConfig();\n const mergedSize = normalizeInputSize(size, config.size);\n const mergedGetPopupContainer = useRcPopupContainer(\n getPopupContainer,\n config.getPopupContainer,\n );\n return (\n <RcRangePicker<DateType>\n {...props}\n className={cn(\n rootClassName,\n className,\n `hj-picker-${mergedSize}`,\n `hj-picker-status-${status}`,\n `hj-picker-variant-${variant}`,\n )}\n disabled={disabled ?? config.disabled}\n generateConfig={generateConfig}\n getPopupContainer={mergedGetPopupContainer}\n locale={locale ?? zhCN}\n prefixCls=\"hj-picker\"\n ref={ref}\n suffixIcon={suffixIcon ?? <Icon name=\"calendar\" size={16} strokeWidth={2} />}\n />\n );\n },\n );\n return Object.assign(GeneratedDatePicker, {\n MonthPicker: createGeneratedPicker(generateConfig, \"month\"),\n QuarterPicker: createGeneratedPicker(generateConfig, \"quarter\"),\n RangePicker: GeneratedRangePicker,\n TimePicker: createGeneratedPicker(generateConfig, \"time\"),\n WeekPicker: createGeneratedPicker(generateConfig, \"week\"),\n YearPicker: createGeneratedPicker(generateConfig, \"year\"),\n });\n}\n\nexport type TimePickerProps<\n ValueType extends PickerValue = PickerValue,\n Multiple extends boolean = false,\n> = Omit<DatePickerProps<ValueType, Multiple>, \"picker\" | \"showTime\"> & {\n /** @deprecated Use renderExtraFooter instead. */\n readonly addon?: () => ReactNode;\n /** @deprecated Use onCalendarChange instead. */\n readonly onSelect?: (value: Dayjs) => void;\n};\n\ntype TimePickerComponent = <\n ValueType extends PickerValue = PickerValue,\n Multiple extends boolean = false,\n>(\n props: TimePickerProps<ValueType, Multiple> & RefAttributes<PickerRef>,\n) => ReactElement;\n\nconst DayjsTimePicker = createDayjsPicker(\"time\");\nconst InternalTimePicker = forwardRef<PickerRef, TimePickerProps<PickerValue, boolean>>(\n function InternalTimePicker(\n { addon, onCalendarChange, onSelect, renderExtraFooter, ...props },\n ref,\n ) {\n return (\n <DayjsTimePicker\n {...props}\n onCalendarChange={(value, dateString, info) => {\n onCalendarChange?.(value, dateString, info);\n const selectedValue = Array.isArray(value) ? value[0] : value;\n if (selectedValue) onSelect?.(selectedValue);\n }}\n ref={ref}\n renderExtraFooter={renderExtraFooter ?? addon}\n />\n );\n },\n) as TimePickerComponent;\n\nexport type TimeRangePickerProps = Omit<RangePickerProps, \"picker\" | \"showTime\">;\nconst TimeRangePicker = forwardRef<RangePickerRef, TimeRangePickerProps>((props, ref) => (\n <InternalRangePicker {...props} fixedPicker=\"time\" ref={ref} />\n));\n\nconst DayjsDatePicker = createDayjsPicker();\nexport const DatePicker = Object.assign(DayjsDatePicker, {\n MonthPicker: createDayjsPicker(\"month\"),\n QuarterPicker: createDayjsPicker(\"quarter\"),\n RangePicker: InternalRangePicker,\n TimePicker: InternalTimePicker,\n WeekPicker: createDayjsPicker(\"week\"),\n YearPicker: createDayjsPicker(\"year\"),\n generatePicker,\n});\n\nexport const TimePicker = Object.assign(InternalTimePicker, {\n RangePicker: TimeRangePicker,\n});\n\ntype RcMentionsOption = NonNullable<RcMentionsProps[\"options\"]>[number];\n\nexport interface MentionsOption extends RcMentionsOption {\n readonly disabled?: boolean;\n readonly label?: ReactNode;\n readonly value: string;\n}\n\nexport interface MentionsProps\n extends Omit<RcMentionsProps, \"options\" | \"prefixCls\">,\n SelectVisualProps {\n readonly options?: readonly MentionsOption[];\n}\n\nexport interface MentionsConfig {\n readonly prefix?: string | readonly string[];\n readonly split?: string;\n}\n\nexport interface MentionsEntity {\n readonly prefix: string;\n readonly value: string;\n}\n\nfunction getMentions(value = \"\", config: MentionsConfig = {}) {\n const { prefix = \"@\", split = \" \" } = config;\n const prefixList = typeof prefix === \"string\" ? [prefix] : [...prefix];\n return value.split(split).reduce<MentionsEntity[]>((entities, segment) => {\n const hitPrefix = prefixList.find((item) => segment.startsWith(item));\n if (!hitPrefix) return entities;\n const mentionValue = segment.slice(hitPrefix.length);\n if (mentionValue) entities.push({ prefix: hitPrefix, value: mentionValue });\n return entities;\n }, []);\n}\n\nfunction InternalMentions({\n className,\n disabled,\n getPopupContainer,\n options,\n rootClassName,\n size,\n status,\n variant = \"outlined\",\n ...props\n}: MentionsProps) {\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size ?? config.components.Mentions?.size, config.size);\n const mergedDisabled = disabled ?? config.components.Mentions?.disabled ?? config.disabled;\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n return (\n <RcMentions\n {...props}\n className={cn(\n rootClassName,\n className,\n `hj-mentions-${mergedSize}`,\n mergedStatus && `hj-mentions-status-${mergedStatus}`,\n `hj-mentions-variant-${variant}`,\n )}\n disabled={mergedDisabled}\n getPopupContainer={mergedGetPopupContainer}\n options={options ? [...options] : undefined}\n prefixCls=\"hj-mentions\"\n />\n );\n}\n\nexport const Mentions = Object.assign(InternalMentions, {\n getMentions,\n Option: RcMentions.Option,\n});\n\nexport type TransferDirection = \"left\" | \"right\";\nexport type TransferKey = React.Key;\n\nexport interface TransferItem {\n description?: ReactNode;\n disabled?: boolean;\n key?: TransferKey;\n title?: ReactNode;\n [name: string]: unknown;\n}\n\nexport interface TransferRenderResultObject {\n readonly label: ReactNode;\n readonly value: string;\n}\n\nexport type TransferRenderResult = ReactNode | TransferRenderResultObject;\n\nexport interface TransferSearchOption {\n readonly defaultValue?: string;\n readonly placeholder?: string;\n}\n\nexport interface TransferPaginationConfig {\n readonly pageSize?: number;\n readonly showLessItems?: boolean;\n readonly showSizeChanger?: boolean;\n readonly simple?: boolean;\n}\n\nexport type TransferPagination = boolean | TransferPaginationConfig;\nexport type TransferSelectAllLabel =\n | ReactNode\n | ((info: { readonly selectedCount: number; readonly totalCount: number }) => ReactNode);\n\ntype TransferSemanticSlot =\n | \"root\"\n | \"section\"\n | \"header\"\n | \"title\"\n | \"body\"\n | \"list\"\n | \"item\"\n | \"itemIcon\"\n | \"itemContent\"\n | \"footer\"\n | \"actions\";\ntype TransferSectionSemanticSlot = Exclude<TransferSemanticSlot, \"root\" | \"actions\">;\n\nexport type TransferClassNames = Partial<Record<TransferSemanticSlot, string>> & {\n readonly source?: Partial<Record<TransferSectionSemanticSlot, string>>;\n readonly target?: Partial<Record<TransferSectionSemanticSlot, string>>;\n};\n\nexport type TransferStyles = Partial<Record<TransferSemanticSlot, CSSProperties>> & {\n readonly source?: Partial<Record<TransferSectionSemanticSlot, CSSProperties>>;\n readonly target?: Partial<Record<TransferSectionSemanticSlot, CSSProperties>>;\n};\n\nexport interface TransferLocale {\n readonly deselectAll?: string;\n readonly itemUnit?: string;\n readonly itemsUnit?: string;\n readonly notFoundContent?: ReactNode | readonly ReactNode[];\n readonly remove?: string;\n readonly removeAll?: string;\n readonly removeCurrent?: string;\n readonly searchPlaceholder?: string;\n readonly selectAll?: string;\n readonly selectCurrent?: string;\n readonly selectInvert?: string;\n readonly titles?: readonly ReactNode[];\n}\n\ntype KeyWise<RecordType> = RecordType & { key: TransferKey };\n\nexport interface TransferCustomListBodyProps<RecordType extends TransferItem = TransferItem> {\n readonly direction: TransferDirection;\n readonly disabled?: boolean;\n readonly filteredItems: KeyWise<RecordType>[];\n readonly onItemRemove?: (keys: TransferKey[]) => void;\n readonly onItemSelect: (\n key: TransferKey,\n checked: boolean,\n event?: React.MouseEvent<Element>,\n ) => void;\n readonly onItemSelectAll: (keys: TransferKey[], checked: boolean | \"replace\") => void;\n readonly selectedKeys: TransferKey[];\n}\n\nexport interface TransferProps<RecordType extends TransferItem = TransferItem>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onChange\" | \"onScroll\"> {\n readonly actions?: readonly ReactNode[];\n readonly children?: (props: TransferCustomListBodyProps<RecordType>) => ReactNode;\n readonly classNames?: TransferClassNames;\n readonly dataSource?: readonly RecordType[];\n readonly defaultSelectedKeys?: readonly TransferKey[];\n readonly defaultTargetKeys?: readonly TransferKey[];\n readonly disabled?: boolean;\n readonly filterOption?: (\n inputValue: string,\n item: RecordType,\n direction: TransferDirection,\n ) => boolean;\n readonly footer?: (\n props: TransferListProps<RecordType>,\n info?: { readonly direction: TransferDirection },\n ) => ReactNode;\n readonly listStyle?:\n | CSSProperties\n | ((info: { readonly direction: TransferDirection }) => CSSProperties);\n readonly locale?: TransferLocale;\n readonly notFoundContent?: ReactNode | readonly ReactNode[];\n readonly onChange?: (\n targetKeys: TransferKey[],\n direction: TransferDirection,\n moveKeys: TransferKey[],\n ) => void;\n readonly onScroll?: (\n direction: TransferDirection,\n event: React.SyntheticEvent<HTMLUListElement>,\n ) => void;\n readonly onSearch?: (direction: TransferDirection, value: string) => void;\n readonly onSelectChange?: (\n sourceSelectedKeys: TransferKey[],\n targetSelectedKeys: TransferKey[],\n ) => void;\n readonly oneWay?: boolean;\n readonly operations?: readonly string[];\n readonly operationStyle?: CSSProperties;\n readonly pagination?: TransferPagination;\n readonly render?: (item: RecordType) => TransferRenderResult;\n readonly rowKey?: (record: RecordType) => TransferKey;\n readonly rootClassName?: string;\n readonly selectedKeys?: readonly TransferKey[];\n readonly selectAllLabels?: readonly TransferSelectAllLabel[];\n readonly selectionsIcon?: ReactNode;\n readonly showSearch?: boolean | TransferSearchOption;\n readonly showSelectAll?: boolean;\n readonly status?: InputStatus;\n readonly styles?: TransferStyles;\n readonly targetKeys?: readonly TransferKey[];\n readonly titles?: readonly ReactNode[];\n}\n\ninterface TransferRenderedItem<RecordType extends TransferItem> {\n readonly item: KeyWise<RecordType>;\n readonly renderedEl: ReactNode;\n readonly renderedText: string;\n}\n\nfunction useTransferData<RecordType extends TransferItem>(\n dataSource: readonly RecordType[],\n rowKey: TransferProps<RecordType>[\"rowKey\"],\n targetKeys: readonly TransferKey[],\n) {\n const mergedDataSource = useMemo(\n () =>\n dataSource.flatMap((record) => {\n const key = rowKey?.(record) ?? record.key;\n return key === undefined || key === null ? [] : [{ ...record, key } as KeyWise<RecordType>];\n }),\n [dataSource, rowKey],\n );\n\n const [leftDataSource, rightDataSource] = useMemo(() => {\n const targetKeySet = new Set(targetKeys);\n const recordMap = new Map(mergedDataSource.map((record) => [record.key, record]));\n return [\n mergedDataSource.filter((record) => !targetKeySet.has(record.key)),\n targetKeys\n .map((key) => recordMap.get(key))\n .filter((record): record is KeyWise<RecordType> => Boolean(record)),\n ] as const;\n }, [mergedDataSource, targetKeys]);\n return [mergedDataSource, leftDataSource, rightDataSource] as const;\n}\n\nfunction useTransferSelection<RecordType extends TransferItem>(\n leftDataSource: readonly KeyWise<RecordType>[],\n rightDataSource: readonly KeyWise<RecordType>[],\n defaultSelectedKeys: readonly TransferKey[],\n selectedKeys?: readonly TransferKey[],\n) {\n const controlledSelectedKeys = useMemo(\n () => (selectedKeys ? [...selectedKeys] : undefined),\n [selectedKeys],\n );\n const [mergedSelectedKeys, setMergedSelectedKeys] = useControlledState<TransferKey[]>(\n [...defaultSelectedKeys],\n controlledSelectedKeys,\n );\n const leftKeys = useMemo(() => new Set(leftDataSource.map((item) => item.key)), [leftDataSource]);\n const rightKeys = useMemo(\n () => new Set(rightDataSource.map((item) => item.key)),\n [rightDataSource],\n );\n const sourceSelectedKeys = useMemo(\n () => mergedSelectedKeys.filter((key) => leftKeys.has(key)),\n [leftKeys, mergedSelectedKeys],\n );\n const targetSelectedKeys = useMemo(\n () => mergedSelectedKeys.filter((key) => rightKeys.has(key)),\n [mergedSelectedKeys, rightKeys],\n );\n\n useEffect(() => {\n const nextKeys = [...sourceSelectedKeys, ...targetSelectedKeys];\n if (nextKeys.length !== mergedSelectedKeys.length) setMergedSelectedKeys(nextKeys);\n }, [mergedSelectedKeys.length, setMergedSelectedKeys, sourceSelectedKeys, targetSelectedKeys]);\n\n return {\n setSourceSelectedKeys: (keys: TransferKey[]) =>\n setMergedSelectedKeys([...keys, ...targetSelectedKeys]),\n setTargetSelectedKeys: (keys: TransferKey[]) =>\n setMergedSelectedKeys([...sourceSelectedKeys, ...keys]),\n sourceSelectedKeys,\n targetSelectedKeys,\n };\n}\n\nfunction transferNodeText(node: ReactNode): string {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(transferNodeText).join(\" \");\n return \"\";\n}\n\nfunction isTransferRenderResultObject(\n value: TransferRenderResult,\n): value is TransferRenderResultObject {\n return Boolean(value && typeof value === \"object\" && \"label\" in value && \"value\" in value);\n}\n\nfunction TransferCheckbox({\n checked,\n disabled,\n indeterminate = false,\n label,\n onChange,\n}: {\n readonly checked: boolean;\n readonly disabled: boolean;\n readonly indeterminate?: boolean;\n readonly label: string;\n readonly onChange: (checked: boolean) => void;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return (\n <input\n aria-label={label}\n checked={checked}\n className=\"hj-transfer-checkbox\"\n disabled={disabled}\n onChange={(event) => onChange(event.currentTarget.checked)}\n onClick={(event) => event.stopPropagation()}\n ref={inputRef}\n type=\"checkbox\"\n />\n );\n}\n\nexport interface TransferSearchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\"> {\n readonly onChange?: (value: string) => void;\n readonly onClear?: () => void;\n readonly value?: string;\n}\n\nfunction TransferSearch({\n disabled,\n onChange,\n onClear,\n placeholder,\n value = \"\",\n ...props\n}: TransferSearchProps) {\n return (\n <label className=\"hj-transfer-search-wrapper\">\n <Icon className=\"hj-transfer-search-icon\" name=\"search\" size={15} />\n <input\n {...props}\n className=\"hj-transfer-search\"\n disabled={disabled}\n onChange={(event) => onChange?.(event.currentTarget.value)}\n placeholder={placeholder}\n type=\"search\"\n value={value}\n />\n {value ? (\n <button aria-label=\"清空搜索\" disabled={disabled} onClick={onClear} type=\"button\">\n <Icon name=\"close\" size={13} />\n </button>\n ) : null}\n </label>\n );\n}\n\nexport interface TransferOperationProps {\n readonly actions?: readonly ReactNode[];\n readonly disabled?: boolean;\n readonly leftActive?: boolean;\n readonly moveToLeft?: () => void;\n readonly moveToRight?: () => void;\n readonly oneWay?: boolean;\n readonly rightActive?: boolean;\n readonly style?: CSSProperties;\n}\n\nfunction TransferOperation({\n actions = [],\n disabled,\n leftActive,\n moveToLeft,\n moveToRight,\n oneWay,\n rightActive,\n style,\n}: TransferOperationProps) {\n return (\n <fieldset className=\"hj-transfer-actions\" style={style}>\n <legend className=\"sr-only\">列表操作</legend>\n <button\n aria-label=\"移动选中项到目标列表\"\n className=\"hj-transfer-operation\"\n disabled={disabled || !rightActive}\n onClick={moveToRight}\n type=\"button\"\n >\n <Icon name=\"chevron-right\" size={16} />\n {actions[0] ? <span>{actions[0]}</span> : null}\n </button>\n {!oneWay ? (\n <button\n aria-label=\"移动选中项到源列表\"\n className=\"hj-transfer-operation\"\n disabled={disabled || !leftActive}\n onClick={moveToLeft}\n type=\"button\"\n >\n <Icon name=\"back\" size={16} />\n {actions[1] ? <span>{actions[1]}</span> : null}\n </button>\n ) : null}\n </fieldset>\n );\n}\n\nexport interface TransferListProps<RecordType extends TransferItem = TransferItem> {\n readonly checkedKeys: TransferKey[];\n readonly classNames?: TransferClassNames;\n readonly dataSource?: readonly KeyWise<RecordType>[];\n readonly direction: TransferDirection;\n readonly disabled?: boolean;\n readonly filterOption?: TransferProps<RecordType>[\"filterOption\"];\n readonly footer?: TransferProps<RecordType>[\"footer\"];\n readonly listStyle?: CSSProperties;\n readonly locale: Required<TransferLocale>;\n readonly onItemRemove?: (keys: TransferKey[]) => void;\n readonly onItemSelect: TransferCustomListBodyProps<RecordType>[\"onItemSelect\"];\n readonly onItemSelectAll: TransferCustomListBodyProps<RecordType>[\"onItemSelectAll\"];\n readonly onScroll?: (event: React.SyntheticEvent<HTMLUListElement>) => void;\n readonly onSearch?: (value: string) => void;\n readonly pagination?: TransferPagination;\n readonly render?: TransferProps<RecordType>[\"render\"];\n readonly renderList?: (props: TransferCustomListBodyProps<RecordType>) => ReactNode;\n readonly selectAllLabel?: TransferSelectAllLabel;\n readonly selectionsIcon?: ReactNode;\n readonly showRemove?: boolean;\n readonly showSearch?: boolean | TransferSearchOption;\n readonly showSelectAll?: boolean;\n readonly styles?: TransferStyles;\n readonly title?: ReactNode;\n}\n\nfunction getTransferSectionClass(\n classNames: TransferClassNames | undefined,\n direction: TransferDirection,\n slot: TransferSectionSemanticSlot,\n) {\n return cn(classNames?.[slot], classNames?.[direction === \"left\" ? \"source\" : \"target\"]?.[slot]);\n}\n\nfunction getTransferSectionStyle(\n styles: TransferStyles | undefined,\n direction: TransferDirection,\n slot: TransferSectionSemanticSlot,\n) {\n return { ...styles?.[slot], ...styles?.[direction === \"left\" ? \"source\" : \"target\"]?.[slot] };\n}\n\nfunction TransferListBody<RecordType extends TransferItem>({\n classNames,\n direction,\n disabled,\n items,\n onItemRemove,\n onItemSelect,\n onScroll,\n selectedKeys,\n showRemove,\n styles,\n}: {\n readonly classNames?: TransferClassNames;\n readonly direction: TransferDirection;\n readonly disabled?: boolean;\n readonly items: TransferRenderedItem<RecordType>[];\n readonly onItemRemove?: (keys: TransferKey[]) => void;\n readonly onItemSelect: TransferCustomListBodyProps<RecordType>[\"onItemSelect\"];\n readonly onScroll?: (event: React.SyntheticEvent<HTMLUListElement>) => void;\n readonly selectedKeys: TransferKey[];\n readonly showRemove?: boolean;\n readonly styles?: TransferStyles;\n}) {\n return (\n <ul\n className={cn(\n \"hj-transfer-content\",\n showRemove && \"hj-transfer-content-show-remove\",\n getTransferSectionClass(classNames, direction, \"list\"),\n )}\n onScroll={onScroll}\n style={getTransferSectionStyle(styles, direction, \"list\")}\n >\n {items.map(({ item, renderedEl, renderedText }) => {\n const mergedDisabled = disabled || Boolean(item.disabled);\n const checked = selectedKeys.includes(item.key);\n return (\n <li\n aria-disabled={mergedDisabled || undefined}\n aria-selected={showRemove ? undefined : checked}\n className={cn(\n \"hj-transfer-content-item\",\n checked && !mergedDisabled && \"hj-transfer-content-item-checked\",\n mergedDisabled && \"hj-transfer-content-item-disabled\",\n getTransferSectionClass(classNames, direction, \"item\"),\n )}\n key={item.key}\n onClick={\n showRemove || mergedDisabled\n ? undefined\n : (event) => onItemSelect(item.key, !checked, event)\n }\n onKeyDown={\n showRemove || mergedDisabled\n ? undefined\n : (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onItemSelect(item.key, !checked);\n }\n }\n }\n role={showRemove ? \"listitem\" : \"option\"}\n style={getTransferSectionStyle(styles, direction, \"item\")}\n tabIndex={showRemove || mergedDisabled ? undefined : 0}\n title={renderedText}\n >\n {!showRemove ? (\n <TransferCheckbox\n checked={checked}\n disabled={mergedDisabled}\n label={`选择 ${renderedText}`}\n onChange={(next) => onItemSelect(item.key, next)}\n />\n ) : null}\n <span\n className={cn(\n \"hj-transfer-content-item-text\",\n getTransferSectionClass(classNames, direction, \"itemContent\"),\n )}\n style={getTransferSectionStyle(styles, direction, \"itemContent\")}\n >\n {renderedEl}\n </span>\n {showRemove ? (\n <button\n aria-label={`移除 ${renderedText}`}\n className=\"hj-transfer-content-item-remove\"\n disabled={mergedDisabled}\n onClick={() => onItemRemove?.([item.key])}\n type=\"button\"\n >\n <Icon name=\"close\" size={15} />\n </button>\n ) : null}\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction TransferSection<RecordType extends TransferItem>(props: TransferListProps<RecordType>) {\n const {\n checkedKeys,\n classNames,\n dataSource = [],\n direction,\n disabled,\n filterOption,\n footer,\n listStyle,\n locale,\n onItemRemove,\n onItemSelect,\n onItemSelectAll,\n onScroll,\n onSearch,\n pagination,\n render,\n renderList,\n selectAllLabel,\n selectionsIcon,\n showRemove,\n showSearch = false,\n showSelectAll = true,\n styles,\n title,\n } = props;\n const config = useConfig();\n const mergedGetPopupContainer = useRcPopupContainer(undefined, config.getPopupContainer);\n const searchConfig = typeof showSearch === \"object\" ? showSearch : undefined;\n const [filterValue, setFilterValue] = useState(searchConfig?.defaultValue ?? \"\");\n const [currentPage, setCurrentPage] = useState(1);\n const initialPageSize =\n typeof pagination === \"object\" && pagination.pageSize ? pagination.pageSize : 10;\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n useEffect(() => {\n if (typeof pagination === \"object\" && pagination.pageSize) setPageSize(pagination.pageSize);\n }, [pagination]);\n\n const renderedItems = useMemo(\n () =>\n dataSource.map<TransferRenderedItem<RecordType>>((item) => {\n const result = render?.(item) ?? item.title ?? String(item.key);\n if (isTransferRenderResultObject(result))\n return { item, renderedEl: result.label, renderedText: result.value };\n return {\n item,\n renderedEl: result,\n renderedText:\n transferNodeText(result) || transferNodeText(item.title) || String(item.key),\n };\n }),\n [dataSource, render],\n );\n\n const filteredRenderItems = useMemo(\n () =>\n renderedItems.filter(({ item, renderedText }) => {\n if (!filterValue) return true;\n return filterOption\n ? filterOption(filterValue, item, direction)\n : renderedText.includes(filterValue);\n }),\n [direction, filterOption, filterValue, renderedItems],\n );\n const filteredItems = filteredRenderItems.map(({ item }) => item);\n const enabledItems = filteredItems.filter((item) => !item.disabled);\n const activeCheckedKeys = enabledItems\n .filter((item) => checkedKeys.includes(item.key))\n .map((item) => item.key);\n const allChecked = enabledItems.length > 0 && activeCheckedKeys.length === enabledItems.length;\n const indeterminate = activeCheckedKeys.length > 0 && !allChecked;\n const pageCount = Math.max(1, Math.ceil(filteredRenderItems.length / pageSize));\n const mergedCurrentPage = Math.min(currentPage, pageCount);\n const visibleItems = pagination\n ? filteredRenderItems.slice((mergedCurrentPage - 1) * pageSize, mergedCurrentPage * pageSize)\n : filteredRenderItems;\n const visibleEnabledKeys = visibleItems\n .filter(({ item }) => !item.disabled)\n .map(({ item }) => item.key);\n const customBodyProps: TransferCustomListBodyProps<RecordType> = {\n direction,\n disabled,\n filteredItems,\n onItemRemove,\n onItemSelect,\n onItemSelectAll,\n selectedKeys: checkedKeys,\n };\n const customBody = renderList?.(customBodyProps);\n const emptyContent = Array.isArray(locale.notFoundContent)\n ? locale.notFoundContent[direction === \"left\" ? 0 : 1]\n : locale.notFoundContent;\n const selectedLabel =\n typeof selectAllLabel === \"function\"\n ? selectAllLabel({\n selectedCount: activeCheckedKeys.length,\n totalCount: filteredItems.length,\n })\n : (selectAllLabel ??\n `${activeCheckedKeys.length ? `${activeCheckedKeys.length}/` : \"\"}${filteredItems.length} ${filteredItems.length === 1 ? locale.itemUnit : locale.itemsUnit}`);\n const footerContent = footer?.(props, { direction });\n const selectionMenuItems = showRemove\n ? [\n pagination ? { key: \"removeCurrent\", label: locale.removeCurrent } : null,\n { key: \"removeAll\", label: locale.removeAll },\n ]\n : [\n { key: \"selectAll\", label: allChecked ? locale.deselectAll : locale.selectAll },\n pagination ? { key: \"selectCurrent\", label: locale.selectCurrent } : null,\n { key: \"selectInvert\", label: locale.selectInvert },\n ];\n\n const handleSelectionMenuClick = (key: React.Key) => {\n switch (key) {\n case \"removeCurrent\":\n onItemRemove?.(visibleEnabledKeys);\n break;\n case \"removeAll\":\n onItemRemove?.(enabledItems.map((item) => item.key));\n break;\n case \"selectAll\":\n onItemSelectAll(\n enabledItems.map((item) => item.key),\n !allChecked,\n );\n break;\n case \"selectCurrent\":\n onItemSelectAll(visibleEnabledKeys, true);\n break;\n case \"selectInvert\": {\n const nextCheckedKeys = new Set(checkedKeys);\n for (const itemKey of visibleEnabledKeys) {\n if (nextCheckedKeys.has(itemKey)) nextCheckedKeys.delete(itemKey);\n else nextCheckedKeys.add(itemKey);\n }\n onItemSelectAll([...nextCheckedKeys], \"replace\");\n break;\n }\n }\n };\n\n return (\n <section\n className={cn(\n \"hj-transfer-section\",\n `hj-transfer-section-${direction}`,\n pagination && \"hj-transfer-section-with-pagination\",\n getTransferSectionClass(classNames, direction, \"section\"),\n )}\n style={{ ...listStyle, ...getTransferSectionStyle(styles, direction, \"section\") }}\n >\n <header\n className={cn(\n \"hj-transfer-header\",\n getTransferSectionClass(classNames, direction, \"header\"),\n )}\n style={getTransferSectionStyle(styles, direction, \"header\")}\n >\n {showSelectAll && !showRemove && !pagination ? (\n <TransferCheckbox\n checked={allChecked}\n disabled={Boolean(disabled) || enabledItems.length === 0}\n indeterminate={indeterminate}\n label={allChecked ? locale.deselectAll : locale.selectAll}\n onChange={(checked) =>\n onItemSelectAll(\n enabledItems.map((item) => item.key),\n checked,\n )\n }\n />\n ) : null}\n {showSelectAll ? (\n <RcDropdown\n getPopupContainer={mergedGetPopupContainer}\n overlay={\n <RcMenu\n className=\"hj-menu-root\"\n items={selectionMenuItems}\n onClick={({ key }) => handleSelectionMenuClick(key)}\n prefixCls=\"hj-menu\"\n selectable={false}\n />\n }\n overlayClassName=\"hj-dropdown-root\"\n placement=\"bottomLeft\"\n prefixCls=\"hj-dropdown\"\n trigger={disabled ? [] : [\"click\"]}\n >\n <button\n aria-label={showRemove ? locale.remove : locale.selectAll}\n className=\"hj-transfer-selections-icon\"\n disabled={disabled}\n type=\"button\"\n >\n {selectionsIcon ?? <Icon name=\"chevron-down\" size={14} />}\n </button>\n </RcDropdown>\n ) : null}\n <span className=\"hj-transfer-count\">{selectedLabel}</span>\n <span\n className={cn(\n \"hj-transfer-title\",\n getTransferSectionClass(classNames, direction, \"title\"),\n )}\n style={getTransferSectionStyle(styles, direction, \"title\")}\n >\n {title}\n </span>\n </header>\n <div\n className={cn(\n \"hj-transfer-body\",\n showSearch && \"hj-transfer-body-with-search\",\n getTransferSectionClass(classNames, direction, \"body\"),\n )}\n style={getTransferSectionStyle(styles, direction, \"body\")}\n >\n {showSearch ? (\n <TransferSearch\n disabled={disabled}\n onChange={(value) => {\n setFilterValue(value);\n setCurrentPage(1);\n onSearch?.(value);\n }}\n onClear={() => {\n setFilterValue(\"\");\n setCurrentPage(1);\n onSearch?.(\"\");\n }}\n placeholder={searchConfig?.placeholder ?? locale.searchPlaceholder}\n value={filterValue}\n />\n ) : null}\n {customBody ? (\n <div className=\"hj-transfer-custom-list-body\">{customBody}</div>\n ) : visibleItems.length ? (\n <TransferListBody\n classNames={classNames}\n direction={direction}\n disabled={disabled}\n items={visibleItems}\n onItemRemove={onItemRemove}\n onItemSelect={onItemSelect}\n onScroll={onScroll}\n selectedKeys={checkedKeys}\n showRemove={showRemove}\n styles={styles}\n />\n ) : (\n <div className=\"hj-transfer-empty\">{emptyContent}</div>\n )}\n {pagination && !customBody ? (\n <RcPagination\n className=\"hj-transfer-pagination\"\n current={mergedCurrentPage}\n disabled={disabled}\n onChange={(page, nextPageSize) => {\n setCurrentPage(page);\n if (nextPageSize !== pageSize) setPageSize(nextPageSize);\n }}\n pageSize={pageSize}\n prefixCls=\"hj-pagination\"\n showLessItems={typeof pagination === \"object\" ? pagination.showLessItems : false}\n showSizeChanger={typeof pagination === \"object\" ? pagination.showSizeChanger : false}\n simple={typeof pagination === \"object\" ? (pagination.simple ?? true) : true}\n total={filteredRenderItems.length}\n />\n ) : null}\n </div>\n {footerContent ? (\n <footer\n className={cn(\n \"hj-transfer-footer\",\n getTransferSectionClass(classNames, direction, \"footer\"),\n )}\n style={getTransferSectionStyle(styles, direction, \"footer\")}\n >\n {footerContent}\n </footer>\n ) : null}\n </section>\n );\n}\n\nconst defaultTransferLocale: Required<TransferLocale> = {\n deselectAll: \"取消全选\",\n itemUnit: \"项\",\n itemsUnit: \"项\",\n notFoundContent: \"暂无数据\",\n remove: \"移除\",\n removeAll: \"移除全部\",\n removeCurrent: \"移除当前页\",\n searchPlaceholder: \"搜索\",\n selectAll: \"全选\",\n selectCurrent: \"选择当前页\",\n selectInvert: \"反选当前页\",\n titles: [],\n};\n\nfunction InternalTransfer<RecordType extends TransferItem = TransferItem>({\n actions,\n children,\n className,\n classNames,\n dataSource = [],\n defaultSelectedKeys = [],\n defaultTargetKeys = [],\n disabled,\n filterOption,\n footer,\n listStyle,\n locale,\n notFoundContent = \"暂无数据\",\n onChange,\n onScroll,\n onSearch,\n onSelectChange,\n oneWay = false,\n operations,\n operationStyle,\n pagination = false,\n render,\n rowKey,\n rootClassName,\n selectedKeys,\n selectAllLabels = [],\n selectionsIcon,\n showSearch = false,\n showSelectAll = true,\n status,\n style,\n styles,\n targetKeys,\n titles = [],\n ...props\n}: TransferProps<RecordType>) {\n const config = useConfig();\n const mergedDisabled = disabled ?? config.disabled;\n const controlledTargetKeys = useMemo(\n () => (targetKeys ? [...targetKeys] : undefined),\n [targetKeys],\n );\n const [mergedTargetKeys, setMergedTargetKeys] = useControlledState<TransferKey[]>(\n [...defaultTargetKeys],\n controlledTargetKeys,\n );\n const [mergedDataSource, leftDataSource, rightDataSource] = useTransferData(\n dataSource,\n rowKey,\n mergedTargetKeys,\n );\n const { setSourceSelectedKeys, setTargetSelectedKeys, sourceSelectedKeys, targetSelectedKeys } =\n useTransferSelection(leftDataSource, rightDataSource, defaultSelectedKeys, selectedKeys);\n const previousSelectedIndex = useRef<Record<TransferDirection, number | null>>({\n left: null,\n right: null,\n });\n const dataMap = useMemo(\n () => new Map(mergedDataSource.map((item) => [item.key, item])),\n [mergedDataSource],\n );\n\n const setDirectionSelectedKeys = (direction: TransferDirection, keys: TransferKey[]) => {\n if (direction === \"left\") {\n setSourceSelectedKeys(keys);\n onSelectChange?.(keys, targetSelectedKeys);\n } else {\n setTargetSelectedKeys(keys);\n onSelectChange?.(sourceSelectedKeys, keys);\n }\n };\n\n const onItemSelect = (\n direction: TransferDirection,\n key: TransferKey,\n checked: boolean,\n event?: React.MouseEvent<Element>,\n ) => {\n const data = (direction === \"left\" ? leftDataSource : rightDataSource).filter(\n (item) => !item.disabled,\n );\n const currentKeys = direction === \"left\" ? sourceSelectedKeys : targetSelectedKeys;\n const nextKeys = new Set(currentKeys);\n const currentIndex = data.findIndex((item) => item.key === key);\n const previousIndex = previousSelectedIndex.current[direction];\n if (event?.shiftKey && previousIndex !== null && currentIndex >= 0) {\n for (const item of data.slice(\n Math.min(previousIndex, currentIndex),\n Math.max(previousIndex, currentIndex) + 1,\n )) {\n if (checked) nextKeys.add(item.key);\n else nextKeys.delete(item.key);\n }\n } else if (checked) nextKeys.add(key);\n else nextKeys.delete(key);\n previousSelectedIndex.current[direction] = checked ? currentIndex : null;\n setDirectionSelectedKeys(direction, [...nextKeys]);\n };\n\n const onItemSelectAll = (\n direction: TransferDirection,\n keys: TransferKey[],\n checked: boolean | \"replace\",\n ) => {\n const nextKeys = new Set(direction === \"left\" ? sourceSelectedKeys : targetSelectedKeys);\n if (checked === \"replace\") setDirectionSelectedKeys(direction, keys);\n else {\n for (const key of keys) {\n if (checked) nextKeys.add(key);\n else nextKeys.delete(key);\n }\n setDirectionSelectedKeys(direction, [...nextKeys]);\n }\n previousSelectedIndex.current[direction] = null;\n };\n\n const moveTo = (direction: TransferDirection, requestedKeys?: readonly TransferKey[]) => {\n const selected =\n requestedKeys ?? (direction === \"right\" ? sourceSelectedKeys : targetSelectedKeys);\n const moveKeys = selected.filter((key) => !dataMap.get(key)?.disabled);\n if (!moveKeys.length || mergedDisabled) return;\n const moveKeySet = new Set(moveKeys);\n const nextTargetKeys =\n direction === \"right\"\n ? [...moveKeys, ...mergedTargetKeys.filter((key) => !moveKeySet.has(key))]\n : mergedTargetKeys.filter((key) => !moveKeySet.has(key));\n setMergedTargetKeys(nextTargetKeys);\n if (direction === \"right\") {\n setSourceSelectedKeys([]);\n onSelectChange?.([], targetSelectedKeys);\n } else {\n setTargetSelectedKeys([]);\n onSelectChange?.(sourceSelectedKeys, []);\n }\n onChange?.(nextTargetKeys, direction, moveKeys);\n };\n\n const mergedActions = actions ?? operations ?? [];\n const mergedLocale = { ...defaultTransferLocale, ...locale, notFoundContent };\n const mergedTitles = titles.length ? titles : mergedLocale.titles;\n const getListStyle = (direction: TransferDirection) =>\n typeof listStyle === \"function\" ? listStyle({ direction }) : listStyle;\n const canMoveRight = sourceSelectedKeys.some((key) => !dataMap.get(key)?.disabled);\n const canMoveLeft = targetSelectedKeys.some((key) => !dataMap.get(key)?.disabled);\n const mergedPagination = children ? false : pagination;\n\n return (\n <div\n aria-disabled={mergedDisabled || undefined}\n aria-invalid={status === \"error\" || undefined}\n className={cn(\n \"hj-transfer\",\n mergedDisabled && \"hj-transfer-disabled\",\n children && \"hj-transfer-customize-list\",\n oneWay && \"hj-transfer-one-way\",\n status !== \"default\" && `hj-transfer-status-${status}`,\n rootClassName,\n className,\n classNames?.root,\n )}\n style={{ ...style, ...styles?.root }}\n {...props}\n >\n <TransferSection\n checkedKeys={sourceSelectedKeys}\n classNames={classNames}\n dataSource={leftDataSource}\n direction=\"left\"\n disabled={mergedDisabled}\n filterOption={filterOption}\n footer={footer}\n listStyle={getListStyle(\"left\")}\n locale={mergedLocale}\n onItemSelect={(key, checked, event) => onItemSelect(\"left\", key, checked, event)}\n onItemSelectAll={(keys, checked) => onItemSelectAll(\"left\", keys, checked)}\n onScroll={(event) => onScroll?.(\"left\", event)}\n onSearch={(value) => onSearch?.(\"left\", value)}\n pagination={mergedPagination}\n render={render}\n renderList={children}\n selectAllLabel={selectAllLabels[0]}\n selectionsIcon={selectionsIcon}\n showSearch={showSearch}\n showSelectAll={showSelectAll}\n styles={styles}\n title={mergedTitles[0]}\n />\n <TransferOperation\n actions={mergedActions}\n disabled={mergedDisabled}\n leftActive={canMoveLeft}\n moveToLeft={() => moveTo(\"left\")}\n moveToRight={() => moveTo(\"right\")}\n oneWay={oneWay}\n rightActive={canMoveRight}\n style={{ ...operationStyle, ...styles?.actions }}\n />\n <TransferSection\n checkedKeys={targetSelectedKeys}\n classNames={classNames}\n dataSource={rightDataSource}\n direction=\"right\"\n disabled={mergedDisabled}\n filterOption={filterOption}\n footer={footer}\n listStyle={getListStyle(\"right\")}\n locale={mergedLocale}\n onItemRemove={(keys) => moveTo(\"left\", keys)}\n onItemSelect={(key, checked, event) => onItemSelect(\"right\", key, checked, event)}\n onItemSelectAll={(keys, checked) => onItemSelectAll(\"right\", keys, checked)}\n onScroll={(event) => onScroll?.(\"right\", event)}\n onSearch={(value) => onSearch?.(\"right\", value)}\n pagination={mergedPagination}\n render={render}\n renderList={children}\n selectAllLabel={selectAllLabels[1]}\n selectionsIcon={selectionsIcon}\n showRemove={oneWay}\n showSearch={showSearch}\n showSelectAll={showSelectAll}\n styles={styles}\n title={mergedTitles[1]}\n />\n </div>\n );\n}\n\nexport const Transfer = Object.assign(InternalTransfer, {\n List: TransferSection,\n Operation: TransferOperation,\n Search: TransferSearch,\n});\n\nexport interface TreeSelectNode extends Record<string, unknown> {\n children?: TreeSelectNode[];\n readonly disabled?: boolean;\n readonly disableCheckbox?: boolean;\n readonly key?: string | number;\n readonly label?: ReactNode;\n readonly title?: ReactNode;\n readonly value?: string | number;\n}\n\nexport interface TreeSelectProps<\n ValueType = unknown,\n OptionType extends TreeSelectNode = TreeSelectNode,\n> extends Omit<\n RcTreeSelectProps<ValueType, OptionType>,\n \"onPopupVisibleChange\" | \"prefixCls\" | \"treeData\"\n >,\n SelectVisualProps {\n /** @deprecated Use onOpenChange instead. */\n readonly onDropdownVisibleChange?: (open: boolean) => void;\n readonly onOpenChange?: (open: boolean) => void;\n /** @deprecated Use onOpenChange instead. */\n readonly onPopupVisibleChange?: (open: boolean) => void;\n readonly treeData?: readonly OptionType[];\n}\n\nfunction InternalTreeSelect<\n ValueType = unknown,\n OptionType extends TreeSelectNode = TreeSelectNode,\n>({\n className,\n disabled,\n getPopupContainer,\n onDropdownVisibleChange,\n onOpenChange,\n onPopupVisibleChange,\n rootClassName,\n size,\n status = \"default\",\n suffix,\n suffixIcon,\n treeData,\n variant = \"outlined\",\n ...props\n}: TreeSelectProps<ValueType, OptionType>) {\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size ?? config.components.TreeSelect?.size, config.size);\n const mergedDisabled = disabled ?? config.components.TreeSelect?.disabled ?? config.disabled;\n const mergedGetPopupContainer = useRcPopupContainer(getPopupContainer, config.getPopupContainer);\n return (\n <RcTreeSelect<ValueType, OptionType>\n {...props}\n className={cn(\n rootClassName,\n className,\n selectSizeClass[mergedSize],\n mergedStatus && `hj-select-status-${mergedStatus}`,\n `hj-select-variant-${variant}`,\n )}\n disabled={mergedDisabled}\n getPopupContainer={mergedGetPopupContainer}\n onPopupVisibleChange={onOpenChange ?? onPopupVisibleChange ?? onDropdownVisibleChange}\n prefixCls=\"hj-tree-select\"\n suffix={suffix ?? suffixIcon ?? <Icon name=\"chevron-down\" size={16} strokeWidth={2} />}\n treeData={treeData ? [...treeData] : undefined}\n />\n );\n}\n\nexport const TreeSelect = Object.assign(InternalTreeSelect, {\n SHOW_ALL: TREE_SHOW_ALL,\n SHOW_CHILD: TREE_SHOW_CHILD,\n SHOW_PARENT: TREE_SHOW_PARENT,\n TreeNode: RcTreeNode,\n} as const);\n\nexport const LIST_IGNORE = `__LIST_IGNORE_${Date.now()}__`;\n\nexport type UploadFileStatus = \"ready\" | \"uploading\" | \"done\" | \"error\" | \"removed\";\nexport type UploadListType = \"text\" | \"picture\" | \"picture-card\" | \"picture-circle\";\nexport type UploadType = \"drag\" | \"select\";\n\nexport interface UploadFile<ResponseType = unknown> {\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n crossOrigin?: \"anonymous\" | \"use-credentials\" | \"\";\n error?: unknown;\n fileName?: string;\n lastModified?: number;\n lastModifiedDate?: Date;\n linkProps?: Record<string, string>;\n name: string;\n originFileObj?: RcFile;\n percent?: number;\n preview?: string;\n response?: ResponseType;\n size?: number;\n status?: UploadFileStatus;\n thumbUrl?: string;\n type?: string;\n uid: string;\n url?: string;\n xhr?: XMLHttpRequest;\n}\n\nexport interface UploadChangeParam<ResponseType = unknown> {\n readonly event?: { readonly percent: number };\n readonly file: UploadFile<ResponseType>;\n readonly fileList: UploadFile<ResponseType>[];\n}\n\nexport interface ShowUploadListInterface<ResponseType = unknown> {\n readonly downloadIcon?: ReactNode | ((file: UploadFile<ResponseType>) => ReactNode);\n readonly extra?: ReactNode | ((file: UploadFile<ResponseType>) => ReactNode);\n readonly previewIcon?: ReactNode | ((file: UploadFile<ResponseType>) => ReactNode);\n readonly removeIcon?: ReactNode | ((file: UploadFile<ResponseType>) => ReactNode);\n readonly showDownloadIcon?: boolean | ((file: UploadFile<ResponseType>) => boolean);\n readonly showPreviewIcon?: boolean | ((file: UploadFile<ResponseType>) => boolean);\n readonly showRemoveIcon?: boolean | ((file: UploadFile<ResponseType>) => boolean);\n}\n\nexport interface UploadLocale {\n readonly downloadFile?: string;\n readonly previewFile?: string;\n readonly removeFile?: string;\n readonly uploadError?: string;\n readonly uploading?: string;\n}\n\nexport interface UploadListProgressProps {\n readonly showInfo?: boolean;\n readonly strokeWidth?: number;\n}\n\nexport interface UploadActions {\n readonly download: () => void;\n readonly preview: () => void;\n readonly remove: () => void;\n}\n\nexport type UploadItemRender<ResponseType = unknown> = (\n originNode: ReactElement,\n file: UploadFile<ResponseType>,\n fileList: UploadFile<ResponseType>[],\n actions: UploadActions,\n) => ReactNode;\n\nexport interface UploadSemanticProps {\n readonly classNames?: Partial<Record<\"root\" | \"list\" | \"item\" | \"trigger\", string>>;\n readonly styles?: Partial<Record<\"root\" | \"list\" | \"item\" | \"trigger\", CSSProperties>>;\n}\n\ntype UploadBeforeValue = boolean | undefined | string | Blob | File;\n\nexport interface UploadProps<ResponseType = unknown>\n extends Omit<\n RcUploadProps,\n | \"beforeUpload\"\n | \"children\"\n | \"classNames\"\n | \"onBatchStart\"\n | \"onChange\"\n | \"onDrop\"\n | \"onError\"\n | \"onProgress\"\n | \"onStart\"\n | \"onSuccess\"\n | \"prefixCls\"\n | \"style\"\n | \"styles\"\n >,\n UploadSemanticProps {\n readonly beforeUpload?: (\n file: RcFile,\n fileList: RcFile[],\n ) => UploadBeforeValue | Promise<UploadBeforeValue>;\n readonly children?: ReactNode;\n readonly defaultFileList?: UploadFile<ResponseType>[];\n readonly fileList?: UploadFile<ResponseType>[];\n readonly iconRender?: (file: UploadFile<ResponseType>, listType?: UploadListType) => ReactNode;\n readonly isImageUrl?: (file: UploadFile<ResponseType>) => boolean;\n readonly itemRender?: UploadItemRender<ResponseType>;\n readonly listType?: UploadListType;\n readonly locale?: UploadLocale;\n readonly maxCount?: number;\n readonly onChange?: (info: UploadChangeParam<ResponseType>) => void;\n readonly onDownload?: (file: UploadFile<ResponseType>) => void;\n readonly onDrop?: (event: DragEvent<HTMLDivElement>) => void;\n readonly onPreview?: (file: UploadFile<ResponseType>) => void;\n // biome-ignore lint/suspicious/noConfusingVoidType: Matches the AntD Upload onRemove contract.\n readonly onRemove?: (file: UploadFile<ResponseType>) => boolean | void | Promise<boolean | void>;\n readonly previewFile?: (file: File | Blob) => PromiseLike<string>;\n readonly progress?: UploadListProgressProps;\n readonly rootClassName?: string;\n readonly showUploadList?: boolean | ShowUploadListInterface<ResponseType>;\n readonly style?: CSSProperties;\n readonly type?: UploadType;\n}\n\nexport interface UploadRef<ResponseType = unknown> {\n readonly fileList: UploadFile<ResponseType>[];\n readonly nativeElement: HTMLSpanElement | null;\n readonly onBatchStart: NonNullable<RcUploadProps[\"onBatchStart\"]>;\n readonly onError: NonNullable<RcUploadProps[\"onError\"]>;\n readonly onProgress: NonNullable<RcUploadProps[\"onProgress\"]>;\n readonly onSuccess: NonNullable<RcUploadProps[\"onSuccess\"]>;\n readonly upload: ComponentRef<typeof RcUpload> | null;\n}\n\nfunction fileToUploadObject<ResponseType>(file: RcFile): UploadFile<ResponseType> {\n const legacyFile = file as RcFile & { readonly lastModifiedDate?: Date };\n return {\n lastModified: file.lastModified,\n lastModifiedDate: legacyFile.lastModifiedDate ?? new Date(file.lastModified),\n name: file.name,\n originFileObj: file,\n percent: 0,\n size: file.size,\n type: file.type,\n uid: file.uid,\n };\n}\n\nfunction updateUploadFileList<ResponseType>(\n file: UploadFile<ResponseType>,\n fileList: readonly UploadFile<ResponseType>[],\n) {\n const index = fileList.findIndex((item) => item.uid === file.uid);\n if (index < 0) return [...fileList, file];\n const nextList = [...fileList];\n nextList[index] = file;\n return nextList;\n}\n\nfunction getUploadFile<ResponseType>(\n file: Pick<UploadFile<ResponseType>, \"name\" | \"uid\">,\n fileList: readonly UploadFile<ResponseType>[],\n) {\n const matchKey: \"name\" | \"uid\" = file.uid === undefined ? \"name\" : \"uid\";\n return fileList.find((item) => item[matchKey] === file[matchKey]);\n}\n\nfunction removeUploadFile<ResponseType>(\n file: UploadFile<ResponseType>,\n fileList: readonly UploadFile<ResponseType>[],\n) {\n const matchKey: \"name\" | \"uid\" = file.uid === undefined ? \"name\" : \"uid\";\n const nextList = fileList.filter((item) => item[matchKey] !== file[matchKey]);\n return nextList.length === fileList.length ? null : nextList;\n}\n\nfunction defaultIsImageUrl(file: UploadFile) {\n if (file.type) return file.type.startsWith(\"image/\");\n return /\\.(avif|bmp|gif|heic|heif|ico|jpe?g|png|svg|tiff?|webp)(?:[?#].*)?$/i.test(\n file.thumbUrl ?? file.url ?? file.name,\n );\n}\n\nfunction defaultPreviewFile(file: File | Blob) {\n return new Promise<string>((resolve) => {\n if (!file.type.startsWith(\"image/\")) {\n resolve(\"\");\n return;\n }\n const reader = new FileReader();\n reader.addEventListener(\"load\", () =>\n resolve(typeof reader.result === \"string\" ? reader.result : \"\"),\n );\n reader.addEventListener(\"error\", () => resolve(\"\"));\n reader.readAsDataURL(file);\n });\n}\n\nfunction resolveUploadNode<ResponseType>(\n value: ReactNode | ((file: UploadFile<ResponseType>) => ReactNode) | undefined,\n file: UploadFile<ResponseType>,\n) {\n return typeof value === \"function\" ? value(file) : value;\n}\n\nfunction resolveUploadVisible<ResponseType>(\n value: boolean | ((file: UploadFile<ResponseType>) => boolean) | undefined,\n file: UploadFile<ResponseType>,\n fallback: boolean,\n) {\n if (typeof value === \"function\") return value(file);\n return value ?? fallback;\n}\n\ninterface InternalUploadListProps<ResponseType> extends UploadSemanticProps {\n readonly appendAction?: ReactNode;\n readonly appendActionVisible?: boolean;\n readonly disabled?: boolean;\n readonly iconRender?: UploadProps<ResponseType>[\"iconRender\"];\n readonly isImageUrl?: UploadProps<ResponseType>[\"isImageUrl\"];\n readonly itemRender?: UploadItemRender<ResponseType>;\n readonly items: UploadFile<ResponseType>[];\n readonly listType: UploadListType;\n readonly locale: Required<UploadLocale>;\n readonly onDownload?: UploadProps<ResponseType>[\"onDownload\"];\n readonly onPreview?: UploadProps<ResponseType>[\"onPreview\"];\n readonly onRemove: (file: UploadFile<ResponseType>) => void;\n readonly previewFile?: UploadProps<ResponseType>[\"previewFile\"];\n readonly progress?: UploadListProgressProps;\n readonly showUploadList: true | ShowUploadListInterface<ResponseType>;\n}\n\nfunction InternalUploadList<ResponseType>({\n appendAction,\n appendActionVisible,\n classNames,\n disabled,\n iconRender,\n isImageUrl = defaultIsImageUrl,\n itemRender,\n items,\n listType,\n locale,\n onDownload,\n onPreview,\n onRemove,\n previewFile = defaultPreviewFile,\n progress,\n showUploadList,\n styles,\n}: InternalUploadListProps<ResponseType>) {\n const [generatedThumbs, setGeneratedThumbs] = useState<Record<string, string>>({});\n useEffect(() => {\n let cancelled = false;\n for (const file of items) {\n if (\n !listType.startsWith(\"picture\") ||\n file.thumbUrl !== undefined ||\n generatedThumbs[file.uid] !== undefined ||\n !file.originFileObj\n )\n continue;\n Promise.resolve(previewFile(file.originFileObj)).then((thumbUrl) => {\n if (!cancelled)\n setGeneratedThumbs((current) =>\n current[file.uid] === thumbUrl ? current : { ...current, [file.uid]: thumbUrl },\n );\n });\n }\n return () => {\n cancelled = true;\n };\n }, [generatedThumbs, items, listType, previewFile]);\n\n const listConfig = showUploadList === true ? {} : showUploadList;\n return (\n <ul\n className={cn(\"hj-upload-list\", `hj-upload-list-${listType}`, classNames?.list)}\n style={styles?.list}\n >\n {items.map((file) => {\n const status = file.status ?? \"ready\";\n const thumbUrl = file.thumbUrl ?? generatedThumbs[file.uid] ?? file.url;\n const showPicture = listType.startsWith(\"picture\") && thumbUrl && isImageUrl(file);\n const handlePreview = (event?: SyntheticEvent<HTMLElement>) => {\n if (onPreview) {\n event?.preventDefault();\n onPreview(file);\n }\n };\n const handleDownload = () => {\n if (onDownload) onDownload(file);\n else if (file.url) window.open(file.url, \"_blank\", \"noopener,noreferrer\");\n };\n const actions: UploadActions = {\n download: handleDownload,\n preview: () => handlePreview(),\n remove: () => onRemove(file),\n };\n const fileIcon = iconRender?.(file, listType) ?? (\n <Icon name={status === \"done\" ? \"check\" : \"document\"} size={16} />\n );\n const previewIcon = resolveUploadNode(listConfig.previewIcon, file) ?? (\n <Icon name=\"eye\" size={15} />\n );\n const downloadIcon = resolveUploadNode(listConfig.downloadIcon, file) ?? (\n <Icon name=\"download\" size={15} />\n );\n const removeIcon = resolveUploadNode(listConfig.removeIcon, file) ?? (\n <Icon name=\"close\" size={15} />\n );\n const showPreview =\n resolveUploadVisible(listConfig.showPreviewIcon, file, true) &&\n Boolean(file.url || thumbUrl);\n const showDownload =\n resolveUploadVisible(listConfig.showDownloadIcon, file, false) && status === \"done\";\n const showRemove = resolveUploadVisible(listConfig.showRemoveIcon, file, !disabled);\n const extra = resolveUploadNode(listConfig.extra, file);\n const originNode = (\n <div\n className={cn(\"hj-upload-list-item\", `hj-upload-list-item-${status}`, classNames?.item)}\n style={styles?.item}\n >\n <span className=\"hj-upload-list-item-thumbnail\">\n {showPicture ? (\n <img alt={file.name} crossOrigin={file.crossOrigin} src={thumbUrl} />\n ) : (\n fileIcon\n )}\n </span>\n {file.url ? (\n <a\n className=\"hj-upload-list-item-name\"\n href={file.url}\n onClick={handlePreview}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n title={file.name}\n {...file.linkProps}\n >\n {file.name}\n </a>\n ) : (\n <button\n className=\"hj-upload-list-item-name\"\n onClick={() => handlePreview()}\n title={file.name}\n type=\"button\"\n >\n {file.name}\n </button>\n )}\n {extra ? <span className=\"hj-upload-list-item-extra\">{extra}</span> : null}\n <span className=\"hj-upload-list-item-actions\">\n {showPreview ? (\n <button\n aria-label={`${locale.previewFile} ${file.name}`}\n onClick={() => handlePreview()}\n type=\"button\"\n >\n {previewIcon}\n </button>\n ) : null}\n {showDownload ? (\n <button\n aria-label={`${locale.downloadFile} ${file.name}`}\n onClick={handleDownload}\n type=\"button\"\n >\n {downloadIcon}\n </button>\n ) : null}\n {showRemove ? (\n <button\n aria-label={`${locale.removeFile} ${file.name}`}\n disabled={disabled}\n onClick={() => onRemove(file)}\n type=\"button\"\n >\n {removeIcon}\n </button>\n ) : null}\n </span>\n {status === \"uploading\" && file.percent !== undefined ? (\n <span className=\"hj-upload-list-item-progress\">\n <progress\n aria-label={`上传 ${file.name}`}\n max={100}\n style={{ height: progress?.strokeWidth ?? 2 }}\n value={Math.max(0, Math.min(100, file.percent))}\n />\n {progress?.showInfo ? <span>{Math.round(file.percent)}%</span> : null}\n </span>\n ) : null}\n {status === \"error\" ? <span className=\"sr-only\">{locale.uploadError}</span> : null}\n </div>\n );\n return (\n <li className=\"hj-upload-list-item-container\" key={file.uid}>\n {itemRender ? itemRender(originNode, file, items, actions) : originNode}\n </li>\n );\n })}\n {appendAction && appendActionVisible ? (\n <li className=\"hj-upload-list-item-container hj-upload-list-item-container-append\">\n {appendAction}\n </li>\n ) : null}\n </ul>\n );\n}\n\nconst defaultUploadLocale: Required<UploadLocale> = {\n downloadFile: \"下载文件\",\n previewFile: \"预览文件\",\n removeFile: \"移除文件\",\n uploadError: \"上传失败\",\n uploading: \"正在上传\",\n};\n\nfunction InternalUpload<ResponseType = unknown>(\n {\n action = \"\",\n beforeUpload,\n children,\n className,\n classNames,\n defaultFileList = [],\n disabled,\n fileList,\n iconRender,\n isImageUrl,\n itemRender,\n listType = \"text\",\n locale,\n maxCount,\n multiple = false,\n onChange,\n onDownload,\n onDrop,\n onPreview,\n onRemove,\n previewFile,\n progress,\n rootClassName,\n showUploadList = true,\n style,\n styles,\n type = \"select\",\n ...props\n }: UploadProps<ResponseType>,\n ref: React.ForwardedRef<UploadRef<ResponseType>>,\n) {\n const config = useConfig();\n const mergedDisabled = disabled ?? config.disabled;\n const uploadRef = useRef<ComponentRef<typeof RcUpload>>(null);\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const [dragState, setDragState] = useState(\"drop\");\n const [mergedFileList, setMergedFileList] = useControlledState<UploadFile<ResponseType>[]>(\n [...defaultFileList],\n fileList,\n );\n const mergedFileListRef = useRef(mergedFileList);\n mergedFileListRef.current = mergedFileList;\n\n const emitChange = (\n file: UploadFile<ResponseType>,\n changedFileList: UploadFile<ResponseType>[],\n event?: { percent: number },\n ) => {\n let nextList = [...changedFileList];\n let exceeded = false;\n if (maxCount === 1) nextList = nextList.slice(-1);\n else if (maxCount) {\n exceeded = nextList.length > maxCount;\n nextList = nextList.slice(0, maxCount);\n }\n mergedFileListRef.current = nextList;\n setMergedFileList(nextList);\n if (!exceeded || file.status === \"removed\" || nextList.some((item) => item.uid === file.uid))\n onChange?.({ event, file, fileList: nextList });\n };\n\n const mergedBeforeUpload: NonNullable<RcUploadProps[\"beforeUpload\"]> = async (\n file,\n fileListArgs,\n ) => {\n if (!beforeUpload) return file;\n const markedFile = file as RcFile & Record<string, unknown>;\n delete markedFile[LIST_IGNORE];\n const result = await beforeUpload(file, fileListArgs);\n if (result === LIST_IGNORE) {\n Object.defineProperty(markedFile, LIST_IGNORE, { configurable: true, value: true });\n return false;\n }\n return result === undefined ? file : result;\n };\n\n const onBatchStart: NonNullable<RcUploadProps[\"onBatchStart\"]> = (batch) => {\n const acceptedBatch = batch.filter(\n ({ file }) => !(file as RcFile & Record<string, unknown>)[LIST_IGNORE],\n );\n if (!acceptedBatch.length) return;\n const objectFiles = acceptedBatch.map(({ file }) => fileToUploadObject<ResponseType>(file));\n const nextList = objectFiles.reduce<UploadFile<ResponseType>[]>(\n (current, file) => updateUploadFileList(file, current),\n mergedFileListRef.current,\n );\n objectFiles.forEach((file, index) => {\n const parsedFile = acceptedBatch[index]?.parsedFile;\n if (parsedFile) file.status = \"uploading\";\n const triggerFile = parsedFile\n ? file\n : (acceptedBatch[index].file as unknown as UploadFile<ResponseType>);\n emitChange(triggerFile, nextList);\n });\n };\n\n const patchFile = (\n file: RcFile,\n patch: Partial<UploadFile<ResponseType>>,\n event?: { percent: number },\n ) => {\n const current = getUploadFile(file, mergedFileListRef.current);\n if (!current) return;\n const nextFile = { ...current, ...patch };\n emitChange(nextFile, updateUploadFileList(nextFile, mergedFileListRef.current), event);\n };\n\n const onSuccess: NonNullable<RcUploadProps[\"onSuccess\"]> = (rawResponse, file, xhr) => {\n let response: unknown = rawResponse;\n if (typeof response === \"string\") {\n try {\n response = JSON.parse(response);\n } catch {\n // Keep non-JSON server responses unchanged, matching AntD Upload.\n }\n }\n patchFile(file, { percent: 100, response: response as ResponseType, status: \"done\", xhr });\n };\n const onProgress: NonNullable<RcUploadProps[\"onProgress\"]> = (event, file) => {\n const percent = event.percent ?? 0;\n patchFile(file, { percent, status: \"uploading\" }, { percent });\n };\n const onError: NonNullable<RcUploadProps[\"onError\"]> = (error, response, file) =>\n patchFile(file, { error, response: response as ResponseType, status: \"error\" });\n\n const handleRemove = (file: UploadFile<ResponseType>) => {\n Promise.resolve(onRemove?.(file)).then((result) => {\n if (result === false) return;\n const nextList = removeUploadFile(file, mergedFileListRef.current);\n if (!nextList) return;\n const removedFile = { ...file, status: \"removed\" as const };\n uploadRef.current?.abort(file.originFileObj ?? (file as unknown as RcFile));\n emitChange(removedFile, nextList);\n });\n };\n\n useImperativeHandle(ref, () => ({\n fileList: mergedFileListRef.current,\n nativeElement: wrapperRef.current,\n onBatchStart,\n onError,\n onProgress,\n onSuccess,\n upload: uploadRef.current,\n }));\n\n const trigger =\n children ??\n (type === \"drag\" ? (\n <span className=\"hj-upload-drag-copy\">点击或拖拽文件到此区域</span>\n ) : (\n <Button disabled={mergedDisabled} icon={<Icon name=\"download\" size={16} />} type=\"default\">\n 上传文件\n </Button>\n ));\n const rcUpload = (\n <RcUpload\n {...props}\n action={action}\n beforeUpload={mergedBeforeUpload}\n className=\"hj-upload-btn\"\n disabled={mergedDisabled}\n multiple={multiple}\n onBatchStart={onBatchStart}\n onError={onError}\n onProgress={onProgress}\n onSuccess={onSuccess}\n prefixCls=\"hj-upload\"\n ref={uploadRef}\n >\n {trigger}\n </RcUpload>\n );\n const listConfig = showUploadList && (\n <InternalUploadList\n appendAction={\n listType === \"picture-card\" || listType === \"picture-circle\" ? rcUpload : undefined\n }\n appendActionVisible={Boolean(trigger)}\n classNames={classNames}\n disabled={mergedDisabled}\n iconRender={iconRender}\n isImageUrl={isImageUrl}\n itemRender={itemRender}\n items={mergedFileList}\n listType={listType}\n locale={{ ...defaultUploadLocale, ...locale }}\n onDownload={onDownload}\n onPreview={onPreview}\n onRemove={handleRemove}\n previewFile={previewFile}\n progress={progress}\n showUploadList={showUploadList}\n styles={styles}\n />\n );\n const mergedRootClassName = cn(\n \"hj-upload-wrapper\",\n `hj-upload-${listType}-wrapper`,\n type === \"drag\" && \"hj-upload-drag-wrapper\",\n mergedDisabled && \"hj-upload-disabled\",\n rootClassName,\n className,\n classNames?.root,\n );\n\n if (type === \"drag\") {\n return (\n <span className={mergedRootClassName} ref={wrapperRef} style={styles?.root}>\n <div\n className={cn(\n \"hj-upload-drag\",\n dragState === \"dragover\" && \"hj-upload-drag-hover\",\n classNames?.trigger,\n )}\n onDragLeave={(event) => setDragState(event.type)}\n onDragOver={(event) => setDragState(event.type)}\n onDrop={(event) => {\n setDragState(event.type);\n onDrop?.(event);\n }}\n style={{ ...style, ...styles?.trigger }}\n >\n {rcUpload}\n </div>\n {listConfig}\n </span>\n );\n }\n\n return (\n <span className={mergedRootClassName} ref={wrapperRef} style={styles?.root}>\n {listType === \"picture-card\" || listType === \"picture-circle\" ? (\n listConfig\n ) : (\n <>\n <div\n className={cn(\"hj-upload-select\", classNames?.trigger)}\n style={{ ...style, ...styles?.trigger }}\n >\n {rcUpload}\n </div>\n {listConfig}\n </>\n )}\n </span>\n );\n}\n\ntype UploadComponent = (<ResponseType = unknown>(\n props: UploadProps<ResponseType> & RefAttributes<UploadRef<ResponseType>>,\n) => ReactElement | null) & {\n Dragger: typeof UploadDragger;\n LIST_IGNORE: string;\n};\n\nexport interface DraggerProps<ResponseType = unknown> extends UploadProps<ResponseType> {\n readonly height?: CSSProperties[\"height\"];\n}\n\nconst UploadBase = forwardRef(InternalUpload) as unknown as UploadComponent;\nconst UploadDragger = forwardRef<UploadRef, DraggerProps>(function UploadDragger(\n { height, style, ...props },\n ref,\n) {\n return <UploadBase {...props} ref={ref} style={{ ...style, height }} type=\"drag\" />;\n});\n\nexport const Upload = Object.assign(UploadBase, {\n Dragger: UploadDragger,\n LIST_IGNORE,\n});\n",
|
|
16
|
+
"import type {\n AnchorHTMLAttributes,\n ButtonHTMLAttributes,\n ForwardedRef,\n HTMLAttributes,\n MouseEvent,\n ReactNode,\n} from \"react\";\nimport { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type ButtonType = \"default\" | \"primary\" | \"dashed\" | \"link\" | \"text\";\nexport type ButtonColor =\n | \"default\"\n | \"primary\"\n | \"danger\"\n | \"blue\"\n | \"purple\"\n | \"cyan\"\n | \"green\"\n | \"magenta\"\n | \"pink\"\n | \"red\"\n | \"orange\"\n | \"yellow\"\n | \"volcano\"\n | \"geekblue\"\n | \"lime\"\n | \"gold\"\n | \"success\"\n | \"info\"\n | \"purchase\"\n | \"download\";\nexport type ButtonShape = \"default\" | \"circle\" | \"round\" | \"square\";\nexport type ButtonTone =\n | \"primary\"\n | \"default\"\n | \"secondary\"\n | \"ghost\"\n | \"danger\"\n | \"success\"\n | \"info\"\n | \"light\"\n | \"purchase\"\n | \"download\";\nexport type AntdButtonVariant = \"outlined\" | \"dashed\" | \"solid\" | \"filled\" | \"text\" | \"link\";\nexport type ButtonVariant = AntdButtonVariant | \"secondary\" | \"translucent\" | \"toggle\" | \"icon\";\nexport type AntdButtonSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type ButtonSize = AntdButtonSize | \"xs\" | \"sm\" | \"md\" | \"lg\";\ntype ButtonVisualSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type ButtonStatus = \"default\" | \"hover\" | \"active\";\nexport type ButtonWidth = \"default\" | \"narrow\" | \"auto\";\ntype ButtonSlot = \"root\" | \"icon\" | \"content\" | \"loadingIcon\";\n\ntype MergedButtonHtmlAttributes = Omit<\n HTMLAttributes<HTMLElement> &\n ButtonHTMLAttributes<HTMLElement> &\n AnchorHTMLAttributes<HTMLElement>,\n \"color\" | \"type\"\n>;\n\nexport interface ButtonProps extends MergedButtonHtmlAttributes {\n readonly autoInsertSpace?: boolean;\n readonly block?: boolean;\n readonly classNames?: SlotClassNames<ButtonSlot>;\n readonly color?: ButtonColor;\n readonly danger?: boolean;\n readonly ghost?: boolean;\n readonly href?: string;\n readonly htmlType?: ButtonHTMLAttributes<HTMLButtonElement>[\"type\"];\n readonly icon?: ReactNode;\n readonly iconPosition?: \"start\" | \"end\";\n readonly iconPlacement?: \"start\" | \"end\";\n readonly loading?: boolean | { readonly delay?: number; readonly icon?: ReactNode };\n readonly rootClassName?: string;\n readonly shape?: ButtonShape;\n readonly styles?: SlotStyles<ButtonSlot>;\n readonly status?: ButtonStatus;\n readonly tone?: ButtonTone;\n readonly size?: ButtonSize;\n readonly type?: ButtonType;\n readonly variant?: ButtonVariant;\n readonly width?: ButtonWidth;\n}\n\nconst solidToneClass: Record<ButtonTone, string> = {\n primary:\n \"bg-[var(--hj-button-primary-bg)] text-[var(--hj-button-primary-fg)] hover:bg-[var(--hj-button-primary-bg-hover)] active:bg-[var(--hj-button-primary-bg-active)] active:text-[var(--hj-button-primary-fg-active)]\",\n default:\n \"bg-[var(--hj-button-default-bg)] text-[var(--hj-button-default-fg)] hover:bg-[var(--hj-button-default-bg-hover)] hover:text-[var(--hj-button-default-fg-hover)] active:bg-[var(--hj-button-default-bg-active)] active:text-[var(--hj-button-default-fg-hover)]\",\n secondary:\n \"bg-[var(--hj-button-default-bg)] text-[var(--hj-button-default-fg)] hover:bg-[var(--hj-button-default-bg-hover)] hover:text-[var(--hj-button-default-fg-hover)] active:bg-[var(--hj-button-default-bg-active)] active:text-[var(--hj-button-default-fg-hover)]\",\n ghost: \"bg-transparent text-white/60 hover:bg-white/5 hover:text-white\",\n danger: \"bg-[var(--hj-color-danger)] text-white hover:bg-[var(--hj-color-danger-soft)]\",\n success: \"bg-[var(--hj-color-success)] text-white hover:brightness-110\",\n info: \"bg-[var(--hj-color-info)] text-white hover:brightness-110\",\n light:\n \"bg-[var(--hj-button-light-bg)] text-[var(--hj-button-light-fg)] shadow-[inset_0_0_0_1px_var(--hj-button-light-border)] hover:bg-[var(--hj-button-light-bg-hover)] hover:shadow-[inset_0_0_0_1px_var(--hj-button-light-border-hover)] active:bg-[var(--hj-button-light-bg-active)]\",\n purchase: \"bg-[var(--hj-color-purchase)] text-white hover:brightness-110\",\n download:\n \"bg-[var(--hj-button-primary-bg)] text-[var(--hj-button-primary-fg)] hover:bg-[var(--hj-button-primary-bg-hover)] active:bg-[var(--hj-button-primary-bg-active)] active:text-[var(--hj-button-primary-fg-active)]\",\n};\n\nconst sizeClass: Record<ButtonVisualSize, string> = {\n xs: \"h-[var(--hj-button-xs-height)] min-w-[var(--hj-button-xs-min-width)] rounded-[var(--hj-radius-sm)] px-[var(--hj-button-xs-padding-x)] text-[length:var(--hj-button-xs-font-size)] leading-[var(--hj-button-xs-line-height)]\",\n sm: \"h-[var(--hj-button-sm-height)] min-w-[var(--hj-button-sm-min-width)] rounded-[var(--hj-radius-sm)] px-[var(--hj-button-sm-padding-x)] text-[length:var(--hj-button-sm-font-size)] leading-[var(--hj-button-sm-line-height)]\",\n md: \"h-[var(--hj-button-md-height)] min-w-[var(--hj-button-md-min-width)] rounded-[var(--hj-radius-md)] px-[var(--hj-button-md-padding-x)] text-[length:var(--hj-button-md-font-size)] leading-[var(--hj-button-md-line-height)]\",\n lg: \"h-[var(--hj-button-lg-height)] min-w-[var(--hj-button-lg-min-width)] rounded-[var(--hj-radius-md)] px-[var(--hj-button-lg-padding-x)] text-[length:var(--hj-button-lg-font-size)] leading-[var(--hj-button-lg-line-height)]\",\n};\n\nconst iconTextPaddingVariable: Record<ButtonVisualSize, string> = {\n xs: \"var(--hj-button-xs-icon-padding-x)\",\n sm: \"var(--hj-button-sm-icon-padding-x)\",\n md: \"var(--hj-button-md-icon-padding-x)\",\n lg: \"var(--hj-button-lg-icon-padding-x)\",\n};\n\nconst narrowWidthClass: Record<ButtonVisualSize, string> = {\n xs: \"w-[var(--hj-button-xs-narrow-width)] min-w-[var(--hj-button-xs-narrow-width)] px-0\",\n sm: \"w-[var(--hj-button-sm-narrow-width)] min-w-[var(--hj-button-sm-narrow-width)] px-0\",\n md: \"w-[var(--hj-button-md-min-width)] min-w-[var(--hj-button-md-min-width)]\",\n lg: \"w-[var(--hj-button-lg-min-width)] min-w-[var(--hj-button-lg-min-width)]\",\n};\n\nconst autoWidthClass = \"w-auto min-w-0\";\n\nconst iconSizeClass: Record<ButtonVisualSize, string> = {\n xs: \"h-[var(--hj-button-xs-height)] w-[var(--hj-button-xs-height)] min-w-[var(--hj-button-xs-height)] rounded-[var(--hj-radius-sm)] p-0 text-[length:var(--hj-button-xs-font-size)] leading-[var(--hj-button-xs-line-height)]\",\n sm: \"h-[var(--hj-button-sm-height)] w-[var(--hj-button-sm-height)] min-w-[var(--hj-button-sm-height)] rounded-[var(--hj-radius-sm)] p-0 text-[length:var(--hj-button-sm-font-size)] leading-[var(--hj-button-sm-line-height)]\",\n md: \"h-[var(--hj-button-md-height)] w-[var(--hj-button-md-height)] min-w-[var(--hj-button-md-height)] rounded-[var(--hj-radius-md)] p-0 text-[length:var(--hj-button-md-font-size)] leading-[var(--hj-button-md-line-height)]\",\n lg: \"h-[var(--hj-button-lg-height)] w-[var(--hj-button-lg-height)] min-w-[var(--hj-button-lg-height)] rounded-[var(--hj-radius-md)] p-0 text-[length:var(--hj-button-lg-font-size)] leading-[var(--hj-button-lg-line-height)]\",\n};\nconst circleSizeClass: Record<ButtonVisualSize, string> = {\n xs: \"h-[var(--hj-button-xs-height)] w-[var(--hj-button-xs-height)] min-w-[var(--hj-button-xs-height)] rounded-full px-0\",\n sm: \"h-[var(--hj-button-sm-height)] w-[var(--hj-button-sm-height)] min-w-[var(--hj-button-sm-height)] rounded-full px-0\",\n md: \"h-[var(--hj-button-md-height)] w-[var(--hj-button-md-height)] min-w-[var(--hj-button-md-height)] rounded-full px-0\",\n lg: \"h-[var(--hj-button-lg-height)] w-[var(--hj-button-lg-height)] min-w-[var(--hj-button-lg-height)] rounded-full px-0\",\n};\nconst textSizeClass =\n \"h-5 min-w-0 rounded-none p-0 text-[length:var(--hj-button-md-font-size)] leading-[var(--hj-button-md-line-height)]\";\n\nfunction normalizeButtonSize(\n size: ButtonSize | undefined,\n fallback: \"sm\" | \"md\" | \"lg\",\n): ButtonVisualSize {\n if (size === \"small\" || size === \"sm\") return \"sm\";\n if (size === \"large\" || size === \"lg\") return \"lg\";\n if (size === \"medium\" || size === \"middle\" || size === \"md\") return \"md\";\n return size ?? fallback;\n}\n\nconst statusClass: Record<\n ButtonStatus,\n Record<\"primary\" | \"default\" | \"toggle\" | \"text\", string>\n> = {\n default: {\n primary: \"\",\n default: \"\",\n toggle: \"\",\n text: \"\",\n },\n hover: {\n primary: \"bg-[var(--hj-button-primary-bg-hover)] text-[var(--hj-button-primary-fg-active)]\",\n default: \"bg-[var(--hj-button-default-bg-hover)] text-[var(--hj-button-default-fg-hover)]\",\n toggle: \"bg-[var(--hj-button-toggle-bg-hover)] text-[var(--hj-button-primary-bg)]\",\n text: \"text-[var(--hj-button-primary-bg)] brightness-110\",\n },\n active: {\n primary: \"bg-[var(--hj-button-primary-bg-active)] text-[var(--hj-button-primary-fg-active)]\",\n default: \"bg-[var(--hj-button-default-bg-active)] text-[var(--hj-button-default-fg-hover)]\",\n toggle: \"bg-[var(--hj-button-toggle-bg-active)] text-[var(--hj-button-primary-fg-active)]\",\n text: \"text-[var(--hj-button-text-fg)] brightness-50\",\n },\n};\n\nfunction resolveVariantClass(tone: ButtonTone, variant: ButtonVariant) {\n if ((variant === \"text\" || variant === \"link\") && (tone === \"default\" || tone === \"secondary\"))\n return \"bg-transparent text-[var(--hj-button-text-default-fg)] hover:text-[var(--hj-button-text-fg)] active:brightness-50\";\n if (variant === \"text\" || variant === \"link\")\n return \"bg-transparent text-[var(--hj-button-text-fg)] hover:brightness-110 active:brightness-50\";\n if (variant === \"outlined\" || variant === \"dashed\") {\n const toneClass =\n tone === \"danger\"\n ? \"text-[var(--hj-color-danger)]\"\n : tone === \"success\"\n ? \"text-[var(--hj-color-success)]\"\n : tone === \"info\"\n ? \"text-[var(--hj-color-info)]\"\n : tone === \"purchase\"\n ? \"text-[var(--hj-color-purchase)]\"\n : tone === \"primary\" || tone === \"download\"\n ? \"text-[var(--hj-color-brand)]\"\n : \"text-[var(--hj-button-default-fg)]\";\n return cn(\n \"border border-current bg-transparent hover:bg-[var(--hj-button-default-bg-hover)]\",\n variant === \"dashed\" && \"border-dashed\",\n toneClass,\n );\n }\n if (variant === \"translucent\" || variant === \"filled\")\n return \"bg-[var(--hj-button-translucent-bg)] text-[var(--hj-button-default-fg)] hover:bg-[var(--hj-button-translucent-bg-hover)] hover:text-[var(--hj-button-default-fg-hover)] active:bg-[var(--hj-button-translucent-bg-active)] active:text-[var(--hj-button-default-fg-hover)]\";\n if (variant === \"toggle\")\n return \"border border-[var(--hj-button-toggle-border)] bg-[var(--hj-button-toggle-bg)] text-[var(--hj-color-brand-weak)] hover:bg-[var(--hj-button-toggle-bg-hover)] active:bg-[var(--hj-button-toggle-bg-active)]\";\n if (variant === \"icon\" || variant === \"solid\") return solidToneClass[tone];\n if (variant === \"secondary\" || tone === \"secondary\" || tone === \"default\")\n return solidToneClass.secondary;\n return solidToneClass[tone];\n}\n\nfunction resolveStatusClass(tone: ButtonTone, variant: ButtonVariant, status: ButtonStatus) {\n if (status === \"default\") return \"\";\n if (variant === \"text\" || variant === \"link\") return statusClass[status].text;\n if (variant === \"translucent\" || variant === \"filled\") {\n if (status === \"hover\")\n return \"bg-[var(--hj-button-translucent-bg-hover)] text-[var(--hj-button-default-fg-hover)]\";\n return \"bg-[var(--hj-button-translucent-bg-active)] text-[var(--hj-button-default-fg-hover)]\";\n }\n if (variant === \"toggle\") return statusClass[status].toggle;\n if (\n variant === \"secondary\" ||\n variant === \"outlined\" ||\n variant === \"dashed\" ||\n tone === \"secondary\" ||\n tone === \"default\" ||\n tone === \"light\"\n )\n return statusClass[status].default;\n return statusClass[status].primary;\n}\n\nfunction resolveDisabledOpacity(tone: ButtonTone, variant: ButtonVariant) {\n if (variant === \"toggle\") return \"disabled:opacity-50\";\n if (\n variant === \"secondary\" ||\n variant === \"outlined\" ||\n variant === \"dashed\" ||\n tone === \"secondary\" ||\n tone === \"default\" ||\n tone === \"light\"\n )\n return \"disabled:opacity-40\";\n return \"disabled:opacity-50\";\n}\n\nfunction resolveAntdTone({\n color,\n danger,\n ghost,\n tone,\n type,\n}: {\n readonly color?: ButtonColor;\n readonly danger?: boolean;\n readonly ghost?: boolean;\n readonly tone?: ButtonTone;\n readonly type?: ButtonType;\n}): ButtonTone {\n if (tone) return tone;\n if (\n danger ||\n color === \"danger\" ||\n color === \"red\" ||\n color === \"pink\" ||\n color === \"magenta\" ||\n color === \"volcano\"\n )\n return \"danger\";\n if (color === \"success\" || color === \"green\" || color === \"lime\") return \"success\";\n if (\n color === \"info\" ||\n color === \"blue\" ||\n color === \"cyan\" ||\n color === \"geekblue\" ||\n color === \"purple\"\n )\n return \"info\";\n if (color === \"purchase\" || color === \"orange\" || color === \"yellow\" || color === \"gold\")\n return \"purchase\";\n if (color === \"download\") return \"download\";\n if (ghost) return \"ghost\";\n if (type === \"primary\" || color === \"primary\") return \"primary\";\n if (type === \"link\" || type === \"text\") return \"ghost\";\n return \"secondary\";\n}\n\nfunction resolveAntdVariant({\n ghost,\n tone,\n type,\n variant,\n}: {\n readonly ghost?: boolean;\n readonly tone: ButtonTone;\n readonly type?: ButtonType;\n readonly variant?: ButtonVariant;\n}): ButtonVariant {\n if (variant) return variant;\n if (type === \"text\" || ghost || tone === \"ghost\") return \"text\";\n if (type === \"link\") return \"link\";\n if (type === \"dashed\") return \"dashed\";\n if (tone === \"secondary\" || tone === \"default\") return \"outlined\";\n return \"solid\";\n}\n\nfunction getLoadingDelay(loading: ButtonProps[\"loading\"]) {\n if (typeof loading === \"object\") return Math.max(0, loading.delay ?? 0);\n return 0;\n}\n\nexport const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(\n function Button(\n {\n autoInsertSpace,\n block = false,\n children,\n className = \"\",\n classNames,\n color,\n danger,\n disabled,\n ghost,\n href,\n htmlType = \"button\",\n icon,\n iconPlacement,\n iconPosition = \"start\",\n loading = false,\n onClick,\n rootClassName,\n shape = \"default\",\n size,\n style,\n styles,\n status = \"default\",\n tone,\n type,\n variant,\n width = \"default\",\n ...props\n },\n ref,\n ) {\n const config = useConfig();\n const mergedSize = normalizeButtonSize(size ?? config.components.Button?.size, config.size);\n const delay = useMemo(() => getLoadingDelay(loading), [loading]);\n const [delayedLoading, setDelayedLoading] = useState(\n typeof loading === \"boolean\" ? loading : delay <= 0 && Boolean(loading),\n );\n useEffect(() => {\n if (!loading) {\n setDelayedLoading(false);\n return undefined;\n }\n if (delay <= 0) {\n setDelayedLoading(true);\n return undefined;\n }\n const timer = window.setTimeout(() => setDelayedLoading(true), delay);\n return () => window.clearTimeout(timer);\n }, [delay, loading]);\n\n const mergedTone = resolveAntdTone({ color, danger, ghost, tone, type });\n const mergedDisabled =\n disabled || delayedLoading || config.disabled || config.components.Button?.disabled;\n const mergedVariant = resolveAntdVariant({ ghost, tone: mergedTone, type, variant });\n const isTextVariant = mergedVariant === \"text\" || mergedVariant === \"link\";\n const mergedSizeClass =\n mergedVariant === \"icon\"\n ? iconSizeClass[mergedSize]\n : isTextVariant\n ? textSizeClass\n : sizeClass[mergedSize];\n const fontStyle =\n mergedTone === \"light\"\n ? {\n fontFamily: \"var(--hj-button-light-font-family)\",\n fontWeight: \"var(--hj-button-light-font-weight)\",\n }\n : { fontFamily: \"var(--hj-button-font-family)\" };\n const mergedIconPosition = iconPlacement ?? iconPosition;\n const loadingIcon = typeof loading === \"object\" ? loading.icon : undefined;\n const iconNode = delayedLoading ? (\n <span\n aria-hidden=\"true\"\n className={slotClass(\n classNames,\n \"loadingIcon\",\n \"h-3.5 w-3.5 animate-spin rounded-full border-2 border-current border-t-transparent motion-reduce:animate-none\",\n )}\n style={slotStyle(styles, \"loadingIcon\")}\n >\n {loadingIcon}\n </span>\n ) : icon ? (\n <span\n className={slotClass(\n classNames,\n \"icon\",\n \"inline-flex shrink-0 items-center justify-center\",\n )}\n style={slotStyle(styles, \"icon\")}\n >\n {icon}\n </span>\n ) : null;\n const hasTextIcon = Boolean(\n iconNode && children != null && mergedVariant !== \"icon\" && !isTextVariant,\n );\n const iconTextPaddingStyle = hasTextIcon\n ? { paddingInline: iconTextPaddingVariable[mergedSize] }\n : undefined;\n const rootClass = slotClass(\n classNames,\n \"root\",\n \"hj-wave inline-flex cursor-pointer select-none items-center justify-center gap-1.5 border-0 font-[var(--hj-button-font-weight)] transition disabled:cursor-not-allowed\",\n block && \"w-full\",\n mergedSizeClass,\n shape === \"round\" && \"rounded-full\",\n shape === \"circle\" && circleSizeClass[mergedSize],\n shape === \"square\" && children == null && iconSizeClass[mergedSize],\n width === \"narrow\" &&\n mergedVariant !== \"icon\" &&\n !isTextVariant &&\n narrowWidthClass[mergedSize],\n width === \"auto\" && mergedVariant !== \"icon\" && !isTextVariant && autoWidthClass,\n resolveVariantClass(mergedTone, mergedVariant),\n resolveStatusClass(mergedTone, mergedVariant, status),\n resolveDisabledOpacity(mergedTone, mergedVariant),\n rootClassName,\n className,\n );\n const rootStyle = {\n ...fontStyle,\n ...iconTextPaddingStyle,\n ...slotStyle(styles, \"root\", style),\n };\n const content = (\n <>\n {mergedIconPosition === \"start\" ? iconNode : null}\n {children == null ? null : (\n <span\n className={cn(\n \"relative overflow-visible whitespace-nowrap\",\n autoInsertSpace && \"tracking-normal\",\n classNames?.content,\n )}\n style={styles?.content}\n >\n {children}\n </span>\n )}\n {mergedIconPosition === \"end\" ? iconNode : null}\n </>\n );\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n if (mergedDisabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n onClick?.(event);\n };\n\n if (href !== undefined) {\n return (\n <a\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n aria-busy={delayedLoading || undefined}\n aria-disabled={mergedDisabled || undefined}\n className={rootClass}\n href={mergedDisabled ? undefined : href}\n onClick={handleClick}\n ref={ref as ForwardedRef<HTMLAnchorElement>}\n style={rootStyle}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n {...(props as ButtonHTMLAttributes<HTMLButtonElement>)}\n aria-busy={delayedLoading || undefined}\n className={rootClass}\n disabled={mergedDisabled}\n onClick={handleClick}\n ref={ref as ForwardedRef<HTMLButtonElement>}\n style={rootStyle}\n type={htmlType}\n >\n {content}\n </button>\n );\n },\n);\n",
|
|
17
|
+
"import type { SVGAttributes } from \"react\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type IconName =\n | \"back\"\n | \"bars\"\n | \"bell\"\n | \"calendar\"\n | \"cart\"\n | \"check\"\n | \"chevron-down\"\n | \"chevron-right\"\n | \"close\"\n | \"copy\"\n | \"document\"\n | \"download\"\n | \"eye\"\n | \"flame\"\n | \"gamepad\"\n | \"gift\"\n | \"lock\"\n | \"minus\"\n | \"plus\"\n | \"refresh\"\n | \"rocket\"\n | \"search\"\n | \"shield\"\n | \"star\"\n | \"tag\"\n | \"thumb-up\"\n | \"user\"\n | \"warning\";\n\ntype IconSlot = \"root\";\n\nexport interface IconProps extends Omit<SVGAttributes<SVGSVGElement>, \"children\"> {\n readonly classNames?: SlotClassNames<IconSlot>;\n readonly name: IconName;\n readonly size?: 16 | 20 | 22 | 24 | number;\n readonly strokeWidth?: number;\n readonly styles?: SlotStyles<IconSlot>;\n}\n\nexport function Icon({\n className = \"\",\n classNames,\n name,\n size = 16,\n strokeWidth = 2,\n style,\n styles,\n ...props\n}: IconProps) {\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icons are hidden; labelled icons receive aria-label from props.\n <svg\n aria-hidden={props[\"aria-label\"] ? undefined : true}\n className={slotClass(classNames, \"root\", \"inline-block shrink-0\", className)}\n fill=\"none\"\n height={size}\n style={slotStyle(styles, \"root\", style)}\n viewBox=\"0 0 24 24\"\n width={size}\n {...props}\n >\n {renderPath(name, strokeWidth)}\n </svg>\n );\n}\n\nfunction renderPath(name: IconName, strokeWidth: number) {\n switch (name) {\n case \"back\":\n return (\n <path\n d=\"m14.5 6-6 6 6 6\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"bars\":\n return (\n <>\n <rect fill=\"currentColor\" height=\"8\" rx=\"1.5\" width=\"4\" x=\"4\" y=\"10\" />\n <rect fill=\"currentColor\" height=\"14\" rx=\"1.5\" width=\"4\" x=\"10\" y=\"4\" />\n <rect fill=\"currentColor\" height=\"6\" rx=\"1.5\" width=\"4\" x=\"16\" y=\"12\" />\n </>\n );\n case \"bell\":\n return (\n <>\n <path\n d=\"M6.5 10.5c0-3.4 2.1-5.7 5.5-5.7s5.5 2.3 5.5 5.7v3.2l1.5 2H5l1.5-2v-3.2Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <path\n d=\"M9.8 18.2c.45.72 1.18 1.08 2.2 1.08s1.75-.36 2.2-1.08\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"calendar\":\n return (\n <>\n <rect\n height=\"16\"\n rx=\"3\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n width=\"16\"\n x=\"4\"\n y=\"5\"\n />\n <path\n d=\"M8 3.5v4M16 3.5v4M4 10h16\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"cart\":\n return (\n <>\n <path\n d=\"M4 5h2l1.5 9h9.2l2-6.5H7\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <circle cx=\"9.3\" cy=\"18.5\" fill=\"currentColor\" r=\"1.3\" />\n <circle cx=\"16.4\" cy=\"18.5\" fill=\"currentColor\" r=\"1.3\" />\n </>\n );\n case \"check\":\n return (\n <path\n d=\"m5 12.5 4.2 4.2L19 7\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"chevron-down\":\n return (\n <path\n d=\"m7 10 5 5 5-5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"chevron-right\":\n return (\n <path\n d=\"m10 7 5 5-5 5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"close\":\n return (\n <path\n d=\"m7 7 10 10M17 7 7 17\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"copy\":\n return (\n <>\n <rect\n height=\"11\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n width=\"11\"\n x=\"8\"\n y=\"5\"\n />\n <path\n d=\"M5 8v9c0 1.1.9 2 2 2h9\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"document\":\n return (\n <>\n <rect\n height=\"20\"\n rx=\"4\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n width=\"20\"\n x=\"2\"\n y=\"2\"\n />\n <path\n d=\"M8 8h8M8 12h8M8 16h5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"download\":\n return (\n <>\n <path\n d=\"M12 4v10M8 10l4 4 4-4M5 19h14\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"eye\":\n return (\n <>\n <path\n d=\"M3.5 12s3-5 8.5-5 8.5 5 8.5 5-3 5-8.5 5-8.5-5-8.5-5Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <circle cx=\"12\" cy=\"12\" r=\"2.2\" stroke=\"currentColor\" strokeWidth={strokeWidth} />\n </>\n );\n case \"flame\":\n return (\n <path\n d=\"M12.4 21c-3.4 0-6.2-2.3-6.2-5.9 0-2.4 1.4-4.3 3.4-5.9.4 1.8 1.4 2.8 2.6 3.3-.6-3.1.8-5.8 3-7.5.3 2.8 2.6 4.4 2.6 8.1 0 4.6-2.6 7.9-5.4 7.9Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"gamepad\":\n return (\n <>\n <path\n d=\"M7.1 8.2h9.8c1.73 0 2.8.93 3.18 2.76l.66 3.17c.34 1.62-.53 2.77-1.95 2.77-.84 0-1.39-.34-2.06-1.12l-.83-.98H8.1l-.83.98c-.67.78-1.22 1.12-2.06 1.12-1.42 0-2.29-1.15-1.95-2.77l.66-3.17C4.3 9.13 5.37 8.2 7.1 8.2Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <path\n d=\"M7.1 12.5h3.4M8.8 10.8v3.4\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n <circle cx=\"15.1\" cy=\"12.5\" fill=\"currentColor\" r=\"1\" />\n <circle cx=\"17.7\" cy=\"12.5\" fill=\"currentColor\" r=\"1\" />\n </>\n );\n case \"gift\":\n return (\n <>\n <path\n d=\"M4 10h16v10H4V10ZM3.5 7h17v3h-17V7ZM12 7v13\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <path\n d=\"M12 7c-2.7 0-4.5-.8-4.5-2.2C7.5 3.8 8.2 3 9.2 3 10.8 3 12 7 12 7Zm0 0c2.7 0 4.5-.8 4.5-2.2 0-1-.7-1.8-1.7-1.8C13.2 3 12 7 12 7Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"lock\":\n return (\n <>\n <path\n d=\"M7.5 10V8.2C7.5 5.65 9.2 4 12 4s4.5 1.65 4.5 4.2V10\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n <rect\n height=\"9\"\n rx=\"2.2\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n width=\"15\"\n x=\"4.5\"\n y=\"10\"\n />\n </>\n );\n case \"minus\":\n return (\n <path d=\"M5 12h14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth={strokeWidth} />\n );\n case \"plus\":\n return (\n <path\n d=\"M12 5v14M5 12h14\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"refresh\":\n return (\n <path\n d=\"M18 8.2A6.8 6.8 0 1 0 19 12M18 4v4.2h-4.2\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"rocket\":\n return (\n <>\n <path\n d=\"M13 5.5c2-1.9 4.3-2.4 6.2-2.2.2 1.9-.3 4.2-2.2 6.2l-5.6 5.6-3.9.9.9-3.9L13 5.5Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <path\n d=\"M8 16l-3 3M14.8 6.2l3 3\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"search\":\n return (\n <>\n <circle cx=\"11\" cy=\"11\" r=\"6\" stroke=\"currentColor\" strokeWidth={strokeWidth} />\n <path\n d=\"m16 16 4 4\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"shield\":\n return (\n <path\n d=\"M12 3.5 18 6v5.2c0 4.2-2.3 7.2-6 9.3-3.7-2.1-6-5.1-6-9.3V6l6-2.5Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"star\":\n return (\n <path\n d=\"m12 3.8 2.35 4.76 5.25.76-3.8 3.7.9 5.23L12 15.78l-4.7 2.47.9-5.23-3.8-3.7 5.25-.76L12 3.8Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n case \"tag\":\n return (\n <>\n <path\n d=\"M4 5.5V12l7.3 7.3a2.4 2.4 0 0 0 3.4 0l4.6-4.6a2.4 2.4 0 0 0 0-3.4L12 4H5.5A1.5 1.5 0 0 0 4 5.5Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <circle cx=\"8\" cy=\"8\" fill=\"currentColor\" r=\"1.2\" />\n </>\n );\n case \"thumb-up\":\n return (\n <>\n <path\n d=\"M8.5 10.5 11.5 4c1.7.4 2.3 1.7 1.8 3.2l-.6 1.8H18c1.4 0 2.3 1.2 2 2.6l-1.1 5.7c-.3 1.4-1.3 2.2-2.7 2.2H8.5v-9Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <path\n d=\"M4 10.5h4.5v9H4z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"user\":\n return (\n <>\n <path\n d=\"M7.7 8.4a4.3 4.3 0 1 1 8.6 0 4.3 4.3 0 0 1-8.6 0Z\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n />\n <path\n d=\"M5 20c.66-3.38 3.2-5.33 7-5.33s6.34 1.95 7 5.33\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </>\n );\n case \"warning\":\n return (\n <>\n <circle cx=\"12\" cy=\"12\" fill=\"currentColor\" r=\"10\" />\n <path\n d=\"M12 6.8v6.6\"\n stroke=\"var(--hj-color-web-surface)\"\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n <circle cx=\"12\" cy=\"17\" fill=\"var(--hj-color-web-surface)\" r=\"1.2\" />\n </>\n );\n }\n}\n",
|
|
18
|
+
"import RcInput, { TextArea as RcTextArea } from \"@rc-component/input\";\nimport type {\n InputProps as RcInputProps,\n InputRef as RcInputRef,\n TextAreaProps as RcTextAreaProps,\n TextAreaRef as RcTextAreaRef,\n} from \"@rc-component/input\";\nimport { composeRef, raf, triggerFocus, useControlledState } from \"@rc-component/util\";\nimport type { InputFocusOptions } from \"@rc-component/util\";\nimport type {\n CSSProperties,\n ChangeEvent,\n CompositionEventHandler,\n FocusEvent,\n FormEvent,\n ForwardedRef,\n HTMLAttributes,\n InputHTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport {\n Fragment,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Icon } from \"./Icon\";\nimport { useMergedFormItemStatus } from \"./form/statusContext\";\nimport type { FormControlStatus, FormItemStatus } from \"./form/statusContext\";\n\nexport type { InputFocusOptions };\nexport type InputRef = RcInputRef;\nexport type InputStatus = FormControlStatus;\nexport type AntdInputSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type InputSize = AntdInputSize | \"sm\" | \"md\" | \"lg\";\nexport type AntdInputVariant = \"outlined\" | \"borderless\" | \"filled\" | \"underlined\";\nexport type InputVariant = AntdInputVariant | \"default\" | \"active\";\nexport type InputVisualSize = \"sm\" | \"md\" | \"lg\";\n\ntype InputSlot =\n | \"group\"\n | \"root\"\n | \"wrapper\"\n | \"input\"\n | \"prefix\"\n | \"suffix\"\n | \"clear\"\n | \"count\"\n | \"addonBefore\"\n | \"addonAfter\";\n\nexport interface InputProps extends Omit<RcInputProps, \"classNames\" | \"prefixCls\" | \"styles\"> {\n /** @deprecated Use variant instead. */\n readonly bordered?: boolean;\n readonly classNames?: SlotClassNames<InputSlot>;\n readonly rootClassName?: string;\n readonly size?: InputSize;\n readonly status?: InputStatus;\n readonly styles?: SlotStyles<InputSlot>;\n readonly variant?: InputVariant;\n}\n\nconst statusClass: Record<FormItemStatus, string> = {\n \"\": \"border-[var(--hj-input-border)] focus-within:border-[var(--hj-input-border-active)] focus:border-[var(--hj-input-border-active)]\",\n error:\n \"border-[var(--hj-color-danger)] focus-within:border-[var(--hj-color-danger)] focus:border-[var(--hj-color-danger)]\",\n warning:\n \"border-[var(--hj-color-warning)] focus-within:border-[var(--hj-color-warning)] focus:border-[var(--hj-color-warning)]\",\n success:\n \"border-[var(--hj-color-success)] focus-within:border-[var(--hj-color-success)] focus:border-[var(--hj-color-success)]\",\n validating:\n \"border-[var(--hj-input-border)] focus-within:border-[var(--hj-input-border-active)] focus:border-[var(--hj-input-border-active)]\",\n};\n\nconst sizeClass: Record<InputVisualSize, string> = {\n sm: \"h-[var(--hj-input-height-sm)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)] leading-[var(--hj-input-line-height)]\",\n md: \"h-[var(--hj-input-height-md)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)] leading-[var(--hj-input-line-height)]\",\n lg: \"h-[var(--hj-input-height-lg)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)] leading-[var(--hj-input-line-height)]\",\n};\n\nconst nativeSizeClass: Record<InputVisualSize, string> = {\n sm: \"hj-input-small\",\n md: \"hj-input-medium\",\n lg: \"hj-input-large\",\n};\n\nconst textAreaSizeClass: Record<InputVisualSize, string> = {\n sm: \"min-h-[var(--hj-input-height-sm)] px-[var(--hj-input-padding-x)] py-1.5\",\n md: \"min-h-[calc(var(--hj-input-height-md)*2)] px-[var(--hj-input-padding-x)] py-2\",\n lg: \"min-h-[calc(var(--hj-input-height-lg)*2)] px-[var(--hj-input-padding-x)] py-2.5\",\n};\n\nconst otpCellSizeClass: Record<InputVisualSize, string> = {\n sm: \"w-[var(--hj-input-height-sm)] px-0 text-center\",\n md: \"w-[var(--hj-input-height-md)] px-0 text-center\",\n lg: \"w-[var(--hj-input-height-lg)] px-0 text-center\",\n};\n\nexport function normalizeInputSize(\n size: InputSize | undefined,\n fallback: InputVisualSize = \"md\",\n): InputVisualSize {\n if (size === \"small\" || size === \"sm\") return \"sm\";\n if (size === \"large\" || size === \"lg\") return \"lg\";\n if (size === \"medium\" || size === \"middle\" || size === \"md\") return \"md\";\n return fallback;\n}\n\nconst variantClassName: Record<InputVariant, string> = {\n active: \"border-[var(--hj-input-border-active)] bg-[var(--hj-input-bg-active)]\",\n borderless: \"border-transparent bg-transparent\",\n default: \"\",\n filled: \"border-transparent bg-[var(--hj-input-bg-active)]\",\n outlined: \"\",\n underlined: \"rounded-none border-x-0 border-t-0 bg-transparent px-0\",\n};\n\nconst inputBaseClass =\n \"min-w-0 rounded-[var(--hj-input-radius)] border bg-[var(--hj-input-bg)] text-[var(--hj-input-fg)] outline-none transition placeholder:text-[var(--hj-input-placeholder)] hover:bg-[var(--hj-input-bg-active)] disabled:cursor-not-allowed disabled:opacity-50\";\nconst affixInputClass =\n \"h-full min-w-0 flex-1 border-0 bg-transparent p-0 font-[inherit] text-[var(--hj-input-fg)] outline-none placeholder:text-[var(--hj-input-placeholder)] disabled:cursor-not-allowed\";\nconst affixWrapperClass =\n \"flex min-w-0 items-center gap-[var(--hj-input-gap)] rounded-[var(--hj-input-radius)] border bg-[var(--hj-input-bg)] transition hover:bg-[var(--hj-input-bg-active)]\";\nconst textAreaBaseClass =\n \"w-full resize-y rounded-[var(--hj-input-radius)] border bg-[var(--hj-input-bg)] text-[var(--hj-input-fg)] outline-none transition placeholder:text-[var(--hj-input-placeholder)] hover:bg-[var(--hj-input-bg-active)] disabled:cursor-not-allowed disabled:opacity-50\";\n\nconst InputGroupSizeContext = createContext<InputSize | undefined>(undefined);\n\nfunction getMergedVariant(\n variant: InputVariant | undefined,\n bordered: boolean | undefined,\n): InputVariant {\n if (variant) return variant;\n return bordered === false ? \"borderless\" : \"outlined\";\n}\n\nfunction renderClearIcon() {\n return (\n <>\n <Icon name=\"close\" size={14} />\n <span className=\"sr-only\">清空</span>\n </>\n );\n}\n\nfunction mergeAllowClear(allowClear: RcInputProps[\"allowClear\"]): RcInputProps[\"allowClear\"] {\n if (!allowClear) return allowClear;\n if (typeof allowClear === \"object\") {\n return {\n ...allowClear,\n clearIcon: allowClear.clearIcon || renderClearIcon(),\n };\n }\n return { clearIcon: renderClearIcon() };\n}\n\nfunction InputInner(props: InputProps, ref: ForwardedRef<InputRef>) {\n const {\n addonAfter,\n addonBefore,\n allowClear,\n bordered,\n className,\n classNames,\n count,\n disabled,\n rootClassName,\n showCount,\n size,\n status,\n style,\n styles,\n variant,\n ...restProps\n } = props;\n const config = useConfig();\n const groupSize = useContext(InputGroupSizeContext);\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(\n size ?? groupSize ?? config.components.Input?.size,\n config.size,\n );\n const mergedDisabled = disabled ?? config.components.Input?.disabled ?? config.disabled;\n const mergedVariant = getMergedVariant(variant, bordered);\n const mergedAllowClear = mergeAllowClear(allowClear);\n const hasAffix = Boolean(\n restProps.prefix || restProps.suffix || mergedAllowClear || showCount || count?.show,\n );\n const hasAddon = addonBefore != null || addonAfter != null;\n const variantClass = cn(\n mergedStatus && `hj-input-status-${mergedStatus}`,\n `hj-input-variant-${mergedVariant}`,\n mergedVariant === \"outlined\" && \"hj-input-variant-default\",\n statusClass[mergedStatus],\n variantClassName[mergedVariant],\n );\n const addonBeforeNode =\n addonBefore == null ? null : (\n <span\n className={slotClass(\n classNames,\n \"addonBefore\",\n \"hj-input-addon-before\",\n \"flex shrink-0 items-center border border-r-0 border-[var(--hj-input-border)] bg-[var(--hj-input-addon-bg)] text-[var(--hj-input-addon-fg)]\",\n sizeClass[mergedSize],\n )}\n style={slotStyle(styles, \"addonBefore\")}\n >\n {addonBefore}\n </span>\n );\n const addonAfterNode =\n addonAfter == null ? null : (\n <span\n className={slotClass(\n classNames,\n \"addonAfter\",\n \"hj-input-addon-after\",\n \"flex shrink-0 items-center border border-l-0 border-[var(--hj-input-border)] bg-[var(--hj-input-addon-bg)] text-[var(--hj-input-addon-fg)]\",\n sizeClass[mergedSize],\n )}\n style={slotStyle(styles, \"addonAfter\")}\n >\n {addonAfter}\n </span>\n );\n\n return (\n <RcInput\n {...restProps}\n addonAfter={addonAfterNode}\n addonBefore={addonBeforeNode}\n allowClear={mergedAllowClear}\n className={slotClass(\n classNames,\n \"root\",\n \"hj-input-root\",\n `hj-input-${mergedSize}`,\n nativeSizeClass[mergedSize],\n mergedStatus && `hj-input-status-${mergedStatus}`,\n `hj-input-variant-${mergedVariant}`,\n mergedVariant === \"outlined\" && \"hj-input-variant-default\",\n rootClassName,\n className,\n )}\n classNames={{\n affixWrapper: cn(\n affixWrapperClass,\n sizeClass[mergedSize],\n `hj-input-affix-wrapper-${mergedSize}`,\n ),\n clear: slotClass(\n classNames,\n \"clear\",\n \"shrink-0 text-[var(--hj-input-clear)] transition hover:text-white [&.hj-input-clear-icon-hidden]:invisible\",\n ),\n count: slotClass(classNames, \"count\", \"shrink-0 text-[var(--hj-input-clear)]\"),\n groupWrapper: slotClass(\n classNames,\n \"group\",\n \"inline-flex min-w-0 overflow-hidden rounded-[var(--hj-input-radius)]\",\n `hj-input-group-wrapper-${mergedSize}`,\n mergedStatus && `hj-input-group-wrapper-status-${mergedStatus}`,\n `hj-input-group-wrapper-variant-${mergedVariant}`,\n ),\n input: slotClass(\n classNames,\n \"input\",\n hasAffix ? affixInputClass : inputBaseClass,\n !hasAffix && sizeClass[mergedSize],\n `hj-input-${mergedSize}`,\n nativeSizeClass[mergedSize],\n hasAddon && !hasAffix && \"min-w-0 flex-1 rounded-none\",\n ),\n prefix: slotClass(classNames, \"prefix\", \"shrink-0 text-[var(--hj-input-icon)]\"),\n suffix: slotClass(classNames, \"suffix\", \"shrink-0 text-[var(--hj-input-icon)]\"),\n variant: variantClass,\n wrapper: slotClass(classNames, \"wrapper\", \"inline-flex min-w-0 flex-1\"),\n }}\n count={count}\n disabled={mergedDisabled}\n prefixCls=\"hj-input\"\n ref={ref}\n showCount={showCount}\n style={{\n ...style,\n ...styles?.root,\n ...(hasAddon ? styles?.group : undefined),\n }}\n styles={{\n affixWrapper: slotStyle(styles, \"root\"),\n clear: slotStyle(styles, \"clear\"),\n count: slotStyle(styles, \"count\"),\n input: slotStyle(styles, \"input\"),\n prefix: slotStyle(styles, \"prefix\"),\n suffix: slotStyle(styles, \"suffix\"),\n }}\n />\n );\n}\n\nconst InternalInput = forwardRef(InputInner);\nInternalInput.displayName = \"Input\";\n\nexport interface GroupProps extends HTMLAttributes<HTMLSpanElement> {\n readonly compact?: boolean;\n readonly rootClassName?: string;\n readonly size?: InputSize;\n}\n\nconst InputGroup = forwardRef<HTMLSpanElement, GroupProps>(function InputGroup(\n { children, className, compact = false, rootClassName, size, ...props },\n ref,\n) {\n const config = useConfig();\n const mergedSize = normalizeInputSize(size, config.size);\n\n return (\n <InputGroupSizeContext.Provider value={size}>\n <span\n {...props}\n className={cn(\n \"hj-input-group\",\n `hj-input-group-${mergedSize}`,\n nativeSizeClass[mergedSize],\n \"inline-flex min-w-0 items-stretch\",\n compact && \"hj-input-group-compact gap-0\",\n rootClassName,\n className,\n )}\n ref={ref}\n >\n {children}\n </span>\n </InputGroupSizeContext.Provider>\n );\n});\n\ntype SearchSlot = InputSlot | \"button\";\n\nexport interface SearchProps extends Omit<InputProps, \"classNames\" | \"styles\" | \"type\"> {\n readonly classNames?: SlotClassNames<SearchSlot>;\n readonly enterButton?: ReactNode;\n readonly loading?: boolean;\n readonly searchIcon?: ReactNode;\n readonly styles?: SlotStyles<SearchSlot>;\n readonly onSearch?: (\n value: string,\n event?:\n | ChangeEvent<HTMLInputElement>\n | MouseEvent<HTMLElement>\n | KeyboardEvent<HTMLInputElement>,\n info?: { readonly source?: \"clear\" | \"input\" },\n ) => void;\n}\n\ninterface SearchButtonElementProps {\n readonly \"aria-busy\"?: boolean;\n readonly className?: string;\n readonly disabled?: boolean;\n readonly style?: CSSProperties;\n readonly onClick?: (event: MouseEvent<HTMLElement>) => void;\n readonly onMouseDown?: (event: MouseEvent<HTMLElement>) => void;\n}\n\nconst InputSearch = forwardRef<InputRef, SearchProps>(function InputSearch(props, ref) {\n const {\n addonAfter,\n className,\n classNames,\n disabled,\n enterButton = false,\n loading = false,\n onChange,\n onCompositionEnd,\n onCompositionStart,\n onPressEnter,\n onSearch,\n searchIcon,\n styles,\n ...inputProps\n } = props;\n const config = useConfig();\n const inputRef = useRef<InputRef>(null);\n const composingRef = useRef(false);\n const mergedDisabled = disabled ?? config.components.Input?.disabled ?? config.disabled;\n\n const triggerSearch = (event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLInputElement>) => {\n if (mergedDisabled || loading) return;\n onSearch?.(inputRef.current?.input?.value ?? \"\", event, { source: \"input\" });\n };\n\n const handleMouseDown = (event: MouseEvent<HTMLElement>) => {\n if (document.activeElement === inputRef.current?.input) event.preventDefault();\n };\n\n const defaultButtonContent = loading ? (\n <Icon className=\"animate-spin\" name=\"refresh\" size={16} />\n ) : (\n (searchIcon ?? <Icon name=\"search\" size={16} />)\n );\n const buttonClassName = slotClass(\n classNames,\n \"button\",\n \"hj-input-search-button\",\n \"inline-flex h-full min-w-8 items-center justify-center gap-1 border-0 bg-transparent px-2 text-[var(--hj-button-default-fg)] transition hover:bg-[var(--hj-button-default-bg-hover)] disabled:cursor-not-allowed disabled:opacity-50\",\n enterButton !== false && \"bg-[var(--hj-color-brand)] text-[var(--hj-button-primary-fg)]\",\n );\n\n let searchButton: ReactNode;\n if (isValidElement<SearchButtonElementProps>(enterButton) && enterButton.type !== Fragment) {\n searchButton = cloneElement(enterButton, {\n \"aria-busy\": loading || undefined,\n className: cn(buttonClassName, enterButton.props.className),\n disabled: mergedDisabled || loading || enterButton.props.disabled,\n onClick: (event) => {\n enterButton.props.onClick?.(event);\n if (!event.defaultPrevented) triggerSearch(event);\n },\n onMouseDown: (event) => {\n enterButton.props.onMouseDown?.(event);\n if (!event.defaultPrevented) handleMouseDown(event);\n },\n style: { ...slotStyle(styles, \"button\"), ...enterButton.props.style },\n });\n } else {\n searchButton = (\n <button\n aria-busy={loading || undefined}\n aria-label={typeof enterButton === \"string\" ? undefined : \"搜索\"}\n className={buttonClassName}\n disabled={mergedDisabled || loading}\n onClick={triggerSearch}\n onMouseDown={handleMouseDown}\n style={slotStyle(styles, \"button\")}\n type=\"button\"\n >\n {typeof enterButton === \"boolean\" || enterButton == null\n ? defaultButtonContent\n : enterButton}\n </button>\n );\n }\n\n const mergedAddonAfter = (\n <span className=\"inline-flex h-full items-stretch\">\n {searchButton}\n {addonAfter == null ? null : <span className=\"inline-flex items-center\">{addonAfter}</span>}\n </span>\n );\n\n return (\n <InternalInput\n {...inputProps}\n addonAfter={mergedAddonAfter}\n className={cn(\n \"hj-input-search\",\n enterButton !== false && \"hj-input-search-with-button\",\n className,\n )}\n classNames={classNames}\n disabled={mergedDisabled}\n onChange={(event) => {\n if (event.type === \"click\") {\n onSearch?.(event.currentTarget.value, event, { source: \"clear\" });\n }\n onChange?.(event);\n }}\n onCompositionEnd={\n ((event) => {\n composingRef.current = false;\n onCompositionEnd?.(event);\n }) satisfies CompositionEventHandler<HTMLInputElement>\n }\n onCompositionStart={\n ((event) => {\n composingRef.current = true;\n onCompositionStart?.(event);\n }) satisfies CompositionEventHandler<HTMLInputElement>\n }\n onPressEnter={(event) => {\n if (composingRef.current || loading) return;\n onPressEnter?.(event);\n triggerSearch(event);\n }}\n ref={composeRef(inputRef, ref)}\n styles={styles}\n type=\"search\"\n />\n );\n});\n\nexport interface PasswordVisibilityToggle {\n readonly tabIndex?: number;\n readonly visible?: boolean;\n readonly onVisibleChange?: (visible: boolean) => void;\n}\n\nexport interface PasswordProps extends InputProps {\n readonly action?: \"click\" | \"hover\";\n readonly iconRender?: (visible: boolean) => ReactNode;\n readonly visibilityToggle?: boolean | PasswordVisibilityToggle;\n}\n\nfunction defaultPasswordIcon(visible: boolean) {\n return (\n <span className=\"relative inline-flex\">\n <Icon name=\"eye\" size={16} />\n {visible ? null : (\n <span\n aria-hidden=\"true\"\n className=\"absolute left-0 top-1/2 h-px w-full -rotate-45 bg-current\"\n />\n )}\n </span>\n );\n}\n\nconst InputPassword = forwardRef<InputRef, PasswordProps>(function InputPassword(props, ref) {\n const {\n action = \"click\",\n className,\n disabled,\n iconRender = defaultPasswordIcon,\n suffix,\n type: _type,\n visibilityToggle = true,\n ...inputProps\n } = props;\n const config = useConfig();\n const mergedDisabled = disabled ?? config.components.Input?.disabled ?? config.disabled;\n const visibilityOptions = typeof visibilityToggle === \"object\" ? visibilityToggle : undefined;\n const [visible, setVisible] = useControlledState(false, visibilityOptions?.visible);\n\n const changeVisibility = (nextVisible: boolean) => {\n if (mergedDisabled || visibilityToggle === false) return;\n setVisible(nextVisible);\n visibilityOptions?.onVisibleChange?.(nextVisible);\n };\n\n const toggleVisibility = () => changeVisibility(!visible);\n\n const visibilityIcon =\n visibilityToggle === false ? null : (\n <button\n aria-label={visible ? \"隐藏密码\" : \"显示密码\"}\n aria-pressed={visible}\n className=\"hj-input-password-icon inline-flex shrink-0 items-center justify-center border-0 bg-transparent p-0 text-[var(--hj-input-icon)]\"\n disabled={mergedDisabled}\n onBlur={action === \"hover\" ? () => changeVisibility(false) : undefined}\n onClick={action === \"click\" ? toggleVisibility : undefined}\n onFocus={action === \"hover\" ? () => changeVisibility(true) : undefined}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={action === \"hover\" ? () => changeVisibility(true) : undefined}\n onMouseLeave={action === \"hover\" ? () => changeVisibility(false) : undefined}\n tabIndex={mergedDisabled ? -1 : (visibilityOptions?.tabIndex ?? 0)}\n type=\"button\"\n >\n {iconRender(visible)}\n </button>\n );\n\n return (\n <InternalInput\n {...inputProps}\n className={cn(\"hj-input-password\", className)}\n disabled={mergedDisabled}\n ref={ref}\n suffix={\n visibilityIcon || suffix ? (\n <span className=\"inline-flex items-center gap-[var(--hj-input-gap)]\">\n {visibilityIcon}\n {suffix}\n </span>\n ) : undefined\n }\n type={visible ? \"text\" : \"password\"}\n />\n );\n});\n\ntype TextAreaSlot = \"root\" | \"textarea\" | \"clear\" | \"count\";\n\nexport interface TextAreaProps\n extends Omit<RcTextAreaProps, \"classNames\" | \"prefixCls\" | \"styles\" | \"suffix\"> {\n /** @deprecated Use variant instead. */\n readonly bordered?: boolean;\n readonly classNames?: SlotClassNames<TextAreaSlot>;\n readonly rootClassName?: string;\n readonly size?: InputSize;\n readonly status?: InputStatus;\n readonly styles?: SlotStyles<TextAreaSlot>;\n readonly variant?: InputVariant;\n}\n\nexport interface TextAreaRef {\n readonly nativeElement: HTMLElement | null;\n readonly resizableTextArea?: RcTextAreaRef[\"resizableTextArea\"];\n readonly blur: () => void;\n readonly focus: (options?: InputFocusOptions) => void;\n}\n\nconst InputTextArea = forwardRef<TextAreaRef, TextAreaProps>(function InputTextArea(props, ref) {\n const {\n allowClear,\n bordered,\n className,\n classNames,\n count,\n disabled,\n rootClassName,\n showCount,\n size,\n status,\n style,\n styles,\n variant,\n ...textAreaProps\n } = props;\n const config = useConfig();\n const groupSize = useContext(InputGroupSizeContext);\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(\n size ?? groupSize ?? config.components.Input?.size,\n config.size,\n );\n const mergedDisabled = disabled ?? config.components.Input?.disabled ?? config.disabled;\n const mergedVariant = getMergedVariant(variant, bordered);\n const mergedAllowClear = mergeAllowClear(allowClear);\n const hasAffix = Boolean(mergedAllowClear || showCount || count?.show);\n const innerRef = useRef<RcTextAreaRef>(null);\n\n useImperativeHandle(ref, () => ({\n blur: () => innerRef.current?.blur(),\n focus: (options) => {\n triggerFocus(innerRef.current?.resizableTextArea?.textArea, options);\n },\n nativeElement: innerRef.current?.nativeElement ?? null,\n resizableTextArea: innerRef.current?.resizableTextArea,\n }));\n\n return (\n <RcTextArea\n {...textAreaProps}\n allowClear={mergedAllowClear}\n className={slotClass(\n classNames,\n \"root\",\n \"hj-input-textarea-root\",\n `hj-input-${mergedSize}`,\n nativeSizeClass[mergedSize],\n mergedStatus && `hj-input-status-${mergedStatus}`,\n `hj-input-variant-${mergedVariant}`,\n mergedVariant === \"outlined\" && \"hj-input-variant-default\",\n rootClassName,\n className,\n )}\n classNames={{\n affixWrapper: cn(affixWrapperClass, \"items-start\", `hj-input-affix-wrapper-${mergedSize}`),\n clear: slotClass(\n classNames,\n \"clear\",\n \"shrink-0 text-[var(--hj-input-clear)] transition hover:text-white [&.hj-input-clear-icon-hidden]:invisible\",\n ),\n count: slotClass(classNames, \"count\", \"shrink-0 text-[var(--hj-input-clear)]\"),\n textarea: slotClass(\n classNames,\n \"textarea\",\n hasAffix\n ? \"w-full flex-1 resize-y border-0 bg-transparent text-[var(--hj-input-fg)] outline-none placeholder:text-[var(--hj-input-placeholder)]\"\n : textAreaBaseClass,\n textAreaSizeClass[mergedSize],\n ),\n variant: cn(\n mergedStatus && `hj-input-status-${mergedStatus}`,\n `hj-input-variant-${mergedVariant}`,\n statusClass[mergedStatus],\n variantClassName[mergedVariant],\n ),\n }}\n count={count}\n disabled={mergedDisabled}\n prefixCls=\"hj-input\"\n ref={innerRef}\n showCount={showCount}\n style={slotStyle(styles, \"root\", style)}\n styles={{\n affixWrapper: slotStyle(styles, \"root\"),\n clear: slotStyle(styles, \"clear\"),\n count: slotStyle(styles, \"count\"),\n textarea: slotStyle(styles, \"textarea\"),\n }}\n />\n );\n});\n\ntype OTPSlot = \"root\" | \"input\" | \"separator\";\n\nexport interface OTPProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"defaultValue\" | \"onChange\" | \"onFocus\" | \"onInput\"\n > {\n readonly autoComplete?: string;\n readonly classNames?: SlotClassNames<OTPSlot>;\n readonly defaultValue?: string;\n readonly disabled?: boolean;\n readonly formatter?: (value: string) => string;\n readonly inputMode?: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"];\n readonly length?: number;\n readonly mask?: boolean | string;\n readonly rootClassName?: string;\n readonly separator?: ReactNode | ((index: number) => ReactNode);\n readonly size?: InputSize;\n readonly status?: InputStatus;\n readonly styles?: SlotStyles<OTPSlot>;\n readonly type?: InputHTMLAttributes<HTMLInputElement>[\"type\"];\n readonly value?: string;\n readonly variant?: InputVariant;\n readonly onChange?: (value: string) => void;\n readonly onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n readonly onInput?: (value: string[]) => void;\n}\n\nexport interface OTPRef {\n readonly nativeElement: HTMLDivElement;\n readonly blur: () => void;\n readonly focus: () => void;\n}\n\nfunction stringToCells(value: string | null | undefined) {\n return Array.from(value ?? \"\");\n}\n\nconst InputOTP = forwardRef<OTPRef, OTPProps>(function InputOTP(props, ref) {\n const {\n autoComplete,\n autoFocus,\n className,\n classNames,\n defaultValue,\n disabled,\n formatter,\n inputMode,\n length = 6,\n mask,\n onChange,\n onFocus,\n onInput,\n rootClassName,\n separator,\n size,\n status,\n style,\n styles,\n type,\n value,\n variant = \"outlined\",\n ...rootProps\n } = props;\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedLength = Math.max(1, Math.floor(length));\n const mergedSize = normalizeInputSize(size ?? config.components.Input?.size, config.size);\n const mergedDisabled = disabled ?? config.components.Input?.disabled ?? config.disabled;\n const formatValue = (text: string) => (formatter ? formatter(text) : text);\n const [innerCells, setInnerCells] = useState(() =>\n stringToCells(formatValue(defaultValue ?? \"\")).slice(0, mergedLength),\n );\n const controlled = value !== undefined;\n const valueCells = controlled\n ? stringToCells(formatValue(value ?? \"\")).slice(0, mergedLength)\n : innerCells.slice(0, mergedLength);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRefs = useRef<Record<number, InputRef | null>>({});\n\n const focusCell = (index: number) => {\n if (index >= 0 && index < mergedLength) inputRefs.current[index]?.focus();\n };\n\n useImperativeHandle(\n ref,\n () => ({\n blur: () => {\n for (let index = 0; index < mergedLength; index += 1) {\n inputRefs.current[index]?.blur();\n }\n },\n focus: () => inputRefs.current[0]?.focus(),\n nativeElement: containerRef.current as HTMLDivElement,\n }),\n [mergedLength],\n );\n\n const patchValue = (index: number, text: string) => {\n let nextCells = [...valueCells];\n for (let fillIndex = 0; fillIndex < index; fillIndex += 1) {\n if (!nextCells[fillIndex]) nextCells[fillIndex] = \"\";\n }\n if (text.length <= 1) nextCells[index] = text;\n else nextCells = nextCells.slice(0, index).concat(stringToCells(text));\n nextCells = nextCells.slice(0, mergedLength);\n while (nextCells.length && !nextCells.at(-1)) nextCells.pop();\n\n const formatted = formatValue(nextCells.map((cell) => cell || \" \").join(\"\"));\n return stringToCells(formatted)\n .slice(0, mergedLength)\n .map((cell, cellIndex) =>\n cell === \" \" && !nextCells[cellIndex] ? nextCells[cellIndex] : cell,\n );\n };\n\n const commitCells = (nextCells: string[]) => {\n if (!controlled) setInnerCells(nextCells);\n onInput?.([...nextCells]);\n const nextValue = nextCells.join(\"\");\n const currentValue = valueCells.join(\"\");\n if (\n nextCells.length === mergedLength &&\n nextCells.every(Boolean) &&\n nextValue !== currentValue\n ) {\n onChange?.(nextValue);\n }\n };\n\n const syncSelection = (index: number) => {\n raf(() => {\n const input = inputRefs.current[index]?.input;\n if (input && document.activeElement === input) input.select();\n });\n };\n\n const handleInput = (index: number, event: FormEvent<HTMLInputElement>) => {\n const text = event.currentTarget.value;\n const nextCells = patchValue(index, text);\n const nextIndex = Math.min(index + stringToCells(text).length, mergedLength - 1);\n if (nextIndex !== index && nextCells[index] !== undefined) focusCell(nextIndex);\n commitCells(nextCells);\n };\n\n return (\n <div\n {...rootProps}\n aria-disabled={mergedDisabled || undefined}\n className={slotClass(\n classNames,\n \"root\",\n \"hj-input-otp hj-otp\",\n `hj-input-otp-${mergedSize}`,\n nativeSizeClass[mergedSize],\n mergedStatus && `hj-input-status-${mergedStatus}`,\n `hj-input-variant-${variant}`,\n \"inline-flex items-center gap-[var(--hj-input-gap)]\",\n mergedDisabled && \"hj-input-otp-disabled opacity-50\",\n rootClassName,\n className,\n )}\n ref={containerRef}\n role={rootProps.role ?? \"group\"}\n style={slotStyle(styles, \"root\", style)}\n >\n {Array.from({ length: mergedLength }, (_, index) => {\n const singleValue = valueCells[index] ?? \"\";\n const customMask = typeof mask === \"string\" && singleValue !== \"\";\n const separatorNode = typeof separator === \"function\" ? separator(index) : separator;\n\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: OTP cells are positional by API.\n <Fragment key={`otp-${index}`}>\n <span className=\"hj-input-otp-cell relative inline-flex shrink-0\">\n <InternalInput\n aria-label={`OTP Input ${index + 1}`}\n autoComplete={autoComplete}\n autoFocus={index === 0 && autoFocus}\n className={slotClass(\n classNames,\n \"input\",\n \"hj-input-otp-input\",\n otpCellSizeClass[mergedSize],\n customMask && \"text-transparent caret-[var(--hj-input-fg)]\",\n )}\n disabled={mergedDisabled}\n htmlSize={1}\n inputMode={inputMode}\n onFocus={(event) => {\n for (let previous = 0; previous < index; previous += 1) {\n if (!inputRefs.current[previous]?.input?.value) {\n focusCell(previous);\n break;\n }\n }\n onFocus?.(event);\n syncSelection(index);\n }}\n onInput={(event) => handleInput(index, event)}\n onKeyDown={(event) => {\n if (event.key === \"ArrowLeft\") focusCell(index - 1);\n else if (event.key === \"ArrowRight\" && singleValue) focusCell(index + 1);\n else if (event.key === \"Backspace\" && !singleValue) focusCell(index - 1);\n else if (event.key === \"z\" && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n }\n syncSelection(index);\n }}\n onMouseDown={() => syncSelection(index)}\n onMouseUp={() => syncSelection(index)}\n ref={(input) => {\n inputRefs.current[index] = input;\n }}\n size={mergedSize}\n status={mergedStatus}\n style={slotStyle(styles, \"input\")}\n type={mask === true ? \"password\" : (type ?? \"text\")}\n value={singleValue}\n variant={variant}\n />\n {customMask ? (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 inline-flex items-center justify-center text-[var(--hj-input-fg)]\"\n >\n {mask}\n </span>\n ) : null}\n </span>\n {index < mergedLength - 1 && separatorNode != null ? (\n <span\n className={slotClass(\n classNames,\n \"separator\",\n \"hj-input-otp-separator hj-otp-separator\",\n )}\n style={slotStyle(styles, \"separator\")}\n >\n {separatorNode}\n </span>\n ) : null}\n </Fragment>\n );\n })}\n </div>\n );\n});\n\ntype CompoundedInput = typeof InternalInput & {\n Group: typeof InputGroup;\n OTP: typeof InputOTP;\n Password: typeof InputPassword;\n Search: typeof InputSearch;\n TextArea: typeof InputTextArea;\n};\n\nexport const Input = InternalInput as CompoundedInput;\nInput.Group = InputGroup;\nInput.OTP = InputOTP;\nInput.Password = InputPassword;\nInput.Search = InputSearch;\nInput.TextArea = InputTextArea;\n\nexport type InputComponent = (props: InputProps & RefAttributes<InputRef>) => ReactElement | null;\n",
|
|
19
|
+
"import type { ReactNode } from \"react\";\nimport { createContext, useContext } from \"react\";\n\nexport type FormItemStatus = \"\" | \"error\" | \"warning\" | \"success\" | \"validating\";\nexport type FormControlStatus = FormItemStatus | \"default\";\n\nexport interface FormItemStatusContextValue {\n readonly errors?: ReactNode[];\n readonly isFormItemInput?: boolean;\n readonly status?: FormItemStatus;\n readonly warnings?: ReactNode[];\n}\n\nexport interface FormItemUseStatusResult {\n readonly errors: ReactNode[];\n readonly status?: FormItemStatus;\n readonly warnings: ReactNode[];\n}\n\nconst EMPTY_STATUS_NODES: ReactNode[] = [];\n\nexport const FormItemInputContext = createContext<FormItemStatusContextValue>({});\nFormItemInputContext.displayName = \"FormItemInputContext\";\n\nexport function getMergedFormItemStatus(\n contextStatus: FormItemStatus | undefined,\n customStatus: FormControlStatus | undefined,\n): FormItemStatus {\n const nativeCustomStatus = customStatus === \"default\" ? \"\" : customStatus;\n return nativeCustomStatus || contextStatus || \"\";\n}\n\nexport function useMergedFormItemStatus(customStatus?: FormControlStatus): FormItemStatus {\n const { status: contextStatus } = useContext(FormItemInputContext);\n return getMergedFormItemStatus(contextStatus, customStatus);\n}\n\nexport function useFormItemStatus(): FormItemUseStatusResult {\n const {\n errors = EMPTY_STATUS_NODES,\n status,\n warnings = EMPTY_STATUS_NODES,\n } = useContext(FormItemInputContext);\n return { errors, status, warnings };\n}\n",
|
|
20
|
+
"import RcImage, { type ImageProps as RcImagePrimitiveProps } from \"@rc-component/image\";\nimport { PickerPanel } from \"@rc-component/picker\";\nimport dayjsGenerateConfig from \"@rc-component/picker/generate/dayjs\";\nimport type { CellRenderInfo, Locale } from \"@rc-component/picker/interface\";\nimport zhCN from \"@rc-component/picker/locale/zh_CN\";\nimport { QRCodeCanvas, QRCodeSVG, type QRProps as RcQRCodeProps } from \"@rc-component/qrcode\";\nimport RcSelect from \"@rc-component/select\";\nimport RcTour, {\n type TourProps as RcTourPrimitiveProps,\n type TourStepInfo as RcTourStepInfo,\n} from \"@rc-component/tour\";\nimport RcTree, {\n type BasicDataNode as RcBasicTreeNode,\n type DataNode as RcTreeDataNode,\n type TreeProps as RcTreePrimitiveProps,\n conductExpandParent,\n convertDataToEntities,\n convertTreeToData,\n fillFieldNames,\n} from \"@rc-component/tree\";\nimport { omit, pickAttrs, useControlledState } from \"@rc-component/util\";\nimport dayjs, { type Dayjs } from \"dayjs\";\nimport \"dayjs/locale/zh-cn\";\nimport type {\n AriaAttributes,\n CSSProperties,\n ComponentProps,\n ForwardedRef,\n HTMLAttributes,\n Key,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport {\n Children,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./Button\";\nimport { type BreakpointValues, type ScreenMap, useBreakpoint } from \"./Grid\";\nimport { Icon } from \"./Icon\";\nimport { type StepItem, Steps, type StepsProps } from \"./Steps\";\n\nexport type CalendarMode = \"year\" | \"month\";\nexport type CalendarValue = Dayjs | Date;\n\nexport interface CalendarSelectInfo {\n readonly source: \"year\" | \"month\" | \"date\" | \"customize\";\n}\n\nexport type CalendarCellRenderInfo<DateType extends CalendarValue> = Omit<\n CellRenderInfo<Dayjs>,\n \"today\"\n> & {\n readonly today: DateType;\n};\n\nexport type CalendarHeaderRender<DateType extends CalendarValue> = (config: {\n readonly value: DateType;\n readonly type: CalendarMode;\n readonly onChange: (date: DateType) => void;\n readonly onTypeChange: (type: CalendarMode) => void;\n}) => ReactNode;\n\nexport interface CalendarProps<DateType extends CalendarValue = CalendarValue>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\" | \"onChange\" | \"onSelect\"> {\n readonly cellRender?: (date: DateType, info: CalendarCellRenderInfo<DateType>) => ReactNode;\n readonly dateCellRender?: (date: DateType) => ReactNode;\n readonly dateFullCellRender?: (date: DateType) => ReactNode;\n readonly defaultValue?: DateType;\n readonly disabledDate?: (date: DateType) => boolean;\n readonly fullCellRender?: (date: DateType, info: CalendarCellRenderInfo<DateType>) => ReactNode;\n readonly fullscreen?: boolean;\n readonly headerRender?: CalendarHeaderRender<DateType>;\n readonly locale?: Locale;\n readonly mode?: CalendarMode;\n readonly monthCellRender?: (date: DateType) => ReactNode;\n readonly monthFullCellRender?: (date: DateType) => ReactNode;\n readonly onChange?: (date: DateType) => void;\n readonly onPanelChange?: (date: DateType, mode: CalendarMode) => void;\n readonly onSelect?: (date: DateType, selectInfo: CalendarSelectInfo) => void;\n readonly rootClassName?: string;\n readonly showWeek?: boolean;\n readonly validRange?: readonly [DateType, DateType];\n readonly value?: DateType;\n}\n\nfunction toDayjs(value: CalendarValue): Dayjs;\nfunction toDayjs(value?: CalendarValue): Dayjs | undefined;\nfunction toDayjs(value?: CalendarValue) {\n if (!value) return undefined;\n return dayjs.isDayjs(value) ? value : dayjs(value);\n}\n\nfunction isLegacyDate(value?: CalendarValue): value is Date {\n return value instanceof Date;\n}\n\nfunction isSameCalendarDate(first: Dayjs, second: Dayjs) {\n return first.isSame(second, \"day\");\n}\n\ninterface CalendarHeaderProps {\n readonly fullscreen: boolean;\n readonly mode: CalendarMode;\n readonly onChange: (date: Dayjs, source: CalendarSelectInfo[\"source\"]) => void;\n readonly onModeChange: (mode: CalendarMode) => void;\n readonly validRange?: readonly [Dayjs, Dayjs];\n readonly value: Dayjs;\n}\n\nfunction CalendarHeader({\n fullscreen,\n mode,\n onChange,\n onModeChange,\n validRange,\n value,\n}: CalendarHeaderProps) {\n const year = value.year();\n const month = value.month();\n const yearStart = validRange?.[0].year() ?? year - 10;\n const yearEnd = validRange?.[1].year() ?? year + 9;\n const yearOptions = useMemo(\n () =>\n Array.from({ length: yearEnd - yearStart + 1 }, (_, index) => {\n const optionYear = yearStart + index;\n return { label: `${optionYear}年`, value: String(optionYear) };\n }),\n [yearEnd, yearStart],\n );\n const monthStart = validRange && validRange[0].year() === year ? validRange[0].month() : 0;\n const monthEnd = validRange && validRange[1].year() === year ? validRange[1].month() : 11;\n const monthOptions = useMemo(\n () =>\n Array.from({ length: monthEnd - monthStart + 1 }, (_, index) => {\n const optionMonth = monthStart + index;\n return { label: `${optionMonth + 1}月`, value: String(optionMonth) };\n }),\n [monthEnd, monthStart],\n );\n return (\n <div className=\"hj-calendar-header\">\n <RcSelect<string>\n aria-label=\"选择年份\"\n className={cn(\"hj-calendar-year-select\", fullscreen ? \"hj-select-md\" : \"hj-select-sm\")}\n options={yearOptions}\n prefixCls=\"hj-select\"\n suffix={<Icon name=\"chevron-down\" size={14} />}\n value={String(year)}\n onChange={(nextYear) => {\n let next = value.year(Number(nextYear));\n if (\n validRange &&\n next.year() === validRange[1].year() &&\n next.month() > validRange[1].month()\n )\n next = next.month(validRange[1].month());\n if (\n validRange &&\n next.year() === validRange[0].year() &&\n next.month() < validRange[0].month()\n )\n next = next.month(validRange[0].month());\n onChange(next, \"year\");\n }}\n />\n {mode === \"month\" ? (\n <RcSelect<string>\n aria-label=\"选择月份\"\n className={cn(\"hj-calendar-month-select\", fullscreen ? \"hj-select-md\" : \"hj-select-sm\")}\n options={monthOptions}\n prefixCls=\"hj-select\"\n suffix={<Icon name=\"chevron-down\" size={14} />}\n value={String(month)}\n onChange={(nextMonth) => onChange(value.month(Number(nextMonth)), \"month\")}\n />\n ) : null}\n <fieldset aria-label=\"日历面板模式\" className=\"hj-calendar-mode-switch\">\n <Button\n className=\"hj-calendar-mode-button\"\n size={fullscreen ? \"sm\" : \"xs\"}\n tone={mode === \"month\" ? \"primary\" : \"secondary\"}\n onClick={() => onModeChange(\"month\")}\n >\n 月\n </Button>\n <Button\n className=\"hj-calendar-mode-button\"\n size={fullscreen ? \"sm\" : \"xs\"}\n tone={mode === \"year\" ? \"primary\" : \"secondary\"}\n onClick={() => onModeChange(\"year\")}\n >\n 年\n </Button>\n </fieldset>\n </div>\n );\n}\n\nexport function Calendar<DateType extends CalendarValue = CalendarValue>({\n cellRender,\n className = \"\",\n dateCellRender,\n dateFullCellRender,\n defaultValue,\n disabledDate,\n fullCellRender,\n fullscreen = true,\n headerRender,\n locale = zhCN,\n mode,\n monthCellRender,\n monthFullCellRender,\n onChange,\n onPanelChange,\n onSelect,\n rootClassName,\n showWeek,\n validRange,\n value,\n ...props\n}: CalendarProps<DateType>) {\n const legacyDate =\n isLegacyDate(value) ||\n (!value && isLegacyDate(defaultValue)) ||\n (!value && !defaultValue && isLegacyDate(validRange?.[0]));\n const controlledValue = useMemo(() => toDayjs(value), [value]);\n const [mergedValue, setMergedValue] = useControlledState<Dayjs>(\n () => toDayjs(defaultValue) ?? dayjs(),\n controlledValue,\n );\n const [mergedMode, setMergedMode] = useControlledState<CalendarMode>(\"month\", mode);\n const panelMode = mergedMode === \"year\" ? \"month\" : \"date\";\n const mergedValidRange = useMemo(\n () => (validRange ? ([toDayjs(validRange[0]), toDayjs(validRange[1])] as const) : undefined),\n [validRange],\n );\n const toPublicValue = useCallback(\n (date: Dayjs) => (legacyDate ? date.toDate() : date) as DateType,\n [legacyDate],\n );\n const toPublicInfo = useCallback(\n (info: CellRenderInfo<Dayjs>): CalendarCellRenderInfo<DateType> => ({\n ...info,\n today: toPublicValue(info.today),\n }),\n [toPublicValue],\n );\n const triggerPanelChange = useCallback(\n (date: Dayjs, nextMode: CalendarMode) => onPanelChange?.(toPublicValue(date), nextMode),\n [onPanelChange, toPublicValue],\n );\n const triggerChange = useCallback(\n (date: Dayjs) => {\n setMergedValue(date);\n if (isSameCalendarDate(date, mergedValue)) return;\n if (\n (panelMode === \"date\" && !date.isSame(mergedValue, \"month\")) ||\n (panelMode === \"month\" && !date.isSame(mergedValue, \"year\"))\n ) {\n triggerPanelChange(date, mergedMode);\n }\n onChange?.(toPublicValue(date));\n },\n [\n mergedMode,\n mergedValue,\n onChange,\n panelMode,\n setMergedValue,\n toPublicValue,\n triggerPanelChange,\n ],\n );\n const onInternalSelect = useCallback(\n (date: Dayjs, source: CalendarSelectInfo[\"source\"]) => {\n triggerChange(date);\n onSelect?.(toPublicValue(date), { source });\n },\n [onSelect, toPublicValue, triggerChange],\n );\n const triggerModeChange = useCallback(\n (nextMode: CalendarMode) => {\n setMergedMode(nextMode);\n triggerPanelChange(mergedValue, nextMode);\n },\n [mergedValue, setMergedMode, triggerPanelChange],\n );\n const mergedDisabledDate = useCallback(\n (date: Dayjs) => {\n const outsideRange = mergedValidRange\n ? date.isBefore(mergedValidRange[0], \"day\") || date.isAfter(mergedValidRange[1], \"day\")\n : false;\n return outsideRange || !!disabledDate?.(toPublicValue(date));\n },\n [disabledDate, mergedValidRange, toPublicValue],\n );\n const renderCell = useCallback(\n (current: Dayjs | number | string, info: CellRenderInfo<Dayjs>) => {\n if (!dayjs.isDayjs(current)) return info.originNode;\n const date = current;\n const publicDate = toPublicValue(date);\n const publicInfo = toPublicInfo(info);\n const isMonthCell = info.type === \"month\";\n if (fullCellRender) return fullCellRender(publicDate, publicInfo);\n if (isMonthCell && monthFullCellRender) return monthFullCellRender(publicDate);\n if (!isMonthCell && dateFullCellRender) return dateFullCellRender(publicDate);\n\n const content = cellRender\n ? cellRender(publicDate, publicInfo)\n : isMonthCell\n ? monthCellRender?.(publicDate)\n : dateCellRender?.(publicDate);\n const monthNames =\n info.locale?.shortMonths ??\n dayjsGenerateConfig.locale.getShortMonths?.(info.locale?.locale ?? locale.locale);\n const isToday = isMonthCell\n ? date.isSame(info.today, \"month\")\n : date.isSame(info.today, \"day\");\n return (\n <div\n className={cn(\n \"hj-picker-cell-inner hj-calendar-date\",\n isToday && \"hj-calendar-date-today\",\n )}\n >\n <div className=\"hj-calendar-date-value\">\n {isMonthCell\n ? (monthNames?.[date.month()] ?? `${date.month() + 1}月`)\n : String(date.date()).padStart(2, \"0\")}\n </div>\n <div className=\"hj-calendar-date-content\">{content}</div>\n </div>\n );\n },\n [\n cellRender,\n dateCellRender,\n dateFullCellRender,\n fullCellRender,\n locale.locale,\n monthCellRender,\n monthFullCellRender,\n toPublicInfo,\n toPublicValue,\n ],\n );\n\n return (\n <div\n className={cn(\n \"hj-calendar\",\n fullscreen ? \"hj-calendar-full\" : \"hj-calendar-mini\",\n rootClassName,\n className,\n )}\n {...props}\n >\n {headerRender ? (\n headerRender({\n onChange: (nextDate) => onInternalSelect(toDayjs(nextDate), \"customize\"),\n onTypeChange: triggerModeChange,\n type: mergedMode,\n value: toPublicValue(mergedValue),\n })\n ) : (\n <CalendarHeader\n fullscreen={fullscreen}\n mode={mergedMode}\n onChange={onInternalSelect}\n onModeChange={triggerModeChange}\n validRange={mergedValidRange}\n value={mergedValue}\n />\n )}\n <div className=\"hj-calendar-body\">\n <PickerPanel<Dayjs>\n cellRender={renderCell}\n disabledDate={mergedDisabledDate}\n generateConfig={dayjsGenerateConfig}\n hideHeader\n locale={locale}\n mode={panelMode}\n onSelect={(nextDate) => onInternalSelect(nextDate, panelMode)}\n picker={panelMode}\n prefixCls=\"hj-picker\"\n showWeek={showWeek}\n value={mergedValue}\n />\n </div>\n </div>\n );\n}\n\ntype DescriptionSlot = \"root\" | \"header\" | \"title\" | \"extra\" | \"label\" | \"content\";\n\nexport interface DescriptionItem {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: Partial<Record<\"label\" | \"content\", string>>;\n readonly contentStyle?: CSSProperties;\n readonly key?: Key;\n readonly label?: ReactNode;\n readonly labelStyle?: CSSProperties;\n readonly span?: number | \"filled\" | BreakpointValues<number>;\n readonly style?: CSSProperties;\n readonly styles?: Partial<Record<\"label\" | \"content\", CSSProperties>>;\n}\n\nexport interface DescriptionsProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n readonly bordered?: boolean;\n readonly classNames?: Partial<Record<DescriptionSlot, string>>;\n readonly colon?: boolean;\n readonly column?: number | BreakpointValues<number>;\n readonly contentStyle?: CSSProperties;\n readonly extra?: ReactNode;\n readonly items?: readonly DescriptionItem[];\n readonly labelStyle?: CSSProperties;\n readonly layout?: \"horizontal\" | \"vertical\";\n readonly rootClassName?: string;\n readonly size?: \"small\" | \"medium\" | \"middle\" | \"large\" | \"default\";\n readonly styles?: Partial<Record<DescriptionSlot, CSSProperties>>;\n readonly title?: ReactNode;\n}\n\nfunction DescriptionsItem(_props: DescriptionItem) {\n return null;\n}\n\nDescriptionsItem.displayName = \"Descriptions.Item\";\n\nconst descriptionBreakpoints = [\"xxxl\", \"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"] as const;\n\nfunction resolveDescriptionBreakpoint(\n values: BreakpointValues<number>,\n screens: ScreenMap,\n fallback: number,\n) {\n if (!descriptionBreakpoints.some((breakpoint) => screens[breakpoint])) return fallback;\n for (const breakpoint of descriptionBreakpoints) {\n if (screens[breakpoint] && values[breakpoint] != null) return values[breakpoint];\n }\n return fallback;\n}\n\nfunction InternalDescriptions({\n bordered = false,\n children,\n className = \"\",\n column = 3,\n colon = true,\n contentStyle,\n extra,\n items,\n labelStyle,\n layout = \"horizontal\",\n rootClassName,\n size = \"medium\",\n style,\n styles,\n classNames,\n title,\n ...props\n}: DescriptionsProps) {\n const screens = useBreakpoint();\n const defaultColumn = resolveDescriptionBreakpoint(\n { xs: 1, sm: 2, md: 3, lg: 3, xl: 3, xxl: 3, xxxl: 4 },\n screens,\n 3,\n );\n const responsiveColumn =\n typeof column === \"number\"\n ? column\n : resolveDescriptionBreakpoint(column, screens, defaultColumn);\n const mergedColumn = Math.max(1, typeof column === \"number\" ? column : (responsiveColumn ?? 3));\n const childItems = useMemo(\n () =>\n Children.toArray(children).flatMap((child) =>\n isValidElement<DescriptionItem>(child) && child.type === DescriptionsItem\n ? [{ ...child.props, key: child.key ?? child.props.key }]\n : [],\n ),\n [children],\n );\n const mergedItems = items ?? childItems;\n const mergedSize = size === \"middle\" || size === \"default\" ? \"medium\" : size;\n\n return (\n <section\n className={cn(\n \"hj-descriptions min-w-0\",\n `hj-descriptions-${mergedSize}`,\n bordered && \"hj-descriptions-bordered\",\n classNames?.root,\n rootClassName,\n className,\n )}\n style={{ ...styles?.root, ...style }}\n {...props}\n >\n {title || extra ? (\n <div\n className={cn(\n \"hj-descriptions-header mb-3 flex items-center justify-between\",\n classNames?.header,\n )}\n style={styles?.header}\n >\n {title ? (\n <h3\n className={cn(\n \"hj-descriptions-title text-base font-semibold text-[var(--hj-color-web-foreground)]\",\n classNames?.title,\n )}\n style={styles?.title}\n >\n {title}\n </h3>\n ) : null}\n {extra ? (\n <div className={cn(\"hj-descriptions-extra\", classNames?.extra)} style={styles?.extra}>\n {extra}\n </div>\n ) : null}\n </div>\n ) : null}\n <div\n className=\"hj-descriptions-view grid\"\n style={{ gridTemplateColumns: `repeat(${mergedColumn}, minmax(0, 1fr))` }}\n >\n {mergedItems.map((item) => {\n const responsiveSpan =\n typeof item.span === \"object\"\n ? resolveDescriptionBreakpoint(item.span, screens, 1)\n : undefined;\n const span = Math.min(\n mergedColumn,\n item.span === \"filled\"\n ? mergedColumn\n : typeof item.span === \"number\"\n ? item.span\n : (responsiveSpan ?? 1),\n );\n return (\n <div\n className={cn(\n \"hj-descriptions-item min-w-0 p-3\",\n bordered && \"border border-[var(--hj-color-web-border)]\",\n layout === \"horizontal\" && \"grid grid-cols-[minmax(0,auto)_minmax(0,1fr)] gap-2\",\n item.className,\n )}\n key={\n item.key ??\n (typeof item.label === \"string\" || typeof item.label === \"number\"\n ? item.label\n : undefined)\n }\n style={{ gridColumn: `span ${span} / span ${span}`, ...item.style }}\n >\n <div\n className={cn(\n \"hj-descriptions-item-label text-xs text-[var(--hj-color-web-muted)]\",\n layout === \"vertical\" && \"mb-1\",\n classNames?.label,\n item.classNames?.label,\n )}\n style={{\n ...labelStyle,\n ...styles?.label,\n ...item.labelStyle,\n ...item.styles?.label,\n }}\n >\n {item.label}\n {colon && item.label ? \":\" : null}\n </div>\n <div\n className={cn(\n \"hj-descriptions-item-content text-sm text-[var(--hj-color-web-foreground)]\",\n classNames?.content,\n item.classNames?.content,\n )}\n style={{\n ...contentStyle,\n ...styles?.content,\n ...item.contentStyle,\n ...item.styles?.content,\n }}\n >\n {item.children}\n </div>\n </div>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport const Descriptions = Object.assign(InternalDescriptions, { Item: DescriptionsItem });\n\nexport type ImagePreviewConfig = Exclude<RcImagePrimitiveProps[\"preview\"], boolean | undefined>;\n\nexport interface ImageProps extends Omit<RcImagePrimitiveProps, \"prefixCls\" | \"previewPrefixCls\"> {}\n\ntype RcImagePreviewGroupProps = ComponentProps<typeof RcImage.PreviewGroup>;\n\nexport interface ImagePreviewGroupProps\n extends Omit<RcImagePreviewGroupProps, \"previewPrefixCls\"> {}\n\nconst imagePreviewIcons = {\n close: <Icon name=\"close\" size={18} />,\n flipX: <Icon className=\"rotate-180\" name=\"back\" size={18} />,\n flipY: <Icon className=\"-rotate-90\" name=\"back\" size={18} />,\n next: <Icon name=\"chevron-right\" size={20} />,\n prev: <Icon name=\"back\" size={20} />,\n rotateLeft: <Icon className=\"-scale-x-100\" name=\"refresh\" size={18} />,\n rotateRight: <Icon name=\"refresh\" size={18} />,\n zoomIn: <Icon name=\"plus\" size={18} />,\n zoomOut: <Icon name=\"minus\" size={18} />,\n};\n\nfunction mergeImagePreview(preview: ImageProps[\"preview\"]): ImageProps[\"preview\"] {\n if (preview === false) return false;\n const config = typeof preview === \"object\" ? preview : {};\n return {\n ...config,\n icons: { ...imagePreviewIcons, ...config.icons },\n motionName: config.motionName ?? \"hj-image-preview-motion\",\n };\n}\n\nfunction mergeImageGroupPreview(\n preview: ImagePreviewGroupProps[\"preview\"],\n): ImagePreviewGroupProps[\"preview\"] {\n if (preview === false) return false;\n const config = typeof preview === \"object\" ? preview : {};\n return {\n ...config,\n motionName: config.motionName ?? \"hj-image-preview-motion\",\n };\n}\n\nexport function ImagePreviewGroup({ children, icons, preview, ...props }: ImagePreviewGroupProps) {\n return (\n <RcImage.PreviewGroup\n {...props}\n icons={{ ...imagePreviewIcons, ...icons }}\n preview={mergeImageGroupPreview(preview)}\n previewPrefixCls=\"hj-image-preview\"\n >\n {children}\n </RcImage.PreviewGroup>\n );\n}\n\nfunction InternalImage({ alt = \"\", className = \"\", preview = true, ...props }: ImageProps) {\n return (\n <RcImage\n {...props}\n alt={alt}\n className={className}\n prefixCls=\"hj-image\"\n preview={mergeImagePreview(preview)}\n previewPrefixCls=\"hj-image-preview\"\n />\n );\n}\n\nexport const Image = Object.assign(InternalImage, { PreviewGroup: ImagePreviewGroup });\n\nexport type QRCodeStatus = \"active\" | \"expired\" | \"loading\" | \"scanned\";\n\nexport interface QRCodeLocale {\n readonly expired: string;\n readonly refresh: string;\n readonly scanned: string;\n}\n\nexport interface QRCodeStatusRenderInfo {\n readonly locale: QRCodeLocale;\n readonly onRefresh?: () => void;\n readonly status: Exclude<QRCodeStatus, \"active\">;\n}\n\ntype QRCodeAriaProps = AriaAttributes & Pick<HTMLAttributes<HTMLElement>, \"role\">;\n\nexport interface QRCodeProps\n extends Omit<RcQRCodeProps, \"fgColor\" | \"imageSettings\" | \"level\" | \"style\" | \"title\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"color\"> {\n readonly bordered?: boolean;\n readonly classNames?: Partial<Record<\"cover\" | \"root\", string>>;\n readonly color?: string;\n readonly errorLevel?: \"L\" | \"M\" | \"Q\" | \"H\";\n readonly icon?: string;\n readonly iconSize?: number | { readonly height: number; readonly width: number };\n readonly imageSettings?: RcQRCodeProps[\"imageSettings\"];\n readonly rootClassName?: string;\n readonly status?: QRCodeStatus;\n readonly statusRender?: (info: QRCodeStatusRenderInfo) => ReactNode;\n readonly styles?: Partial<Record<\"cover\" | \"root\", CSSProperties>>;\n readonly type?: \"canvas\" | \"svg\";\n readonly onRefresh?: () => void;\n}\n\nconst qrCodeLocale: QRCodeLocale = {\n expired: \"二维码过期\",\n refresh: \"点击刷新\",\n scanned: \"已扫描\",\n};\n\nfunction renderQRCodeStatus({ locale, onRefresh, status }: QRCodeStatusRenderInfo) {\n if (status === \"loading\")\n return <span aria-label=\"加载中\" className=\"hj-qrcode-loading\" role=\"status\" />;\n if (status === \"scanned\") return <p className=\"hj-qrcode-scanned\">{locale.scanned}</p>;\n return (\n <>\n <p className=\"hj-qrcode-expired\">{locale.expired}</p>\n {onRefresh ? (\n <button className=\"hj-qrcode-refresh\" onClick={onRefresh} type=\"button\">\n <Icon name=\"refresh\" size={14} />\n <span>{locale.refresh}</span>\n </button>\n ) : null}\n </>\n );\n}\n\nexport function QRCode({\n bgColor = \"#ffffff\",\n bordered = true,\n boostLevel,\n className = \"\",\n classNames,\n color = \"#111111\",\n errorLevel = \"M\",\n icon,\n iconSize = 40,\n imageSettings,\n includeMargin,\n marginSize,\n minVersion,\n onRefresh,\n rootClassName,\n size = 160,\n status = \"active\",\n statusRender,\n style,\n styles,\n title,\n type = \"canvas\",\n value,\n ...props\n}: QRCodeProps) {\n if (!value || (Array.isArray(value) && value.length === 0)) return null;\n\n const a11yProps = pickAttrs(props, true) as QRCodeAriaProps;\n const a11yKeys = Object.keys(a11yProps) as Array<keyof typeof props>;\n const wrapperProps = omit(props, a11yKeys) as HTMLAttributes<HTMLDivElement>;\n const mergedIconSize =\n typeof iconSize === \"number\" ? { height: iconSize, width: iconSize } : iconSize;\n const mergedImageSettings = icon\n ? {\n crossOrigin: \"anonymous\" as const,\n excavate: true,\n height: mergedIconSize.height,\n src: icon,\n width: mergedIconSize.width,\n }\n : imageSettings;\n const codeProps: RcQRCodeProps = {\n bgColor,\n boostLevel,\n fgColor: color,\n imageSettings: mergedImageSettings,\n includeMargin,\n level: errorLevel,\n marginSize,\n minVersion,\n size,\n style: { height: \"100%\", width: \"100%\" },\n value,\n };\n const statusNode =\n status === \"active\"\n ? null\n : (statusRender ?? renderQRCodeStatus)({ locale: qrCodeLocale, onRefresh, status });\n\n return (\n <div\n {...wrapperProps}\n className={cn(\n \"hj-qrcode\",\n !bordered && \"hj-qrcode-borderless\",\n rootClassName,\n classNames?.root,\n className,\n )}\n style={{\n backgroundColor: bgColor,\n height: style?.height ?? size,\n width: style?.width ?? size,\n ...styles?.root,\n ...style,\n }}\n title={title}\n >\n {statusNode ? (\n <div className={cn(\"hj-qrcode-cover\", classNames?.cover)} style={styles?.cover}>\n {statusNode}\n </div>\n ) : null}\n {type === \"canvas\" ? (\n <QRCodeCanvas {...codeProps} {...a11yProps} />\n ) : (\n <QRCodeSVG {...codeProps} {...a11yProps} />\n )}\n </div>\n );\n}\n\nexport type TimelineMode = \"left\" | \"right\" | \"start\" | \"end\" | \"alternate\";\nexport type TimelineItemPlacement = \"start\" | \"end\";\n\nexport interface TimelineItem {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: StepItem[\"classNames\"];\n readonly color?: \"blue\" | \"green\" | \"red\" | \"yellow\" | \"gray\" | (string & {});\n readonly content?: ReactNode;\n readonly dot?: ReactNode;\n readonly icon?: ReactNode;\n readonly key?: Key;\n readonly label?: ReactNode;\n readonly loading?: boolean;\n readonly placement?: TimelineItemPlacement;\n readonly position?: \"left\" | \"right\" | TimelineItemPlacement;\n readonly style?: CSSProperties;\n readonly styles?: StepItem[\"styles\"];\n readonly title?: ReactNode;\n}\n\nexport interface TimelineProps\n extends Omit<\n StepsProps,\n \"current\" | \"initial\" | \"items\" | \"onChange\" | \"orientation\" | \"titlePlacement\" | \"type\"\n > {\n readonly children?: ReactNode;\n readonly items?: readonly TimelineItem[];\n readonly mode?: TimelineMode;\n readonly orientation?: \"horizontal\" | \"vertical\";\n readonly pending?: ReactNode;\n readonly pendingDot?: ReactNode;\n readonly reverse?: boolean;\n readonly titleSpan?: number | string;\n}\n\nfunction TimelineItemComponent(_props: TimelineItem) {\n return null;\n}\n\nTimelineItemComponent.displayName = \"Timeline.Item\";\n\nfunction getTimelineColor(color: TimelineItem[\"color\"]) {\n if (color === \"red\") return \"var(--hj-color-danger)\";\n if (color === \"green\") return \"var(--hj-color-success)\";\n if (color === \"yellow\") return \"var(--hj-color-brand)\";\n if (color === \"gray\") return \"var(--hj-color-web-muted)\";\n if (!color || color === \"blue\") return \"var(--hj-color-info)\";\n return color;\n}\n\nfunction InternalTimeline({\n children,\n className = \"\",\n items,\n mode = \"start\",\n orientation = \"vertical\",\n pending,\n pendingDot,\n reverse = false,\n rootClassName,\n style,\n titleSpan,\n variant = \"outlined\",\n ...props\n}: TimelineProps) {\n const childItems = useMemo(\n () =>\n Children.toArray(children).flatMap((child) =>\n isValidElement<TimelineItem>(child) && child.type === TimelineItemComponent\n ? [{ ...child.props, key: child.key ?? child.props.key }]\n : [],\n ),\n [children],\n );\n const sourceItems = items ?? childItems;\n const withPending = pending\n ? [...sourceItems, { content: pending, icon: pendingDot, loading: true, key: \"pending\" }]\n : [...sourceItems];\n const mergedItems = reverse ? withPending.reverse() : withPending;\n const mergedMode = mode === \"left\" ? \"start\" : mode === \"right\" ? \"end\" : mode;\n const stepItems = mergedItems.map<StepItem>((item, index) => {\n const color = getTimelineColor(item.color);\n const placement =\n item.placement ??\n (item.position === \"left\" ? \"start\" : item.position === \"right\" ? \"end\" : item.position);\n return {\n className: cn(\n \"hj-timeline-item\",\n placement && `hj-timeline-item-${placement}`,\n item.loading && \"hj-timeline-item-pending\",\n item.className,\n ),\n classNames: item.classNames,\n content: item.content ?? item.children,\n icon: item.icon ?? item.dot ?? (\n <span\n className=\"hj-timeline-dot inline-block h-3 w-3 rounded-full border-2 bg-[var(--hj-color-web-surface)]\"\n style={{ borderColor: color }}\n />\n ),\n key: item.key ?? index,\n status: item.loading ? \"process\" : undefined,\n style: item.style,\n styles: item.styles,\n title: item.title ?? item.label,\n };\n });\n\n return (\n <Steps\n {...props}\n className={cn(\n \"hj-timeline\",\n `hj-timeline-${mergedMode}`,\n `hj-timeline-${orientation}`,\n mergedMode === \"alternate\" && \"hj-timeline-layout-alternate\",\n reverse && \"hj-timeline-reverse\",\n rootClassName,\n className,\n )}\n components={{ root: \"ol\", item: \"li\" }}\n current={Math.max(0, stepItems.length - 1)}\n items={stepItems}\n orientation={orientation}\n style={{ \"--hj-timeline-title-span\": titleSpan, ...style } as CSSProperties}\n type=\"dot\"\n variant={variant}\n />\n );\n}\n\nexport const Timeline = Object.assign(InternalTimeline, { Item: TimelineItemComponent });\n\nexport type TreeNode = RcTreeDataNode;\n\nexport type TreeProps<TreeDataType extends RcBasicTreeNode = TreeNode> = Omit<\n RcTreePrimitiveProps<TreeDataType>,\n \"prefixCls\" | \"treeData\"\n> & {\n readonly blockNode?: boolean;\n readonly treeData?: readonly TreeDataType[];\n};\n\nexport type TreeRef<TreeDataType extends RcBasicTreeNode = TreeNode> = RcTree<TreeDataType>;\n\nfunction TreeInner<TreeDataType extends RcBasicTreeNode = TreeNode>(\n { blockNode = false, className = \"\", switcherIcon, treeData, ...props }: TreeProps<TreeDataType>,\n ref: ForwardedRef<TreeRef<TreeDataType>>,\n) {\n return (\n <RcTree<TreeDataType>\n {...props}\n className={cn(\n \"m-0 list-none rounded-[var(--hj-radius-md)] border border-[var(--hj-color-web-border)] bg-[var(--hj-color-web-surface)] p-2\",\n blockNode && \"hj-tree-block-node\",\n className,\n )}\n prefixCls=\"hj-tree\"\n switcherIcon={\n switcherIcon ??\n ((node) => (\n <Icon\n className={node.loading ? \"hj-tree-switcher-loading\" : undefined}\n name={\n node.loading\n ? \"refresh\"\n : node.isLeaf\n ? \"document\"\n : node.expanded\n ? \"chevron-down\"\n : \"chevron-right\"\n }\n size={14}\n />\n ))\n }\n treeData={treeData ? [...treeData] : undefined}\n ref={ref}\n />\n );\n}\n\ntype TreeComponent = <TreeDataType extends RcBasicTreeNode = TreeNode>(\n props: TreeProps<TreeDataType> & RefAttributes<TreeRef<TreeDataType>>,\n) => ReactElement;\n\nconst InternalTree = forwardRef(TreeInner) as TreeComponent;\n\nexport type DirectoryTreeExpandAction = false | \"click\" | \"doubleClick\";\nexport type DirectoryTreeProps<TreeDataType extends RcBasicTreeNode = TreeNode> =\n TreeProps<TreeDataType> & {\n readonly expandAction?: DirectoryTreeExpandAction;\n };\n\ntype DirectoryFieldNames = ReturnType<typeof fillFieldNames>;\n\nfunction traverseDirectoryNodes<TreeDataType extends RcBasicTreeNode>(\n nodes: readonly TreeDataType[],\n fieldNames: DirectoryFieldNames,\n visitor: (key: Key, node: TreeDataType) => boolean,\n) {\n const visit = (node: TreeDataType) => {\n const record = node as Record<string, unknown>;\n const key = record[fieldNames.key] as Key;\n const children = (record[fieldNames.children] as readonly TreeDataType[] | undefined) ?? [];\n if (visitor(key, node) !== false) children.forEach(visit);\n };\n nodes.forEach(visit);\n}\n\nfunction getDirectoryRangeKeys<TreeDataType extends RcBasicTreeNode>(\n treeData: readonly TreeDataType[],\n expandedKeys: readonly Key[],\n startKey: Key | null,\n endKey: Key,\n fieldNames: DirectoryFieldNames,\n) {\n if (startKey == null) return [endKey];\n const visibleKeys: Key[] = [];\n traverseDirectoryNodes(treeData, fieldNames, (key) => {\n visibleKeys.push(key);\n return expandedKeys.includes(key);\n });\n const startIndex = visibleKeys.indexOf(startKey);\n const endIndex = visibleKeys.indexOf(endKey);\n if (startIndex < 0 || endIndex < 0) return [endKey];\n return visibleKeys.slice(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex) + 1);\n}\n\nfunction getDirectoryNodes<TreeDataType extends RcBasicTreeNode>(\n treeData: readonly TreeDataType[],\n keys: readonly Key[],\n fieldNames: DirectoryFieldNames,\n) {\n const keySet = new Set(keys);\n const nodes: TreeDataType[] = [];\n traverseDirectoryNodes(treeData, fieldNames, (key, node) => {\n if (keySet.has(key)) nodes.push(node);\n return true;\n });\n return nodes;\n}\n\nfunction DirectoryTreeInner<TreeDataType extends RcBasicTreeNode = TreeNode>(\n props: DirectoryTreeProps<TreeDataType>,\n ref: ForwardedRef<TreeRef<TreeDataType>>,\n) {\n const {\n children,\n className,\n defaultExpandAll,\n defaultExpandParent = true,\n defaultExpandedKeys,\n defaultSelectedKeys,\n expandAction = \"click\",\n expandedKeys: controlledExpandedKeys,\n fieldNames,\n icon,\n multiple,\n onExpand,\n onSelect,\n selectedKeys: controlledSelectedKeys,\n showIcon = true,\n treeData,\n ...restProps\n } = props;\n const data = useMemo<TreeDataType[]>(\n () => (treeData ? [...treeData] : (convertTreeToData(children) as unknown as TreeDataType[])),\n [children, treeData],\n );\n const mergedFieldNames = useMemo(() => fillFieldNames(fieldNames), [fieldNames]);\n const initialExpandedKeys = useMemo<Key[]>(() => {\n const requestedKeys = controlledExpandedKeys ?? defaultExpandedKeys ?? [];\n const entityData = data as unknown as RcTreeDataNode[];\n if (defaultExpandAll) {\n return Object.keys(convertDataToEntities(entityData, { fieldNames }).keyEntities);\n }\n if (defaultExpandParent) {\n return conductExpandParent(\n [...requestedKeys],\n convertDataToEntities(entityData, { fieldNames }).keyEntities,\n );\n }\n return [...requestedKeys];\n }, [\n controlledExpandedKeys,\n data,\n defaultExpandAll,\n defaultExpandParent,\n defaultExpandedKeys,\n fieldNames,\n ]);\n const [expandedKeys, setExpandedKeys] = useState<Key[]>(initialExpandedKeys);\n const [selectedKeys, setSelectedKeys] = useState<Key[]>(() => [\n ...(controlledSelectedKeys ?? defaultSelectedKeys ?? []),\n ]);\n const lastSelectedKeyRef = useRef<Key | null>(null);\n const cachedSelectedKeysRef = useRef<Key[]>([]);\n\n useEffect(() => {\n if (controlledExpandedKeys !== undefined) setExpandedKeys([...controlledExpandedKeys]);\n }, [controlledExpandedKeys]);\n\n useEffect(() => {\n if (controlledSelectedKeys !== undefined) setSelectedKeys([...controlledSelectedKeys]);\n }, [controlledSelectedKeys]);\n\n const handleExpand: NonNullable<TreeProps<TreeDataType>[\"onExpand\"]> = (keys, info) => {\n if (controlledExpandedKeys === undefined) setExpandedKeys(keys);\n onExpand?.(keys, info);\n };\n const handleSelect: NonNullable<TreeProps<TreeDataType>[\"onSelect\"]> = (keys, info) => {\n const key = info.node.key;\n const ctrlPick = info.nativeEvent.ctrlKey || info.nativeEvent.metaKey;\n const shiftPick = info.nativeEvent.shiftKey;\n let nextKeys: Key[];\n\n if (multiple && ctrlPick) {\n nextKeys = keys;\n cachedSelectedKeysRef.current = nextKeys;\n lastSelectedKeyRef.current = key;\n } else if (multiple && shiftPick) {\n nextKeys = Array.from(\n new Set([\n ...cachedSelectedKeysRef.current,\n ...getDirectoryRangeKeys(\n data,\n expandedKeys,\n lastSelectedKeyRef.current,\n key,\n mergedFieldNames,\n ),\n ]),\n );\n } else {\n nextKeys = [key];\n cachedSelectedKeysRef.current = nextKeys;\n lastSelectedKeyRef.current = key;\n }\n\n if (controlledSelectedKeys === undefined) setSelectedKeys(nextKeys);\n onSelect?.(nextKeys, {\n ...info,\n selected: true,\n selectedNodes: getDirectoryNodes(data, nextKeys, mergedFieldNames),\n });\n };\n\n return (\n <InternalTree<TreeDataType>\n {...restProps}\n blockNode\n className={cn(\"hj-tree-directory\", className)}\n defaultExpandParent={defaultExpandParent}\n expandAction={expandAction}\n expandedKeys={expandedKeys}\n fieldNames={fieldNames}\n icon={\n icon ??\n ((node) => (\n <Icon\n name={node.isLeaf ? \"document\" : node.expanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n />\n ))\n }\n multiple={multiple}\n onExpand={handleExpand}\n onSelect={handleSelect}\n ref={ref}\n selectedKeys={selectedKeys}\n showIcon={showIcon}\n treeData={data}\n />\n );\n}\n\ntype DirectoryTreeComponent = <TreeDataType extends RcBasicTreeNode = TreeNode>(\n props: DirectoryTreeProps<TreeDataType> & RefAttributes<TreeRef<TreeDataType>>,\n) => ReactElement;\n\nconst DirectoryTree = forwardRef(DirectoryTreeInner) as DirectoryTreeComponent;\n\nexport const Tree = Object.assign(InternalTree, {\n DirectoryTree,\n TreeNode: RcTree.TreeNode,\n});\n\nexport type TourType = \"default\" | \"primary\";\nexport type TourButtonProps = ComponentProps<typeof Button>;\nexport type TourActionsRender = (\n originNode: ReactNode,\n info: { readonly current: number; readonly total: number },\n) => ReactNode;\nexport type TourIndicatorsRender = (current: number, total: number) => ReactNode;\n\nexport type TourStep = RcTourStepInfo & {\n readonly actionsRender?: TourActionsRender;\n readonly cover?: ReactNode;\n readonly indicatorsRender?: TourIndicatorsRender;\n readonly nextButtonProps?: TourButtonProps;\n readonly prevButtonProps?: TourButtonProps;\n readonly type?: TourType;\n};\n\nexport type TourProps = Omit<RcTourPrimitiveProps, \"prefixCls\" | \"renderPanel\" | \"steps\"> & {\n readonly actionsRender?: TourActionsRender;\n readonly indicatorsRender?: TourIndicatorsRender;\n readonly renderPanel?: RcTourPrimitiveProps[\"renderPanel\"];\n readonly steps?: readonly TourStep[];\n readonly type?: TourType;\n};\n\ninterface TourPanelOptions {\n readonly actionsRender?: TourActionsRender;\n readonly indicatorsRender?: TourIndicatorsRender;\n readonly type?: TourType;\n}\n\nfunction renderTourPanel(\n panel: Parameters<NonNullable<RcTourPrimitiveProps[\"renderPanel\"]>>[0],\n current: number,\n options: TourPanelOptions,\n) {\n const step = panel as typeof panel & TourStep;\n const total = panel.total ?? 1;\n const isLast = current >= total - 1;\n const closeConfig = panel.closable ?? undefined;\n const { closeIcon, ...closeButtonProps } = closeConfig ?? {};\n const indicatorsRender = step.indicatorsRender ?? options.indicatorsRender;\n const actionsRender = step.actionsRender ?? options.actionsRender;\n const stepType = step.type ?? options.type ?? \"default\";\n const previousButton =\n current > 0 ? (\n <Button\n {...step.prevButtonProps}\n className={cn(\"hj-tour-prev-btn\", step.prevButtonProps?.className)}\n size={step.prevButtonProps?.size ?? \"sm\"}\n tone={step.prevButtonProps?.tone ?? \"secondary\"}\n onClick={(event) => {\n panel.onPrev?.();\n step.prevButtonProps?.onClick?.(event);\n }}\n >\n {step.prevButtonProps?.children ?? \"上一步\"}\n </Button>\n ) : null;\n const nextButton = (\n <Button\n {...step.nextButtonProps}\n className={cn(\n isLast ? \"hj-tour-finish-btn\" : \"hj-tour-next-btn\",\n step.nextButtonProps?.className,\n )}\n size={step.nextButtonProps?.size ?? \"sm\"}\n tone={step.nextButtonProps?.tone ?? (stepType === \"primary\" ? \"secondary\" : \"primary\")}\n onClick={(event) => {\n if (isLast) panel.onFinish?.();\n else panel.onNext?.();\n step.nextButtonProps?.onClick?.(event);\n }}\n >\n {step.nextButtonProps?.children ?? (isLast ? \"完成\" : \"下一步\")}\n </Button>\n );\n const actions = (\n <>\n {previousButton}\n {nextButton}\n </>\n );\n const indicators = indicatorsRender\n ? indicatorsRender(current, total)\n : Array.from({ length: total }, (_, index) => (\n <span\n className={cn(\"hj-tour-indicator\", index === current && \"hj-tour-indicator-active\")}\n key={`tour-indicator-${index + 1}`}\n />\n ));\n\n return (\n <div className={cn(\"hj-tour-panel\", stepType === \"primary\" && \"hj-tour-primary\")}>\n <div className=\"hj-tour-section\">\n {closeConfig ? (\n <button\n {...closeButtonProps}\n aria-label={closeButtonProps[\"aria-label\"] ?? \"关闭\"}\n className=\"hj-tour-close\"\n onClick={panel.onClose}\n type=\"button\"\n >\n <span className=\"hj-tour-close-x\">{closeIcon ?? <Icon name=\"close\" size={16} />}</span>\n </button>\n ) : null}\n {step.cover ? <div className=\"hj-tour-cover\">{step.cover}</div> : null}\n {panel.title ? (\n <div className=\"hj-tour-header\">\n <div className=\"hj-tour-title\">{panel.title}</div>\n </div>\n ) : null}\n <div className=\"hj-tour-description\">{panel.description}</div>\n <div className=\"hj-tour-footer\">\n {total > 1 ? <div className=\"hj-tour-indicators\">{indicators}</div> : null}\n <div className=\"hj-tour-actions\">\n {actionsRender ? actionsRender(actions, { current, total }) : actions}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function Tour({\n actionsRender,\n animated = true,\n indicatorsRender,\n renderPanel,\n steps,\n type = \"default\",\n ...props\n}: TourProps) {\n const rcSteps = useMemo<RcTourStepInfo[]>(\n () =>\n steps\n ? steps.map((step) => ({\n ...step,\n className: cn(step.className, (step.type ?? type) === \"primary\" && \"hj-tour-primary\"),\n }))\n : [],\n [steps, type],\n );\n return (\n <RcTour\n {...props}\n animated={animated}\n prefixCls=\"hj-tour\"\n renderPanel={\n renderPanel ??\n ((panel, current) =>\n renderTourPanel(panel, current, { actionsRender, indicatorsRender, type }))\n }\n steps={rcSteps}\n />\n );\n}\n\nexport function CheckableTag({\n checked,\n children,\n className = \"\",\n onChange,\n ...props\n}: HTMLAttributes<HTMLButtonElement> & {\n readonly checked?: boolean;\n readonly onChange?: (checked: boolean) => void;\n}) {\n return (\n <button\n className={cn(\n \"inline-flex h-7 cursor-pointer items-center rounded-full border px-3 text-xs transition\",\n checked\n ? \"border-[var(--hj-color-brand)] bg-[var(--hj-color-brand)] text-black\"\n : \"border-[var(--hj-color-web-border)] bg-transparent text-[var(--hj-color-web-muted)] hover:text-white\",\n className,\n )}\n onClick={() => onChange?.(!checked)}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n );\n}\n",
|
|
21
|
+
"import type { CSSProperties, ElementType, HTMLAttributes, ReactNode } from \"react\";\nimport { createContext, forwardRef, useContext, useMemo, useSyncExternalStore } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type Breakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"xxxl\";\nexport type ScreenMap = Partial<Record<Breakpoint, boolean>>;\nexport type BreakpointValues<T> = Partial<Record<Breakpoint, T>>;\n\nconst responsiveOrder = [\"xxxl\", \"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"] as const;\nconst responsiveOrderAscending = [...responsiveOrder].reverse();\n\nconst breakpointQueries: Record<Breakpoint, string> = {\n xs: \"(max-width: 575px)\",\n sm: \"(min-width: 576px)\",\n md: \"(min-width: 768px)\",\n lg: \"(min-width: 992px)\",\n xl: \"(min-width: 1200px)\",\n xxl: \"(min-width: 1600px)\",\n xxxl: \"(min-width: 1920px)\",\n};\n\ninterface MediaQueryHandler {\n readonly listener: (event: MediaQueryListEvent) => void;\n readonly mediaQueryList: MediaQueryList;\n}\n\nconst emptyScreens: ScreenMap = {};\nconst breakpointSubscribers = new Set<() => void>();\nlet breakpointSnapshot: ScreenMap = emptyScreens;\nlet breakpointHandlers: Partial<Record<Breakpoint, MediaQueryHandler>> = {};\n\nfunction emitBreakpointChange() {\n for (const subscriber of breakpointSubscribers) subscriber();\n}\n\nfunction registerBreakpointObserver() {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n\n const nextSnapshot: ScreenMap = {};\n const nextHandlers: Partial<Record<Breakpoint, MediaQueryHandler>> = {};\n\n for (const breakpoint of responsiveOrder) {\n const mediaQueryList = window.matchMedia(breakpointQueries[breakpoint]);\n nextSnapshot[breakpoint] = mediaQueryList.matches;\n\n const listener = (event: MediaQueryListEvent) => {\n if (breakpointSnapshot[breakpoint] === event.matches) return;\n breakpointSnapshot = { ...breakpointSnapshot, [breakpoint]: event.matches };\n emitBreakpointChange();\n };\n\n if (typeof mediaQueryList.addEventListener === \"function\") {\n mediaQueryList.addEventListener(\"change\", listener);\n } else if (typeof mediaQueryList.addListener === \"function\") {\n mediaQueryList.addListener(listener);\n }\n nextHandlers[breakpoint] = { listener, mediaQueryList };\n }\n\n breakpointSnapshot = nextSnapshot;\n breakpointHandlers = nextHandlers;\n}\n\nfunction unregisterBreakpointObserver() {\n for (const breakpoint of responsiveOrder) {\n const handler = breakpointHandlers[breakpoint];\n if (!handler) continue;\n if (typeof handler.mediaQueryList.removeEventListener === \"function\") {\n handler.mediaQueryList.removeEventListener(\"change\", handler.listener);\n } else if (typeof handler.mediaQueryList.removeListener === \"function\") {\n handler.mediaQueryList.removeListener(handler.listener);\n }\n }\n breakpointHandlers = {};\n breakpointSnapshot = emptyScreens;\n}\n\nfunction subscribeBreakpoint(subscriber: () => void) {\n breakpointSubscribers.add(subscriber);\n if (breakpointSubscribers.size === 1) {\n registerBreakpointObserver();\n subscriber();\n }\n\n return () => {\n breakpointSubscribers.delete(subscriber);\n if (breakpointSubscribers.size === 0) unregisterBreakpointObserver();\n };\n}\n\nfunction getBreakpointSnapshot() {\n return breakpointSnapshot;\n}\n\nfunction getServerBreakpointSnapshot() {\n return emptyScreens;\n}\n\nexport function useBreakpoint(): ScreenMap {\n return useSyncExternalStore(\n subscribeBreakpoint,\n getBreakpointSnapshot,\n getServerBreakpointSnapshot,\n );\n}\n\nexport function useBreakpointValue<T>(\n values: BreakpointValues<T>,\n defaultValue?: T,\n): T | undefined {\n const screens = useBreakpoint();\n let resolvedValue = values.xs !== undefined ? values.xs : defaultValue;\n\n for (const breakpoint of responsiveOrderAscending) {\n if (breakpoint === \"xs\") continue;\n const value = values[breakpoint];\n if (screens[breakpoint] && value !== undefined) resolvedValue = value;\n }\n\n return resolvedValue;\n}\n\nexport interface GridProps extends HTMLAttributes<HTMLElement> {\n readonly as?: \"div\" | \"section\";\n readonly children?: ReactNode;\n readonly columns?: 2 | 3 | 4;\n readonly gap?: \"sm\" | \"md\";\n}\n\nconst columnClass: Record<2 | 3 | 4, string> = {\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n};\n\nconst gapClass = {\n sm: \"gap-2\",\n md: \"gap-4\",\n} as const;\n\nconst InternalGrid = forwardRef<HTMLElement, GridProps>(function Grid(\n { as: Component = \"div\", children, className = \"\", columns = 3, gap = \"md\", ...props },\n ref,\n) {\n const GridComponent = Component as ElementType;\n\n return (\n <GridComponent\n className={cn(\"grid\", columnClass[columns], gapClass[gap], className)}\n ref={ref}\n {...props}\n >\n {children}\n </GridComponent>\n );\n});\n\nexport type GutterUnit = number | string;\nexport type Gutter = GutterUnit | BreakpointValues<GutterUnit> | undefined;\nexport type RowAlign = \"top\" | \"middle\" | \"bottom\" | \"stretch\";\nexport type RowJustify =\n | \"start\"\n | \"end\"\n | \"center\"\n | \"space-around\"\n | \"space-between\"\n | \"space-evenly\";\n\nexport interface RowProps extends HTMLAttributes<HTMLDivElement> {\n readonly align?: RowAlign | BreakpointValues<RowAlign>;\n readonly gutter?: Gutter | readonly [Gutter, Gutter];\n readonly justify?: RowJustify | BreakpointValues<RowJustify>;\n readonly prefixCls?: string;\n readonly wrap?: boolean;\n}\n\ninterface RowContextValue {\n readonly gutter: readonly [GutterUnit | undefined, GutterUnit | undefined];\n readonly wrap?: boolean;\n}\n\nconst RowContext = createContext<RowContextValue>({ gutter: [undefined, undefined] });\n\nfunction isResponsiveValue<T>(value: T | BreakpointValues<T>): value is BreakpointValues<T> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction resolveResponsiveProp<T>(\n value: T | BreakpointValues<T> | undefined,\n screens: ScreenMap,\n): T | undefined {\n if (value === undefined || !isResponsiveValue(value)) return value;\n\n for (const breakpoint of responsiveOrder) {\n if (screens[breakpoint] && value[breakpoint] !== undefined) return value[breakpoint];\n }\n return undefined;\n}\n\nfunction resolveGutter(gutter: Gutter, screens: ScreenMap): GutterUnit | undefined {\n if (gutter === undefined || !isResponsiveValue(gutter)) return gutter;\n const hasActiveBreakpoint = responsiveOrder.some((breakpoint) => screens[breakpoint]);\n\n for (const breakpoint of responsiveOrder) {\n if ((hasActiveBreakpoint ? screens[breakpoint] : true) && gutter[breakpoint] !== undefined) {\n return gutter[breakpoint];\n }\n }\n return undefined;\n}\n\nfunction halfGutter(gutter: GutterUnit, negative = false): GutterUnit {\n if (typeof gutter === \"number\") return gutter / (negative ? -2 : 2);\n return `calc(${gutter} / ${negative ? -2 : 2})`;\n}\n\nfunction isGutterTuple(gutter: RowProps[\"gutter\"]): gutter is readonly [Gutter, Gutter] {\n return Array.isArray(gutter);\n}\n\nconst rowAlignClass: Record<RowAlign, string> = {\n top: \"items-start\",\n middle: \"items-center\",\n bottom: \"items-end\",\n stretch: \"items-stretch\",\n};\n\nconst rowJustifyClass: Record<RowJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n \"space-around\": \"justify-around\",\n \"space-between\": \"justify-between\",\n \"space-evenly\": \"justify-evenly\",\n};\n\nexport const Row = forwardRef<HTMLDivElement, RowProps>(function Row(\n {\n align,\n children,\n className = \"\",\n gutter = 0,\n justify,\n prefixCls = \"hj-row\",\n style,\n wrap,\n ...props\n },\n ref,\n) {\n const screens = useBreakpoint();\n const [horizontalGutter, verticalGutter] = isGutterTuple(gutter)\n ? [resolveGutter(gutter[0], screens), resolveGutter(gutter[1], screens)]\n : [resolveGutter(gutter, screens), undefined];\n const mergedAlign = resolveResponsiveProp(align, screens);\n const mergedJustify = resolveResponsiveProp(justify, screens);\n const contextValue = useMemo<RowContextValue>(\n () => ({ gutter: [horizontalGutter, verticalGutter], wrap }),\n [horizontalGutter, verticalGutter, wrap],\n );\n const rowStyle: CSSProperties = {\n marginInline: horizontalGutter ? halfGutter(horizontalGutter, true) : undefined,\n rowGap: verticalGutter,\n ...style,\n };\n\n return (\n <RowContext.Provider value={contextValue}>\n <div\n className={cn(\n prefixCls,\n \"flex min-w-0 flex-row\",\n wrap === false ? \"flex-nowrap\" : \"flex-wrap\",\n mergedAlign && `${prefixCls}-${mergedAlign}`,\n mergedAlign && rowAlignClass[mergedAlign],\n mergedJustify && `${prefixCls}-${mergedJustify}`,\n mergedJustify && rowJustifyClass[mergedJustify],\n className,\n )}\n ref={ref}\n style={rowStyle}\n {...props}\n >\n {children}\n </div>\n </RowContext.Provider>\n );\n});\n\nexport type ColSpanType = number | string;\nexport type FlexType = NonNullable<CSSProperties[\"flex\"]>;\n\nexport interface ColSize {\n readonly flex?: FlexType;\n readonly offset?: ColSpanType;\n readonly order?: ColSpanType;\n readonly pull?: ColSpanType;\n readonly push?: ColSpanType;\n readonly span?: ColSpanType;\n}\n\nexport interface ColProps\n extends HTMLAttributes<HTMLDivElement>,\n Partial<Record<Breakpoint, ColSpanType | ColSize>> {\n readonly flex?: FlexType;\n readonly offset?: ColSpanType;\n readonly order?: ColSpanType;\n readonly prefixCls?: string;\n readonly pull?: ColSpanType;\n readonly push?: ColSpanType;\n readonly span?: ColSpanType;\n}\n\nfunction parseFlex(flex: FlexType): CSSProperties[\"flex\"] {\n if (flex === \"auto\") return \"1 1 auto\";\n if (typeof flex === \"number\") return `${flex} ${flex} auto`;\n if (/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(flex)) return `0 0 ${flex}`;\n return flex;\n}\n\nfunction asColSize(size: ColSpanType | ColSize | undefined): ColSize | undefined {\n if (typeof size === \"number\" || typeof size === \"string\") return { span: size };\n return size;\n}\n\nfunction mergeColSize(target: ColSize, source: ColSize | undefined): ColSize {\n if (!source) return target;\n return {\n flex: source.flex ?? target.flex,\n offset: source.offset ?? target.offset,\n order: source.order ?? target.order,\n pull: source.pull ?? target.pull,\n push: source.push ?? target.push,\n span: source.span ?? target.span,\n };\n}\n\nfunction gridPercentage(value: ColSpanType | undefined): string | undefined {\n if (value === undefined) return undefined;\n const numericValue = Number(value);\n if (!Number.isFinite(numericValue) || numericValue < 0 || numericValue > 24) return undefined;\n return `${(numericValue / 24) * 100}%`;\n}\n\nfunction colSizeClassName(prefixCls: string, breakpoint: Breakpoint, size: ColSize) {\n return cn(\n size.span !== undefined && `${prefixCls}-${breakpoint}-${size.span}`,\n size.order !== undefined && `${prefixCls}-${breakpoint}-order-${size.order}`,\n size.offset !== undefined && `${prefixCls}-${breakpoint}-offset-${size.offset}`,\n size.push !== undefined && `${prefixCls}-${breakpoint}-push-${size.push}`,\n size.pull !== undefined && `${prefixCls}-${breakpoint}-pull-${size.pull}`,\n size.flex !== undefined && `${prefixCls}-${breakpoint}-flex`,\n );\n}\n\nexport const Col = forwardRef<HTMLDivElement, ColProps>(function Col(\n {\n children,\n className = \"\",\n flex,\n lg,\n md,\n offset,\n order,\n prefixCls = \"hj-col\",\n pull,\n push,\n sm,\n span,\n style,\n xl,\n xs,\n xxl,\n xxxl,\n ...props\n },\n ref,\n) {\n const screens = useBreakpoint();\n const { gutter, wrap } = useContext(RowContext);\n const responsiveSizes: Partial<Record<Breakpoint, ColSpanType | ColSize>> = {\n xs,\n sm,\n md,\n lg,\n xl,\n xxl,\n xxxl,\n };\n let mergedSize: ColSize = { flex, offset, order, pull, push, span };\n\n for (const breakpoint of responsiveOrderAscending) {\n if (breakpoint === \"xs\" || screens[breakpoint]) {\n mergedSize = mergeColSize(mergedSize, asColSize(responsiveSizes[breakpoint]));\n }\n }\n\n const spanPercentage = gridPercentage(mergedSize.span);\n const offsetPercentage = gridPercentage(mergedSize.offset);\n const pushPercentage = gridPercentage(mergedSize.push);\n const pullPercentage = gridPercentage(mergedSize.pull);\n const responsiveClassName = responsiveOrderAscending\n .map((breakpoint) => {\n const size = asColSize(responsiveSizes[breakpoint]);\n return size ? colSizeClassName(prefixCls, breakpoint, size) : \"\";\n })\n .filter(Boolean)\n .join(\" \");\n const colStyle: CSSProperties = {\n display: mergedSize.span !== undefined && Number(mergedSize.span) === 0 ? \"none\" : undefined,\n flex: spanPercentage ? `0 0 ${spanPercentage}` : undefined,\n insetInlineEnd: pullPercentage,\n insetInlineStart: pushPercentage,\n marginInlineStart: offsetPercentage,\n maxWidth: spanPercentage,\n order: mergedSize.order,\n paddingInline: gutter[0] ? halfGutter(gutter[0]) : undefined,\n };\n\n if (mergedSize.flex !== undefined) {\n colStyle.flex = parseFlex(mergedSize.flex);\n if (wrap === false) colStyle.minWidth = 0;\n }\n\n return (\n <div\n className={cn(\n prefixCls,\n \"relative min-h-px max-w-full\",\n span !== undefined && `${prefixCls}-${span}`,\n order !== undefined && `${prefixCls}-order-${order}`,\n offset !== undefined && `${prefixCls}-offset-${offset}`,\n push !== undefined && `${prefixCls}-push-${push}`,\n pull !== undefined && `${prefixCls}-pull-${pull}`,\n responsiveClassName,\n className,\n )}\n ref={ref}\n style={{ ...colStyle, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nexport const Grid = Object.assign(InternalGrid, {\n Col,\n Row,\n useBreakpoint,\n useBreakpointValue,\n});\n",
|
|
22
|
+
"import RcSteps from \"@rc-component/steps\";\nimport type { StepsProps as RcStepsProps } from \"@rc-component/steps\";\nimport type { CSSProperties, Key, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Icon } from \"./Icon\";\nimport { Progress } from \"./Progress\";\n\nexport type StepStatus = \"wait\" | \"process\" | \"finish\" | \"error\";\nexport type StepsSize = \"small\" | \"medium\" | \"middle\" | \"default\";\nexport type StepsType = \"default\" | \"navigation\" | \"inline\" | \"panel\" | \"dot\";\nexport type StepsVariant = \"filled\" | \"outlined\";\nexport type StepsOrientation = \"horizontal\" | \"vertical\";\nexport type StepsTitlePlacement = \"horizontal\" | \"vertical\";\n\ntype RcStepItem = NonNullable<RcStepsProps[\"items\"]>[number];\ntype RcIconRenderInfo = Parameters<NonNullable<RcStepsProps[\"iconRender\"]>>[1];\n\nexport type StepItem = RcStepItem & {\n readonly key?: Key;\n};\n\nexport type ProgressDotRender = (\n iconDot: ReactNode,\n info: {\n readonly content: ReactNode;\n readonly description: ReactNode;\n readonly index: number;\n readonly status: StepStatus;\n readonly title: ReactNode;\n },\n) => ReactNode;\n\nexport type StepsIconRender = (\n originNode: ReactNode,\n info: Pick<RcIconRenderInfo, \"active\" | \"index\" | \"item\" | \"components\">,\n) => ReactNode;\n\nexport interface StepsProps\n extends Omit<\n RcStepsProps,\n \"iconRender\" | \"items\" | \"orientation\" | \"prefixCls\" | \"titlePlacement\"\n > {\n readonly direction?: StepsOrientation;\n readonly ellipsis?: boolean;\n readonly iconRender?: StepsIconRender;\n readonly items?: readonly StepItem[];\n readonly labelPlacement?: StepsTitlePlacement;\n readonly maxCount?: number;\n readonly offset?: number;\n readonly orientation?: StepsOrientation;\n readonly percent?: number;\n readonly progressDot?: boolean | ProgressDotRender;\n readonly responsive?: boolean;\n readonly size?: StepsSize;\n readonly titlePlacement?: StepsTitlePlacement;\n readonly type?: StepsType;\n readonly variant?: StepsVariant;\n}\n\ninterface DisplayStep {\n readonly item: StepItem;\n readonly originIndex: number;\n}\n\nfunction useNarrowScreen(enabled: boolean) {\n const [narrow, setNarrow] = useState(false);\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") {\n setNarrow(false);\n return;\n }\n const media = window.matchMedia(\"(max-width: 532px)\");\n const update = () => setNarrow(media.matches);\n update();\n media.addEventListener(\"change\", update);\n return () => media.removeEventListener(\"change\", update);\n }, [enabled]);\n return narrow;\n}\n\nfunction getCollapsedIndexes(total: number, current: number, maxCount: number) {\n const safeCurrent = Math.max(0, Math.min(total - 1, current));\n const realItemCount = Math.min(maxCount, total);\n const indexes = new Set([0, safeCurrent, total - 1]);\n\n for (let distance = 1; indexes.size < realItemCount && distance < total; distance += 1) {\n for (const index of [\n safeCurrent - distance,\n safeCurrent + distance,\n distance,\n total - 1 - distance,\n ]) {\n if (indexes.size >= realItemCount) break;\n if (index >= 0 && index < total) indexes.add(index);\n }\n }\n\n return Array.from(indexes)\n .sort((first, second) => first - second)\n .flatMap<number | null>((index, order, sorted) =>\n order > 0 && index - (sorted[order - 1] ?? 0) > 1 ? [null, index] : [index],\n );\n}\n\nfunction getDisplaySteps(\n items: readonly StepItem[],\n current: number,\n initial: number,\n maxCount: number | undefined,\n): DisplayStep[] {\n const currentIndex = current - initial;\n if (maxCount == null || maxCount < 3 || items.length <= maxCount) {\n return items.map((item, originIndex) => ({ item, originIndex }));\n }\n const indexes = getCollapsedIndexes(items.length, currentIndex, maxCount);\n return indexes.map((index, displayIndex) => {\n if (index != null) {\n return {\n item: { ...items[index], key: items[index]?.key ?? index },\n originIndex: index,\n };\n }\n const previousIndex = indexes[displayIndex - 1] as number;\n const nextIndex = indexes[displayIndex + 1] as number;\n const hiddenItems = items.slice(previousIndex + 1, nextIndex);\n return {\n item: {\n className: \"hj-steps-item-ellipsis\",\n disabled: true,\n icon: <span aria-hidden=\"true\">...</span>,\n key: `ellipsis-${previousIndex}-${nextIndex}`,\n status: hiddenItems.some((item) => item.status === \"error\")\n ? \"error\"\n : nextIndex - 1 < currentIndex\n ? \"finish\"\n : \"wait\",\n title: \"\",\n },\n originIndex: -1,\n };\n });\n}\n\nexport function Steps({\n className = \"\",\n current = 0,\n direction,\n ellipsis = false,\n iconRender,\n initial = 0,\n items,\n labelPlacement,\n maxCount,\n offset = 0,\n onChange,\n orientation,\n percent,\n progressDot,\n responsive = true,\n rootClassName,\n size = \"medium\",\n style,\n titlePlacement,\n type = \"default\",\n variant = \"filled\",\n ...props\n}: StepsProps) {\n const narrow = useNarrowScreen(responsive);\n const mergedType = type === \"default\" && progressDot ? \"dot\" : type;\n const requestedOrientation = orientation ?? direction ?? \"horizontal\";\n const mergedOrientation =\n mergedType === \"panel\" ? \"horizontal\" : narrow ? \"vertical\" : requestedOrientation;\n const isDot = mergedType === \"dot\" || mergedType === \"inline\";\n const mergedTitlePlacement =\n mergedOrientation === \"vertical\"\n ? \"horizontal\"\n : isDot\n ? \"vertical\"\n : mergedType === \"navigation\"\n ? \"horizontal\"\n : (titlePlacement ?? labelPlacement ?? \"horizontal\");\n const mergedSize = size === \"middle\" || size === \"default\" ? \"medium\" : size;\n const mergedItems = useMemo(\n () =>\n (items ?? []).filter(Boolean).map((item) => ({\n ...item,\n content: item.content ?? item.description,\n })),\n [items],\n );\n const displaySteps = useMemo(\n () => getDisplaySteps(mergedItems, current, initial, maxCount),\n [current, initial, maxCount, mergedItems],\n );\n const displayCurrentIndex = displaySteps.findIndex(\n (step) => step.originIndex === current - initial,\n );\n const mappedCurrent =\n initial + (displayCurrentIndex >= 0 ? displayCurrentIndex : current - initial);\n const customProgressDot = typeof progressDot === \"function\" ? progressDot : undefined;\n\n const internalIconRender: NonNullable<RcStepsProps[\"iconRender\"]> = (originNode, info) => {\n const displayIndex = info.index - initial;\n const originIndex = displaySteps[displayIndex]?.originIndex ?? displayIndex;\n const mappedIndex = originIndex >= 0 ? initial + originIndex : info.index;\n const { Icon: StepIcon } = info.components;\n const itemStatus = (info.item.status ?? \"wait\") as StepStatus;\n let content: ReactNode;\n\n if (isDot) {\n const dot = info.item.icon ?? <span className=\"hj-steps-icon-dot\" />;\n content = customProgressDot\n ? customProgressDot(dot, {\n content: info.item.content,\n description: info.item.description,\n index: mappedIndex,\n status: itemStatus,\n title: info.item.title,\n })\n : dot;\n } else if (info.item.icon) {\n content = info.item.icon;\n } else if (itemStatus === \"finish\") {\n content = <Icon name=\"check\" size={16} />;\n } else if (itemStatus === \"error\") {\n content = <Icon name=\"close\" size={16} />;\n } else {\n const number = <span className=\"hj-steps-icon-number\">{mappedIndex + 1}</span>;\n content =\n itemStatus === \"process\" && percent != null ? (\n <span className=\"relative inline-flex h-7 w-7 items-center justify-center\">\n <Progress\n className=\"absolute inset-0\"\n percent={percent}\n showInfo={false}\n size={28}\n strokeWidth={4}\n type=\"circle\"\n />\n {number}\n </span>\n ) : (\n number\n );\n }\n\n const internalNode = <StepIcon>{content}</StepIcon>;\n return iconRender\n ? iconRender(internalNode, {\n ...info,\n index: mappedIndex,\n })\n : internalNode;\n };\n\n return (\n <RcSteps\n {...props}\n className={cn(\n \"hj-steps-root\",\n `hj-steps-${variant}`,\n mergedType !== \"default\" && `hj-steps-${mergedType}`,\n isDot && \"hj-steps-dot\",\n ellipsis && \"hj-steps-ellipsis\",\n maxCount != null && mergedItems.length > maxCount && \"hj-steps-max-count\",\n `hj-steps-${mergedSize}`,\n rootClassName,\n className,\n )}\n current={mappedCurrent}\n iconRender={internalIconRender}\n initial={initial}\n items={displaySteps.map((step) => step.item)}\n onChange={\n onChange\n ? (nextDisplayIndex) => {\n const originIndex = displaySteps[nextDisplayIndex - initial]?.originIndex;\n if (originIndex != null && originIndex >= 0) onChange(initial + originIndex);\n }\n : undefined\n }\n orientation={mergedOrientation}\n prefixCls=\"hj-steps\"\n style={{ \"--hj-steps-offset\": offset, ...style } as CSSProperties}\n titlePlacement={mergedTitlePlacement}\n />\n );\n}\n",
|
|
23
|
+
"import { Circle as RcCircle, Line as RcLine } from \"@rc-component/progress\";\nimport type { ProgressProps as RcProgressProps } from \"@rc-component/progress\";\nimport type { AriaAttributes, CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Icon } from \"./Icon\";\n\nexport type ProgressStatus = \"normal\" | \"success\" | \"exception\" | \"active\";\nexport type ProgressType = \"line\" | \"circle\" | \"dashboard\";\nexport type ProgressSize = \"small\" | \"medium\" | \"middle\" | \"default\";\nexport type ProgressStrokeLinecap = NonNullable<RcProgressProps[\"strokeLinecap\"]>;\nexport type ProgressGapPlacement = \"top\" | \"bottom\" | \"start\" | \"end\";\nexport type ProgressGapPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type ProgressGradient = { readonly direction?: string } & Record<string, string | undefined>;\n\nexport interface ProgressSuccessProps {\n readonly percent?: number;\n readonly strokeColor?: string;\n}\n\nexport interface ProgressPercentPosition {\n readonly align?: \"start\" | \"center\" | \"end\";\n readonly type?: \"inner\" | \"outer\";\n}\n\nexport type ProgressSemanticSlot = \"root\" | \"body\" | \"rail\" | \"track\" | \"indicator\";\n\nexport interface ProgressProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"className\" | \"style\">,\n Pick<AriaAttributes, \"aria-label\" | \"aria-labelledby\"> {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: Partial<Record<ProgressSemanticSlot, string>>;\n readonly format?: (percent?: number, successPercent?: number) => ReactNode;\n readonly gapDegree?: number;\n readonly gapPlacement?: ProgressGapPlacement;\n /** @deprecated Use `gapPlacement` instead. */\n readonly gapPosition?: ProgressGapPosition;\n readonly percent?: number;\n readonly percentPosition?: ProgressPercentPosition;\n readonly railColor?: string;\n readonly rootClassName?: string;\n readonly rounding?: (step: number) => number;\n readonly showInfo?: boolean;\n readonly size?:\n | number\n | [number | string, number]\n | ProgressSize\n | { readonly width?: number; readonly height?: number };\n readonly status?: ProgressStatus;\n readonly steps?: number | { readonly count: number; readonly gap: number };\n readonly strokeColor?: string | readonly string[] | ProgressGradient;\n readonly strokeLinecap?: ProgressStrokeLinecap;\n readonly strokeWidth?: number;\n readonly style?: CSSProperties;\n readonly styles?: Partial<Record<ProgressSemanticSlot, CSSProperties>>;\n readonly success?: ProgressSuccessProps;\n /** @deprecated Use `railColor` instead. */\n readonly trailColor?: string;\n readonly type?: ProgressType;\n /** @deprecated Use `size` instead. */\n readonly width?: number;\n}\n\nconst statusColor: Record<ProgressStatus, string> = {\n normal: \"var(--hj-color-brand)\",\n success: \"var(--hj-color-success)\",\n exception: \"var(--hj-color-danger)\",\n active: \"var(--hj-color-brand)\",\n};\n\nfunction validPercent(percent: number | undefined) {\n if (percent == null || Number.isNaN(percent)) return 0;\n return Math.max(0, Math.min(100, percent));\n}\n\nfunction resolveCircleSize(size: ProgressProps[\"size\"], width: number | undefined) {\n if (typeof width === \"number\") return width;\n if (typeof size === \"number\") return size;\n if (size === \"small\") return 80;\n if (size && typeof size === \"object\" && !Array.isArray(size)) return size.width ?? 120;\n return 120;\n}\n\nfunction resolveLineSize(size: ProgressProps[\"size\"], strokeWidth: number) {\n if (Array.isArray(size)) {\n return { width: size[0], height: size[1] };\n }\n if (size && typeof size === \"object\") {\n return { width: size.width, height: size.height ?? strokeWidth };\n }\n return { height: size === \"small\" ? Math.min(strokeWidth, 6) : strokeWidth };\n}\n\nfunction resolveGapPosition(\n placement: ProgressGapPlacement | undefined,\n legacyPosition: ProgressGapPosition | undefined,\n): ProgressGapPosition | undefined {\n if (legacyPosition) return legacyPosition;\n if (placement === \"start\") return \"left\";\n if (placement === \"end\") return \"right\";\n return placement;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n children,\n className = \"\",\n classNames,\n format,\n gapDegree,\n gapPlacement,\n gapPosition,\n percent = 0,\n percentPosition,\n railColor,\n rootClassName,\n rounding,\n showInfo = true,\n size = \"medium\",\n status,\n steps,\n strokeColor,\n strokeLinecap = \"round\",\n strokeWidth = 8,\n style,\n styles,\n success,\n trailColor,\n type = \"line\",\n width,\n ...props\n },\n ref,\n) {\n const value = validPercent(percent);\n const successValue = success?.percent == null ? undefined : validPercent(success.percent);\n const statusValue = successValue ?? value;\n const mergedStatus = status ?? (statusValue >= 100 ? \"success\" : \"normal\");\n const baseStrokeColor = strokeColor ?? statusColor[mergedStatus];\n const mergedRailColor = railColor ?? trailColor ?? \"var(--hj-color-web-control)\";\n const successSegment = successValue == null ? undefined : Math.min(successValue, value);\n const stepCount = typeof steps === \"object\" ? steps.count : steps;\n const stepValue =\n rounding && stepCount\n ? validPercent((rounding((value / 100) * stepCount) / stepCount) * 100)\n : value;\n const rcPercent: RcProgressProps[\"percent\"] =\n successSegment == null ? stepValue : [successSegment, Math.max(0, stepValue - successSegment)];\n const rcStrokeColor: RcProgressProps[\"strokeColor\"] =\n successSegment == null\n ? (baseStrokeColor as RcProgressProps[\"strokeColor\"])\n : ([\n success?.strokeColor ?? statusColor.success,\n baseStrokeColor,\n ] as RcProgressProps[\"strokeColor\"]);\n const info = format ? (\n format(value, successValue)\n ) : mergedStatus === \"exception\" ? (\n <Icon aria-label=\"失败\" name=\"close\" size={type === \"line\" ? 16 : 20} />\n ) : mergedStatus === \"success\" ? (\n <Icon aria-label=\"完成\" name=\"check\" size={type === \"line\" ? 16 : 20} />\n ) : (\n `${Math.round(value)}%`\n );\n const infoPosition = percentPosition?.type ?? \"outer\";\n const infoAlign = percentPosition?.align ?? \"end\";\n const isCircle = type === \"circle\" || type === \"dashboard\";\n const circleSize = resolveCircleSize(size, width);\n const lineSize = resolveLineSize(size, strokeWidth);\n const mergedGapDegree = type === \"dashboard\" ? (gapDegree ?? 75) : gapDegree;\n const mergedGapPosition =\n resolveGapPosition(gapPlacement, gapPosition) ?? (type === \"dashboard\" ? \"bottom\" : undefined);\n\n const indicator = showInfo ? (\n <span\n className={cn(\n \"hj-progress-indicator text-[var(--hj-color-web-muted)]\",\n isCircle ? \"text-sm\" : \"min-w-10 text-xs\",\n !isCircle && infoAlign === \"start\" && \"text-left\",\n !isCircle && infoAlign === \"center\" && \"text-center\",\n !isCircle && infoAlign === \"end\" && \"text-right\",\n classNames?.indicator,\n )}\n style={styles?.indicator}\n >\n {info}\n </span>\n ) : null;\n\n let graphic: ReactNode;\n if (isCircle) {\n graphic = (\n <div\n className={cn(\"hj-progress-body relative\", classNames?.body)}\n style={{ width: circleSize, height: circleSize, ...styles?.body }}\n >\n <RcCircle\n className={cn(\n \"hj-progress-graphic h-full w-full\",\n mergedStatus === \"active\" && \"hj-progress-active\",\n )}\n classNames={{ rail: classNames?.rail, track: classNames?.track }}\n gapDegree={mergedGapDegree}\n gapPosition={mergedGapPosition}\n percent={rcPercent}\n prefixCls=\"hj-progress\"\n railColor={mergedRailColor}\n railWidth={strokeWidth}\n steps={steps}\n strokeColor={rcStrokeColor}\n strokeLinecap={strokeLinecap}\n strokeWidth={strokeWidth}\n styles={{ rail: styles?.rail, track: styles?.track }}\n />\n {indicator ? (\n <span className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n {indicator}\n </span>\n ) : null}\n </div>\n );\n } else {\n graphic = (\n <div\n className={cn(\"hj-progress-body min-w-[120px] flex-1 overflow-hidden\", classNames?.body)}\n style={{ ...lineSize, ...styles?.body }}\n >\n <RcLine\n className={cn(\n \"hj-progress-graphic block h-full w-full\",\n mergedStatus === \"active\" && \"hj-progress-active hj-skeleton-active\",\n )}\n classNames={{ rail: classNames?.rail, track: classNames?.track }}\n percent={rcPercent}\n prefixCls=\"hj-progress\"\n railColor={mergedRailColor}\n railWidth={strokeWidth}\n steps={steps}\n strokeColor={rcStrokeColor}\n strokeLinecap={strokeLinecap}\n strokeWidth={strokeWidth}\n styles={{ rail: styles?.rail, track: styles?.track }}\n />\n </div>\n );\n }\n\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: Progress bars expose read-only state and do not accept keyboard interaction.\n <div\n {...props}\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={statusValue}\n className={cn(\n \"hj-progress\",\n `hj-progress-status-${mergedStatus}`,\n `hj-progress-${type}`,\n Boolean(steps) && \"hj-progress-steps\",\n showInfo && \"hj-progress-show-info\",\n isCircle\n ? \"hj-progress-circle-root inline-flex flex-col items-center gap-2\"\n : \"hj-progress-line-root flex items-center gap-3\",\n !isCircle && infoPosition === \"inner\" && \"relative\",\n classNames?.root,\n rootClassName,\n className,\n )}\n ref={ref}\n role=\"progressbar\"\n style={{ ...styles?.root, ...style }}\n >\n {graphic}\n {!isCircle && infoPosition === \"outer\" ? indicator : null}\n {!isCircle && infoPosition === \"inner\" && indicator ? (\n <span className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n {indicator}\n </span>\n ) : null}\n {children}\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n",
|
|
24
|
+
"import { composeRefs, useControllableValue, useLatest, warning } from \"@996-design/996-utils\";\nimport ResizeObserver from \"@rc-component/resize-observer\";\nimport { raf, useEvent } from \"@rc-component/util\";\nimport type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport type { TargetContainer } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { getFixedBottom, getFixedContainerOffset, getFixedTop, getTargetRect } from \"./affix/utils\";\n\nconst TRIGGER_EVENTS = [\n \"resize\",\n \"scroll\",\n \"touchstart\",\n \"touchmove\",\n \"touchend\",\n \"pageshow\",\n \"load\",\n] as const;\n\nconst AFFIX_STATUS_NONE = 0;\nconst AFFIX_STATUS_PREPARE = 1;\n\ntype AffixStatus = typeof AFFIX_STATUS_NONE | typeof AFFIX_STATUS_PREPARE;\n\nfunction getDefaultTarget() {\n return typeof window === \"undefined\" ? null : window;\n}\n\nfunction throttleByAnimationFrame<Args extends unknown[]>(callback: (...args: Args) => void) {\n let requestId: number | null = null;\n\n const throttled = (...args: Args) => {\n if (requestId !== null) return;\n requestId = raf(() => {\n requestId = null;\n callback(...args);\n });\n };\n\n throttled.cancel = () => {\n if (requestId !== null) {\n raf.cancel(requestId);\n }\n requestId = null;\n };\n\n return throttled;\n}\n\nfunction normalizeTarget(target: TargetContainer | null | undefined): Window | HTMLElement | null {\n if (typeof window !== \"undefined\" && target === window) {\n return window;\n }\n if (typeof HTMLElement !== \"undefined\" && target instanceof HTMLElement) {\n return target;\n }\n if (typeof ShadowRoot !== \"undefined\" && target instanceof ShadowRoot) {\n return target.host instanceof HTMLElement ? target.host : null;\n }\n return null;\n}\n\nexport interface AffixProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onChange\"> {\n readonly children: ReactNode;\n readonly offsetBottom?: number;\n readonly offsetTop?: number;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n readonly target?: () => Window | HTMLElement | null;\n readonly onChange?: (affixed?: boolean) => void;\n /** Test hook called after an update request has been measured. */\n readonly onTestUpdate?: () => void;\n /** @internal AntD-compatible test hook. */\n readonly onTestUpdatePosition?: () => void;\n}\n\nexport interface AffixRef {\n readonly nativeElement: HTMLDivElement;\n readonly updatePosition: ReturnType<typeof throttleByAnimationFrame>;\n}\n\nexport const Affix = forwardRef<AffixRef, AffixProps>(function Affix(\n {\n children,\n className = \"\",\n offsetBottom,\n offsetTop,\n onChange,\n onTestUpdate,\n onTestUpdatePosition,\n prefixCls,\n rootClassName,\n style,\n target,\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const componentConfig = config.components.Affix as\n | { readonly className?: string; readonly style?: CSSProperties }\n | undefined;\n const affixPrefixCls = config.getPrefixCls(\"affix\", prefixCls);\n\n const [affixStyle, setAffixStyle] = useState<CSSProperties>();\n const [placeholderStyle, setPlaceholderStyle] = useState<CSSProperties>();\n const statusRef = useRef<AffixStatus>(AFFIX_STATUS_NONE);\n const lastAffixRef = useRef(false);\n const affixStyleRef = useRef<CSSProperties | undefined>(undefined);\n const prevTargetRef = useRef<Window | HTMLElement | null>(null);\n const prevListenerRef = useRef<EventListener | null>(null);\n const placeholderRef = useRef<HTMLDivElement>(null);\n const fixedRef = useRef<HTMLDivElement>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n affixStyleRef.current = affixStyle;\n\n const targetFunc: () => Window | HTMLElement | null =\n target ??\n (config.getTargetContainer\n ? () => normalizeTarget(config.getTargetContainer?.() ?? null)\n : getDefaultTarget);\n const internalOffsetTop = offsetBottom === undefined && offsetTop === undefined ? 0 : offsetTop;\n\n const commitMeasure = useEvent(\n (nextAffixStyle?: CSSProperties, nextPlaceholderStyle?: CSSProperties) => {\n const nextAffix = Boolean(nextAffixStyle);\n if (lastAffixRef.current !== nextAffix) {\n lastAffixRef.current = nextAffix;\n onChange?.(nextAffix);\n }\n affixStyleRef.current = nextAffixStyle;\n setAffixStyle(nextAffixStyle);\n setPlaceholderStyle(nextPlaceholderStyle);\n },\n );\n\n const measure = useEvent(() => {\n if (\n statusRef.current !== AFFIX_STATUS_PREPARE ||\n !fixedRef.current ||\n !placeholderRef.current\n ) {\n return;\n }\n\n const targetNode = targetFunc();\n const placeholderNode = placeholderRef.current;\n if (!targetNode) {\n statusRef.current = AFFIX_STATUS_NONE;\n commitMeasure();\n return;\n }\n\n const placeholderRect = getTargetRect(placeholderNode);\n if (\n placeholderRect.top === 0 &&\n placeholderRect.left === 0 &&\n placeholderRect.width === 0 &&\n placeholderRect.height === 0\n ) {\n return;\n }\n\n const targetRect = getTargetRect(targetNode);\n const fixedTop = getFixedTop(placeholderRect, targetRect, internalOffsetTop);\n const fixedBottom = getFixedBottom(placeholderRect, targetRect, offsetBottom);\n const containerOffset = getFixedContainerOffset(fixedRef.current);\n let nextAffixStyle: CSSProperties | undefined;\n\n if (fixedTop !== undefined) {\n nextAffixStyle = {\n position: \"fixed\",\n top: fixedTop - containerOffset.top,\n width: placeholderRect.width,\n height: placeholderRect.height,\n };\n } else if (fixedBottom !== undefined) {\n nextAffixStyle = {\n position: \"fixed\",\n bottom: fixedBottom - containerOffset.bottom,\n width: placeholderRect.width,\n height: placeholderRect.height,\n };\n }\n\n statusRef.current = AFFIX_STATUS_NONE;\n commitMeasure(\n nextAffixStyle,\n nextAffixStyle ? { width: placeholderRect.width, height: placeholderRect.height } : undefined,\n );\n });\n\n const prepareMeasure = useEvent(() => {\n statusRef.current = AFFIX_STATUS_PREPARE;\n measure();\n onTestUpdate?.();\n onTestUpdatePosition?.();\n });\n\n const updatePositionRef = useRef<ReturnType<typeof throttleByAnimationFrame> | null>(null);\n if (!updatePositionRef.current) {\n updatePositionRef.current = throttleByAnimationFrame(prepareMeasure);\n }\n const updatePosition = updatePositionRef.current;\n\n const lazyMeasure = useEvent(() => {\n const currentAffixStyle = affixStyleRef.current;\n const targetNode = targetFunc();\n const placeholderNode = placeholderRef.current;\n const fixedNode = fixedRef.current;\n\n if (currentAffixStyle && targetNode && placeholderNode && fixedNode) {\n const targetRect = getTargetRect(targetNode);\n const placeholderRect = getTargetRect(placeholderNode);\n const fixedTop = getFixedTop(placeholderRect, targetRect, internalOffsetTop);\n const fixedBottom = getFixedBottom(placeholderRect, targetRect, offsetBottom);\n const containerOffset = getFixedContainerOffset(fixedNode);\n\n if (\n (fixedTop !== undefined && currentAffixStyle.top === fixedTop - containerOffset.top) ||\n (fixedBottom !== undefined &&\n currentAffixStyle.bottom === fixedBottom - containerOffset.bottom)\n ) {\n return;\n }\n }\n\n prepareMeasure();\n });\n\n const lazyUpdatePositionRef = useRef<ReturnType<typeof throttleByAnimationFrame> | null>(null);\n if (!lazyUpdatePositionRef.current) {\n lazyUpdatePositionRef.current = throttleByAnimationFrame(lazyMeasure);\n }\n const lazyUpdatePosition = lazyUpdatePositionRef.current;\n\n const removeTargetListeners = useEvent(\n (listenerTarget: Window | HTMLElement | null, listener: EventListener | null) => {\n if (!listenerTarget || !listener) return;\n for (const eventName of TRIGGER_EVENTS) {\n listenerTarget.removeEventListener(eventName, listener);\n }\n },\n );\n\n const addListeners = useEvent(() => {\n const listenerTarget = targetFunc();\n if (!listenerTarget) return;\n\n removeTargetListeners(prevTargetRef.current, prevListenerRef.current);\n const listener = lazyUpdatePosition as EventListener;\n for (const eventName of TRIGGER_EVENTS) {\n listenerTarget.addEventListener(eventName, listener);\n }\n prevTargetRef.current = listenerTarget;\n prevListenerRef.current = listener;\n });\n\n const removeListeners = useEvent(() => {\n removeTargetListeners(targetFunc(), lazyUpdatePosition as EventListener);\n removeTargetListeners(prevTargetRef.current, prevListenerRef.current);\n prevTargetRef.current = null;\n prevListenerRef.current = null;\n updatePosition.cancel();\n lazyUpdatePosition.cancel();\n });\n\n useImperativeHandle(\n ref,\n () => ({\n nativeElement: placeholderRef.current as HTMLDivElement,\n updatePosition,\n }),\n [updatePosition],\n );\n\n useEffect(() => {\n timerRef.current = setTimeout(addListeners);\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n removeListeners();\n };\n }, [addListeners, removeListeners]);\n\n // Listener ownership must be refreshed when the target factory resolves differently.\n // biome-ignore lint/correctness/useExhaustiveDependencies: target factories are intentional effect triggers.\n useEffect(() => {\n addListeners();\n return removeListeners;\n }, [addListeners, config.getTargetContainer, removeListeners, target]);\n\n // A changed offset or target requires an immediate re-measure even before the next scroll event.\n // biome-ignore lint/correctness/useExhaustiveDependencies: measurement inputs are intentional effect triggers.\n useEffect(() => {\n updatePosition();\n }, [config.getTargetContainer, offsetBottom, offsetTop, target, updatePosition]);\n\n return (\n <ResizeObserver onResize={updatePosition}>\n <div\n {...props}\n className={cn(className, componentConfig?.className)}\n ref={placeholderRef}\n style={{ ...componentConfig?.style, ...style }}\n >\n {affixStyle ? <div aria-hidden=\"true\" style={placeholderStyle} /> : null}\n <div\n className={cn(\n affixStyle && \"hj-affix\",\n affixStyle && affixPrefixCls !== \"hj-affix\" && affixPrefixCls,\n affixStyle && rootClassName,\n )}\n ref={fixedRef}\n style={affixStyle}\n >\n <ResizeObserver onResize={updatePosition}>{children}</ResizeObserver>\n </div>\n </div>\n </ResizeObserver>\n );\n});\n\nAffix.displayName = \"Affix\";\n\nexport interface BorderBeamProps extends HTMLAttributes<HTMLDivElement> {\n readonly children?: ReactNode;\n readonly duration?: number;\n}\n\nexport function BorderBeam({\n children,\n className = \"\",\n duration = 2600,\n style,\n ...props\n}: BorderBeamProps) {\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-[var(--hj-radius-md)] border border-[var(--hj-color-web-border)]\",\n className,\n )}\n style={{ \"--hj-border-beam-duration\": `${duration}ms`, ...style } as CSSProperties}\n {...props}\n >\n <span className=\"pointer-events-none absolute inset-0 rounded-[inherit] bg-[conic-gradient(from_0deg,transparent_0deg,var(--hj-color-brand)_80deg,transparent_120deg)] opacity-60 [animation:hj-border-beam_var(--hj-border-beam-duration)_linear_infinite]\" />\n <span className=\"relative z-[1] block rounded-[inherit] bg-[var(--hj-color-web-surface)]\">\n {children}\n </span>\n </div>\n );\n}\n\nexport const Util = {\n composeRefs,\n useControllableValue,\n useLatest,\n warning,\n};\n",
|
|
25
|
+
"export type AffixTarget = HTMLElement | Window;\n\nexport interface FixedContainerOffset {\n readonly bottom: number;\n readonly top: number;\n}\n\nexport function getTargetRect(target: AffixTarget): DOMRect {\n if (typeof window !== \"undefined\" && target === window) {\n return { top: 0, bottom: window.innerHeight } as DOMRect;\n }\n return (target as HTMLElement).getBoundingClientRect();\n}\n\nexport function getFixedTop(placeholderRect: DOMRect, targetRect: DOMRect, offsetTop?: number) {\n if (\n offsetTop !== undefined &&\n Math.round(targetRect.top) > Math.round(placeholderRect.top) - offsetTop\n ) {\n return offsetTop + targetRect.top;\n }\n return undefined;\n}\n\nexport function getFixedBottom(\n placeholderRect: DOMRect,\n targetRect: DOMRect,\n offsetBottom?: number,\n) {\n if (\n offsetBottom !== undefined &&\n Math.round(targetRect.bottom) < Math.round(placeholderRect.bottom) + offsetBottom\n ) {\n return offsetBottom + window.innerHeight - targetRect.bottom;\n }\n return undefined;\n}\n\nfunction createsFixedContainingBlock(element: HTMLElement) {\n const view = element.ownerDocument.defaultView;\n if (!view) return false;\n return view.getComputedStyle(element).transform !== \"none\";\n}\n\n/** A transformed ancestor makes `position: fixed` relative to that ancestor instead of the viewport. */\nexport function getFixedContainerOffset(element: HTMLElement): FixedContainerOffset {\n const view = element.ownerDocument.defaultView;\n if (!view) return { top: 0, bottom: 0 };\n\n let parent = element.parentElement;\n while (parent) {\n if (createsFixedContainingBlock(parent)) {\n const rect = parent.getBoundingClientRect();\n return {\n top: rect.top,\n bottom: view.innerHeight - rect.bottom,\n };\n }\n parent = parent.parentElement;\n }\n\n return { top: 0, bottom: 0 };\n}\n",
|
|
26
|
+
"import {\n type NotificationConfig as RcNotificationConfig,\n type NotificationProps as RcNotificationProps,\n type StackConfig,\n useNotification as useRcNotification,\n} from \"@rc-component/notification\";\nimport type {\n CSSProperties,\n ElementType,\n HTMLAttributes,\n Key,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n} from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Icon } from \"./Icon\";\nimport { type ConfigOptions as MessageConfig, type MessageInstance, useMessage } from \"./Message\";\nimport type { MessageNoticeType } from \"./MessageToast\";\nimport { type HookModalApi, useModal } from \"./Modal\";\nimport { FloatButton } from \"./feedback/FloatButton\";\nimport { Watermark } from \"./feedback/Watermark\";\nimport { createGlobalHolderController, wrapGlobalFeedbackHolder } from \"./feedback/globalHolder\";\n\nexport { FloatButton, Watermark };\nexport type {\n FloatButtonBackTopProps,\n FloatButtonBadgeProps,\n FloatButtonElement,\n FloatButtonGroupProps,\n FloatButtonGroupTrigger,\n FloatButtonProps,\n FloatButtonShape,\n FloatButtonTooltipProps,\n FloatButtonType,\n} from \"./feedback/FloatButton\";\nexport type {\n WatermarkContent,\n WatermarkFont,\n WatermarkProps,\n WatermarkText,\n} from \"./feedback/Watermark\";\n\nexport const NotificationPlacements = [\n \"top\",\n \"topLeft\",\n \"topRight\",\n \"bottom\",\n \"bottomLeft\",\n \"bottomRight\",\n] as const;\n\nexport type NotificationPlacement = (typeof NotificationPlacements)[number];\nexport type NotificationType = Exclude<MessageNoticeType, \"loading\">;\ntype NotificationSemanticSlot =\n | \"list\"\n | \"listContent\"\n | \"wrapper\"\n | \"root\"\n | \"title\"\n | \"description\"\n | \"actions\"\n | \"icon\"\n | \"section\"\n | \"close\"\n | \"progress\";\n\nexport type NotificationClassNames = Partial<Record<NotificationSemanticSlot, string>>;\nexport type NotificationStyles = Partial<Record<NotificationSemanticSlot, CSSProperties>>;\nexport type NotificationClosable = RcNotificationProps[\"closable\"];\ntype SemanticValue<Value, Props> = Value | ((info: { readonly props: Props }) => Value);\n\ninterface NotificationDivProps extends HTMLAttributes<HTMLDivElement> {\n readonly \"data-testid\"?: string;\n}\n\nexport interface NotificationArgs {\n readonly actions?: ReactNode;\n /** @deprecated Use `actions`. */\n readonly btn?: ReactNode;\n readonly className?: string;\n readonly classNames?: SemanticValue<NotificationClassNames, NotificationArgs>;\n readonly closable?: NotificationClosable;\n readonly closeIcon?: ReactNode;\n readonly description?: ReactNode;\n readonly duration?: number | false;\n readonly icon?: ReactNode;\n readonly key?: Key;\n /** @deprecated Use `title`. */\n readonly message?: ReactNode;\n readonly onClick?: () => void;\n readonly onClose?: () => void;\n readonly pauseOnHover?: boolean;\n readonly placement?: NotificationPlacement;\n readonly props?: NotificationDivProps;\n readonly role?: \"alert\" | \"status\";\n readonly showProgress?: boolean;\n readonly style?: CSSProperties;\n readonly styles?: SemanticValue<NotificationStyles, NotificationArgs>;\n readonly title?: ReactNode;\n readonly type?: NotificationType;\n}\n\ntype NotificationStaticFn = (args: NotificationArgs) => void;\n\nexport interface NotificationInstance {\n readonly destroy: (key?: Key) => void;\n readonly error: NotificationStaticFn;\n readonly info: NotificationStaticFn;\n readonly open: NotificationStaticFn;\n readonly success: NotificationStaticFn;\n readonly warning: NotificationStaticFn;\n}\n\nexport interface NotificationConfig {\n readonly bottom?: number;\n readonly classNames?: SemanticValue<NotificationClassNames, NotificationArgs>;\n readonly closable?: NotificationClosable;\n readonly closeIcon?: ReactNode;\n readonly duration?: number | false;\n readonly getContainer?: () => HTMLElement | ShadowRoot;\n readonly maxCount?: number;\n readonly pauseOnHover?: boolean;\n readonly placement?: NotificationPlacement;\n readonly prefixCls?: string;\n readonly props?: NotificationDivProps;\n readonly rtl?: boolean;\n readonly showProgress?: boolean;\n readonly stack?: boolean | StackConfig;\n readonly styles?: SemanticValue<NotificationStyles, NotificationArgs>;\n readonly top?: number;\n}\n\nexport type GlobalConfigProps = NotificationConfig;\n\nconst placementClass: Record<NotificationPlacement, string> = {\n bottom: \"bottom-6 left-1/2 -translate-x-1/2\",\n bottomLeft: \"bottom-6 left-6\",\n bottomRight: \"bottom-6 right-6\",\n top: \"left-1/2 top-6 -translate-x-1/2\",\n topLeft: \"left-6 top-6\",\n topRight: \"right-6 top-6\",\n};\n\nconst iconTone: Record<NotificationType, string> = {\n error: \"text-[var(--hj-message-error)]\",\n info: \"text-[var(--hj-message-info)]\",\n success: \"text-[var(--hj-message-success)]\",\n warning: \"text-[var(--hj-message-warning)]\",\n};\n\nconst BASE_CLASS_NAMES: NonNullable<RcNotificationConfig[\"classNames\"]> = {\n actions: \"mt-3 pl-[30px]\",\n close:\n \"absolute right-4 top-4 inline-flex h-4 w-4 cursor-pointer items-center justify-center border-0 bg-transparent p-0 text-[var(--hj-color-web-muted)] transition hover:text-white\",\n description: \"mt-1 break-words text-sm leading-5 text-[var(--hj-color-web-muted)]\",\n icon: \"shrink-0\",\n list: \"pointer-events-none fixed z-[var(--hj-z-toast)] w-[360px] max-w-[calc(100vw-2rem)] overflow-hidden\",\n listContent: \"relative flex w-full shrink-0 flex-col gap-3\",\n root: \"pointer-events-auto absolute box-border w-full rounded-[var(--hj-radius-md)] border border-[var(--hj-color-web-border)] bg-[var(--hj-color-web-surface)] p-4 text-[var(--hj-color-web-foreground)] shadow-[var(--hj-shadow-lg)]\",\n section: \"min-w-0 flex-1 pr-6\",\n title: \"break-words text-sm font-semibold\",\n wrapper: \"flex items-start gap-3\",\n};\n\nfunction mergeClassNames(\n ...values: Array<NotificationClassNames | undefined>\n): NotificationClassNames {\n const merged: NotificationClassNames = {};\n for (const value of values) {\n if (!value) continue;\n for (const key of Object.keys(value) as NotificationSemanticSlot[]) {\n merged[key] = cn(merged[key], value[key]);\n }\n }\n return merged;\n}\n\nfunction mergeStyles(...values: Array<NotificationStyles | undefined>): NotificationStyles {\n const merged: NotificationStyles = {};\n for (const value of values) {\n if (!value) continue;\n for (const key of Object.keys(value) as NotificationSemanticSlot[]) {\n merged[key] = { ...merged[key], ...value[key] };\n }\n }\n return merged;\n}\n\nfunction resolveSemantic<Value, Props>(\n value: SemanticValue<Value, Props> | undefined,\n props: Props,\n) {\n return typeof value === \"function\"\n ? (value as (info: { readonly props: Props }) => Value)({ props })\n : value;\n}\n\nfunction getDefaultIcon(type: NotificationType) {\n return (\n <Icon\n className={iconTone[type]}\n name={type === \"error\" || type === \"warning\" ? \"warning\" : \"check\"}\n size={18}\n />\n );\n}\n\nfunction createNotificationTypeOpen(\n open: NotificationStaticFn,\n type: NotificationType,\n): NotificationStaticFn {\n return (args) => open({ ...args, type });\n}\n\nexport function useNotification(\n notificationConfig: NotificationConfig = {},\n): readonly [NotificationInstance, ReactElement] {\n const config = useConfig();\n const getContainer = useCallback(\n () => notificationConfig.getContainer?.() ?? config.getPopupContainer?.() ?? document.body,\n [config.getPopupContainer, notificationConfig.getContainer],\n );\n const holderProps = notificationConfig as NotificationArgs;\n const holderClassNames = resolveSemantic(notificationConfig.classNames, holderProps);\n const holderStyles = resolveSemantic(notificationConfig.styles, holderProps);\n const closeIcon = notificationConfig.closeIcon ?? <Icon name=\"close\" size={16} />;\n const defaultClosable =\n notificationConfig.closable === false\n ? false\n : typeof notificationConfig.closable === \"object\" && notificationConfig.closable !== null\n ? { closeIcon, ...notificationConfig.closable }\n : { closeIcon };\n const [rcApi, holder] = useRcNotification({\n className: (placement) =>\n cn(\n placementClass[placement as NotificationPlacement] ?? placementClass.topRight,\n notificationConfig.rtl && \"hj-notification-rtl\",\n ),\n classNames: mergeClassNames(BASE_CLASS_NAMES, holderClassNames),\n closable: defaultClosable,\n duration:\n typeof notificationConfig.duration === \"number\" && notificationConfig.duration <= 0\n ? false\n : (notificationConfig.duration ?? 4.5),\n getContainer,\n maxCount: notificationConfig.maxCount,\n pauseOnHover: notificationConfig.pauseOnHover ?? true,\n placement: notificationConfig.placement ?? \"topRight\",\n prefixCls: notificationConfig.prefixCls ?? config.getPrefixCls(\"notification\"),\n showProgress: notificationConfig.showProgress,\n stack: notificationConfig.stack === undefined ? { offset: 8 } : notificationConfig.stack,\n style: (placement) => {\n const isBottom = placement.startsWith(\"bottom\");\n return isBottom\n ? { bottom: notificationConfig.bottom ?? 24 }\n : { top: notificationConfig.top ?? 24 };\n },\n styles: mergeStyles(holderStyles, {\n root: { top: \"var(--notification-y, 0px)\" },\n }),\n });\n\n const api = useMemo<NotificationInstance>(() => {\n const open = (args: NotificationArgs) => {\n const {\n actions,\n btn,\n className,\n classNames,\n closable,\n closeIcon: noticeCloseIcon,\n icon,\n message: legacyMessage,\n styles,\n title,\n type,\n ...rest\n } = args;\n const configuredClosable = closable ?? notificationConfig.closable;\n const mergedClosable =\n configuredClosable === false\n ? false\n : typeof configuredClosable === \"object\" && configuredClosable !== null\n ? {\n closeIcon: noticeCloseIcon ?? closeIcon,\n ...configuredClosable,\n }\n : { closeIcon: noticeCloseIcon ?? closeIcon };\n\n rcApi.open({\n ...rest,\n actions: actions ?? btn,\n className: cn(type && `hj-notification-${type}`, className),\n classNames: mergeClassNames(resolveSemantic(classNames, args)),\n closable: mergedClosable,\n duration: args.duration ?? notificationConfig.duration ?? 4.5,\n icon: icon ?? (type ? getDefaultIcon(type) : null),\n placement: args.placement ?? notificationConfig.placement ?? \"topRight\",\n props: { ...notificationConfig.props, ...args.props },\n role: args.role ?? \"alert\",\n styles: mergeStyles(resolveSemantic(styles, args)),\n title: title ?? legacyMessage,\n });\n };\n\n return {\n destroy(key) {\n if (key === undefined) rcApi.destroy();\n else rcApi.close(key);\n },\n error: createNotificationTypeOpen(open, \"error\"),\n info: createNotificationTypeOpen(open, \"info\"),\n open,\n success: createNotificationTypeOpen(open, \"success\"),\n warning: createNotificationTypeOpen(open, \"warning\"),\n };\n }, [closeIcon, notificationConfig, rcApi]);\n\n return [api, holder] as const;\n}\n\ninterface GlobalNotificationHolderProps {\n readonly config: NotificationConfig;\n readonly onReady: (api: NotificationInstance | null) => void;\n}\n\nfunction GlobalNotificationHolder({ config, onReady }: GlobalNotificationHolderProps) {\n const [api, holder] = useNotification(config);\n useLayoutEffect(() => {\n onReady(api);\n return () => onReady(null);\n });\n return holder;\n}\n\ntype NotificationTask =\n | { readonly config: NotificationArgs; readonly type: \"open\" }\n | { readonly key?: Key; readonly type: \"destroy\" };\n\nlet globalNotificationConfig: NotificationConfig = {};\n\nconst globalNotificationHolder = createGlobalHolderController<\n NotificationInstance,\n NotificationConfig,\n NotificationTask\n>({\n name: \"notification\",\n renderHolder: (config, onReady) =>\n wrapGlobalFeedbackHolder(<GlobalNotificationHolder config={config} onReady={onReady} />),\n runTask(api, task) {\n if (task.type === \"open\") api.open(task.config);\n else api.destroy(task.key);\n },\n});\n\nglobalNotificationHolder.rerender(globalNotificationConfig);\n\nfunction staticNotificationOpen(config: NotificationArgs) {\n globalNotificationHolder.rerender(globalNotificationConfig);\n globalNotificationHolder.enqueue({ config, type: \"open\" });\n}\n\nexport interface NotificationMethods extends NotificationInstance {\n readonly config: (config: GlobalConfigProps) => void;\n readonly useNotification: typeof useNotification;\n}\n\nexport const notification: NotificationMethods = {\n config(config) {\n globalNotificationConfig = { ...globalNotificationConfig, ...config };\n globalNotificationHolder.rerender(globalNotificationConfig);\n },\n destroy(key) {\n globalNotificationHolder.rerender(globalNotificationConfig);\n globalNotificationHolder.enqueue({ key, type: \"destroy\" });\n },\n error: createNotificationTypeOpen(staticNotificationOpen, \"error\"),\n info: createNotificationTypeOpen(staticNotificationOpen, \"info\"),\n open: staticNotificationOpen,\n success: createNotificationTypeOpen(staticNotificationOpen, \"success\"),\n useNotification,\n warning: createNotificationTypeOpen(staticNotificationOpen, \"warning\"),\n};\n\nexport interface AppConfig {\n readonly message?: MessageConfig;\n readonly notification?: NotificationConfig;\n}\n\nexport interface AppProps extends AppConfig {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly component?: ElementType | false;\n readonly rootClassName?: string;\n readonly style?: CSSProperties;\n}\n\nexport interface AppApi {\n readonly message: MessageInstance;\n readonly modal: HookModalApi;\n readonly notification: NotificationInstance;\n}\n\nconst AppConfigContext = createContext<AppConfig>({});\nconst AppContext = createContext<AppApi>({} as AppApi);\n\nconst AppRoot = forwardRef<HTMLElement, AppProps>(function App(\n {\n children,\n className,\n component = \"div\",\n message: messageConfig,\n notification: notificationConfig,\n rootClassName,\n style,\n },\n ref,\n) {\n const parentConfig = useContext(AppConfigContext);\n const mergedConfig = useMemo<AppConfig>(\n () => ({\n message: { ...parentConfig.message, ...messageConfig },\n notification: { ...parentConfig.notification, ...notificationConfig },\n }),\n [messageConfig, notificationConfig, parentConfig.message, parentConfig.notification],\n );\n const [messageApi, messageHolder] = useMessage(mergedConfig.message);\n const [notificationApi, notificationHolder] = useNotification(mergedConfig.notification);\n const [modalApi, modalHolder] = useModal();\n const api = useMemo<AppApi>(\n () => ({ message: messageApi, modal: modalApi, notification: notificationApi }),\n [messageApi, modalApi, notificationApi],\n );\n const content = (\n <>\n {modalHolder}\n {messageHolder}\n {notificationHolder}\n {children}\n </>\n );\n\n return (\n <AppContext.Provider value={api}>\n <AppConfigContext.Provider value={mergedConfig}>\n {component === false ? (\n content\n ) : (\n <DynamicAppRoot\n className={cn(\"hj-app\", className, rootClassName)}\n component={component}\n ref={ref}\n style={style}\n >\n {content}\n </DynamicAppRoot>\n )}\n </AppConfigContext.Provider>\n </AppContext.Provider>\n );\n});\n\ninterface DynamicAppRootProps {\n readonly children: ReactNode;\n readonly className?: string;\n readonly component: ElementType;\n readonly style?: CSSProperties;\n}\n\nconst DynamicAppRoot = forwardRef<HTMLElement, DynamicAppRootProps>(function DynamicAppRoot(\n { children, className, component: Component, style },\n ref,\n) {\n return (\n <Component className={className} ref={ref} style={style}>\n {children}\n </Component>\n );\n});\n\nexport const App = Object.assign(AppRoot, {\n useApp() {\n return useContext(AppContext);\n },\n});\n",
|
|
27
|
+
"import {\n type NotificationConfig as RcNotificationConfig,\n useNotification as useRcNotification,\n} from \"@rc-component/notification\";\nimport type { CSSProperties, Key, ReactElement, ReactNode } from \"react\";\nimport { useCallback, useLayoutEffect, useMemo } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { type MessageNoticeType, MessageToast, type MessageType } from \"./MessageToast\";\nimport { createGlobalHolderController, wrapGlobalFeedbackHolder } from \"./feedback/globalHolder\";\n\nexport type { MessageType } from \"./MessageToast\";\nexport type NoticeType = MessageNoticeType;\ntype MessageSemanticSlot = \"list\" | \"listContent\" | \"root\" | \"wrapper\" | \"icon\" | \"title\";\n\nexport type MessageClassNames = Partial<Record<MessageSemanticSlot, string>>;\nexport type MessageStyles = Partial<Record<MessageSemanticSlot, CSSProperties>>;\ntype SemanticValue<Value, Props> = Value | ((info: { readonly props: Props }) => Value);\n\nexport interface ConfigOptions {\n readonly classNames?: SemanticValue<MessageClassNames, ArgsProps>;\n readonly duration?: number;\n readonly getContainer?: () => HTMLElement;\n readonly maxCount?: number;\n readonly pauseOnHover?: boolean;\n readonly prefixCls?: string;\n readonly rtl?: boolean;\n readonly stack?: boolean | { readonly threshold?: number };\n readonly styles?: SemanticValue<MessageStyles, ArgsProps>;\n readonly top?: number | string;\n readonly transitionName?: string;\n}\n\nexport interface ArgsProps {\n readonly className?: string;\n readonly classNames?: SemanticValue<MessageClassNames, ArgsProps>;\n readonly content: ReactNode;\n readonly duration?: number;\n readonly icon?: ReactNode;\n readonly key?: Key;\n readonly onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n readonly onClose?: () => void;\n readonly pauseOnHover?: boolean;\n readonly style?: CSSProperties;\n readonly styles?: SemanticValue<MessageStyles, ArgsProps>;\n readonly type?: NoticeType;\n}\n\nexport type MessageArgs = ArgsProps;\nexport type JointContent = ReactNode | ArgsProps;\n\nexport type TypeOpen = (\n content: JointContent,\n duration?: number | VoidFunction,\n onClose?: VoidFunction,\n) => MessageType;\nexport type MessageOpen = TypeOpen;\n\nexport interface MessageInstance {\n readonly destroy: (key?: Key) => void;\n readonly error: TypeOpen;\n readonly info: TypeOpen;\n readonly loading: TypeOpen;\n readonly open: (args: ArgsProps) => MessageType;\n readonly success: TypeOpen;\n readonly warning: TypeOpen;\n}\n\nconst DEFAULT_DURATION = 3;\nconst BASE_CLASS_NAMES: NonNullable<RcNotificationConfig[\"classNames\"]> = {\n list: \"pointer-events-none fixed left-4 right-4 top-6 z-[var(--hj-z-toast)] overflow-hidden\",\n listContent: \"relative flex w-full shrink-0 flex-col items-center gap-3\",\n root: \"pointer-events-auto absolute left-1/2 w-max max-w-full -translate-x-1/2\",\n title: \"max-w-full\",\n};\n\nlet keyIndex = 0;\n\nfunction nextKey() {\n keyIndex += 1;\n return `hj-message-${keyIndex}`;\n}\n\nfunction isArgsProps(content: JointContent): content is ArgsProps {\n return typeof content === \"object\" && content !== null && \"content\" in content;\n}\n\nfunction mergeClassNames(...values: Array<MessageClassNames | undefined>): MessageClassNames {\n const merged: MessageClassNames = {};\n for (const value of values) {\n if (!value) continue;\n for (const key of Object.keys(value) as MessageSemanticSlot[]) {\n merged[key] = cn(merged[key], value[key]);\n }\n }\n return merged;\n}\n\nfunction mergeStyles(...values: Array<MessageStyles | undefined>): MessageStyles {\n const merged: MessageStyles = {};\n for (const value of values) {\n if (!value) continue;\n for (const key of Object.keys(value) as MessageSemanticSlot[]) {\n merged[key] = { ...merged[key], ...value[key] };\n }\n }\n return merged;\n}\n\nfunction resolveSemantic<Value, Props>(\n value: SemanticValue<Value, Props> | undefined,\n props: Props,\n) {\n return typeof value === \"function\"\n ? (value as (info: { readonly props: Props }) => Value)({ props })\n : value;\n}\n\nfunction wrapPromiseFn(openFn: (resolve: VoidFunction) => VoidFunction): MessageType {\n let closeFn: VoidFunction = () => {};\n const promise = new Promise<boolean>((resolve) => {\n closeFn = openFn(() => resolve(true));\n });\n const result = (() => closeFn()) as MessageType;\n // biome-ignore lint/suspicious/noThenProperty: AntD MessageType is intentionally PromiseLike.\n result.then = promise.then.bind(promise);\n return result;\n}\n\nfunction createTypeOpen(open: MessageInstance[\"open\"], type: NoticeType): TypeOpen {\n return (jointContent, duration, onClose) => {\n const config = isArgsProps(jointContent) ? jointContent : { content: jointContent };\n const mergedDuration = typeof duration === \"number\" ? duration : undefined;\n const mergedOnClose = typeof duration === \"function\" ? duration : onClose;\n\n return open({\n duration: mergedDuration,\n onClose: mergedOnClose,\n ...config,\n type,\n });\n };\n}\n\nexport function useMessage(\n messageConfig: ConfigOptions = {},\n): readonly [MessageInstance, ReactElement] {\n const config = useConfig();\n const getContainer = useCallback(\n () => messageConfig.getContainer?.() ?? config.getPopupContainer?.() ?? document.body,\n [config.getPopupContainer, messageConfig.getContainer],\n );\n const offset = messageConfig.top ?? 8;\n const holderProps = messageConfig as ArgsProps;\n const holderClassNames = resolveSemantic(messageConfig.classNames, holderProps);\n const holderStyles = mergeStyles(resolveSemantic(messageConfig.styles, holderProps), {\n list: { top: typeof offset === \"number\" ? `${offset}px` : offset },\n root: { top: \"var(--notification-y, 0px)\" },\n });\n const [rcApi, holder] = useRcNotification({\n className: () => (messageConfig.rtl ? \"hj-message-rtl\" : \"\"),\n classNames: mergeClassNames(BASE_CLASS_NAMES, holderClassNames),\n closable: false,\n duration: messageConfig.duration ?? DEFAULT_DURATION,\n getContainer,\n maxCount: messageConfig.maxCount,\n motion: { motionName: messageConfig.transitionName ?? \"hj-slide-up\" },\n pauseOnHover: messageConfig.pauseOnHover ?? true,\n placement: \"top\",\n prefixCls: messageConfig.prefixCls ?? config.getPrefixCls(\"message\"),\n stack: messageConfig.stack ?? false,\n styles: holderStyles,\n });\n\n const api = useMemo<MessageInstance>(() => {\n const close = (key: Key) => rcApi.close(key);\n const open = (args: ArgsProps): MessageType => {\n const {\n className,\n classNames,\n content,\n icon,\n key = nextKey(),\n onClose,\n style,\n styles,\n type,\n ...rest\n } = args;\n\n return wrapPromiseFn((resolve) => {\n rcApi.open({\n ...rest,\n className: cn(type && `hj-message-${type}`, className),\n classNames: mergeClassNames(resolveSemantic(classNames, args)),\n duration: args.duration ?? messageConfig.duration ?? DEFAULT_DURATION,\n key,\n placement: \"top\",\n role: \"presentation\",\n style,\n styles: mergeStyles(resolveSemantic(styles, args)),\n title: (\n <MessageToast icon={icon} showIcon={type !== undefined} type={type ?? \"info\"}>\n {content}\n </MessageToast>\n ),\n onClick: args.onClick,\n onClose: () => {\n onClose?.();\n resolve();\n },\n });\n return () => close(key);\n });\n };\n\n return {\n destroy(key) {\n if (key === undefined) rcApi.destroy();\n else close(key);\n },\n error: createTypeOpen(open, \"error\"),\n info: createTypeOpen(open, \"info\"),\n loading: createTypeOpen(open, \"loading\"),\n open,\n success: createTypeOpen(open, \"success\"),\n warning: createTypeOpen(open, \"warning\"),\n };\n }, [messageConfig.duration, rcApi]);\n\n return [api, holder] as const;\n}\n\ninterface GlobalMessageHolderProps {\n readonly config: ConfigOptions;\n readonly onReady: (api: MessageInstance | null) => void;\n}\n\nfunction GlobalMessageHolder({ config, onReady }: GlobalMessageHolderProps) {\n const [api, holder] = useMessage(config);\n useLayoutEffect(() => {\n onReady(api);\n return () => onReady(null);\n });\n return holder;\n}\n\ninterface OpenTask {\n cancelled: boolean;\n close?: VoidFunction;\n readonly config: ArgsProps;\n readonly resolve: VoidFunction;\n readonly type: \"open\";\n}\n\ntype MessageTask = OpenTask | { readonly key?: Key; readonly type: \"destroy\" };\n\nlet globalMessageConfig: ConfigOptions = {};\n\nconst globalHolder = createGlobalHolderController<MessageInstance, ConfigOptions, MessageTask>({\n name: \"message\",\n renderHolder: (config, onReady) =>\n wrapGlobalFeedbackHolder(<GlobalMessageHolder config={config} onReady={onReady} />),\n runTask(api, task) {\n if (task.type === \"destroy\") {\n api.destroy(task.key);\n return;\n }\n if (task.cancelled) {\n task.resolve();\n return;\n }\n const result = api.open(task.config);\n task.close = result;\n void result.then(task.resolve);\n },\n});\n\nglobalHolder.rerender(globalMessageConfig);\n\nfunction staticOpen(config: ArgsProps): MessageType {\n globalHolder.rerender(globalMessageConfig);\n return wrapPromiseFn((resolve) => {\n const task: OpenTask = { cancelled: false, config, resolve, type: \"open\" };\n if (!globalHolder.enqueue(task)) {\n resolve();\n return () => {};\n }\n return () => {\n if (task.close) task.close();\n else task.cancelled = true;\n };\n });\n}\n\nfunction staticTypeOpen(type: NoticeType): TypeOpen {\n return createTypeOpen(staticOpen, type);\n}\n\nexport interface MessageMethods extends MessageInstance {\n readonly config: (config: ConfigOptions) => void;\n readonly useMessage: typeof useMessage;\n}\n\nexport const message: MessageMethods = {\n config(config) {\n globalMessageConfig = { ...globalMessageConfig, ...config };\n globalHolder.rerender(globalMessageConfig);\n },\n destroy(key) {\n globalHolder.rerender(globalMessageConfig);\n globalHolder.enqueue({ key, type: \"destroy\" });\n },\n error: staticTypeOpen(\"error\"),\n info: staticTypeOpen(\"info\"),\n loading: staticTypeOpen(\"loading\"),\n open: staticOpen,\n success: staticTypeOpen(\"success\"),\n useMessage,\n warning: staticTypeOpen(\"warning\"),\n};\n",
|
|
28
|
+
"import CSSMotion from \"@rc-component/motion\";\nimport type { NotificationProps as RcNotificationProps } from \"@rc-component/notification\";\nimport type { ReactNode } from \"react\";\nimport { isMotionDisabled, useConfig } from \"../ConfigProvider\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type MessageNoticeType = \"success\" | \"warning\" | \"error\" | \"info\" | \"loading\";\nexport interface MessageType extends PromiseLike<boolean> {\n (): void;\n}\ntype MessageToastRole = NonNullable<RcNotificationProps[\"role\"]> & (\"alert\" | \"status\");\ntype MessageToastSlot = \"root\" | \"icon\" | \"content\" | \"action\" | \"close\";\n\nexport interface MessageToastProps {\n readonly action?: ReactNode;\n readonly children: ReactNode;\n readonly className?: string;\n readonly classNames?: SlotClassNames<MessageToastSlot>;\n readonly closable?: boolean;\n readonly closeIcon?: ReactNode;\n readonly icon?: ReactNode;\n readonly onClose?: () => void;\n readonly open?: boolean;\n readonly role?: MessageToastRole;\n readonly showIcon?: boolean;\n readonly styles?: SlotStyles<MessageToastSlot>;\n readonly type?: MessageNoticeType;\n readonly variant?: \"dark\" | \"light\";\n}\n\nconst iconClass: Record<MessageNoticeType, string> = {\n success: \"bg-[var(--hj-message-success)]\",\n warning: \"bg-[var(--hj-message-warning)]\",\n error: \"bg-[var(--hj-message-error)]\",\n info: \"bg-[var(--hj-message-info)]\",\n loading: \"bg-[var(--hj-message-info)]\",\n};\n\nconst defaultIcon: Record<MessageNoticeType, string> = {\n success: \"✓\",\n warning: \"!\",\n error: \"×\",\n info: \"i\",\n loading: \"…\",\n};\n\nexport function MessageToast({\n action,\n children,\n className = \"\",\n classNames,\n closable = false,\n closeIcon,\n icon,\n onClose,\n open = true,\n role = \"status\",\n showIcon,\n styles,\n type = \"info\",\n variant,\n}: MessageToastProps) {\n const config = useConfig();\n const reducedMotion = useReducedMotion();\n const mergedShowIcon = showIcon ?? config.components.MessageToast?.showIcon ?? true;\n const mergedVariant = variant ?? config.components.MessageToast?.variant ?? \"dark\";\n const motionDisabled = reducedMotion || isMotionDisabled(config.motion);\n\n return (\n <CSSMotion\n motionAppear\n motionDeadline={motionDisabled ? 1 : 300}\n motionName={motionDisabled ? undefined : \"hj-slide-up\"}\n removeOnLeave\n visible={open}\n >\n {({ className: motionClassName, style: motionStyle }, ref) => (\n <div\n className={slotClass(\n classNames,\n \"root\",\n \"inline-flex min-h-[var(--hj-message-height)] max-w-full items-center gap-[var(--hj-message-gap)] rounded-[var(--hj-message-radius)] px-[var(--hj-message-padding-x)] text-sm leading-[18px] shadow-[var(--hj-message-shadow)]\",\n mergedVariant === \"dark\"\n ? \"bg-[var(--hj-message-bg)] text-[var(--hj-message-fg)]\"\n : \"bg-[var(--hj-message-light-bg)] text-[var(--hj-message-light-fg)]\",\n motionDisabled && \"huaijiu-motion-disabled\",\n motionClassName,\n className,\n )}\n ref={ref}\n role={role}\n style={{ ...slotStyle(styles, \"root\"), ...motionStyle }}\n >\n {mergedShowIcon && icon !== null ? (\n <span\n className={slotClass(\n classNames,\n \"icon\",\n \"flex h-[var(--hj-message-icon-size)] w-[var(--hj-message-icon-size)] shrink-0 items-center justify-center rounded-full text-xs font-bold leading-none text-white\",\n iconClass[type],\n )}\n style={slotStyle(styles, \"icon\")}\n >\n {icon ?? defaultIcon[type]}\n </span>\n ) : null}\n <span\n className={slotClass(classNames, \"content\", \"min-w-0 break-words\")}\n style={slotStyle(styles, \"content\")}\n >\n {children}\n </span>\n {action ? (\n <span\n className={slotClass(\n classNames,\n \"action\",\n \"ml-1 whitespace-nowrap text-[var(--hj-message-action-fg)]\",\n )}\n style={slotStyle(styles, \"action\")}\n >\n {action}\n </span>\n ) : null}\n {closable ? (\n <button\n aria-label=\"关闭\"\n className={slotClass(\n classNames,\n \"close\",\n \"ml-1 inline-flex h-4 w-4 shrink-0 items-center justify-center text-[var(--hj-message-close-fg)] transition hover:text-[var(--hj-message-close-fg-hover)]\",\n )}\n onClick={onClose}\n style={slotStyle(styles, \"close\")}\n type=\"button\"\n >\n {closeIcon ?? \"×\"}\n </button>\n ) : null}\n </div>\n )}\n </CSSMotion>\n );\n}\n",
|
|
29
|
+
"import type { ReactNode } from \"react\";\nimport { type Root, createRoot } from \"react-dom/client\";\nimport { ConfigProvider, globalConfig } from \"../../ConfigProvider\";\n\nexport interface GlobalHolderController<Api, Config, Task> {\n readonly enqueue: (task: Task) => boolean;\n readonly rerender: (config: Config) => void;\n}\n\nexport function wrapGlobalFeedbackHolder(holder: ReactNode) {\n const config = globalConfig();\n const content = config.holderRender ? config.holderRender(holder) : holder;\n return (\n <ConfigProvider\n iconPrefixCls={config.getIconPrefixCls()}\n prefixCls={config.getRootPrefixCls()}\n theme={config.getTheme()}\n >\n {content}\n </ConfigProvider>\n );\n}\n\ninterface GlobalHolderOptions<Api, Config, Task> {\n readonly name: string;\n readonly renderHolder: (config: Config, onReady: (api: Api | null) => void) => ReactNode;\n readonly runTask: (api: Api, task: Task, config: Config) => void;\n}\n\n/**\n * Static feedback methods still render a real React holder. This controller only\n * owns bootstrap and task ordering; notice state remains inside the rc holder.\n */\nexport function createGlobalHolderController<Api, Config, Task>({\n name,\n renderHolder,\n runTask,\n}: GlobalHolderOptions<Api, Config, Task>): GlobalHolderController<Api, Config, Task> {\n let api: Api | null = null;\n let config: Config | null = null;\n let mountNode: HTMLDivElement | null = null;\n let root: Root | null = null;\n let tasks: Task[] = [];\n\n const flush = () => {\n if (!api || !config || tasks.length === 0) return;\n\n const pending = tasks;\n tasks = [];\n for (const task of pending) runTask(api, task, config);\n };\n\n const onReady = (nextApi: Api | null) => {\n api = nextApi;\n flush();\n };\n\n const render = () => {\n if (!root || !config) return;\n root.render(renderHolder(config, onReady));\n };\n\n const ensureRoot = () => {\n if (root) return true;\n if (typeof document === \"undefined\") return false;\n\n mountNode = document.createElement(\"div\");\n mountNode.dataset.hjFeedbackHolder = name;\n document.body.appendChild(mountNode);\n root = createRoot(mountNode);\n render();\n return true;\n };\n\n return {\n enqueue(task) {\n tasks.push(task);\n if (!ensureRoot()) {\n tasks = tasks.filter((item) => item !== task);\n return false;\n }\n flush();\n return true;\n },\n rerender(nextConfig) {\n config = nextConfig;\n if (root) {\n api = null;\n render();\n }\n },\n };\n}\n",
|
|
30
|
+
"import RcDialog from \"@rc-component/dialog\";\nimport type {\n CSSProperties,\n ReactElement,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n SyntheticEvent,\n} from \"react\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { type Root, createRoot } from \"react-dom/client\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Button, type ButtonProps } from \"./Button\";\nimport { wrapGlobalFeedbackHolder } from \"./feedback/globalHolder\";\n\ntype ModalSlot =\n | \"root\"\n | \"mask\"\n | \"wrapper\"\n | \"panel\"\n | \"header\"\n | \"title\"\n | \"close\"\n | \"body\"\n | \"footer\";\n\nexport type ModalFooterRender = (\n originNode: ReactNode,\n extra: { readonly OkBtn: () => ReactNode; readonly CancelBtn: () => ReactNode },\n) => ReactNode;\nexport type MousePosition = { readonly x: number; readonly y: number } | null;\n\nlet globalMousePosition: MousePosition = null;\nlet globalMousePositionTimer: number | undefined;\n\ndeclare global {\n interface Window {\n __huaijiuModalClickPositionListener?: (event: globalThis.MouseEvent) => void;\n __huaijiuModalClickPosition?: MousePosition;\n __huaijiuModalClickPositionTimer?: number;\n }\n}\n\nfunction getClickPosition(event: globalThis.MouseEvent) {\n globalMousePosition = { x: event.pageX, y: event.pageY };\n window.__huaijiuModalClickPosition = globalMousePosition;\n if (globalMousePositionTimer !== undefined) window.clearTimeout(globalMousePositionTimer);\n if (window.__huaijiuModalClickPositionTimer !== undefined) {\n window.clearTimeout(window.__huaijiuModalClickPositionTimer);\n }\n globalMousePositionTimer = window.setTimeout(() => {\n globalMousePosition = null;\n globalMousePositionTimer = undefined;\n window.__huaijiuModalClickPosition = null;\n window.__huaijiuModalClickPositionTimer = undefined;\n }, 100);\n window.__huaijiuModalClickPositionTimer = globalMousePositionTimer;\n}\n\nfunction getStoredMousePosition() {\n if (typeof window === \"undefined\") return globalMousePosition;\n return window.__huaijiuModalClickPosition ?? globalMousePosition;\n}\n\nif (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n if (typeof window.__huaijiuModalClickPositionListener === \"function\") {\n document.documentElement.removeEventListener(\n \"click\",\n window.__huaijiuModalClickPositionListener,\n true,\n );\n }\n document.documentElement.addEventListener(\"click\", getClickPosition, true);\n window.__huaijiuModalClickPositionListener = getClickPosition;\n}\n\nexport interface ModalProps {\n readonly afterClose?: () => void;\n readonly afterOpenChange?: (open: boolean) => void;\n readonly backIcon?: ReactNode;\n readonly bodyStyle?: CSSProperties;\n readonly cancelButtonProps?: Partial<Omit<ButtonProps, \"children\">>;\n readonly cancelText?: ReactNode;\n readonly centered?: boolean;\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: SlotClassNames<ModalSlot>;\n readonly closeIcon?: ReactNode;\n readonly closable?: boolean;\n readonly confirmLoading?: boolean;\n readonly destroyOnClose?: boolean;\n readonly destroyOnHidden?: boolean;\n readonly focusTrap?: boolean;\n readonly focusTriggerAfterClose?: boolean;\n readonly forceRender?: boolean;\n readonly footer?: ReactNode | ModalFooterRender;\n readonly getContainer?: false | HTMLElement | (() => HTMLElement);\n readonly keyboard?: boolean;\n readonly loading?: boolean;\n readonly mask?: boolean;\n readonly maskClosable?: boolean;\n readonly maskStyle?: CSSProperties;\n readonly maskTransitionName?: string;\n readonly modalRender?: (node: ReactNode) => ReactNode;\n readonly mousePosition?: MousePosition;\n readonly okButtonProps?: Partial<Omit<ButtonProps, \"children\">>;\n readonly okText?: ReactNode;\n readonly open?: boolean;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n readonly rootStyle?: CSSProperties;\n readonly scrollLock?: boolean;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<ModalSlot>;\n readonly title?: ReactNode;\n readonly titleAlign?: \"start\" | \"center\";\n readonly titleIcon?: ReactNode;\n readonly transitionName?: string;\n readonly width?: number | string;\n readonly wrapClassName?: string;\n readonly zIndex?: number;\n readonly onBack?: () => void;\n readonly onCancel?: (\n event?: ReactMouseEvent<HTMLButtonElement> | SyntheticEvent | KeyboardEvent,\n ) => void;\n readonly onClose?: () => void;\n readonly onOk?: (event?: ReactMouseEvent<HTMLButtonElement>) => void;\n}\n\nexport type ModalStaticAction = (close: VoidFunction) => unknown;\n\nexport interface ModalFuncProps\n extends Omit<ModalProps, \"children\" | \"onCancel\" | \"onOk\" | \"open\" | \"width\"> {\n readonly autoFocusButton?: null | \"ok\" | \"cancel\";\n readonly content?: ReactNode;\n readonly focusable?: {\n readonly autoFocusButton?: null | \"ok\" | \"cancel\";\n readonly focusTriggerAfterClose?: boolean;\n readonly trap?: boolean;\n };\n readonly icon?: ReactNode;\n readonly okCancel?: boolean;\n readonly open?: boolean;\n readonly title?: ReactNode;\n readonly type?: \"confirm\" | \"info\" | \"success\" | \"warn\" | \"warning\" | \"error\";\n readonly width?: number | string;\n readonly onCancel?: ModalStaticAction;\n readonly onOk?: ModalStaticAction;\n}\n\nexport type ModalConfigUpdate =\n | Partial<ModalFuncProps>\n | ((previous: ModalFuncProps) => ModalFuncProps);\n\nexport interface ModalFuncReturn {\n readonly destroy: () => void;\n readonly update: (nextProps: ModalConfigUpdate) => void;\n}\n\nexport interface HookModalFuncReturn extends ModalFuncReturn, PromiseLike<boolean> {}\n\nexport type ModalFunc = (props: ModalFuncProps) => ModalFuncReturn;\nexport type HookModalFunc = (props: ModalFuncProps) => HookModalFuncReturn;\n\nexport interface HookModalApi {\n readonly confirm: HookModalFunc;\n readonly error: HookModalFunc;\n readonly info: HookModalFunc;\n readonly success: HookModalFunc;\n readonly warning: HookModalFunc;\n}\n\nexport interface ModalGlobalConfig {\n readonly rootPrefixCls?: string;\n}\n\nfunction ModalRoot({\n afterClose,\n afterOpenChange,\n backIcon,\n bodyStyle,\n cancelButtonProps,\n cancelText = \"取消\",\n centered = false,\n children,\n className = \"\",\n classNames,\n closeIcon,\n closable = true,\n confirmLoading = false,\n destroyOnClose = false,\n destroyOnHidden,\n focusTrap,\n focusTriggerAfterClose = true,\n forceRender = false,\n footer,\n getContainer,\n keyboard = true,\n loading = false,\n mask = true,\n maskClosable = true,\n maskStyle,\n maskTransitionName,\n modalRender,\n mousePosition,\n okButtonProps,\n okText = \"确定\",\n onBack,\n onCancel,\n onClose,\n onOk,\n open = false,\n prefixCls,\n rootClassName = \"\",\n rootStyle,\n scrollLock,\n style,\n styles,\n title,\n titleAlign = \"start\",\n titleIcon,\n transitionName,\n width,\n wrapClassName = \"\",\n zIndex,\n}: ModalProps) {\n const config = useConfig();\n const mergedWidth = width ?? config.components.Modal?.width ?? 520;\n // The default remains prefixCls=\"hj-modal\"; ConfigProvider may override the root prefix.\n const mergedPrefixCls = prefixCls ?? config.getPrefixCls(\"modal\");\n const requestClose = (\n event?: ReactMouseEvent<HTMLButtonElement> | SyntheticEvent | KeyboardEvent,\n ) => {\n onClose?.();\n onCancel?.(event);\n };\n const CancelBtn = () => (\n <Button size=\"md\" tone=\"secondary\" onClick={requestClose} {...cancelButtonProps}>\n {cancelText}\n </Button>\n );\n const OkBtn = () => (\n <Button\n loading={confirmLoading}\n size=\"md\"\n tone=\"primary\"\n onClick={(event) => onOk?.(event as ReactMouseEvent<HTMLButtonElement>)}\n {...okButtonProps}\n >\n {okText}\n </Button>\n );\n const originFooter =\n footer === null ? null : (\n <div className=\"flex justify-end gap-4\">\n <CancelBtn />\n <OkBtn />\n </div>\n );\n const mergedFooter =\n typeof footer === \"function\"\n ? footer(originFooter, { CancelBtn, OkBtn })\n : footer === undefined\n ? originFooter\n : footer;\n const hasTitle = title !== undefined && title !== null;\n const titleNode =\n hasTitle || backIcon || titleIcon ? (\n <span\n className={cn(\n \"hj-modal-title-content\",\n titleAlign === \"center\" && \"hj-modal-title-content-center\",\n )}\n >\n {backIcon ? (\n <button className=\"hj-modal-back\" onClick={onBack} type=\"button\">\n {backIcon}\n </button>\n ) : null}\n {titleIcon ? <span className=\"hj-modal-title-icon\">{titleIcon}</span> : null}\n {hasTitle ? <span className=\"hj-modal-title-text\">{title}</span> : null}\n </span>\n ) : null;\n const container = getContainer ?? config.getPopupContainer;\n\n return (\n <RcDialog\n afterClose={afterClose}\n afterOpenChange={afterOpenChange}\n className={slotClass(classNames, \"panel\", \"hj-modal-panel\", className)}\n classNames={{\n body: slotClass(classNames, \"body\"),\n close: slotClass(classNames, \"close\"),\n container: slotClass(classNames, \"panel\", \"hj-modal-container\"),\n footer: slotClass(classNames, \"footer\"),\n header: slotClass(classNames, \"header\"),\n mask: slotClass(classNames, \"mask\"),\n title: slotClass(classNames, \"title\"),\n wrapper: slotClass(\n classNames,\n \"wrapper\",\n \"hj-modal-wrapper\",\n centered && \"hj-modal-wrapper-centered\",\n wrapClassName,\n ),\n }}\n closable={closable}\n closeIcon={closeIcon ?? \"×\"}\n destroyOnHidden={destroyOnHidden ?? destroyOnClose}\n focusTrap={focusTrap}\n focusTriggerAfterClose={focusTriggerAfterClose}\n forceRender={forceRender}\n footer={mergedFooter}\n getContainer={container}\n keyboard={keyboard}\n mask={mask}\n maskClosable={maskClosable}\n maskTransitionName={maskTransitionName ?? \"hj-modal-mask-motion\"}\n modalRender={modalRender}\n mousePosition={mousePosition ?? getStoredMousePosition()}\n prefixCls={mergedPrefixCls}\n rootClassName={slotClass(classNames, \"root\", rootClassName)}\n rootStyle={slotStyle(styles, \"root\", rootStyle)}\n scrollLock={scrollLock}\n style={slotStyle(styles, \"panel\", style)}\n styles={{\n body: slotStyle(styles, \"body\", bodyStyle),\n close: slotStyle(styles, \"close\"),\n container: slotStyle(styles, \"panel\"),\n footer: slotStyle(styles, \"footer\"),\n header: slotStyle(styles, \"header\"),\n mask: slotStyle(styles, \"mask\", maskStyle),\n title: slotStyle(styles, \"title\"),\n wrapper: slotStyle(styles, \"wrapper\"),\n }}\n title={titleNode}\n transitionName={transitionName ?? \"hj-zoom\"}\n visible={open}\n width={mergedWidth}\n zIndex={zIndex}\n onClose={requestClose}\n >\n {loading ? <div className=\"hj-modal-loading\" aria-busy=\"true\" /> : children}\n </RcDialog>\n );\n}\n\ninterface ConfirmActionButtonProps {\n readonly action?: ModalStaticAction;\n readonly autoFocus?: boolean;\n readonly buttonProps?: Partial<Omit<ButtonProps, \"children\">>;\n readonly children: ReactNode;\n readonly close: VoidFunction;\n readonly isSilent?: () => boolean;\n readonly tone: \"primary\" | \"secondary\";\n readonly onConfirm?: () => void;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n \"then\" in value &&\n typeof value.then === \"function\"\n );\n}\n\nfunction ConfirmActionButton({\n action,\n autoFocus,\n buttonProps,\n children,\n close,\n isSilent,\n onConfirm,\n tone,\n}: ConfirmActionButtonProps) {\n const clickedRef = useRef(false);\n const buttonRef = useRef<HTMLButtonElement | HTMLAnchorElement>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!autoFocus) return;\n const timer = window.setTimeout(() => buttonRef.current?.focus({ preventScroll: true }));\n return () => window.clearTimeout(timer);\n }, [autoFocus]);\n\n const finish = () => {\n onConfirm?.();\n close();\n };\n const handleClick = () => {\n if (clickedRef.current) return;\n clickedRef.current = true;\n if (!action) {\n finish();\n return;\n }\n\n let result: unknown;\n if (action.length > 0) {\n result = action(finish);\n clickedRef.current = false;\n } else {\n result = action(finish);\n if (!isThenable(result)) {\n finish();\n return;\n }\n }\n\n if (!isThenable(result)) return;\n setLoading(true);\n void Promise.resolve(result).then(\n () => {\n setLoading(false);\n clickedRef.current = false;\n finish();\n },\n (error: unknown) => {\n setLoading(false);\n clickedRef.current = false;\n if (!isSilent?.()) console.error(error);\n },\n );\n };\n\n return (\n <Button\n autoFocus={autoFocus}\n loading={loading}\n ref={buttonRef}\n size=\"md\"\n tone={tone}\n onClick={handleClick}\n {...buttonProps}\n >\n {children}\n </Button>\n );\n}\n\ninterface ConfirmSurfaceProps {\n readonly afterClose: VoidFunction;\n readonly close: VoidFunction;\n readonly config: ModalFuncProps;\n readonly isSilent?: () => boolean;\n readonly open: boolean;\n readonly onConfirm?: (confirmed: boolean) => void;\n}\n\nconst defaultConfirmIcon: Record<NonNullable<ModalFuncProps[\"type\"]>, ReactNode> = {\n confirm: \"!\",\n error: \"×\",\n info: \"i\",\n success: \"✓\",\n warn: \"!\",\n warning: \"!\",\n};\n\nfunction ConfirmSurface({\n afterClose,\n close,\n config,\n isSilent,\n open,\n onConfirm,\n}: ConfirmSurfaceProps) {\n const uiConfig = useConfig();\n const { onCancel: _onCancel, onOk: _onOk, ...modalProps } = config;\n const type = config.type ?? \"confirm\";\n const prefixCls = config.prefixCls ?? uiConfig.getPrefixCls(\"modal\");\n const confirmPrefixCls = `${prefixCls}-confirm`;\n const showCancel = config.okCancel ?? type === \"confirm\";\n const autoFocus = config.focusable?.autoFocusButton ?? config.autoFocusButton ?? \"ok\";\n const icon = config.icon === undefined ? defaultConfirmIcon[type] : config.icon;\n const CancelBtn = () => (\n <ConfirmActionButton\n action={config.onCancel}\n autoFocus={autoFocus === \"cancel\"}\n buttonProps={config.cancelButtonProps}\n close={close}\n isSilent={isSilent}\n tone=\"secondary\"\n onConfirm={() => onConfirm?.(false)}\n >\n {config.cancelText ?? \"取消\"}\n </ConfirmActionButton>\n );\n const OkBtn = () => (\n <ConfirmActionButton\n action={config.onOk}\n autoFocus={autoFocus === \"ok\"}\n buttonProps={config.okButtonProps}\n close={close}\n isSilent={isSilent}\n tone=\"primary\"\n onConfirm={() => onConfirm?.(true)}\n >\n {config.okText ?? (showCancel ? \"确定\" : \"知道了\")}\n </ConfirmActionButton>\n );\n const originFooter = (\n <div className=\"flex justify-end gap-4\">\n {showCancel ? <CancelBtn /> : null}\n <OkBtn />\n </div>\n );\n const footer =\n typeof config.footer === \"function\"\n ? config.footer(originFooter, { CancelBtn, OkBtn })\n : config.footer === undefined\n ? originFooter\n : config.footer;\n const finishCancel = () => {\n onConfirm?.(false);\n close();\n };\n const handleCancel = () => {\n config.onCancel?.(() => {});\n finishCancel();\n };\n\n return (\n <ModalRoot\n {...modalProps}\n afterClose={afterClose}\n centered={config.centered ?? false}\n className={cn(\n \"hj-modal-confirm\",\n confirmPrefixCls,\n `${confirmPrefixCls}-${type === \"warn\" ? \"warning\" : type}`,\n `hj-modal-confirm-${type === \"warn\" ? \"warning\" : type}`,\n config.className,\n )}\n closable={config.closable ?? false}\n footer={footer}\n maskClosable={config.maskClosable ?? false}\n open={open}\n rootClassName={config.rootClassName}\n title={undefined}\n width={config.width ?? 416}\n onCancel={handleCancel}\n >\n <div className=\"hj-modal-confirm-body-wrapper\">\n <div className=\"hj-modal-confirm-body\">\n {icon !== null && icon !== false ? (\n <span className={cn(\"hj-modal-confirm-icon\", `hj-modal-confirm-icon-${type}`)}>\n {icon}\n </span>\n ) : null}\n <div className=\"hj-modal-confirm-paragraph\">\n {config.title !== undefined && config.title !== null ? (\n <div className=\"hj-modal-confirm-title\">{config.title}</div>\n ) : null}\n <div className=\"hj-modal-confirm-content\">{config.content}</div>\n </div>\n </div>\n </div>\n </ModalRoot>\n );\n}\n\nconst modalDestroyers = new Set<VoidFunction>();\nlet staticRootPrefixCls = \"\";\n\nfunction createModal(config: ModalFuncProps): ModalFuncReturn {\n if (typeof document === \"undefined\") return { destroy() {}, update() {} };\n\n const mountNode = document.createElement(\"div\");\n mountNode.dataset.hjFeedbackHolder = \"modal\";\n document.body.appendChild(mountNode);\n const root: Root = createRoot(mountNode);\n let currentConfig: ModalFuncProps = { ...config, open: true };\n let open = true;\n let destroyed = false;\n let cleanupTimer: number | undefined;\n\n const hardDestroy = () => {\n if (destroyed) return;\n destroyed = true;\n if (cleanupTimer !== undefined) window.clearTimeout(cleanupTimer);\n modalDestroyers.delete(close);\n root.unmount();\n mountNode.remove();\n };\n const afterClose = () => {\n currentConfig.afterClose?.();\n queueMicrotask(hardDestroy);\n };\n const render = () => {\n if (destroyed) return;\n root.render(\n wrapGlobalFeedbackHolder(\n <ConfirmSurface\n afterClose={afterClose}\n close={close}\n config={{\n ...currentConfig,\n rootClassName: cn(\n staticRootPrefixCls && `${staticRootPrefixCls}-root`,\n currentConfig.rootClassName,\n ),\n prefixCls:\n currentConfig.prefixCls ??\n (staticRootPrefixCls ? `${staticRootPrefixCls}-modal` : undefined),\n }}\n open={open}\n />,\n ),\n );\n };\n function close() {\n if (destroyed || !open) return;\n open = false;\n render();\n cleanupTimer = window.setTimeout(hardDestroy, 1000);\n }\n\n modalDestroyers.add(close);\n render();\n\n return {\n destroy: close,\n update(nextProps) {\n currentConfig =\n typeof nextProps === \"function\"\n ? nextProps(currentConfig)\n : { ...currentConfig, ...nextProps };\n if (currentConfig.open !== undefined) open = currentConfig.open;\n if (open && cleanupTimer !== undefined) {\n window.clearTimeout(cleanupTimer);\n cleanupTimer = undefined;\n }\n render();\n },\n };\n}\n\ninterface HookModalRef {\n readonly destroy: VoidFunction;\n readonly update: (config: ModalConfigUpdate) => void;\n}\n\ninterface HookModalProps {\n readonly afterClose: VoidFunction;\n readonly config: ModalFuncProps;\n readonly isSilent: () => boolean;\n readonly onConfirm: (confirmed: boolean) => void;\n}\n\nconst HookModal = forwardRef<HookModalRef, HookModalProps>(function HookModal(\n { afterClose: remove, config, isSilent, onConfirm },\n ref,\n) {\n const [open, setOpen] = useState(true);\n const [innerConfig, setInnerConfig] = useState(config);\n const close = useCallback(() => setOpen(false), []);\n\n useImperativeHandle(\n ref,\n () => ({\n destroy: close,\n update(nextConfig) {\n setInnerConfig((previous) => {\n const next = typeof nextConfig === \"function\" ? nextConfig(previous) : nextConfig;\n return { ...previous, ...next };\n });\n },\n }),\n [close],\n );\n\n return (\n <ConfirmSurface\n afterClose={() => {\n innerConfig.afterClose?.();\n remove();\n }}\n close={close}\n config={innerConfig}\n isSilent={isSilent}\n open={open}\n onConfirm={onConfirm}\n />\n );\n});\n\nlet hookUuid = 0;\n\nfunction usePatchElements(): readonly [ReactElement[], (element: ReactElement) => VoidFunction] {\n const [elements, setElements] = useState<Array<{ key: number; node: ReactElement }>>([]);\n const patch = useCallback((element: ReactElement) => {\n hookUuid += 1;\n const key = hookUuid;\n setElements((previous) => [...previous, { key, node: element }]);\n return () => setElements((previous) => previous.filter((item) => item.key !== key));\n }, []);\n return [elements.map((item) => cloneElement(item.node, { key: item.key })), patch] as const;\n}\n\nfunction ModalElementsHolder({ elements }: { readonly elements: ReactElement[] }) {\n return elements;\n}\n\nfunction withType(config: ModalFuncProps, type: NonNullable<ModalFuncProps[\"type\"]>) {\n return { ...config, type };\n}\n\nexport function useModal(): readonly [HookModalApi, ReactElement] {\n const [elements, patchElement] = usePatchElements();\n const ownedDestroyers = useRef(new Set<VoidFunction>());\n useEffect(\n () => () => {\n for (const destroy of ownedDestroyers.current) modalDestroyers.delete(destroy);\n ownedDestroyers.current.clear();\n },\n [],\n );\n const createHookModal = useCallback(\n (type: NonNullable<ModalFuncProps[\"type\"]>, config: ModalFuncProps) => {\n let modalRef: HookModalRef | null = null;\n let remove: VoidFunction = () => {};\n let silent = false;\n let resolvePromise: (confirmed: boolean) => void = () => {};\n const promise = new Promise<boolean>((resolve) => {\n resolvePromise = resolve;\n });\n const pendingActions: Array<(ref: HookModalRef) => void> = [];\n const dispatch = (action: (ref: HookModalRef) => void) => {\n if (modalRef) action(modalRef);\n else pendingActions.push(action);\n };\n const destroy = () => dispatch((instance) => instance.destroy());\n const element = (\n <HookModal\n config={withType(config, type)}\n isSilent={() => silent}\n ref={(instance) => {\n modalRef = instance;\n if (!instance) return;\n for (const action of pendingActions.splice(0)) action(instance);\n }}\n afterClose={() => {\n modalDestroyers.delete(destroy);\n ownedDestroyers.current.delete(destroy);\n remove();\n }}\n onConfirm={resolvePromise}\n />\n );\n remove = patchElement(element);\n modalDestroyers.add(destroy);\n ownedDestroyers.current.add(destroy);\n\n const result: HookModalFuncReturn = {\n destroy,\n // biome-ignore lint/suspicious/noThenProperty: AntD hook modal handles are intentionally thenable.\n then(onFulfilled, onRejected) {\n silent = true;\n return promise.then(onFulfilled, onRejected);\n },\n update(nextConfig) {\n dispatch((instance) => instance.update(nextConfig));\n },\n };\n return result;\n },\n [patchElement],\n );\n const api = useMemo<HookModalApi>(\n () => ({\n confirm: (config) => createHookModal(\"confirm\", config),\n error: (config) => createHookModal(\"error\", config),\n info: (config) => createHookModal(\"info\", config),\n success: (config) => createHookModal(\"success\", config),\n warning: (config) => createHookModal(\"warning\", config),\n }),\n [createHookModal],\n );\n return [api, <ModalElementsHolder elements={elements} key=\"modal-holder\" />] as const;\n}\n\nexport interface ModalStaticFunctions {\n readonly confirm: ModalFunc;\n readonly error: ModalFunc;\n readonly info: ModalFunc;\n readonly success: ModalFunc;\n readonly warn: ModalFunc;\n readonly warning: ModalFunc;\n}\n\nexport type ModalComponent = typeof ModalRoot &\n ModalStaticFunctions & {\n readonly config: (config: ModalGlobalConfig) => void;\n readonly destroyAll: VoidFunction;\n readonly useModal: typeof useModal;\n };\n\nconst modalWarning: ModalFunc = (config) => createModal(withType(config, \"warning\"));\n\nexport const Modal: ModalComponent = Object.assign(ModalRoot, {\n config(config: ModalGlobalConfig) {\n staticRootPrefixCls = config.rootPrefixCls ?? staticRootPrefixCls;\n },\n confirm(config: ModalFuncProps) {\n return createModal(withType(config, \"confirm\"));\n },\n destroyAll() {\n for (const destroy of [...modalDestroyers]) destroy();\n },\n error(config: ModalFuncProps) {\n return createModal(withType(config, \"error\"));\n },\n info(config: ModalFuncProps) {\n return createModal(withType(config, \"info\"));\n },\n success(config: ModalFuncProps) {\n return createModal(withType(config, \"success\"));\n },\n useModal,\n warn: modalWarning,\n warning: modalWarning,\n});\n",
|
|
31
|
+
"import CSSMotion from \"@rc-component/motion\";\nimport { composeRef, raf, useControlledState, useEvent } from \"@rc-component/util\";\nimport type {\n AnchorHTMLAttributes,\n ButtonHTMLAttributes,\n CSSProperties,\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { isMotionDisabled, useConfig } from \"../../ConfigProvider\";\nimport { cn } from \"../../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../../utils/slots\";\nimport { Badge, type BadgeProps } from \"../Badge\";\nimport { Icon } from \"../Icon\";\nimport { Tooltip, type TooltipProps } from \"../Tooltip\";\n\nexport type FloatButtonElement = HTMLAnchorElement | HTMLButtonElement;\nexport type FloatButtonType = \"default\" | \"primary\";\nexport type FloatButtonShape = \"circle\" | \"square\";\nexport type FloatButtonGroupTrigger = \"click\" | \"hover\";\nexport type FloatButtonBadgeProps = Omit<BadgeProps, \"children\" | \"status\" | \"text\" | \"title\">;\nexport type FloatButtonTooltipProps = Omit<TooltipProps, \"children\">;\n\ntype FloatButtonSlot = \"root\" | \"icon\" | \"content\";\n\nexport interface FloatButtonProps\n extends Omit<HTMLAttributes<FloatButtonElement>, \"content\" | \"onClick\"> {\n readonly badge?: FloatButtonBadgeProps | ReactNode;\n readonly classNames?: SlotClassNames<FloatButtonSlot>;\n readonly content?: ReactNode;\n /** @deprecated Use `content` instead. */\n readonly description?: ReactNode;\n readonly disabled?: boolean;\n readonly href?: string;\n readonly htmlType?: ButtonHTMLAttributes<HTMLButtonElement>[\"type\"];\n readonly icon?: ReactNode;\n readonly rootClassName?: string;\n readonly shape?: FloatButtonShape;\n readonly styles?: SlotStyles<FloatButtonSlot>;\n readonly target?: AnchorHTMLAttributes<HTMLAnchorElement>[\"target\"];\n readonly tooltip?: ReactNode | FloatButtonTooltipProps;\n readonly type?: FloatButtonType;\n readonly onClick?: MouseEventHandler<FloatButtonElement>;\n}\n\ninterface FloatButtonGroupContextValue {\n readonly classNames?: SlotClassNames<FloatButtonSlot>;\n readonly individual: boolean;\n readonly shape: FloatButtonShape;\n readonly styles?: SlotStyles<FloatButtonSlot>;\n}\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue | null>(null);\n\nfunction isTooltipProps(value: FloatButtonProps[\"tooltip\"]): value is FloatButtonTooltipProps {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n !isValidElement(value) &&\n !Array.isArray(value) &&\n \"title\" in value,\n );\n}\n\nfunction isBadgeProps(value: FloatButtonProps[\"badge\"]): value is FloatButtonBadgeProps {\n return Boolean(\n value && typeof value === \"object\" && !isValidElement(value) && !Array.isArray(value),\n );\n}\n\nconst InternalFloatButton = forwardRef<FloatButtonElement, FloatButtonProps>(function FloatButton(\n {\n badge,\n className,\n classNames,\n content,\n description,\n disabled,\n href,\n htmlType = \"button\",\n icon,\n onClick,\n rootClassName,\n shape = \"circle\",\n style,\n styles,\n target,\n tooltip,\n type = \"default\",\n ...restProps\n },\n ref,\n) {\n const config = useConfig();\n const groupContext = useContext(FloatButtonGroupContext);\n const mergedShape = groupContext?.shape ?? shape;\n const mergedIndividual = groupContext?.individual ?? true;\n const mergedDisabled = disabled ?? config.disabled;\n const mergedContent = content ?? description;\n const mergedIcon = icon ?? (!mergedContent ? <Icon name=\"document\" size={20} /> : null);\n const rootClass = cn(\n \"hj-wave hj-float-button\",\n `hj-float-button-${type}`,\n `hj-float-button-${mergedShape}`,\n mergedIndividual && \"hj-float-button-individual\",\n !mergedContent && \"hj-float-button-icon-only\",\n mergedDisabled && \"hj-float-button-disabled\",\n groupContext?.classNames?.root,\n classNames?.root,\n className,\n rootClassName,\n );\n const rootStyle = {\n ...groupContext?.styles?.root,\n ...styles?.root,\n ...style,\n };\n const iconClassName = cn(\n \"hj-float-button-icon\",\n groupContext?.classNames?.icon,\n classNames?.icon,\n );\n const iconStyle = { ...groupContext?.styles?.icon, ...styles?.icon };\n const contentClassName = cn(\n \"hj-float-button-content\",\n groupContext?.classNames?.content,\n classNames?.content,\n );\n const contentStyle = { ...groupContext?.styles?.content, ...styles?.content };\n\n const badgeNode =\n badge === undefined ? null : isBadgeProps(badge) ? (\n <Badge {...badge} className={cn(\"hj-float-button-badge\", badge.className)} />\n ) : (\n <span className=\"hj-float-button-badge hj-float-button-badge-custom\">{badge}</span>\n );\n\n const children = (\n <>\n {mergedIcon ? (\n <span className={iconClassName} style={iconStyle}>\n {mergedIcon}\n </span>\n ) : null}\n {mergedContent ? (\n <span className={contentClassName} style={contentStyle}>\n {mergedContent}\n </span>\n ) : null}\n {badgeNode}\n </>\n );\n\n const handleClick: MouseEventHandler<FloatButtonElement> = (event) => {\n if (mergedDisabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n onClick?.(event);\n };\n\n const commonProps = {\n ...restProps,\n \"aria-disabled\": mergedDisabled || undefined,\n className: rootClass,\n onClick: handleClick,\n style: rootStyle,\n };\n\n let node = href ? (\n <a\n {...(commonProps as AnchorHTMLAttributes<HTMLAnchorElement>)}\n href={mergedDisabled ? undefined : href}\n ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n target={target}\n >\n {children}\n </a>\n ) : (\n <button\n {...(commonProps as ButtonHTMLAttributes<HTMLButtonElement>)}\n disabled={mergedDisabled}\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n type={htmlType}\n >\n {children}\n </button>\n );\n\n if (tooltip != null && tooltip !== false) {\n if (isTooltipProps(tooltip)) {\n node = <Tooltip {...tooltip}>{node}</Tooltip>;\n } else {\n node = <Tooltip title={tooltip}>{node}</Tooltip>;\n }\n }\n\n return node;\n});\n\ntype FloatButtonGroupSlot =\n | \"root\"\n | \"list\"\n | \"item\"\n | \"itemIcon\"\n | \"itemContent\"\n | \"trigger\"\n | \"triggerIcon\"\n | \"triggerContent\";\n\nexport interface FloatButtonGroupProps extends Omit<FloatButtonProps, \"classNames\" | \"styles\"> {\n readonly children: ReactNode;\n readonly classNames?: SlotClassNames<FloatButtonGroupSlot>;\n readonly closeIcon?: ReactNode;\n readonly onOpenChange?: (open: boolean) => void;\n readonly open?: boolean;\n readonly placement?: \"top\" | \"left\" | \"right\" | \"bottom\";\n readonly styles?: SlotStyles<FloatButtonGroupSlot>;\n readonly trigger?: FloatButtonGroupTrigger;\n}\n\nfunction FloatButtonGroup({\n children,\n className,\n classNames,\n closeIcon = <Icon name=\"close\" size={20} />,\n disabled,\n icon = <Icon name=\"document\" size={20} />,\n onClick,\n onOpenChange,\n open: controlledOpen,\n placement = \"top\",\n rootClassName,\n shape = \"circle\",\n style,\n styles,\n trigger,\n type = \"default\",\n ...floatButtonProps\n}: FloatButtonGroupProps) {\n const config = useConfig();\n const groupRef = useRef<HTMLDivElement>(null);\n const mergedDisabled = disabled ?? config.disabled;\n const mergedPlacement = [\"top\", \"left\", \"right\", \"bottom\"].includes(placement)\n ? placement\n : \"top\";\n const [open, setOpen] = useControlledState(false, controlledOpen);\n const menuMode = trigger === \"click\" || trigger === \"hover\";\n const individual = shape === \"circle\";\n\n const triggerOpen = useEvent((nextOpen: boolean) => {\n if (mergedDisabled || open === nextOpen) return;\n setOpen(nextOpen);\n onOpenChange?.(nextOpen);\n });\n\n useEffect(() => {\n if (trigger !== \"click\") return;\n const handleDocumentClick = (event: MouseEvent) => {\n if (!groupRef.current?.contains(event.target as Node)) triggerOpen(false);\n };\n document.addEventListener(\"click\", handleDocumentClick, { capture: true });\n return () => document.removeEventListener(\"click\", handleDocumentClick, { capture: true });\n }, [trigger, triggerOpen]);\n\n const listContext = useMemo<FloatButtonGroupContextValue>(\n () => ({\n shape,\n individual,\n classNames: {\n root: classNames?.item,\n icon: classNames?.itemIcon,\n content: classNames?.itemContent,\n },\n styles: {\n root: styles?.item,\n icon: styles?.itemIcon,\n content: styles?.itemContent,\n },\n }),\n [classNames, individual, shape, styles],\n );\n const triggerContext = useMemo<FloatButtonGroupContextValue>(\n () => ({\n shape,\n individual: true,\n classNames: {\n root: classNames?.trigger,\n icon: classNames?.triggerIcon,\n content: classNames?.triggerContent,\n },\n styles: {\n root: styles?.trigger,\n icon: styles?.triggerIcon,\n content: styles?.triggerContent,\n },\n }),\n [classNames, shape, styles],\n );\n\n const renderList = (motionClassName?: string, motionStyle?: CSSProperties) => (\n <FloatButtonGroupContext.Provider value={listContext}>\n <div\n className={cn(\"hj-float-button-group-list\", classNames?.list, motionClassName)}\n style={{ ...styles?.list, ...motionStyle }}\n >\n {children}\n </div>\n </FloatButtonGroupContext.Provider>\n );\n\n return (\n <div\n className={cn(\n \"hj-float-button-group\",\n individual && \"hj-float-button-group-individual\",\n menuMode && \"hj-float-button-group-menu-mode\",\n menuMode && `hj-float-button-group-${mergedPlacement}`,\n classNames?.root,\n className,\n rootClassName,\n )}\n onMouseEnter={() => {\n if (trigger === \"hover\") triggerOpen(true);\n }}\n onMouseLeave={() => {\n if (trigger === \"hover\") triggerOpen(false);\n }}\n ref={groupRef}\n style={{ ...styles?.root, ...style }}\n >\n {menuMode ? (\n <CSSMotion\n motionAppear\n motionDeadline={300}\n motionName={\n isMotionDisabled(config.motion) ? undefined : \"hj-float-button-group-list-motion\"\n }\n removeOnLeave\n visible={open}\n >\n {({ className: motionClassName, style: motionStyle }) =>\n renderList(motionClassName, motionStyle)\n }\n </CSSMotion>\n ) : (\n renderList()\n )}\n\n {menuMode ? (\n <FloatButtonGroupContext.Provider value={triggerContext}>\n <InternalFloatButton\n {...floatButtonProps}\n aria-label={floatButtonProps[\"aria-label\"]}\n className=\"hj-float-button-group-trigger\"\n disabled={mergedDisabled}\n icon={open ? closeIcon : icon}\n onClick={(event) => {\n if (trigger === \"click\") triggerOpen(!open);\n onClick?.(event);\n }}\n shape={shape}\n type={type}\n />\n </FloatButtonGroupContext.Provider>\n ) : null}\n </div>\n );\n}\n\nexport interface FloatButtonBackTopProps extends Omit<FloatButtonProps, \"target\"> {\n readonly duration?: number;\n readonly target?: () => HTMLElement | Window | Document;\n readonly visibilityHeight?: number;\n}\n\nfunction isWindow(value: unknown): value is Window {\n return Boolean(value && value === (value as Window).window);\n}\n\nfunction getScroll(target: HTMLElement | Window | Document | null) {\n if (typeof window === \"undefined\") return 0;\n if (isWindow(target)) return target.pageYOffset;\n if (target instanceof Document) return target.documentElement.scrollTop;\n return target?.scrollTop ?? 0;\n}\n\nfunction easeInOutCubic(time: number, start: number, change: number, duration: number) {\n const normalizedTime = time / (duration / 2);\n if (normalizedTime < 1) return (change / 2) * normalizedTime ** 3 + start;\n const shiftedTime = normalizedTime - 2;\n return (change / 2) * (shiftedTime ** 3 + 2) + start;\n}\n\nfunction setScrollTop(container: HTMLElement | Window | Document, value: number) {\n if (isWindow(container)) {\n container.scrollTo(window.pageXOffset, value);\n } else if (container instanceof Document) {\n container.documentElement.scrollTop = value;\n } else {\n container.scrollTop = value;\n }\n}\n\nfunction scrollToTop(container: HTMLElement | Window | Document, duration: number) {\n const start = getScroll(container);\n if (duration <= 0) {\n setScrollTop(container, 0);\n return () => {};\n }\n\n const startTime = Date.now();\n let frameId = 0;\n const frame = () => {\n const elapsed = Math.min(Date.now() - startTime, duration);\n setScrollTop(container, easeInOutCubic(elapsed, start, -start, duration));\n if (elapsed < duration) frameId = raf(frame);\n };\n frameId = raf(frame);\n return () => raf.cancel(frameId);\n}\n\nfunction throttleByAnimationFrame<Args extends unknown[]>(callback: (...args: Args) => void) {\n let requestId: number | null = null;\n const throttled = (...args: Args) => {\n if (requestId !== null) return;\n requestId = raf(() => {\n requestId = null;\n callback(...args);\n });\n };\n throttled.cancel = () => {\n if (requestId !== null) raf.cancel(requestId);\n requestId = null;\n };\n return throttled;\n}\n\nconst FloatButtonBackTop = forwardRef<FloatButtonElement, FloatButtonBackTopProps>(function BackTop(\n {\n \"aria-label\": ariaLabel = \"Back to top\",\n className,\n duration = 450,\n icon = <Icon className=\"hj-float-button-back-top-icon\" name=\"chevron-down\" size={20} />,\n onClick,\n target,\n visibilityHeight = 400,\n ...restProps\n },\n ref,\n) {\n const config = useConfig();\n const internalRef = useRef<FloatButtonElement>(null);\n const cancelScrollRef = useRef<(() => void) | null>(null);\n const [visible, setVisible] = useState(visibilityHeight === 0);\n const getTarget = useEvent(\n () =>\n target?.() ??\n internalRef.current?.ownerDocument ??\n (typeof window === \"undefined\" ? null : window),\n );\n const handleScroll = useMemo(\n () =>\n throttleByAnimationFrame((event: Event) => {\n setVisible(getScroll(event.target as HTMLElement | Window | Document) >= visibilityHeight);\n }),\n [visibilityHeight],\n );\n\n useEffect(() => {\n const container = getTarget();\n if (!container) return;\n setVisible(getScroll(container) >= visibilityHeight);\n container.addEventListener(\"scroll\", handleScroll);\n return () => {\n handleScroll.cancel();\n container.removeEventListener(\"scroll\", handleScroll);\n };\n }, [getTarget, handleScroll, visibilityHeight]);\n\n useEffect(\n () => () => {\n cancelScrollRef.current?.();\n },\n [],\n );\n\n return (\n <CSSMotion\n motionAppear\n motionDeadline={300}\n motionName={isMotionDisabled(config.motion) ? undefined : \"hj-float-button-fade\"}\n removeOnLeave\n visible={visible}\n >\n {({ className: motionClassName, style: motionStyle }, motionRef) => (\n <InternalFloatButton\n {...restProps}\n aria-label={ariaLabel}\n className={cn(className, motionClassName)}\n icon={icon}\n onClick={(event) => {\n const container = getTarget();\n if (container) {\n cancelScrollRef.current?.();\n cancelScrollRef.current = scrollToTop(container, duration);\n }\n onClick?.(event);\n }}\n ref={composeRef(internalRef, ref, motionRef)}\n style={{ ...restProps.style, ...motionStyle }}\n />\n )}\n </CSSMotion>\n );\n});\n\nexport const FloatButton = Object.assign(InternalFloatButton, {\n BackTop: FloatButtonBackTop,\n Group: FloatButtonGroup,\n});\n",
|
|
32
|
+
"import { useMutateObserver } from \"@rc-component/mutate-observer\";\nimport { isEqual, raf, useEvent } from \"@rc-component/util\";\nimport type { CSSProperties, ReactNode } from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface WatermarkFont {\n readonly color?: CanvasFillStrokeStyles[\"fillStyle\"];\n readonly fontFamily?: string;\n readonly fontSize?: number | string;\n readonly fontStyle?: \"none\" | \"normal\" | \"italic\" | \"oblique\";\n readonly fontWeight?: \"normal\" | \"lighter\" | \"bold\" | \"bolder\" | number;\n readonly textAlign?: CanvasTextAlign;\n}\n\nexport interface WatermarkText {\n readonly font?: WatermarkFont;\n readonly text: string;\n}\n\nexport type WatermarkContent = string | WatermarkText;\n\nexport interface WatermarkProps {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly content?: WatermarkContent | readonly WatermarkContent[];\n readonly font?: WatermarkFont;\n readonly gap?: readonly [number, number];\n readonly height?: number;\n readonly image?: string;\n readonly inherit?: boolean;\n readonly offset?: readonly [number, number];\n readonly onRemove?: () => void;\n readonly rootClassName?: string;\n readonly rotate?: number;\n readonly style?: CSSProperties;\n readonly width?: number;\n readonly zIndex?: number;\n}\n\ninterface RequiredWatermarkFont {\n readonly color: CanvasFillStrokeStyles[\"fillStyle\"];\n readonly fontFamily: string;\n readonly fontSize: number | string;\n readonly fontStyle: \"none\" | \"normal\" | \"italic\" | \"oblique\";\n readonly fontWeight: \"normal\" | \"lighter\" | \"bold\" | \"bolder\" | number;\n readonly textAlign: CanvasTextAlign;\n}\n\ninterface WatermarkContentLine {\n readonly font: RequiredWatermarkFont;\n readonly text: string;\n}\n\ninterface WatermarkContextValue {\n readonly add: (element: HTMLElement) => void;\n readonly remove: (element: HTMLElement) => void;\n}\n\nconst WatermarkContext = createContext<WatermarkContextValue>({\n add() {},\n remove() {},\n});\n\nexport function useWatermarkPanelRef(panelSelector?: string) {\n const watermark = useContext(WatermarkContext);\n const panelElementRef = useRef<HTMLElement | null>(null);\n\n return useEvent((element: HTMLElement | null) => {\n if (element) {\n const target = panelSelector ? element.querySelector<HTMLElement>(panelSelector) : element;\n if (target) {\n watermark.add(target);\n panelElementRef.current = target;\n }\n return;\n }\n\n if (panelElementRef.current) {\n watermark.remove(panelElementRef.current);\n panelElementRef.current = null;\n }\n });\n}\n\nconst DEFAULT_GAP_X = 100;\nconst DEFAULT_GAP_Y = 100;\nconst FONT_GAP = 3;\nconst FIXED_STYLE: CSSProperties = {\n overflow: \"hidden\",\n position: \"relative\",\n};\n\nfunction getPixelRatio() {\n return window.devicePixelRatio || 1;\n}\n\nfunction getFontSize(font: RequiredWatermarkFont, ratio = 1) {\n return Number(font.fontSize) * ratio;\n}\n\nfunction getCanvasFont(font: RequiredWatermarkFont, ratio = 1, lineHeight?: number) {\n const mergedLineHeight = lineHeight === undefined ? \"\" : `/${lineHeight}px`;\n return `${font.fontStyle} normal ${font.fontWeight} ${getFontSize(font, ratio)}px${mergedLineHeight} ${font.fontFamily}`;\n}\n\nfunction getContentLines(\n content: WatermarkContent | readonly WatermarkContent[] | undefined,\n font: RequiredWatermarkFont,\n): WatermarkContentLine[] {\n const list =\n content == null || content === \"\" ? [] : Array.isArray(content) ? content : [content];\n return list.map((item) =>\n typeof item === \"object\" && item !== null && \"text\" in item\n ? { text: item.text ?? \"\", font: { ...font, ...item.font } }\n : { text: String(item), font },\n );\n}\n\nfunction prepareCanvas(width: number, height: number, ratio = 1) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n if (!context) return null;\n\n const realWidth = width * ratio;\n const realHeight = height * ratio;\n canvas.width = realWidth;\n canvas.height = realHeight;\n context.save();\n return { canvas, context, realHeight, realWidth };\n}\n\nfunction getRotatePosition(x: number, y: number, angle: number) {\n return [\n x * Math.cos(angle) - y * Math.sin(angle),\n x * Math.sin(angle) + y * Math.cos(angle),\n ] as const;\n}\n\nfunction useClips() {\n return useCallback(\n (\n content: readonly WatermarkContentLine[] | HTMLImageElement,\n rotate: number,\n ratio: number,\n width: number,\n height: number,\n gapX: number,\n gapY: number,\n ): readonly [dataUrl: string, finalWidth: number, finalHeight: number] | null => {\n const prepared = prepareCanvas(width, height, ratio);\n if (!prepared) return null;\n const { canvas, context, realHeight: contentHeight, realWidth: contentWidth } = prepared;\n\n if (content instanceof HTMLImageElement) {\n context.drawImage(content, 0, 0, contentWidth, contentHeight);\n } else {\n context.textBaseline = \"top\";\n let top = 0;\n for (const line of content) {\n context.font = getCanvasFont(line.font, ratio, height);\n context.fillStyle = line.font.color;\n context.textAlign = line.font.textAlign;\n context.fillText(line.text, contentWidth / 2, top);\n top += getFontSize(line.font, ratio) + FONT_GAP * ratio;\n }\n }\n\n const angle = (Math.PI / 180) * Number(rotate);\n const maxSize = Math.max(width, height);\n const rotated = prepareCanvas(maxSize, maxSize, ratio);\n if (!rotated) return null;\n rotated.context.translate(rotated.realWidth / 2, rotated.realHeight / 2);\n rotated.context.rotate(angle);\n if (contentWidth > 0 && contentHeight > 0) {\n rotated.context.drawImage(canvas, -contentWidth / 2, -contentHeight / 2);\n }\n\n let left = 0;\n let right = 0;\n let top = 0;\n let bottom = 0;\n const halfWidth = contentWidth / 2;\n const halfHeight = contentHeight / 2;\n const points = [\n [-halfWidth, -halfHeight],\n [halfWidth, -halfHeight],\n [halfWidth, halfHeight],\n [-halfWidth, halfHeight],\n ];\n for (const [x, y] of points) {\n const [targetX, targetY] = getRotatePosition(x, y, angle);\n left = Math.min(left, targetX);\n right = Math.max(right, targetX);\n top = Math.min(top, targetY);\n bottom = Math.max(bottom, targetY);\n }\n\n const cutLeft = left + rotated.realWidth / 2;\n const cutTop = top + rotated.realHeight / 2;\n const cutWidth = right - left;\n const cutHeight = bottom - top;\n const realGapX = gapX * ratio;\n const realGapY = gapY * ratio;\n const filledWidth = (cutWidth + realGapX) * 2;\n const filledHeight = cutHeight + realGapY;\n const filled = prepareCanvas(filledWidth, filledHeight);\n if (!filled) return null;\n\n const drawImage = (targetX = 0, targetY = 0) => {\n filled.context.drawImage(\n rotated.canvas,\n cutLeft,\n cutTop,\n cutWidth,\n cutHeight,\n targetX,\n targetY,\n cutWidth,\n cutHeight,\n );\n };\n drawImage();\n drawImage(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2);\n drawImage(cutWidth + realGapX, cutHeight / 2 + realGapY / 2);\n\n return [filled.canvas.toDataURL(), filledWidth / ratio, filledHeight / ratio];\n },\n [],\n );\n}\n\nfunction useSingletonCache<T extends unknown[], Result>() {\n const cacheRef = useRef<readonly [T | null, Result | null]>([null, null]);\n return useCallback((keys: T, create: () => Result) => {\n const comparableKeys = keys.map((item) =>\n item instanceof HTMLElement || Number.isNaN(item) ? \"\" : item,\n );\n if (!isEqual(cacheRef.current[0], comparableKeys)) {\n cacheRef.current = [comparableKeys as T, create()];\n }\n return cacheRef.current[1] as Result;\n }, []);\n}\n\nfunction useRafDebounce(callback: () => void) {\n const pendingRef = useRef(false);\n const callbackEvent = useEvent(callback);\n\n return useEvent(() => {\n if (pendingRef.current) return;\n pendingRef.current = true;\n callbackEvent();\n raf(() => {\n pendingRef.current = false;\n });\n });\n}\n\nfunction toCssProperty(key: string) {\n return key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n}\n\nfunction getStyleString(style: CSSProperties) {\n return Object.keys(style)\n .map((key) => `${toCssProperty(key)}: ${String(style[key as keyof CSSProperties])};`)\n .join(\" \");\n}\n\nfunction shouldRerender(mutation: MutationRecord, isWatermarkElement: (node: Node) => boolean) {\n if (\n mutation.removedNodes.length > 0 &&\n Array.from(mutation.removedNodes).some(isWatermarkElement)\n ) {\n return true;\n }\n return mutation.type === \"attributes\" && isWatermarkElement(mutation.target);\n}\n\nfunction useWatermarkElement(markStyle: CSSProperties, onRemove?: () => void) {\n const watermarkMapRef = useRef(new Map<HTMLElement, HTMLDivElement>());\n\n const append = useCallback(\n (base64Url: string, markWidth: number, container: HTMLElement) => {\n const existing = watermarkMapRef.current.get(container);\n const watermarkElement = existing ?? document.createElement(\"div\");\n if (!existing) watermarkMapRef.current.set(container, watermarkElement);\n\n watermarkElement.setAttribute(\n \"style\",\n getStyleString({\n ...markStyle,\n backgroundImage: `url('${base64Url}')`,\n backgroundSize: `${Math.floor(markWidth)}px`,\n visibility: \"visible !important\",\n } as unknown as CSSProperties),\n );\n watermarkElement.removeAttribute(\"class\");\n watermarkElement.removeAttribute(\"hidden\");\n\n if (watermarkElement.parentElement !== container) {\n if (existing && onRemove) onRemove();\n container.append(watermarkElement);\n }\n },\n [markStyle, onRemove],\n );\n\n const remove = useEvent((container: HTMLElement) => {\n const watermarkElement = watermarkMapRef.current.get(container);\n watermarkElement?.remove();\n watermarkMapRef.current.delete(container);\n });\n\n const isWatermarkElement = useEvent((node: Node) =>\n Array.from(watermarkMapRef.current.values()).includes(node as HTMLDivElement),\n );\n\n return [append, remove, isWatermarkElement] as const;\n}\n\nfunction getSizeDiff<T>(previous: Set<T>, next: Set<T>) {\n return previous.size === next.size ? previous : next;\n}\n\nexport function Watermark({\n children,\n className,\n content,\n font = {},\n gap = [DEFAULT_GAP_X, DEFAULT_GAP_Y],\n height,\n image,\n inherit = true,\n offset,\n onRemove,\n rootClassName,\n rotate = -22,\n style,\n width,\n zIndex,\n}: WatermarkProps) {\n const mergedStyle = useMemo<CSSProperties>(() => ({ ...FIXED_STYLE, ...style }), [style]);\n const mergedZIndex = zIndex ?? 999;\n const mergedFont = useMemo<RequiredWatermarkFont>(\n () => ({\n color: font.color ?? \"rgba(255, 255, 255, 0.08)\",\n fontFamily: font.fontFamily ?? \"sans-serif\",\n fontSize: font.fontSize ?? 16,\n fontStyle: font.fontStyle ?? \"normal\",\n fontWeight: font.fontWeight ?? \"normal\",\n textAlign: font.textAlign ?? \"center\",\n }),\n [font.color, font.fontFamily, font.fontSize, font.fontStyle, font.fontWeight, font.textAlign],\n );\n const contentLines = useMemo(() => getContentLines(content, mergedFont), [content, mergedFont]);\n const [gapX = DEFAULT_GAP_X, gapY = DEFAULT_GAP_Y] = gap;\n const gapXCenter = gapX / 2;\n const gapYCenter = gapY / 2;\n const offsetLeft = offset?.[0] ?? gapXCenter;\n const offsetTop = offset?.[1] ?? gapYCenter;\n\n const markStyle = useMemo<CSSProperties>(() => {\n const result: CSSProperties = {\n backgroundRepeat: \"repeat\",\n height: \"100%\",\n left: 0,\n pointerEvents: \"none\",\n position: \"absolute\",\n top: 0,\n width: \"100%\",\n zIndex: mergedZIndex,\n };\n let positionLeft = offsetLeft - gapXCenter;\n let positionTop = offsetTop - gapYCenter;\n if (positionLeft > 0) {\n result.left = `${positionLeft}px`;\n result.width = `calc(100% - ${positionLeft}px)`;\n positionLeft = 0;\n }\n if (positionTop > 0) {\n result.top = `${positionTop}px`;\n result.height = `calc(100% - ${positionTop}px)`;\n positionTop = 0;\n }\n result.backgroundPosition = `${positionLeft}px ${positionTop}px`;\n return result;\n }, [gapXCenter, gapYCenter, mergedZIndex, offsetLeft, offsetTop]);\n\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const [subElements, setSubElements] = useState(() => new Set<HTMLElement>());\n const targetElements = useMemo(\n () => [...(container ? [container] : []), ...Array.from(subElements)],\n [container, subElements],\n );\n const getClips = useClips();\n type ClipParameters = Parameters<typeof getClips>;\n const getCachedClips = useSingletonCache<ClipParameters, ReturnType<typeof getClips>>();\n const [watermarkInfo, setWatermarkInfo] = useState<\n readonly [base64: string, width: number] | null\n >(null);\n\n const getMarkSize = useCallback(\n (context: CanvasRenderingContext2D) => {\n let defaultWidth = 120;\n let defaultHeight = 64;\n if (!image && context.measureText) {\n if (contentLines.length > 0) {\n const sizes = contentLines.map((line) => {\n context.font = getCanvasFont(line.font);\n const metrics = context.measureText(line.text);\n const measuredHeight =\n (metrics.fontBoundingBoxAscent || getFontSize(line.font)) +\n (metrics.fontBoundingBoxDescent || 0);\n return [metrics.width, measuredHeight] as const;\n });\n defaultWidth = Math.ceil(Math.max(...sizes.map(([measuredWidth]) => measuredWidth)));\n defaultHeight =\n Math.ceil(sizes.reduce((total, [, measuredHeight]) => total + measuredHeight, 0)) +\n (contentLines.length - 1) * FONT_GAP;\n } else {\n defaultWidth = 0;\n defaultHeight = 0;\n }\n }\n return [width ?? defaultWidth, height ?? defaultHeight] as const;\n },\n [contentLines, height, image, width],\n );\n\n const renderWatermark = useCallback(() => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n if (!context) return;\n const ratio = getPixelRatio();\n const [markWidth, markHeight] = getMarkSize(context);\n\n const drawCanvas = (drawContent: readonly WatermarkContentLine[] | HTMLImageElement) => {\n const parameters: ClipParameters = [\n drawContent,\n rotate,\n ratio,\n markWidth,\n markHeight,\n gapX,\n gapY,\n ];\n const clips = getCachedClips(parameters, () => getClips(...parameters));\n if (clips) setWatermarkInfo([clips[0], clips[1]]);\n };\n\n if (image) {\n const imageElement = new Image();\n imageElement.onload = () => drawCanvas(imageElement);\n imageElement.onerror = () => drawCanvas(contentLines);\n imageElement.crossOrigin = \"anonymous\";\n imageElement.referrerPolicy = \"no-referrer\";\n imageElement.src = image;\n } else {\n drawCanvas(contentLines);\n }\n }, [contentLines, gapX, gapY, getCachedClips, getClips, getMarkSize, image, rotate]);\n\n const syncWatermark = useRafDebounce(renderWatermark);\n const [appendWatermark, removeWatermark, isWatermarkElement] = useWatermarkElement(\n markStyle,\n onRemove,\n );\n\n useEffect(() => {\n if (!watermarkInfo) return;\n for (const target of targetElements)\n appendWatermark(watermarkInfo[0], watermarkInfo[1], target);\n }, [appendWatermark, targetElements, watermarkInfo]);\n\n const onMutate = useEvent((mutations: MutationRecord[]) => {\n for (const mutation of mutations) {\n if (shouldRerender(mutation, isWatermarkElement)) {\n syncWatermark();\n } else if (mutation.target === container && mutation.attributeName === \"style\" && container) {\n for (const key of Object.keys(FIXED_STYLE)) {\n const expected = mergedStyle[key as keyof CSSProperties];\n const current = container.style[key as keyof CSSStyleDeclaration];\n if (expected && String(expected) !== current) {\n (container.style as unknown as Record<string, string>)[key] = String(expected);\n }\n }\n }\n }\n });\n\n useMutateObserver(targetElements, onMutate);\n\n useEffect(() => {\n renderWatermark();\n }, [renderWatermark]);\n\n const watermarkContext = useMemo<WatermarkContextValue>(\n () => ({\n add(element) {\n setSubElements((previous) => {\n const next = new Set(previous);\n next.add(element);\n return getSizeDiff(previous, next);\n });\n },\n remove(element) {\n removeWatermark(element);\n setSubElements((previous) => {\n const next = new Set(previous);\n next.delete(element);\n return getSizeDiff(previous, next);\n });\n },\n }),\n [removeWatermark],\n );\n\n const childNode = inherit ? (\n <WatermarkContext.Provider value={watermarkContext}>{children}</WatermarkContext.Provider>\n ) : (\n children\n );\n\n return (\n <div\n className={cn(\"hj-watermark\", className, rootClassName)}\n ref={setContainer}\n style={mergedStyle}\n >\n {childNode}\n </div>\n );\n}\n",
|
|
33
|
+
"import RcMenu from \"@rc-component/menu\";\nimport type { MenuRef, MenuProps as RcMenuProps } from \"@rc-component/menu\";\nimport type {\n ItemType,\n MenuInfo,\n MenuMode as RcMenuMode,\n SelectInfo,\n} from \"@rc-component/menu/es/interface\";\nimport { useEvent } from \"@rc-component/util\";\nimport type { HTMLAttributes, Key, MouseEvent, ReactNode } from \"react\";\nimport { Children, forwardRef, isValidElement, useEffect, useMemo, useRef, useState } from \"react\";\nimport scrollIntoView from \"scroll-into-view-if-needed\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Icon } from \"./Icon\";\nimport { Affix } from \"./OtherPrimitives\";\nimport type { AffixProps } from \"./OtherPrimitives\";\n\nexport interface AnchorItem {\n readonly children?: readonly AnchorItem[];\n readonly href: string;\n readonly key?: string;\n readonly target?: string;\n readonly targetOffset?: number;\n readonly title: ReactNode;\n}\n\ntype AnchorSlot = \"root\" | \"item\" | \"itemTitle\" | \"indicator\";\n\nexport interface AnchorProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"onClick\"> {\n readonly affix?: boolean | Omit<AffixProps, \"children\" | \"offsetTop\" | \"target\">;\n readonly bounds?: number;\n readonly classNames?: SlotClassNames<AnchorSlot>;\n readonly direction?: \"vertical\" | \"horizontal\";\n readonly getContainer?: () => HTMLElement | Window;\n readonly getCurrentAnchor?: (activeLink: string) => string;\n readonly items?: readonly AnchorItem[];\n readonly offsetTop?: number;\n readonly replace?: boolean;\n readonly rootClassName?: string;\n readonly showInkInFixed?: boolean;\n readonly styles?: SlotStyles<AnchorSlot>;\n readonly targetOffset?: number;\n readonly onClick?: (event: MouseEvent<HTMLAnchorElement>, link: AnchorItem) => void;\n readonly onChange?: (currentActiveLink: string) => void;\n}\n\nexport interface AnchorLinkProps {\n readonly children?: ReactNode;\n readonly href: string;\n readonly target?: string;\n readonly targetOffset?: number;\n readonly title: ReactNode;\n}\n\nfunction AnchorLink(_props: AnchorLinkProps) {\n return null;\n}\n\nfunction convertAnchorChildren(children: ReactNode): AnchorItem[] {\n const items: AnchorItem[] = [];\n for (const child of Children.toArray(children)) {\n if (!isValidElement<AnchorLinkProps>(child) || child.type !== AnchorLink) continue;\n const { children: nestedChildren, ...item } = child.props;\n items.push({\n ...item,\n children: nestedChildren ? convertAnchorChildren(nestedChildren) : undefined,\n });\n }\n return items;\n}\n\nfunction flattenAnchorItems(items: readonly AnchorItem[]) {\n const result: AnchorItem[] = [];\n const collect = (list: readonly AnchorItem[]) => {\n for (const item of list) {\n result.push(item);\n if (item.children) collect(item.children);\n }\n };\n collect(items);\n return result;\n}\n\nfunction getAnchorTarget(href: string) {\n const match = /#([^\\t\\r\\n\\f\\v]+)$/.exec(href);\n if (!match || typeof document === \"undefined\") return null;\n return document.getElementById(decodeURIComponent(match[1]));\n}\n\nfunction getAnchorOffset(element: HTMLElement, container: HTMLElement | Window) {\n const rect = element.getBoundingClientRect();\n return container === window\n ? rect.top - element.ownerDocument.documentElement.clientTop\n : rect.top - (container as HTMLElement).getBoundingClientRect().top;\n}\n\nfunction getScrollTop(container: HTMLElement | Window) {\n return container === window ? window.scrollY : (container as HTMLElement).scrollTop;\n}\n\nfunction InternalAnchor({\n affix = true,\n bounds = 5,\n children,\n className = \"\",\n classNames,\n direction = \"vertical\",\n getContainer,\n getCurrentAnchor,\n items,\n offsetTop,\n onChange,\n onClick,\n replace = false,\n rootClassName,\n showInkInFixed = false,\n style,\n styles,\n targetOffset,\n ...props\n}: AnchorProps) {\n const [activeLink, setActiveLink] = useState(\"\");\n const activeLinkRef = useRef(\"\");\n const wrapperRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLSpanElement>(null);\n const resolvedItems = useMemo(() => items ?? convertAnchorChildren(children), [children, items]);\n const allItems = useMemo(() => flattenAnchorItems(resolvedItems), [resolvedItems]);\n const currentContainer = useEvent(() => getContainer?.() ?? window);\n const setCurrentActiveLink = useEvent((link: string) => {\n if (activeLinkRef.current === link) return;\n const mergedLink = getCurrentAnchor?.(link) ?? link;\n activeLinkRef.current = mergedLink;\n setActiveLink(mergedLink);\n onChange?.(link);\n });\n const handleScroll = useEvent(() => {\n const container = currentContainer();\n let current = \"\";\n let currentTop = Number.NEGATIVE_INFINITY;\n for (const item of allItems) {\n const target = getAnchorTarget(item.href);\n if (target) {\n const top = getAnchorOffset(target, container);\n const itemOffset = item.targetOffset ?? targetOffset ?? offsetTop ?? 0;\n if (top <= itemOffset + bounds && top > currentTop) {\n current = item.href;\n currentTop = top;\n }\n }\n }\n setCurrentActiveLink(current);\n });\n\n useEffect(() => {\n const container = currentContainer();\n handleScroll();\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => container.removeEventListener(\"scroll\", handleScroll);\n }, [currentContainer, handleScroll]);\n\n useEffect(() => {\n if (!activeLink) return;\n const activeNode = wrapperRef.current?.querySelector<HTMLElement>(\n \".hj-anchor-link-title-active\",\n );\n const indicator = indicatorRef.current;\n if (!activeNode || !indicator) return;\n if (direction === \"horizontal\") {\n indicator.style.left = `${activeNode.offsetLeft}px`;\n indicator.style.width = `${activeNode.clientWidth}px`;\n indicator.style.top = \"\";\n indicator.style.height = \"\";\n scrollIntoView(activeNode, { block: \"nearest\", inline: \"nearest\", scrollMode: \"if-needed\" });\n } else {\n indicator.style.top = `${activeNode.offsetTop}px`;\n indicator.style.height = `${activeNode.clientHeight}px`;\n indicator.style.left = \"\";\n indicator.style.width = \"\";\n }\n }, [activeLink, direction]);\n\n const scrollToItem = (item: AnchorItem) => {\n const target = getAnchorTarget(item.href);\n if (!target) return;\n const container = currentContainer();\n const nextTop =\n getScrollTop(container) +\n getAnchorOffset(target, container) -\n (item.targetOffset ?? targetOffset ?? offsetTop ?? 0);\n container.scrollTo({ top: nextTop, behavior: \"smooth\" });\n setCurrentActiveLink(item.href);\n };\n const renderItems = (list: readonly AnchorItem[], depth = 0): ReactNode =>\n list.map((item) => {\n const active = activeLink === item.href;\n return (\n <div\n className={slotClass(\n classNames,\n \"item\",\n \"hj-anchor-link\",\n active && \"hj-anchor-link-active\",\n )}\n key={item.key ?? item.href}\n style={slotStyle(styles, \"item\", depth ? { paddingInlineStart: 16 } : undefined)}\n >\n <a\n className={slotClass(\n classNames,\n \"itemTitle\",\n \"hj-anchor-link-title\",\n active && \"hj-anchor-link-title-active\",\n )}\n href={item.href}\n style={slotStyle(styles, \"itemTitle\")}\n target={item.target}\n title={typeof item.title === \"string\" ? item.title : undefined}\n onClick={(event) => {\n onClick?.(event, item);\n scrollToItem(item);\n if (event.defaultPrevented) return;\n if (/^https?:\\/\\//.test(item.href)) {\n if (replace) {\n event.preventDefault();\n window.location.replace(item.href);\n }\n return;\n }\n event.preventDefault();\n window.history[replace ? \"replaceState\" : \"pushState\"](null, \"\", item.href);\n }}\n >\n {item.title}\n </a>\n {direction === \"vertical\" && item.children?.length\n ? renderItems(item.children, depth + 1)\n : null}\n </div>\n );\n });\n const content = (\n <div\n {...props}\n className={cn(\n \"hj-anchor-wrapper\",\n direction === \"horizontal\" && \"hj-anchor-wrapper-horizontal\",\n rootClassName,\n slotClass(classNames, \"root\"),\n className,\n )}\n ref={wrapperRef}\n style={slotStyle(styles, \"root\", {\n maxHeight: offsetTop ? `calc(100vh - ${offsetTop}px)` : \"100vh\",\n ...style,\n })}\n >\n <nav className={cn(\"hj-anchor\", !affix && !showInkInFixed && \"hj-anchor-fixed\")}>\n <span\n className={slotClass(\n classNames,\n \"indicator\",\n \"hj-anchor-ink\",\n activeLink && \"hj-anchor-ink-visible\",\n )}\n ref={indicatorRef}\n style={slotStyle(styles, \"indicator\")}\n />\n {renderItems(resolvedItems)}\n </nav>\n </div>\n );\n const affixProps = typeof affix === \"object\" ? affix : undefined;\n return affix ? (\n <Affix offsetTop={offsetTop} target={currentContainer} {...affixProps}>\n {content}\n </Affix>\n ) : (\n content\n );\n}\n\nexport const Anchor = Object.assign(InternalAnchor, { Link: AnchorLink });\n\nexport type MenuMode = RcMenuMode;\n\nexport interface MenuItem {\n readonly children?: readonly MenuItem[];\n readonly className?: string;\n readonly danger?: boolean;\n readonly disabled?: boolean;\n readonly extra?: ReactNode;\n readonly icon?: ReactNode;\n readonly itemIcon?: ReactNode;\n readonly key?: Key;\n readonly label?: ReactNode;\n readonly style?: React.CSSProperties;\n readonly type?: \"item\" | \"submenu\" | \"group\" | \"divider\";\n}\n\nexport interface MenuProps\n extends Omit<\n RcMenuProps,\n | \"defaultOpenKeys\"\n | \"defaultSelectedKeys\"\n | \"items\"\n | \"onClick\"\n | \"onSelect\"\n | \"openKeys\"\n | \"prefixCls\"\n | \"selectedKeys\"\n > {\n readonly defaultOpenKeys?: readonly string[];\n readonly defaultSelectedKeys?: readonly string[];\n readonly items?: readonly (MenuItem | null)[];\n readonly openKeys?: readonly string[];\n readonly selectedKeys?: readonly string[];\n readonly onClick?: (info: MenuInfo) => void;\n readonly onSelect?: (info: SelectInfo) => void;\n}\n\nfunction mapMenuItems(items: readonly (MenuItem | null)[]): ItemType[] {\n return items.map((item) => {\n if (!item) return null;\n const itemClassName = cn(item.className, item.danger && \"hj-menu-item-danger\");\n if (item.type === \"divider\") {\n return { type: \"divider\", className: itemClassName, style: item.style };\n }\n if (item.type === \"group\") {\n return {\n type: \"group\",\n className: itemClassName,\n label: item.label,\n children: item.children ? mapMenuItems(item.children) : undefined,\n style: item.style,\n };\n }\n if (item.children?.length) {\n return {\n type: \"submenu\",\n key: String(item.key),\n label: item.label,\n disabled: item.disabled,\n className: itemClassName,\n children: mapMenuItems(item.children),\n itemIcon: item.itemIcon ?? item.icon,\n style: item.style,\n };\n }\n return {\n type: \"item\",\n key: item.key ?? \"\",\n label: item.label,\n disabled: item.disabled,\n className: itemClassName,\n extra: item.extra,\n itemIcon: item.itemIcon ?? item.icon,\n style: item.style,\n };\n });\n}\n\nconst InternalMenu = forwardRef<MenuRef, MenuProps>(function Menu(\n {\n className = \"\",\n defaultOpenKeys,\n defaultSelectedKeys,\n expandIcon,\n items,\n openKeys,\n selectedKeys,\n ...props\n },\n ref,\n) {\n const rcItems = useMemo(() => (items ? mapMenuItems(items) : undefined), [items]);\n return (\n <RcMenu\n {...props}\n className={cn(\"hj-menu-root\", className)}\n defaultOpenKeys={defaultOpenKeys ? [...defaultOpenKeys] : undefined}\n defaultSelectedKeys={defaultSelectedKeys ? [...defaultSelectedKeys] : undefined}\n expandIcon={expandIcon ?? <Icon name=\"chevron-down\" size={16} />}\n items={rcItems}\n openKeys={openKeys ? [...openKeys] : undefined}\n prefixCls=\"hj-menu\"\n ref={ref}\n selectedKeys={selectedKeys ? [...selectedKeys] : undefined}\n />\n );\n});\n\nexport const Menu = Object.assign(InternalMenu, {\n Divider: RcMenu.Divider,\n Item: RcMenu.Item,\n ItemGroup: RcMenu.ItemGroup,\n SubMenu: RcMenu.SubMenu,\n});\n",
|
|
34
|
+
"import { toArray } from \"@rc-component/util\";\nimport type { CSSProperties, ElementType, HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport {\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DirectionType, Variant } from \"../ConfigProvider\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Icon } from \"./Icon\";\n\nexport type NativeGapSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type LegacyGapSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type GapSize = NativeGapSize | LegacyGapSize | NonNullable<CSSProperties[\"gap\"]>;\nexport type Orientation = \"horizontal\" | \"vertical\";\n\ntype SemanticConfig<Slot extends string, Value, Props> =\n | Partial<Record<Slot, Value>>\n | ((info: { readonly props: Props }) => Partial<Record<Slot, Value>>);\n\nfunction resolveSemanticConfig<Slot extends string, Value, Props>(\n config: SemanticConfig<Slot, Value, Props> | undefined,\n props: Props,\n): Partial<Record<Slot, Value>> {\n if (typeof config === \"function\") return config({ props });\n return config ?? {};\n}\n\nfunction resolveGap(gap: GapSize): CSSProperties[\"gap\"] {\n switch (gap) {\n case \"small\":\n return \"var(--hj-spacing-sm)\";\n case \"medium\":\n case \"middle\":\n return \"var(--hj-spacing-md)\";\n case \"large\":\n return \"var(--hj-spacing-lg)\";\n case \"xs\":\n case \"sm\":\n case \"md\":\n case \"lg\":\n case \"xl\":\n return `var(--hj-spacing-${gap})`;\n default:\n return gap;\n }\n}\n\nfunction resolveOrientation(\n orientation: Orientation | undefined,\n vertical: boolean | undefined,\n legacyDirection?: Orientation,\n): Orientation {\n if (orientation) return orientation;\n if (typeof vertical === \"boolean\") return vertical ? \"vertical\" : \"horizontal\";\n return legacyDirection ?? \"horizontal\";\n}\n\nexport interface FlexProps extends HTMLAttributes<HTMLElement> {\n readonly align?: CSSProperties[\"alignItems\"];\n readonly component?: ElementType;\n readonly flex?: CSSProperties[\"flex\"];\n readonly gap?: GapSize;\n readonly justify?: CSSProperties[\"justifyContent\"];\n readonly orientation?: Orientation;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n readonly vertical?: boolean;\n readonly wrap?: boolean | CSSProperties[\"flexWrap\"];\n}\n\nexport const Flex = forwardRef<HTMLElement, FlexProps>(function Flex(\n {\n align,\n children,\n className = \"\",\n component: Component = \"div\",\n flex,\n gap,\n justify,\n orientation,\n prefixCls = \"hj-flex\",\n rootClassName,\n style,\n vertical,\n wrap = false,\n ...props\n },\n ref,\n) {\n const mergedOrientation = resolveOrientation(orientation, vertical);\n const mergedStyle: CSSProperties = {\n alignItems: align,\n flexWrap: wrap === true ? \"wrap\" : wrap || undefined,\n justifyContent: justify,\n ...style,\n };\n\n if (flex !== undefined) mergedStyle.flex = flex;\n if (gap !== undefined) mergedStyle.gap = resolveGap(gap);\n\n return (\n <Component\n className={cn(\n prefixCls,\n \"flex min-w-0\",\n mergedOrientation === \"vertical\" && \"flex-col\",\n rootClassName,\n className,\n )}\n ref={ref}\n style={mergedStyle}\n {...props}\n >\n {children}\n </Component>\n );\n});\n\nexport interface SpaceProps extends HTMLAttributes<HTMLDivElement> {\n readonly align?: CSSProperties[\"alignItems\"];\n readonly classNames?: SpaceClassNames;\n readonly direction?: Orientation;\n readonly orientation?: Orientation;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n readonly separator?: ReactNode;\n readonly size?: GapSize | readonly [GapSize, GapSize];\n readonly split?: ReactNode;\n readonly styles?: SpaceStyles;\n readonly vertical?: boolean;\n readonly wrap?: boolean;\n}\n\nexport type SpaceSemanticSlot = \"root\" | \"item\" | \"separator\";\nexport type SpaceClassNames = SemanticConfig<SpaceSemanticSlot, string, SpaceProps>;\nexport type SpaceStyles = SemanticConfig<SpaceSemanticSlot, CSSProperties, SpaceProps>;\n\nfunction isReactRenderable(node: ReactNode): boolean {\n return node !== undefined && node !== null && node !== false && node !== \"\";\n}\n\nfunction getNodeKey(node: ReactNode, index: number, prefixCls: string) {\n return isValidElement(node) && node.key !== null ? node.key : `${prefixCls}-item-${index}`;\n}\n\nconst InternalSpace = forwardRef<HTMLDivElement, SpaceProps>(function Space(spaceProps, ref) {\n const {\n align,\n children,\n className = \"\",\n classNames,\n direction,\n orientation,\n prefixCls = \"hj-space\",\n rootClassName,\n separator,\n size = \"small\",\n split,\n style,\n styles,\n vertical,\n wrap = false,\n ...props\n } = spaceProps;\n const mergedOrientation = resolveOrientation(orientation, vertical, direction);\n const mergedAlign = align === undefined && mergedOrientation === \"horizontal\" ? \"center\" : align;\n const mergedSeparator = separator ?? split;\n const [horizontalSize, verticalSize] = Array.isArray(size) ? size : [size, size];\n const childNodes = (toArray(children, { keepEmpty: true }) as ReactNode[]).filter(\n isReactRenderable,\n );\n const semanticProps: SpaceProps = {\n ...spaceProps,\n align: mergedAlign,\n orientation: mergedOrientation,\n size,\n };\n const mergedClassNames = resolveSemanticConfig(classNames, semanticProps);\n const mergedStyles = resolveSemanticConfig(styles, semanticProps);\n\n if (childNodes.length === 0) return null;\n\n return (\n <div\n className={cn(\n prefixCls,\n \"inline-flex min-w-0\",\n mergedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n wrap && \"flex-wrap\",\n mergedClassNames.root,\n rootClassName,\n className,\n )}\n ref={ref}\n style={{\n alignItems: mergedAlign,\n columnGap: resolveGap(horizontalSize),\n rowGap: resolveGap(verticalSize),\n ...mergedStyles.root,\n ...style,\n }}\n {...props}\n >\n {childNodes.map((child, index) => (\n <SpaceItem\n index={index}\n key={getNodeKey(child, index, prefixCls)}\n latestIndex={childNodes.length - 1}\n itemClassName={mergedClassNames.item}\n itemStyle={mergedStyles.item}\n prefixCls={prefixCls}\n separator={mergedSeparator}\n separatorClassName={mergedClassNames.separator}\n separatorStyle={mergedStyles.separator}\n >\n {child}\n </SpaceItem>\n ))}\n </div>\n );\n});\n\ninterface SpaceItemProps {\n readonly children: ReactNode;\n readonly index: number;\n readonly itemClassName?: string;\n readonly itemStyle?: CSSProperties;\n readonly latestIndex: number;\n readonly prefixCls: string;\n readonly separator?: ReactNode;\n readonly separatorClassName?: string;\n readonly separatorStyle?: CSSProperties;\n}\n\nfunction SpaceItem({\n children,\n index,\n itemClassName,\n itemStyle,\n latestIndex,\n prefixCls,\n separator,\n separatorClassName,\n separatorStyle,\n}: SpaceItemProps) {\n return (\n <>\n <div className={cn(`${prefixCls}-item`, itemClassName)} style={itemStyle}>\n {children}\n </div>\n {index < latestIndex && separator ? (\n <span\n className={cn(\n `${prefixCls}-item-separator`,\n \"inline-flex shrink-0 items-center text-[var(--hj-color-web-muted)]\",\n separatorClassName,\n )}\n style={separatorStyle}\n >\n {separator}\n </span>\n ) : null}\n </>\n );\n}\n\nexport type SpaceCompactSize = NativeGapSize | \"sm\" | \"md\" | \"lg\";\n\nexport interface SpaceCompactItemContextValue {\n readonly compactDirection?: Orientation;\n readonly compactSize?: SpaceCompactSize;\n readonly isFirstItem?: boolean;\n readonly isLastItem?: boolean;\n}\n\nexport const SpaceCompactItemContext = createContext<SpaceCompactItemContextValue | null>(null);\n\nexport function useCompactItemContext(prefixCls: string, direction?: DirectionType) {\n const compactItemContext = useContext(SpaceCompactItemContext);\n const compactItemClassnames = useMemo(() => {\n if (!compactItemContext) return \"\";\n\n const { compactDirection, isFirstItem, isLastItem } = compactItemContext;\n const separator = compactDirection === \"vertical\" ? \"-vertical-\" : \"-\";\n\n return cn(\n `${prefixCls}-compact${separator}item`,\n isFirstItem && `${prefixCls}-compact${separator}first-item`,\n isLastItem && `${prefixCls}-compact${separator}last-item`,\n direction === \"rtl\" && `${prefixCls}-compact${separator}item-rtl`,\n );\n }, [compactItemContext, direction, prefixCls]);\n\n return {\n compactDirection: compactItemContext?.compactDirection,\n compactItemClassnames,\n compactSize: compactItemContext?.compactSize,\n };\n}\n\nexport function NoCompactStyle({ children }: Readonly<{ children?: ReactNode }>) {\n return (\n <SpaceCompactItemContext.Provider value={null}>{children}</SpaceCompactItemContext.Provider>\n );\n}\n\nexport type SpaceAddonStatus = \"\" | \"error\" | \"success\" | \"validating\" | \"warning\";\n\nexport interface SpaceAddonProps extends HTMLAttributes<HTMLDivElement> {\n readonly children: ReactNode;\n readonly disabled?: boolean;\n readonly prefixCls?: string;\n readonly status?: SpaceAddonStatus;\n readonly variant?: Variant;\n}\n\nexport type SpaceCompactCellProps = SpaceAddonProps;\n\nconst compactAddonSizeClass: Record<NativeGapSize, string> = {\n large:\n \"min-h-[var(--hj-input-height-lg)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)]\",\n medium:\n \"min-h-[var(--hj-input-height-md)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)]\",\n middle:\n \"min-h-[var(--hj-input-height-md)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)]\",\n small:\n \"min-h-[var(--hj-input-height-sm)] px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)]\",\n};\n\nconst addonVariantClass: Record<Variant, string> = {\n borderless: \"border-transparent bg-transparent\",\n filled: \"border-transparent bg-[var(--hj-input-bg-active)]\",\n outlined: \"border-[var(--hj-input-border)] bg-[var(--hj-input-addon-bg)]\",\n underlined: \"rounded-none border-x-transparent border-t-transparent bg-transparent\",\n};\n\nexport const SpaceAddon = forwardRef<HTMLDivElement, SpaceAddonProps>(function SpaceAddon(\n {\n children,\n className,\n disabled,\n prefixCls: customizePrefixCls,\n status,\n style,\n variant = \"outlined\",\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const prefixCls = config.getPrefixCls(\"space-addon\", customizePrefixCls);\n const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, config.direction);\n const mergedCompactSize = compactSize ? normalizeCompactSize(compactSize) : undefined;\n\n return (\n <div\n className={cn(\n prefixCls,\n compactItemClassnames,\n `${prefixCls}-variant-${variant}`,\n status && `${prefixCls}-status-${status}`,\n disabled && `${prefixCls}-disabled`,\n mergedCompactSize && `${prefixCls}-${mergedCompactSize}`,\n \"m-0 inline-flex shrink-0 items-center gap-0 whitespace-nowrap rounded-[var(--hj-input-radius)] border border-solid text-[var(--hj-input-addon-fg)]\",\n addonVariantClass[variant],\n mergedCompactSize && compactAddonSizeClass[mergedCompactSize],\n disabled && \"cursor-not-allowed opacity-50\",\n status === \"error\" && \"border-[var(--hj-color-danger)] text-[var(--hj-color-danger)]\",\n status === \"warning\" && \"border-[var(--hj-color-warning)] text-[var(--hj-color-warning)]\",\n status === \"success\" && \"border-[var(--hj-color-success)] text-[var(--hj-color-success)]\",\n className,\n )}\n ref={ref}\n style={style}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nexport interface SpaceCompactProps extends HTMLAttributes<HTMLDivElement> {\n readonly block?: boolean;\n readonly direction?: Orientation;\n readonly orientation?: Orientation;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n readonly size?: SpaceCompactSize;\n readonly vertical?: boolean;\n}\n\nfunction normalizeCompactSize(size: SpaceCompactSize): NativeGapSize {\n if (size === \"sm\") return \"small\";\n if (size === \"md\") return \"medium\";\n if (size === \"lg\") return \"large\";\n return size;\n}\n\ninterface CompactItemProps extends SpaceCompactItemContextValue {\n readonly children: ReactNode;\n}\n\nfunction CompactItem({\n children,\n compactDirection,\n compactSize,\n isFirstItem,\n isLastItem,\n}: CompactItemProps) {\n const contextValue = useMemo<SpaceCompactItemContextValue>(\n () => ({ compactDirection, compactSize, isFirstItem, isLastItem }),\n [compactDirection, compactSize, isFirstItem, isLastItem],\n );\n\n return (\n <SpaceCompactItemContext.Provider value={contextValue}>\n {children}\n </SpaceCompactItemContext.Provider>\n );\n}\n\nexport const SpaceCompact = forwardRef<HTMLDivElement, SpaceCompactProps>(function SpaceCompact(\n {\n block,\n children,\n className = \"\",\n direction,\n orientation,\n prefixCls: customizePrefixCls,\n rootClassName,\n size,\n vertical,\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const mergedOrientation = resolveOrientation(orientation, vertical, direction);\n const mergedSize = size ?? config.componentSize;\n const prefixCls = config.getPrefixCls(\"space-compact\", customizePrefixCls);\n const parentCompactItemContext = useContext(SpaceCompactItemContext);\n const childNodes = toArray(children);\n\n if (childNodes.length === 0) return null;\n\n return (\n <div\n className={cn(\n prefixCls,\n `${prefixCls}-${mergedSize}`,\n block ? \"flex w-full\" : \"inline-flex\",\n mergedOrientation === \"vertical\"\n ? \"flex-col [&>*:not(:first-child)]:-mt-px [&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:rounded-b-none\"\n : \"flex-row [&>*:not(:first-child)]:-ms-px [&>*:not(:first-child)]:rounded-s-none [&>*:not(:last-child)]:rounded-e-none\",\n rootClassName,\n className,\n )}\n ref={ref}\n {...props}\n >\n {childNodes.map((child, index) => (\n <CompactItem\n compactDirection={mergedOrientation}\n compactSize={mergedSize}\n isFirstItem={\n index === 0 && (!parentCompactItemContext || parentCompactItemContext.isFirstItem)\n }\n isLastItem={\n index === childNodes.length - 1 &&\n (!parentCompactItemContext || parentCompactItemContext.isLastItem)\n }\n key={getNodeKey(child, index, prefixCls)}\n >\n {child}\n </CompactItem>\n ))}\n </div>\n );\n});\n\nexport const Space = Object.assign(InternalSpace, {\n Addon: SpaceAddon,\n Compact: SpaceCompact,\n});\n\ninterface LayoutContextValue {\n readonly addSider: (id: string) => void;\n readonly removeSider: (id: string) => void;\n}\n\nconst emptyLayoutContext: LayoutContextValue = {\n addSider: () => undefined,\n removeSider: () => undefined,\n};\n\nconst LayoutContext = createContext<LayoutContextValue>(emptyLayoutContext);\n\nexport interface LayoutProps extends HTMLAttributes<HTMLDivElement> {\n readonly hasSider?: boolean;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n}\n\nconst LayoutRoot = forwardRef<HTMLDivElement, LayoutProps>(function Layout(\n { children, className = \"\", hasSider, prefixCls = \"hj-layout\", rootClassName, ...props },\n ref,\n) {\n const [siders, setSiders] = useState<readonly string[]>([]);\n const contextValue = useMemo<LayoutContextValue>(\n () => ({\n addSider: (id) => {\n setSiders((current) => (current.includes(id) ? current : [...current, id]));\n },\n removeSider: (id) => {\n setSiders((current) => current.filter((currentId) => currentId !== id));\n },\n }),\n [],\n );\n const hasSiderChild = (toArray(children) as ReactElement[]).some(\n (child) => child.type === LayoutSider,\n );\n const mergedHasSider = hasSider ?? (siders.length > 0 || hasSiderChild);\n\n return (\n <LayoutContext.Provider value={contextValue}>\n <div\n className={cn(\n prefixCls,\n \"flex min-h-0 min-w-0 bg-[var(--hj-color-web-page)] text-[var(--hj-color-web-foreground)]\",\n mergedHasSider ? \"flex-row\" : \"flex-col\",\n mergedHasSider && `${prefixCls}-has-sider`,\n rootClassName,\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </LayoutContext.Provider>\n );\n});\n\ninterface BasicLayoutSectionProps extends HTMLAttributes<HTMLElement> {\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n}\n\nexport type LayoutHeaderProps = BasicLayoutSectionProps;\nexport type LayoutFooterProps = BasicLayoutSectionProps;\nexport type LayoutContentProps = BasicLayoutSectionProps;\n\nexport const LayoutHeader = forwardRef<HTMLElement, LayoutHeaderProps>(function LayoutHeader(\n { className = \"\", prefixCls = \"hj-layout-header\", rootClassName, ...props },\n ref,\n) {\n return (\n <header\n className={cn(\n prefixCls,\n \"shrink-0 bg-[var(--hj-color-web-bg)] px-6 py-4\",\n rootClassName,\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\n\nexport const LayoutFooter = forwardRef<HTMLElement, LayoutFooterProps>(function LayoutFooter(\n { className = \"\", prefixCls = \"hj-layout-footer\", rootClassName, ...props },\n ref,\n) {\n return (\n <footer\n className={cn(\n prefixCls,\n \"shrink-0 bg-[var(--hj-color-web-bg)] px-6 py-4 text-[var(--hj-color-web-muted)]\",\n rootClassName,\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\n\nexport const LayoutContent = forwardRef<HTMLElement, LayoutContentProps>(function LayoutContent(\n { className = \"\", prefixCls = \"hj-layout-content\", rootClassName, ...props },\n ref,\n) {\n return (\n <main\n className={cn(prefixCls, \"min-h-0 min-w-0 flex-1\", rootClassName, className)}\n ref={ref}\n {...props}\n />\n );\n});\n\nexport type Breakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"xxxl\";\nexport type CollapseType = \"clickTrigger\" | \"responsive\";\nexport type SiderTheme = \"light\" | \"dark\";\n\nconst siderBreakpointMax: Record<Breakpoint, string> = {\n xs: \"479.98px\",\n sm: \"575.98px\",\n md: \"767.98px\",\n lg: \"991.98px\",\n xl: \"1199.98px\",\n xxl: \"1599.98px\",\n xxxl: \"1839.98px\",\n};\n\nexport interface SiderContextValue {\n readonly siderCollapsed?: boolean;\n}\n\nexport const SiderContext = createContext<SiderContextValue>({});\n\nexport interface SiderProps extends HTMLAttributes<HTMLElement> {\n readonly breakpoint?: Breakpoint;\n readonly classNames?: SiderClassNames;\n readonly collapsible?: boolean;\n readonly collapsed?: boolean;\n readonly collapsedWidth?: number | string;\n readonly defaultCollapsed?: boolean;\n readonly onBreakpoint?: (broken: boolean) => void;\n readonly onCollapse?: (collapsed: boolean, type: CollapseType) => void;\n readonly prefixCls?: string;\n readonly reverseArrow?: boolean;\n readonly rootClassName?: string;\n readonly styles?: SiderStyles;\n readonly theme?: SiderTheme;\n readonly trigger?: ReactNode;\n readonly width?: number | string;\n readonly zeroWidthTriggerStyle?: CSSProperties;\n}\n\nexport type SiderSemanticSlot = \"root\" | \"body\";\nexport type SiderClassNames = SemanticConfig<SiderSemanticSlot, string, SiderProps>;\nexport type SiderStyles = SemanticConfig<SiderSemanticSlot, CSSProperties, SiderProps>;\n\nfunction normalizeSiderWidth(width: number | string): string {\n const numericWidth = Number(width);\n return Number.isFinite(numericWidth) ? `${numericWidth}px` : String(width);\n}\n\nfunction isZeroWidth(width: number | string): boolean {\n return Number.parseFloat(String(width || 0)) === 0;\n}\n\nconst LayoutSider = forwardRef<HTMLElement, SiderProps>(function LayoutSider(props, ref) {\n const {\n breakpoint,\n children,\n className = \"\",\n classNames,\n collapsible = false,\n collapsed: controlledCollapsed,\n collapsedWidth = 80,\n defaultCollapsed = false,\n onBreakpoint,\n onCollapse,\n prefixCls = \"hj-layout-sider\",\n reverseArrow = false,\n rootClassName,\n style,\n styles,\n theme = \"dark\",\n trigger,\n width = 200,\n zeroWidthTriggerStyle,\n ...otherProps\n } = props;\n const isControlled = Object.prototype.hasOwnProperty.call(props, \"collapsed\");\n const [innerCollapsed, setInnerCollapsed] = useState(defaultCollapsed);\n const [below, setBelow] = useState(false);\n const mergedCollapsed = isControlled ? Boolean(controlledCollapsed) : innerCollapsed;\n const collapsedRef = useRef(mergedCollapsed);\n const onBreakpointRef = useRef(onBreakpoint);\n const onCollapseRef = useRef(onCollapse);\n const layoutContext = useContext(LayoutContext);\n const siderId = useId();\n\n collapsedRef.current = mergedCollapsed;\n onBreakpointRef.current = onBreakpoint;\n onCollapseRef.current = onCollapse;\n\n const semanticProps: SiderProps = {\n ...props,\n collapsed: mergedCollapsed,\n collapsedWidth,\n collapsible,\n defaultCollapsed,\n reverseArrow,\n theme,\n width,\n };\n const mergedClassNames = resolveSemanticConfig(classNames, semanticProps);\n const mergedStyles = resolveSemanticConfig(styles, semanticProps);\n\n const setCollapsed = useCallback(\n (nextCollapsed: boolean, type: CollapseType) => {\n if (!isControlled) setInnerCollapsed(nextCollapsed);\n onCollapseRef.current?.(nextCollapsed, type);\n },\n [isControlled],\n );\n\n useEffect(() => {\n layoutContext.addSider(siderId);\n return () => layoutContext.removeSider(siderId);\n }, [layoutContext, siderId]);\n\n useEffect(() => {\n if (!breakpoint || typeof window === \"undefined\" || !window.matchMedia) return;\n\n const mediaQuery = window.matchMedia(\n `screen and (max-width: ${siderBreakpointMax[breakpoint]})`,\n );\n const responsiveHandler = (event: MediaQueryListEvent | MediaQueryList) => {\n setBelow(event.matches);\n onBreakpointRef.current?.(event.matches);\n if (collapsedRef.current !== event.matches) {\n setCollapsed(event.matches, \"responsive\");\n }\n };\n\n if (typeof mediaQuery.addEventListener === \"function\") {\n mediaQuery.addEventListener(\"change\", responsiveHandler);\n } else if (typeof mediaQuery.addListener === \"function\") {\n mediaQuery.addListener(responsiveHandler);\n }\n responsiveHandler(mediaQuery);\n\n return () => {\n if (typeof mediaQuery.removeEventListener === \"function\") {\n mediaQuery.removeEventListener(\"change\", responsiveHandler);\n } else if (typeof mediaQuery.removeListener === \"function\") {\n mediaQuery.removeListener(responsiveHandler);\n }\n };\n }, [breakpoint, setCollapsed]);\n\n const siderWidth = normalizeSiderWidth(mergedCollapsed ? collapsedWidth : width);\n const zeroWidth = isZeroWidth(mergedCollapsed ? collapsedWidth : width);\n const hasZeroWidthTrigger = isZeroWidth(collapsedWidth);\n const toggle = () => setCollapsed(!mergedCollapsed, \"clickTrigger\");\n const reverseIcon = reverseArrow;\n const defaultTrigger = (\n <Icon\n className={cn(\n \"transition-transform duration-[var(--hj-motion-duration-normal)]\",\n (mergedCollapsed ? reverseIcon : !reverseIcon) && \"rotate-180\",\n )}\n name=\"chevron-right\"\n size={18}\n />\n );\n const zeroTrigger = hasZeroWidthTrigger ? (\n <button\n aria-label={mergedCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className={cn(\n `${prefixCls}-zero-width-trigger`,\n `${prefixCls}-zero-width-trigger-${reverseArrow ? \"right\" : \"left\"}`,\n \"absolute top-16 z-10 flex h-10 w-10 items-center justify-center border-0 bg-[var(--hj-color-web-bg)] text-[var(--hj-color-web-foreground)]\",\n )}\n onClick={toggle}\n style={{\n borderRadius: reverseArrow\n ? \"var(--hj-radius-md) 0 0 var(--hj-radius-md)\"\n : \"0 var(--hj-radius-md) var(--hj-radius-md) 0\",\n insetInlineEnd: reverseArrow ? undefined : -40,\n insetInlineStart: reverseArrow ? -40 : undefined,\n ...zeroWidthTriggerStyle,\n }}\n type=\"button\"\n >\n {trigger || (\n <span aria-hidden=\"true\" className=\"flex w-4 flex-col gap-1\">\n <span className=\"h-px w-full bg-current\" />\n <span className=\"h-px w-full bg-current\" />\n <span className=\"h-px w-full bg-current\" />\n </span>\n )}\n </button>\n ) : null;\n const triggerNode =\n trigger === null\n ? null\n : (zeroTrigger ?? (\n <button\n aria-label={mergedCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className={cn(\n `${prefixCls}-trigger`,\n \"absolute inset-x-0 bottom-0 flex h-10 items-center justify-center border-0 bg-[var(--hj-color-web-surface)] text-[var(--hj-color-web-muted)]\",\n )}\n onClick={toggle}\n style={{ width: siderWidth }}\n type=\"button\"\n >\n {trigger || defaultTrigger}\n </button>\n ));\n const contextValue = useMemo<SiderContextValue>(\n () => ({ siderCollapsed: mergedCollapsed }),\n [mergedCollapsed],\n );\n\n return (\n <SiderContext.Provider value={contextValue}>\n <aside\n className={cn(\n prefixCls,\n `${prefixCls}-${theme}`,\n \"relative min-h-0 shrink-0 bg-[var(--hj-color-web-bg)] transition-[width] duration-[var(--hj-motion-duration-normal)]\",\n mergedCollapsed && `${prefixCls}-collapsed`,\n collapsible && trigger !== null && !hasZeroWidthTrigger && `${prefixCls}-has-trigger`,\n below && `${prefixCls}-below`,\n zeroWidth && `${prefixCls}-zero-width`,\n collapsible && trigger !== null && !hasZeroWidthTrigger && \"pb-10\",\n mergedClassNames.root,\n rootClassName,\n className,\n )}\n ref={ref}\n style={{\n ...mergedStyles.root,\n ...style,\n flex: `0 0 ${siderWidth}`,\n maxWidth: siderWidth,\n minWidth: siderWidth,\n width: siderWidth,\n }}\n {...otherProps}\n >\n <div\n className={cn(\n `${prefixCls}-children`,\n \"h-full\",\n zeroWidth && \"overflow-hidden\",\n mergedClassNames.body,\n )}\n style={mergedStyles.body}\n >\n {children}\n </div>\n {collapsible || (below && zeroTrigger) ? triggerNode : null}\n </aside>\n </SiderContext.Provider>\n );\n});\n\nexport const Layout = Object.assign(LayoutRoot, {\n Content: LayoutContent,\n Footer: LayoutFooter,\n Header: LayoutHeader,\n Sider: LayoutSider,\n _InternalSiderContext: SiderContext,\n});\n",
|
|
35
|
+
"import ResizeObserver from \"@rc-component/resize-observer\";\nimport { useEvent } from \"@rc-component/util\";\nimport type { ForwardedRef, ReactNode } from \"react\";\nimport { Fragment, forwardRef, useId, useMemo, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { InternalPanel, SplitterPanel } from \"./splitter/Panel\";\nimport { SplitBar } from \"./splitter/SplitBar\";\nimport type { SplitterOrientation, SplitterPanelProps, SplitterProps } from \"./splitter/interface\";\nimport { useItems } from \"./splitter/useItems\";\nimport { useResizable } from \"./splitter/useResizable\";\nimport { useResize } from \"./splitter/useResize\";\nimport { useSizes } from \"./splitter/useSizes\";\n\nexport type {\n ShowCollapsibleIconMode,\n SplitterClassNames,\n SplitterDraggerClassName,\n SplitterDraggerStyle,\n SplitterOrientation,\n SplitterPanelProps,\n SplitterProps,\n SplitterStyles,\n} from \"./splitter/interface\";\n\nfunction resolveOrientation(\n orientation: SplitterOrientation | undefined,\n vertical: boolean | undefined,\n layout: SplitterOrientation | undefined,\n) {\n return orientation ?? layout ?? (vertical ? \"vertical\" : \"horizontal\");\n}\n\nfunction legacyPercent(value: number) {\n return `${Math.max(0, Math.min(100, value))}%`;\n}\n\nfunction legacyChildren(\n panels: readonly [ReactNode, ReactNode],\n defaultSize: number,\n min: number,\n max: number,\n) {\n return (\n <>\n <SplitterPanel\n defaultSize={legacyPercent(defaultSize)}\n max={legacyPercent(max)}\n min={legacyPercent(min)}\n >\n {panels[0]}\n </SplitterPanel>\n <SplitterPanel max={legacyPercent(100 - min)} min={legacyPercent(100 - max)}>\n {panels[1]}\n </SplitterPanel>\n </>\n );\n}\n\nfunction InternalSplitter(\n {\n children,\n className,\n classNames,\n collapsible,\n collapsibleIcon,\n defaultSize = 50,\n destroyOnHidden,\n dir,\n draggerIcon,\n layout,\n lazy = false,\n max = 80,\n min = 20,\n orientation,\n panels,\n prefixCls = \"hj-splitter\",\n rootClassName,\n style,\n styles,\n vertical,\n onCollapse,\n onDraggerDoubleClick,\n onResize,\n onResizeEnd,\n onResizeStart,\n ...divProps\n }: SplitterProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const mergedOrientation = resolveOrientation(orientation, vertical, layout);\n const isVertical = mergedOrientation === \"vertical\";\n const reverse = !isVertical && dir === \"rtl\";\n const generatedId = useId();\n const mergedChildren = useMemo(\n () =>\n children != null\n ? children\n : panels\n ? legacyChildren(panels, defaultSize, min, max)\n : children,\n [children, defaultSize, max, min, panels],\n );\n const items = useItems(mergedChildren);\n const [containerSize, setContainerSize] = useState<number>();\n const { panelSizes, percentMaxSizes, percentMinSizes, percentSizes, pixelSizes, setInnerSizes } =\n useSizes(items, containerSize);\n const resizableInfos = useResizable(items, pixelSizes, reverse);\n const updateSizes = useEvent((sizes: number[]) => setInnerSizes(sizes));\n const {\n movingIndex,\n onCollapse: resizeCollapse,\n onOffsetEnd,\n onOffsetStart,\n onOffsetUpdate,\n } = useResize(items, resizableInfos, percentSizes, containerSize, updateSizes, reverse);\n\n const handleContainerResize = useEvent(\n ({ offsetHeight, offsetWidth }: { offsetHeight: number; offsetWidth: number }) => {\n const nextSize = isVertical ? offsetHeight : offsetWidth;\n if (nextSize > 0) setContainerSize(nextSize);\n },\n );\n\n const handleOffsetStart = useEvent((index: number) => {\n const sizes = onOffsetStart(index);\n onResizeStart?.(sizes);\n });\n\n const handleOffsetUpdate = useEvent(\n (index: number, offsetX: number, offsetY: number, lazyEnd?: boolean) => {\n let offset = isVertical ? offsetY : offsetX;\n if (reverse) offset = -offset;\n const sizes = onOffsetUpdate(index, offset);\n if (lazyEnd) {\n onResizeEnd?.(sizes);\n } else {\n onResize?.(sizes);\n }\n },\n );\n\n const handleOffsetEnd = useEvent((lazyEnd?: boolean) => {\n const sizes = onOffsetEnd();\n if (!lazyEnd) onResizeEnd?.(sizes);\n });\n\n const handleCollapse = useEvent((index: number, type: \"start\" | \"end\") => {\n const sizes = resizeCollapse(index, type);\n onResize?.(sizes);\n onResizeEnd?.(sizes);\n onCollapse?.(\n sizes.map((size) => Math.abs(size) < Number.EPSILON),\n sizes,\n );\n });\n\n const stackSizes = useMemo(() => {\n let stack = 0;\n return percentSizes.map((size) => {\n stack += size;\n return stack;\n });\n }, [percentSizes]);\n\n return (\n <ResizeObserver onResize={handleContainerResize}>\n <div\n {...divProps}\n className={cn(\n prefixCls,\n `${prefixCls}-${mergedOrientation}`,\n dir === \"rtl\" && `${prefixCls}-rtl`,\n classNames?.root,\n rootClassName,\n className,\n )}\n dir={dir}\n ref={ref}\n style={{ ...style, ...styles?.root }}\n >\n {items.map((item, index) => {\n const panelId = `${generatedId}-panel-${index}`;\n const panel = (\n <InternalPanel\n {...item}\n className={cn(classNames?.panel, item.className)}\n destroyOnHidden={item.destroyOnHidden ?? destroyOnHidden}\n id={panelId}\n prefixCls={prefixCls}\n size={panelSizes[index]}\n style={{ ...styles?.panel, ...item.style }}\n supportMotion={collapsible?.motion && movingIndex === undefined}\n />\n );\n const resizeInfo = resizableInfos[index];\n\n if (!resizeInfo) {\n // biome-ignore lint/suspicious/noArrayIndexKey: Splitter panel sizing is positional by API.\n return <Fragment key={`split-panel-${index}`}>{panel}</Fragment>;\n }\n\n const previousStack = Number.isFinite(stackSizes[index - 1]) ? stackSizes[index - 1] : 0;\n const nextStack = Number.isFinite(stackSizes[index + 1]) ? stackSizes[index + 1] : 1;\n const ariaMin = Math.max(\n previousStack + percentMinSizes[index],\n nextStack - percentMaxSizes[index + 1],\n );\n const ariaMax = Math.min(\n previousStack + percentMaxSizes[index],\n nextStack - percentMinSizes[index + 1],\n );\n\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: Splitter panel sizing is positional by API.\n <Fragment key={`split-panel-${index}`}>\n {panel}\n <SplitBar\n active={movingIndex === index}\n ariaMax={ariaMax * 100}\n ariaMin={ariaMin * 100}\n ariaNow={stackSizes[index] * 100}\n collapsibleIcon={collapsible?.icon ?? collapsibleIcon}\n containerSize={containerSize || 0}\n draggerClassName={classNames?.dragger}\n draggerIcon={draggerIcon}\n draggerStyle={styles?.dragger}\n endCollapsible={resizeInfo.endCollapsible}\n index={index}\n lazy={lazy}\n panelIds={[panelId, `${generatedId}-panel-${index + 1}`]}\n prefixCls={prefixCls}\n resizable={resizeInfo.resizable}\n showEndCollapsibleIcon={resizeInfo.showEndCollapsibleIcon}\n showStartCollapsibleIcon={resizeInfo.showStartCollapsibleIcon}\n startCollapsible={resizeInfo.startCollapsible}\n vertical={isVertical}\n onCollapse={handleCollapse}\n onDraggerDoubleClick={onDraggerDoubleClick}\n onOffsetEnd={handleOffsetEnd}\n onOffsetStart={handleOffsetStart}\n onOffsetUpdate={handleOffsetUpdate}\n />\n </Fragment>\n );\n })}\n\n {movingIndex !== undefined ? (\n <div\n aria-hidden=\"true\"\n className={cn(`${prefixCls}-mask`, `${prefixCls}-mask-${mergedOrientation}`)}\n />\n ) : null}\n </div>\n </ResizeObserver>\n );\n}\n\nconst SplitterRoot = forwardRef<HTMLDivElement, SplitterProps>(InternalSplitter);\nSplitterRoot.displayName = \"Splitter\";\n\nexport const Splitter = Object.assign(SplitterRoot, {\n Panel: SplitterPanel,\n});\n\nexport type { SplitterPanelProps as PanelProps };\n",
|
|
36
|
+
"import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { InternalPanelProps, SplitterPanelProps } from \"./interface\";\n\nexport const InternalPanel = forwardRef<HTMLDivElement, InternalPanelProps>(\n (\n { children, className, destroyOnHidden = false, id, prefixCls, size, style, supportMotion },\n ref,\n ) => {\n const numericSize = typeof size === \"string\" ? Number.parseFloat(size) : size;\n const isCollapsed = numericSize === 0;\n const hasSize = size !== undefined;\n\n return (\n <div\n aria-hidden={isCollapsed || undefined}\n className={cn(\n `${prefixCls}-panel`,\n isCollapsed && `${prefixCls}-panel-hidden`,\n supportMotion && `${prefixCls}-panel-transition`,\n className,\n )}\n id={id}\n inert={isCollapsed || undefined}\n ref={ref}\n style={{\n ...style,\n flexBasis: hasSize ? size : \"auto\",\n flexGrow: hasSize ? 0 : 1,\n }}\n >\n {destroyOnHidden && isCollapsed ? null : children}\n </div>\n );\n },\n);\n\nInternalPanel.displayName = \"Splitter.InternalPanel\";\n\nexport function SplitterPanel(_props: SplitterPanelProps) {\n return null;\n}\n\nSplitterPanel.displayName = \"Splitter.Panel\";\n",
|
|
37
|
+
"import { useEvent, useLayoutEffect } from \"@rc-component/util\";\nimport type {\n CSSProperties,\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n PointerEvent as ReactPointerEvent,\n TouchEvent as ReactTouchEvent,\n} from \"react\";\nimport { useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type {\n ShowCollapsibleIconMode,\n SplitterDraggerClassName,\n SplitterDraggerStyle,\n} from \"./interface\";\n\ninterface DragState {\n readonly pointerId?: number;\n readonly source: \"mouse\" | \"pointer\" | \"touch\";\n readonly x: number;\n readonly y: number;\n}\n\nconst DOUBLE_CLICK_GAP = 300;\n\nexport interface SplitBarProps {\n readonly active: boolean;\n readonly ariaMax: number;\n readonly ariaMin: number;\n readonly ariaNow: number;\n readonly collapsibleIcon?: {\n readonly end?: ReactNode;\n readonly start?: ReactNode;\n };\n readonly containerSize: number;\n readonly draggerClassName?: SplitterDraggerClassName;\n readonly draggerIcon?: ReactNode;\n readonly draggerStyle?: SplitterDraggerStyle;\n readonly endCollapsible: boolean;\n readonly index: number;\n readonly lazy?: boolean;\n readonly panelIds: readonly [string, string];\n readonly prefixCls: string;\n readonly resizable: boolean;\n readonly showEndCollapsibleIcon: ShowCollapsibleIconMode;\n readonly showStartCollapsibleIcon: ShowCollapsibleIconMode;\n readonly startCollapsible: boolean;\n readonly vertical: boolean;\n readonly onCollapse: (index: number, type: \"start\" | \"end\") => void;\n readonly onDraggerDoubleClick?: (index: number) => void;\n readonly onOffsetEnd: (lazyEnd?: boolean) => void;\n readonly onOffsetStart: (index: number) => void;\n readonly onOffsetUpdate: (\n index: number,\n offsetX: number,\n offsetY: number,\n lazyEnd?: boolean,\n ) => void;\n}\n\nfunction validAriaNumber(value: number) {\n return Number.isFinite(value) ? Math.round(value) : 0;\n}\n\nfunction normalizeDraggerClassName(\n className: SplitterDraggerClassName | undefined,\n active: boolean,\n) {\n if (typeof className === \"string\") return className;\n return cn(className?.default, active && className?.active);\n}\n\nfunction normalizeDraggerStyle(style: SplitterDraggerStyle | undefined, active: boolean) {\n if (!style) return undefined;\n if (\"default\" in style || \"active\" in style) {\n const semanticStyle = style as { default?: CSSProperties; active?: CSSProperties };\n return { ...semanticStyle.default, ...(active ? semanticStyle.active : undefined) };\n }\n return style as CSSProperties;\n}\n\nfunction defaultCollapseIcon(vertical: boolean, type: \"start\" | \"end\") {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"hj-splitter-collapse-chevron\",\n vertical\n ? `hj-splitter-collapse-chevron-${type === \"start\" ? \"up\" : \"down\"}`\n : `hj-splitter-collapse-chevron-${type === \"start\" ? \"left\" : \"right\"}`,\n )}\n />\n );\n}\n\nfunction supportsPointerEvents() {\n return typeof window !== \"undefined\" && \"PointerEvent\" in window;\n}\n\nexport function SplitBar({\n active,\n ariaMax,\n ariaMin,\n ariaNow,\n collapsibleIcon,\n containerSize,\n draggerClassName,\n draggerIcon,\n draggerStyle,\n endCollapsible,\n index,\n lazy,\n panelIds,\n prefixCls,\n resizable,\n showEndCollapsibleIcon,\n showStartCollapsibleIcon,\n startCollapsible,\n vertical,\n onCollapse,\n onDraggerDoubleClick,\n onOffsetEnd,\n onOffsetStart,\n onOffsetUpdate,\n}: SplitBarProps) {\n const barPrefixCls = `${prefixCls}-bar`;\n const dragRef = useRef<DragState | null>(null);\n const lastPrimaryDownRef = useRef(0);\n const [drag, setDrag] = useState<DragState | null>(null);\n const [previewOffset, setPreviewOffset] = useState(0);\n\n const getConstrainedOffset = useEvent((rawOffset: number) => {\n const currentPosition = (containerSize * ariaNow) / 100;\n const minPosition = Math.max(0, (containerSize * Math.min(ariaMin, ariaMax)) / 100);\n const maxPosition = Math.min(containerSize, (containerSize * Math.max(ariaMin, ariaMax)) / 100);\n return (\n Math.max(minPosition, Math.min(maxPosition, currentPosition + rawOffset)) - currentPosition\n );\n });\n\n const beginDrag = useEvent((nextDrag: DragState) => {\n if (!resizable || dragRef.current) return;\n dragRef.current = nextDrag;\n setDrag(nextDrag);\n setPreviewOffset(0);\n onOffsetStart(index);\n });\n\n const updateDrag = useEvent((x: number, y: number) => {\n const current = dragRef.current;\n if (!current) return;\n const offsetX = x - current.x;\n const offsetY = y - current.y;\n if (lazy) {\n setPreviewOffset(getConstrainedOffset(vertical ? offsetY : offsetX));\n } else {\n onOffsetUpdate(index, offsetX, offsetY);\n }\n });\n\n const endDrag = useEvent(() => {\n const current = dragRef.current;\n if (!current) return;\n if (lazy) {\n onOffsetUpdate(index, vertical ? 0 : previewOffset, vertical ? previewOffset : 0, true);\n setPreviewOffset(0);\n onOffsetEnd(true);\n } else {\n onOffsetEnd();\n }\n dragRef.current = null;\n setDrag(null);\n });\n\n useLayoutEffect(() => {\n if (!drag) return;\n\n const onPointerMove = (event: PointerEvent) => {\n if (\n drag.source === \"pointer\" &&\n (drag.pointerId === undefined || event.pointerId === drag.pointerId)\n ) {\n event.preventDefault();\n updateDrag(event.pageX, event.pageY);\n }\n };\n const onPointerEnd = (event: PointerEvent) => {\n if (\n drag.source === \"pointer\" &&\n (drag.pointerId === undefined || event.pointerId === drag.pointerId)\n ) {\n endDrag();\n }\n };\n const onMouseMove = (event: MouseEvent) => {\n if (drag.source === \"mouse\") updateDrag(event.pageX, event.pageY);\n };\n const onMouseUp = () => {\n if (drag.source === \"mouse\") endDrag();\n };\n const onTouchMove = (event: TouchEvent) => {\n if (drag.source !== \"touch\" || event.touches.length !== 1) return;\n event.preventDefault();\n updateDrag(event.touches[0].pageX, event.touches[0].pageY);\n };\n const onTouchEnd = () => {\n if (drag.source === \"touch\") endDrag();\n };\n\n window.addEventListener(\"pointermove\", onPointerMove, { passive: false });\n window.addEventListener(\"pointerup\", onPointerEnd);\n window.addEventListener(\"pointercancel\", onPointerEnd);\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n window.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n window.addEventListener(\"touchend\", onTouchEnd);\n window.addEventListener(\"touchcancel\", onTouchEnd);\n\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerEnd);\n window.removeEventListener(\"pointercancel\", onPointerEnd);\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n window.removeEventListener(\"touchmove\", onTouchMove);\n window.removeEventListener(\"touchend\", onTouchEnd);\n window.removeEventListener(\"touchcancel\", onTouchEnd);\n };\n }, [drag]);\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.pointerType === \"mouse\" && event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n const currentTime = Date.now();\n const timeGap = currentTime - lastPrimaryDownRef.current;\n lastPrimaryDownRef.current = currentTime;\n if (timeGap > 0 && timeGap < DOUBLE_CLICK_GAP) return;\n beginDrag({\n source: \"pointer\",\n pointerId: event.pointerId,\n x: event.pageX,\n y: event.pageY,\n });\n };\n\n const handleMouseDown = (event: ReactMouseEvent<HTMLDivElement>) => {\n if (supportsPointerEvents() || event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n const currentTime = Date.now();\n const timeGap = currentTime - lastPrimaryDownRef.current;\n lastPrimaryDownRef.current = currentTime;\n if (timeGap > 0 && timeGap < DOUBLE_CLICK_GAP) return;\n beginDrag({ source: \"mouse\", x: event.pageX, y: event.pageY });\n };\n\n const handleTouchStart = (event: ReactTouchEvent<HTMLDivElement>) => {\n if (supportsPointerEvents() || event.touches.length !== 1) return;\n const touch = event.touches[0];\n beginDrag({ source: \"touch\", x: touch.pageX, y: touch.pageY });\n };\n\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (!resizable) return;\n const decreaseKey = vertical ? \"ArrowUp\" : \"ArrowLeft\";\n const increaseKey = vertical ? \"ArrowDown\" : \"ArrowRight\";\n let offset: number | undefined;\n\n if (event.key === decreaseKey) offset = -(event.shiftKey ? 50 : 10);\n if (event.key === increaseKey) offset = event.shiftKey ? 50 : 10;\n if (event.key === \"Home\")\n offset = ((Math.min(ariaMin, ariaMax) - ariaNow) / 100) * containerSize;\n if (event.key === \"End\")\n offset = ((Math.max(ariaMin, ariaMax) - ariaNow) / 100) * containerSize;\n if (offset === undefined) return;\n\n event.preventDefault();\n onOffsetStart(index);\n onOffsetUpdate(index, vertical ? 0 : offset, vertical ? offset : 0);\n onOffsetEnd();\n };\n\n const handleCollapseKeyDown = (\n event: ReactKeyboardEvent<HTMLDivElement>,\n type: \"start\" | \"end\",\n ) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n onCollapse(index, type);\n };\n\n const visibilityClass = (mode: ShowCollapsibleIconMode) => {\n if (mode === true) return `${barPrefixCls}-collapse-bar-always-visible`;\n if (mode === false) return `${barPrefixCls}-collapse-bar-always-hidden`;\n return `${barPrefixCls}-collapse-bar-hover-only`;\n };\n\n const previewStyle = {\n \"--hj-splitter-bar-preview-offset\": `${previewOffset}px`,\n } as CSSProperties;\n const mergedAriaMin = Math.min(ariaMin, ariaMax);\n const mergedAriaMax = Math.max(ariaMin, ariaMax);\n\n return (\n <div className={barPrefixCls}>\n {lazy ? (\n <div\n aria-hidden=\"true\"\n className={cn(\n `${barPrefixCls}-preview`,\n previewOffset !== 0 && `${barPrefixCls}-preview-active`,\n )}\n style={previewStyle}\n />\n ) : null}\n\n <div\n aria-controls={panelIds.join(\" \")}\n aria-disabled={!resizable}\n aria-orientation={vertical ? \"horizontal\" : \"vertical\"}\n aria-valuemax={validAriaNumber(mergedAriaMax)}\n aria-valuemin={validAriaNumber(mergedAriaMin)}\n aria-valuenow={validAriaNumber(ariaNow)}\n className={cn(\n `${barPrefixCls}-dragger`,\n !resizable && `${barPrefixCls}-dragger-disabled`,\n active && `${barPrefixCls}-dragger-active`,\n draggerIcon !== undefined && `${barPrefixCls}-dragger-customize`,\n normalizeDraggerClassName(draggerClassName, active),\n )}\n onDoubleClick={() => onDraggerDoubleClick?.(index)}\n onKeyDown={handleKeyDown}\n onMouseDown={handleMouseDown}\n onPointerDown={handlePointerDown}\n onTouchStart={handleTouchStart}\n // biome-ignore lint/a11y/useSemanticElements: the separator can contain a custom dragger icon.\n role=\"separator\"\n style={normalizeDraggerStyle(draggerStyle, active)}\n tabIndex={resizable ? 0 : -1}\n >\n {draggerIcon !== undefined ? (\n <div className={`${barPrefixCls}-dragger-icon`}>{draggerIcon}</div>\n ) : null}\n </div>\n\n {startCollapsible ? (\n <div\n aria-label=\"Toggle start panel\"\n className={cn(\n `${barPrefixCls}-collapse-bar`,\n `${barPrefixCls}-collapse-bar-start`,\n collapsibleIcon?.start !== undefined && `${barPrefixCls}-collapse-bar-customize`,\n visibilityClass(showStartCollapsibleIcon),\n )}\n onClick={() => onCollapse(index, \"start\")}\n onKeyDown={(event) => handleCollapseKeyDown(event, \"start\")}\n // biome-ignore lint/a11y/useSemanticElements: preserve the AntD-compatible collapse-bar DOM.\n role=\"button\"\n tabIndex={0}\n >\n <span className={cn(`${barPrefixCls}-collapse-icon`, `${barPrefixCls}-collapse-start`)}>\n {collapsibleIcon?.start ?? defaultCollapseIcon(vertical, \"start\")}\n </span>\n </div>\n ) : null}\n\n {endCollapsible ? (\n <div\n aria-label=\"Toggle end panel\"\n className={cn(\n `${barPrefixCls}-collapse-bar`,\n `${barPrefixCls}-collapse-bar-end`,\n collapsibleIcon?.end !== undefined && `${barPrefixCls}-collapse-bar-customize`,\n visibilityClass(showEndCollapsibleIcon),\n )}\n onClick={() => onCollapse(index, \"end\")}\n onKeyDown={(event) => handleCollapseKeyDown(event, \"end\")}\n // biome-ignore lint/a11y/useSemanticElements: preserve the AntD-compatible collapse-bar DOM.\n role=\"button\"\n tabIndex={0}\n >\n <span className={cn(`${barPrefixCls}-collapse-icon`, `${barPrefixCls}-collapse-end`)}>\n {collapsibleIcon?.end ?? defaultCollapseIcon(vertical, \"end\")}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n",
|
|
38
|
+
"import { toArray } from \"@rc-component/util\";\nimport { useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { ShowCollapsibleIconMode, SplitterItem, SplitterPanelProps } from \"./interface\";\n\nfunction isCollapsibleConfig(\n collapsible: SplitterPanelProps[\"collapsible\"],\n): collapsible is Exclude<SplitterPanelProps[\"collapsible\"], boolean | undefined> {\n return typeof collapsible === \"object\" && collapsible !== null;\n}\n\nfunction normalizeCollapsible(\n collapsible: SplitterPanelProps[\"collapsible\"],\n): SplitterItem[\"collapsible\"] {\n if (isCollapsibleConfig(collapsible)) {\n return {\n ...collapsible,\n showCollapsibleIcon:\n collapsible.showCollapsibleIcon === undefined\n ? \"auto\"\n : (collapsible.showCollapsibleIcon as ShowCollapsibleIconMode),\n };\n }\n\n return {\n start: Boolean(collapsible),\n end: Boolean(collapsible),\n showCollapsibleIcon: \"auto\",\n };\n}\n\nexport function useItems(children: ReactNode): SplitterItem[] {\n return useMemo(\n () =>\n toArray(children).map((node) => {\n const { collapsible, ...panelProps } = node.props as SplitterPanelProps;\n return {\n ...panelProps,\n collapsible: normalizeCollapsible(collapsible),\n };\n }),\n [children],\n );\n}\n",
|
|
39
|
+
"import { useMemo } from \"react\";\nimport type { ShowCollapsibleIconMode, SplitterItem } from \"./interface\";\n\nexport interface ResizableInfo {\n readonly endCollapsible: boolean;\n readonly resizable: boolean;\n readonly showEndCollapsibleIcon: ShowCollapsibleIconMode;\n readonly showStartCollapsibleIcon: ShowCollapsibleIconMode;\n readonly startCollapsible: boolean;\n}\n\ninterface CollapseOption {\n readonly collapsible: boolean;\n readonly showCollapsibleIcon: ShowCollapsibleIconMode;\n}\n\nfunction mergeIconVisibility(\n previous: CollapseOption,\n next: CollapseOption,\n): ShowCollapsibleIconMode {\n if (previous.collapsible && next.collapsible) {\n if (previous.showCollapsibleIcon === true || next.showCollapsibleIcon === true) return true;\n if (previous.showCollapsibleIcon === \"auto\" || next.showCollapsibleIcon === \"auto\")\n return \"auto\";\n return false;\n }\n if (previous.collapsible) return previous.showCollapsibleIcon;\n if (next.collapsible) return next.showCollapsibleIcon;\n return false;\n}\n\nexport function useResizable(items: SplitterItem[], pixelSizes: number[], reverse: boolean) {\n return useMemo(() => {\n const result: ResizableInfo[] = [];\n\n for (let index = 0; index < items.length - 1; index += 1) {\n const previous = items[index];\n const next = items[index + 1];\n const previousSize = pixelSizes[index];\n const nextSize = pixelSizes[index + 1];\n const previousResizable = previous.resizable ?? true;\n const nextResizable = next.resizable ?? true;\n const resizable =\n previousResizable &&\n nextResizable &&\n (previousSize !== 0 || !previous.min) &&\n (nextSize !== 0 || !next.min);\n\n const previousCanCollapse = Boolean(previous.collapsible.end) && previousSize > 0;\n const nextCanExpandFromStart =\n Boolean(next.collapsible.start) && nextSize === 0 && previousSize > 0;\n const startCollapsible = previousCanCollapse || nextCanExpandFromStart;\n\n const nextCanCollapse = Boolean(next.collapsible.start) && nextSize > 0;\n const previousCanExpandFromEnd =\n Boolean(previous.collapsible.end) && previousSize === 0 && nextSize > 0;\n const endCollapsible = nextCanCollapse || previousCanExpandFromEnd;\n\n const startVisibility = mergeIconVisibility(\n {\n collapsible: previousCanCollapse,\n showCollapsibleIcon: previous.collapsible.showCollapsibleIcon,\n },\n {\n collapsible: nextCanExpandFromStart,\n showCollapsibleIcon: next.collapsible.showCollapsibleIcon,\n },\n );\n const endVisibility = mergeIconVisibility(\n {\n collapsible: nextCanCollapse,\n showCollapsibleIcon: next.collapsible.showCollapsibleIcon,\n },\n {\n collapsible: previousCanExpandFromEnd,\n showCollapsibleIcon: previous.collapsible.showCollapsibleIcon,\n },\n );\n\n result[index] = {\n resizable,\n startCollapsible: reverse ? endCollapsible : startCollapsible,\n endCollapsible: reverse ? startCollapsible : endCollapsible,\n showStartCollapsibleIcon: reverse ? endVisibility : startVisibility,\n showEndCollapsibleIcon: reverse ? startVisibility : endVisibility,\n };\n }\n\n return result;\n }, [items, pixelSizes, reverse]);\n}\n",
|
|
40
|
+
"import { useRef, useState } from \"react\";\nimport type { SplitterItem } from \"./interface\";\nimport { getPercent } from \"./sizeUtil\";\nimport type { ResizableInfo } from \"./useResizable\";\n\ninterface MovingState {\n readonly confirmed: boolean;\n readonly index: number;\n}\n\nfunction getLimitSize(value: number | string | undefined, fallback: number, containerSize: number) {\n if (typeof value === \"string\" && value.trim().endsWith(\"%\")) {\n return getPercent(value) * containerSize;\n }\n const numeric = value === undefined ? fallback : Number(value);\n return Number.isFinite(numeric) ? numeric : fallback;\n}\n\nexport function useResize(\n items: SplitterItem[],\n resizableInfos: ResizableInfo[],\n percentSizes: number[],\n containerSize: number | undefined,\n updateSizes: (sizes: number[]) => void,\n reverse: boolean,\n) {\n const mergedContainerSize = containerSize || 0;\n const movingRef = useRef<MovingState | null>(null);\n const cacheSizesRef = useRef<number[]>([]);\n const latestSizesRef = useRef<number[]>([]);\n const collapsedSizeCacheRef = useRef<number[]>([]);\n const [movingIndex, setMovingIndex] = useState<number>();\n\n const getPixelSizes = () => percentSizes.map((size) => size * mergedContainerSize);\n\n const setMoving = (value: MovingState | null) => {\n movingRef.current = value;\n setMovingIndex(value?.index);\n };\n\n const onOffsetStart = (index: number) => {\n const currentSizes = getPixelSizes();\n cacheSizesRef.current = currentSizes;\n latestSizesRef.current = currentSizes;\n setMoving({ index, confirmed: false });\n return currentSizes;\n };\n\n const onOffsetUpdate = (index: number, offset: number) => {\n const cacheSizes = cacheSizesRef.current.length ? cacheSizesRef.current : getPixelSizes();\n let confirmedIndex: number | undefined;\n const moving = movingRef.current;\n\n if ((!moving || !moving.confirmed) && offset !== 0) {\n if (offset > 0) {\n confirmedIndex = index;\n } else {\n for (let current = index; current >= 0; current -= 1) {\n if (cacheSizes[current] > 0 && resizableInfos[current]?.resizable) {\n confirmedIndex = current;\n break;\n }\n }\n }\n\n if (confirmedIndex !== undefined) {\n setMoving({ index: confirmedIndex, confirmed: true });\n }\n }\n\n const activeIndex = confirmedIndex ?? moving?.index ?? index;\n const nextIndex = activeIndex + 1;\n const nextSizes = [...cacheSizes];\n if (!items[activeIndex] || !items[nextIndex]) return nextSizes;\n\n const startMin = getLimitSize(items[activeIndex].min, 0, mergedContainerSize);\n const endMin = getLimitSize(items[nextIndex].min, 0, mergedContainerSize);\n const startMax = getLimitSize(items[activeIndex].max, mergedContainerSize, mergedContainerSize);\n const endMax = getLimitSize(items[nextIndex].max, mergedContainerSize, mergedContainerSize);\n let constrainedOffset = offset;\n\n constrainedOffset = Math.max(constrainedOffset, startMin - nextSizes[activeIndex]);\n constrainedOffset = Math.min(constrainedOffset, nextSizes[nextIndex] - endMin);\n constrainedOffset = Math.min(constrainedOffset, startMax - nextSizes[activeIndex]);\n constrainedOffset = Math.max(constrainedOffset, nextSizes[nextIndex] - endMax);\n\n nextSizes[activeIndex] += constrainedOffset;\n nextSizes[nextIndex] -= constrainedOffset;\n latestSizesRef.current = nextSizes;\n updateSizes(nextSizes);\n return nextSizes;\n };\n\n const onOffsetEnd = () => {\n const sizes = latestSizesRef.current.length ? latestSizesRef.current : getPixelSizes();\n setMoving(null);\n return sizes;\n };\n\n const onCollapse = (index: number, type: \"start\" | \"end\") => {\n const currentSizes = getPixelSizes();\n const adjustedType = reverse ? (type === \"start\" ? \"end\" : \"start\") : type;\n const currentIndex = adjustedType === \"start\" ? index : index + 1;\n const targetIndex = adjustedType === \"start\" ? index + 1 : index;\n const currentSize = currentSizes[currentIndex];\n const targetSize = currentSizes[targetIndex];\n\n if (currentSize !== 0 && targetSize !== 0) {\n currentSizes[currentIndex] = 0;\n currentSizes[targetIndex] += currentSize;\n collapsedSizeCacheRef.current[index] = currentSize;\n } else {\n const totalSize = currentSize + targetSize;\n const currentMin = getLimitSize(items[currentIndex].min, 0, mergedContainerSize);\n const currentMax = getLimitSize(\n items[currentIndex].max,\n mergedContainerSize,\n mergedContainerSize,\n );\n const targetMin = getLimitSize(items[targetIndex].min, 0, mergedContainerSize);\n const targetMax = getLimitSize(\n items[targetIndex].max,\n mergedContainerSize,\n mergedContainerSize,\n );\n const lowerBound = Math.max(currentMin, totalSize - targetMax);\n const upperBound = Math.min(currentMax, totalSize - targetMin);\n const fallbackOffset = targetMin || Math.max(0, (upperBound - lowerBound) / 2);\n const cachedTargetSize = collapsedSizeCacheRef.current[index];\n const cachedCurrentSize = totalSize - cachedTargetSize;\n const canRestoreCached =\n cachedTargetSize !== undefined &&\n cachedTargetSize <= targetMax &&\n cachedTargetSize >= targetMin &&\n cachedCurrentSize <= currentMax &&\n cachedCurrentSize >= currentMin;\n\n if (canRestoreCached) {\n currentSizes[targetIndex] = cachedTargetSize;\n currentSizes[currentIndex] = cachedCurrentSize;\n } else {\n currentSizes[currentIndex] = Math.max(\n lowerBound,\n currentSizes[currentIndex] - fallbackOffset,\n );\n currentSizes[targetIndex] = totalSize - currentSizes[currentIndex];\n }\n }\n\n latestSizesRef.current = currentSizes;\n updateSizes(currentSizes);\n return currentSizes;\n };\n\n return {\n movingIndex,\n onCollapse,\n onOffsetEnd,\n onOffsetStart,\n onOffsetUpdate,\n };\n}\n",
|
|
41
|
+
"type SizeUnit = number | undefined;\n\nexport function autoPercentSizes(\n percentSizes: SizeUnit[],\n minPercentSizes: SizeUnit[],\n maxPercentSizes: SizeUnit[],\n): number[] {\n let currentTotal = 0;\n const undefinedIndexes: number[] = [];\n\n percentSizes.forEach((size, index) => {\n if (size === undefined) {\n undefinedIndexes.push(index);\n } else {\n currentTotal += size;\n }\n });\n\n if (percentSizes.length === 0) return [];\n\n if (undefinedIndexes.length === 0 && currentTotal !== 1) {\n if (currentTotal === 0) {\n const average = 1 / percentSizes.length;\n return percentSizes.map(() => average);\n }\n return percentSizes.map((size) => (size as number) / currentTotal);\n }\n\n const remaining = 1 - currentTotal;\n if (remaining < 0) {\n return percentSizes.map((size) => (size === undefined ? 0 : size / currentTotal));\n }\n\n const undefinedCount = undefinedIndexes.length;\n let sumMin = 0;\n let sumMax = 0;\n let largestMin = 0;\n let smallestMax = 1;\n\n for (const index of undefinedIndexes) {\n const min = minPercentSizes[index] || 0;\n const max = maxPercentSizes[index] || 1;\n sumMin += min;\n sumMax += max;\n largestMin = Math.max(largestMin, min);\n smallestMax = Math.min(smallestMax, max);\n }\n\n if (sumMin > 1 && sumMax < 1) {\n const average = 1 / undefinedCount;\n return percentSizes.map((size) => (size === undefined ? average : size));\n }\n\n const average = remaining / undefinedCount;\n if (largestMin <= average && average <= smallestMax) {\n return percentSizes.map((size) => (size === undefined ? average : size));\n }\n\n const result = [...percentSizes] as number[];\n let available = remaining - sumMin;\n\n for (const index of undefinedIndexes) {\n const min = minPercentSizes[index] || 0;\n const max = maxPercentSizes[index] || 1;\n result[index] = min;\n const addition = Math.min(max - min, available);\n result[index] += addition;\n available -= addition;\n }\n\n return result;\n}\n\nexport function getPercent(value: string) {\n return Number(value.slice(0, -1)) / 100;\n}\n\nexport function isPercent(value: number | string | undefined): value is string {\n return typeof value === \"string\" && value.trim().endsWith(\"%\");\n}\n",
|
|
42
|
+
"import { useMemo, useState } from \"react\";\nimport type { Dispatch, SetStateAction } from \"react\";\nimport type { SplitterItem } from \"./interface\";\nimport { autoPercentSizes, getPercent, isPercent } from \"./sizeUtil\";\n\nexport type SetPanelSizes = Dispatch<SetStateAction<(number | string | undefined)[]>>;\n\nfunction hasValue(value: number | string | undefined): value is number | string {\n return value !== null && value !== undefined;\n}\n\nfunction toPercentLimit(\n size: number | string | undefined,\n containerSize: number,\n fallback: number,\n) {\n if (isPercent(size)) return getPercent(size);\n if (size === undefined) return fallback;\n if (containerSize <= 0) return fallback;\n const numeric = Number(size);\n return Number.isFinite(numeric) ? numeric / containerSize : fallback;\n}\n\nexport function useSizes(items: SplitterItem[], containerSize?: number) {\n const itemCount = items.length;\n const controlledSizes = items.map((item) => item.size);\n const mergedContainerSize = containerSize || 0;\n const [innerSizes, setInnerSizes] = useState<(number | string | undefined)[]>(() =>\n items.map((item) => item.defaultSize),\n );\n\n const sourceSizes = controlledSizes.some(hasValue) ? controlledSizes : innerSizes;\n\n const percentMinSizes = useMemo(\n () => items.map((item) => toPercentLimit(item.min, mergedContainerSize, 0)),\n [items, mergedContainerSize],\n );\n const percentMaxSizes = useMemo(\n () => items.map((item) => toPercentLimit(item.max, mergedContainerSize, 1)),\n [items, mergedContainerSize],\n );\n\n const percentSizes = useMemo(() => {\n const values: (number | undefined)[] = [];\n\n for (let index = 0; index < itemCount; index += 1) {\n const itemSize = sourceSizes[index];\n if (isPercent(itemSize)) {\n values[index] = getPercent(itemSize);\n } else if (itemSize === 0 || itemSize) {\n const numeric = Number(itemSize);\n values[index] =\n Number.isFinite(numeric) && mergedContainerSize > 0\n ? numeric / mergedContainerSize\n : undefined;\n } else {\n values[index] = undefined;\n }\n }\n\n return autoPercentSizes(values, percentMinSizes, percentMaxSizes);\n }, [itemCount, mergedContainerSize, percentMaxSizes, percentMinSizes, sourceSizes]);\n\n const pixelSizes = useMemo(\n () => percentSizes.map((size) => size * mergedContainerSize),\n [mergedContainerSize, percentSizes],\n );\n const panelSizes = useMemo(\n () => (containerSize ? pixelSizes : sourceSizes),\n [containerSize, pixelSizes, sourceSizes],\n );\n\n return {\n panelSizes,\n percentMaxSizes,\n percentMinSizes,\n percentSizes,\n pixelSizes,\n setInnerSizes,\n };\n}\n",
|
|
43
|
+
"import { CSSMotionList } from \"@rc-component/motion\";\nimport ResizeObserver from \"@rc-component/resize-observer\";\nimport { composeRef, isEqual, raf, useEvent, useLayoutEffect } from \"@rc-component/util\";\nimport type { CSSProperties, Key, ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n forwardRef,\n isValidElement,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type MasonryBreakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\nexport type MasonryResponsiveValue<T> = T | Partial<Record<MasonryBreakpoint, T>>;\nexport type MasonryGutter =\n | MasonryResponsiveValue<number>\n | readonly [MasonryResponsiveValue<number>, MasonryResponsiveValue<number>];\nexport type MasonryGap = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | number;\n\nexport interface MasonryItem<T = unknown> {\n readonly children?: ReactNode;\n readonly column?: number;\n readonly data: T;\n readonly height?: number;\n readonly key: Key;\n}\n\ntype MasonrySlot = \"root\" | \"item\";\n\nexport interface MasonryProps<T = unknown> {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: SlotClassNames<MasonrySlot>;\n readonly columns?: MasonryResponsiveValue<number>;\n readonly fresh?: boolean;\n readonly gap?: MasonryGap;\n readonly gutter?: MasonryGutter;\n readonly itemRender?: (\n item: MasonryItem<T> & { readonly column: number; readonly index: number },\n ) => ReactNode;\n readonly items?: readonly MasonryItem<T>[];\n readonly rootClassName?: string;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<MasonrySlot>;\n readonly onLayoutChange?: (sortInfo: { readonly column: number; readonly key: Key }[]) => void;\n}\n\nexport interface MasonryRef {\n readonly nativeElement: HTMLDivElement;\n}\n\nconst breakpoints: readonly [MasonryBreakpoint, number][] = [\n [\"xxl\", 1600],\n [\"xl\", 1200],\n [\"lg\", 992],\n [\"md\", 768],\n [\"sm\", 576],\n [\"xs\", 0],\n];\n\nfunction useViewportWidth() {\n const [width, setWidth] = useState(() => (typeof window === \"undefined\" ? 0 : window.innerWidth));\n useEffect(() => {\n const update = () => setWidth(window.innerWidth);\n window.addEventListener(\"resize\", update, { passive: true });\n return () => window.removeEventListener(\"resize\", update);\n }, []);\n return width;\n}\n\nfunction resolveResponsive<T>(\n value: MasonryResponsiveValue<T> | undefined,\n width: number,\n fallback: T,\n): T {\n if (value == null) return fallback;\n if (typeof value !== \"object\") return value;\n const responsiveValue = value as Partial<Record<MasonryBreakpoint, T>>;\n for (const [breakpoint, minimum] of breakpoints) {\n const match = responsiveValue[breakpoint];\n if (width >= minimum && match !== undefined) return match;\n }\n return fallback;\n}\n\nfunction gapToNumber(gap: MasonryGap | undefined) {\n if (typeof gap === \"number\") return gap;\n return gap === \"xs\" ? 4 : gap === \"sm\" ? 8 : gap === \"lg\" ? 24 : gap === \"xl\" ? 32 : 16;\n}\n\nfunction useDelay(callback: () => void) {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n const frameRef = useRef<number | null>(null);\n const trigger = useEvent(() => {\n if (frameRef.current !== null) raf.cancel(frameRef.current);\n frameRef.current = raf(() => callbackRef.current());\n });\n useEffect(\n () => () => {\n if (frameRef.current !== null) raf.cancel(frameRef.current);\n },\n [],\n );\n return trigger;\n}\n\ntype ItemHeightData = readonly [key: Key, height: number, column?: number];\n\nfunction getPositions(\n itemHeights: readonly ItemHeightData[],\n columnCount: number,\n verticalGutter: number,\n) {\n const heights = new Array(Math.max(1, columnCount)).fill(0) as number[];\n const positions = new Map<Key, { column: number; top: number }>();\n for (const [key, height, requestedColumn] of itemHeights) {\n const shortest = heights.indexOf(Math.min(...heights));\n const column = Math.max(0, Math.min(requestedColumn ?? shortest, heights.length - 1));\n positions.set(key, { column, top: heights[column] });\n heights[column] += height + verticalGutter;\n }\n return [positions, Math.max(0, Math.max(...heights) - verticalGutter)] as const;\n}\n\nconst InternalMasonry = forwardRef<MasonryRef, MasonryProps>((props, ref) => {\n const {\n children,\n className,\n classNames,\n columns,\n fresh,\n gap,\n gutter,\n itemRender,\n items,\n onLayoutChange,\n rootClassName,\n style,\n styles,\n } = props;\n const viewportWidth = useViewportWidth();\n const columnCount = Math.max(1, Math.floor(resolveResponsive(columns, viewportWidth, 3)));\n const legacyGap = gapToNumber(gap);\n const [horizontalSetting, verticalSetting = horizontalSetting] = Array.isArray(gutter)\n ? gutter\n : [gutter ?? legacyGap, gutter ?? legacyGap];\n const horizontalGutter = resolveResponsive(horizontalSetting, viewportWidth, legacyGap);\n const verticalGutter = resolveResponsive(verticalSetting, viewportWidth, legacyGap);\n const legacyItems = useMemo<MasonryItem[]>(\n () =>\n Children.toArray(children).map((child, index) => ({\n children: child,\n data: child,\n key: isValidElement(child) && child.key != null ? child.key : index,\n })),\n [children],\n );\n const [mergedItems, setMergedItems] = useState<readonly MasonryItem[]>(items ?? legacyItems);\n useEffect(() => setMergedItems(items ?? legacyItems), [items, legacyItems]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => ({ nativeElement: containerRef.current as HTMLDivElement }), []);\n const refs = useRef(new Map<Key, HTMLDivElement | null>());\n const [itemHeights, setItemHeights] = useState<readonly ItemHeightData[]>([]);\n const collectItemSize = useDelay(() => {\n const next = mergedItems.map<ItemHeightData>((item) => {\n const rect = refs.current.get(item.key)?.getBoundingClientRect();\n return [item.key, rect?.height ?? item.height ?? 0, item.column];\n });\n setItemHeights((previous) => (isEqual(previous, next) ? previous : next));\n });\n const [positions, totalHeight] = useMemo(\n () => getPositions(itemHeights, columnCount, verticalGutter),\n [columnCount, itemHeights, verticalGutter],\n );\n const positionedItems = useMemo(\n () =>\n mergedItems.map((item, index) => ({\n item,\n index,\n key: item.key,\n position: positions.get(item.key),\n })),\n [mergedItems, positions],\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: layout inputs must retrigger measurement.\n useEffect(() => collectItemSize(), [collectItemSize, columnCount, mergedItems]);\n useLayoutEffect(() => {\n if (!onLayoutChange || positionedItems.some(({ position }) => !position)) return;\n onLayoutChange(\n positionedItems.map(({ item, position }) => ({\n key: item.key,\n column: position?.column ?? 0,\n })),\n );\n }, [onLayoutChange, positionedItems]);\n\n return (\n <ResizeObserver onResize={collectItemSize}>\n <div\n className={cn(\"hj-masonry\", rootClassName, slotClass(classNames, \"root\"), className)}\n ref={containerRef}\n style={slotStyle(styles, \"root\", { height: totalHeight, ...style })}\n onError={collectItemSize}\n onLoad={collectItemSize}\n >\n <CSSMotionList\n keys={positionedItems}\n component={false}\n motionAppear\n motionLeave\n motionName=\"hj-masonry-item-fade\"\n >\n {(motionInfo, motionRef) => {\n const {\n className: motionClassName,\n index,\n item,\n key,\n position,\n style: motionStyle,\n } = motionInfo;\n const column = position?.column ?? 0;\n const width = `calc((100% - ${(columnCount - 1) * horizontalGutter}px) / ${columnCount})`;\n const itemStyle: CSSProperties = {\n ...motionStyle,\n ...slotStyle(styles, \"item\"),\n insetInlineStart: `calc(${column} * (${width} + ${horizontalGutter}px))`,\n position: \"absolute\",\n top: position?.top ?? 0,\n width,\n };\n const content = item.children ?? itemRender?.({ ...item, column, index });\n const node = (\n <div\n className={cn(\"hj-masonry-item\", slotClass(classNames, \"item\"), motionClassName)}\n key={key}\n ref={composeRef(motionRef, (element) => {\n refs.current.set(item.key, element);\n })}\n style={itemStyle}\n >\n {content}\n </div>\n );\n return fresh ? (\n <ResizeObserver onResize={collectItemSize}>{node}</ResizeObserver>\n ) : (\n node\n );\n }}\n </CSSMotionList>\n </div>\n </ResizeObserver>\n );\n});\n\nexport const Masonry = InternalMasonry as (<T = unknown>(\n props: MasonryProps<T> & RefAttributes<MasonryRef>,\n) => ReturnType<typeof InternalMasonry>) & { displayName?: string };\n\nMasonry.displayName = \"Masonry\";\n",
|
|
44
|
+
"import type {\n AriaAttributes,\n CSSProperties,\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport { Children, Fragment, isValidElement } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Dropdown, type DropdownProps } from \"./Dropdown\";\n\nexport interface BreadcrumbItem extends AriaAttributes {\n readonly breadcrumbName?: string;\n readonly className?: string;\n readonly dropdownProps?: Omit<DropdownProps, \"children\" | \"menu\">;\n readonly href?: string;\n readonly key?: string | number;\n readonly menu?: DropdownProps[\"menu\"];\n readonly path?: string;\n readonly separator?: ReactNode;\n readonly style?: CSSProperties;\n readonly title?: ReactNode;\n readonly type?: \"separator\";\n readonly onClick?: MouseEventHandler<HTMLAnchorElement | HTMLSpanElement>;\n}\n\nexport interface BreadcrumbProps<T extends Record<string, unknown> = Record<string, unknown>>\n extends Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n readonly children?: ReactNode;\n readonly dropdownIcon?: ReactNode;\n readonly itemRender?: (\n route: BreadcrumbItem,\n params: T,\n routes: readonly BreadcrumbItem[],\n paths: string[],\n ) => ReactNode;\n readonly items?: readonly BreadcrumbItem[];\n readonly params?: T;\n readonly rootClassName?: string;\n /** @deprecated Use `items` instead. */\n readonly routes?: readonly BreadcrumbItem[];\n readonly separator?: ReactNode;\n}\n\nexport interface BreadcrumbItemProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n readonly dropdownIcon?: ReactNode;\n readonly dropdownProps?: Omit<DropdownProps, \"children\" | \"menu\">;\n readonly href?: string;\n readonly menu?: DropdownProps[\"menu\"];\n readonly separator?: ReactNode;\n}\n\nexport interface BreadcrumbSeparatorProps extends HTMLAttributes<HTMLLIElement> {\n readonly children?: ReactNode;\n}\n\nfunction replaceParams(path: string, params: Record<string, unknown>) {\n return path.replace(/:([^/]+)/g, (match, key: string) => {\n const value = params[key];\n return value == null ? match : String(value);\n });\n}\n\nfunction renderDefaultItem(\n item: BreadcrumbItem,\n href: string | undefined,\n dropdownIcon: ReactNode,\n) {\n const title =\n typeof item.title === \"string\"\n ? replaceParams(item.title, {})\n : (item.title ?? item.breadcrumbName);\n const commonProps = {\n className: cn(\n \"hj-breadcrumb-link\",\n href\n ? \"text-[var(--hj-color-web-muted)] transition hover:text-[var(--hj-color-brand)]\"\n : \"text-[var(--hj-color-web-foreground-80)]\",\n item.className,\n ),\n onClick: item.onClick,\n style: item.style,\n };\n const link = href ? (\n <a {...commonProps} href={href}>\n {title}\n </a>\n ) : (\n <span {...commonProps}>{title}</span>\n );\n\n if (!item.menu) return link;\n return (\n <Dropdown\n {...item.dropdownProps}\n menu={item.menu}\n placement={item.dropdownProps?.placement ?? \"bottomLeft\"}\n >\n <span className=\"hj-breadcrumb-overlay-link inline-flex items-center gap-1\">\n {link}\n {dropdownIcon}\n </span>\n </Dropdown>\n );\n}\n\nfunction BreadcrumbSeparator({ children, className, ...props }: BreadcrumbSeparatorProps) {\n return (\n <li\n aria-hidden=\"true\"\n className={cn(\n \"hj-breadcrumb-separator list-none text-[var(--hj-color-web-subtle)]\",\n className,\n )}\n {...props}\n >\n {children}\n </li>\n );\n}\n\nfunction BreadcrumbItemComponent({\n children,\n className,\n dropdownIcon = \"\\u2304\",\n dropdownProps,\n href,\n menu,\n onClick,\n separator: _separator,\n style,\n ...props\n}: BreadcrumbItemProps) {\n const item: BreadcrumbItem = {\n className,\n dropdownProps,\n href,\n menu,\n onClick,\n style,\n title: children,\n };\n return (\n <li className=\"hj-breadcrumb-item list-none\" {...props}>\n {renderDefaultItem(item, href, dropdownIcon)}\n </li>\n );\n}\n\nfunction isSeparatorNode(node: ReactNode) {\n return isValidElement(node) && node.type === BreadcrumbSeparator;\n}\n\nfunction renderChildren(children: ReactNode, defaultSeparator: ReactNode) {\n const childList = Children.toArray(children);\n return childList.map((child, index) => {\n const next = childList[index + 1];\n const childSeparator = isValidElement<BreadcrumbItemProps>(child)\n ? child.props.separator\n : undefined;\n const shouldAppendSeparator =\n index < childList.length - 1 && !isSeparatorNode(child) && !isSeparatorNode(next);\n return (\n <Fragment key={isValidElement(child) && child.key != null ? child.key : index}>\n {isValidElement(child) ? child : <li className=\"hj-breadcrumb-item list-none\">{child}</li>}\n {shouldAppendSeparator ? (\n <BreadcrumbSeparator>{childSeparator ?? defaultSeparator}</BreadcrumbSeparator>\n ) : null}\n </Fragment>\n );\n });\n}\n\nfunction BreadcrumbRoot<T extends Record<string, unknown> = Record<string, unknown>>({\n children,\n className = \"\",\n dropdownIcon = \"\\u2304\",\n itemRender,\n items,\n params,\n rootClassName,\n routes,\n separator = \"/\",\n ...props\n}: BreadcrumbProps<T>) {\n const mergedItems = items ?? routes;\n const mergedParams = params ?? ({} as T);\n const paths: string[] = [];\n const content =\n mergedItems?.map((item, index) => {\n if (item.type === \"separator\") {\n return (\n <BreadcrumbSeparator key={item.key ?? index}>\n {item.separator ?? separator}\n </BreadcrumbSeparator>\n );\n }\n\n const currentPath =\n item.path == null ? undefined : replaceParams(item.path.replace(/^\\//, \"\"), mergedParams);\n if (currentPath !== undefined) paths.push(currentPath);\n const href =\n currentPath !== undefined && paths.length > 0 ? `#/${paths.join(\"/\")}` : item.href;\n const routePaths = [...paths];\n const node = itemRender\n ? itemRender(item, mergedParams, mergedItems, routePaths)\n : renderDefaultItem(\n {\n ...item,\n title:\n typeof item.title === \"string\"\n ? replaceParams(item.title, mergedParams)\n : item.title,\n },\n href,\n dropdownIcon,\n );\n\n return (\n <Fragment key={item.key ?? index}>\n <li className=\"hj-breadcrumb-item list-none\">{node}</li>\n {index < mergedItems.length - 1 && mergedItems[index + 1]?.type !== \"separator\" ? (\n <BreadcrumbSeparator>{item.separator ?? separator}</BreadcrumbSeparator>\n ) : null}\n </Fragment>\n );\n }) ?? renderChildren(children, separator);\n\n return (\n <nav\n aria-label=\"breadcrumb\"\n className={cn(\"hj-breadcrumb text-sm leading-5\", rootClassName, className)}\n {...props}\n >\n <ol className=\"m-0 flex list-none flex-wrap items-center gap-2 p-0\">{content}</ol>\n </nav>\n );\n}\n\nexport const Breadcrumb = Object.assign(BreadcrumbRoot, {\n Item: BreadcrumbItemComponent,\n Separator: BreadcrumbSeparator,\n});\n",
|
|
45
|
+
"import RcDropdown from \"@rc-component/dropdown\";\nimport type { DropdownProps as RcDropdownProps } from \"@rc-component/dropdown\";\nimport { getNodeRef, useComposeRef, useControlledState } from \"@rc-component/util\";\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n Children,\n Fragment,\n cloneElement,\n forwardRef,\n isValidElement,\n useMemo,\n useState,\n} from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Menu, type MenuItem, type MenuProps } from \"./NavigationPrimitives\";\n\nexport type DropdownPlacement =\n | \"bottom\"\n | \"bottomLeft\"\n | \"bottomRight\"\n | \"top\"\n | \"topLeft\"\n | \"topRight\"\n | \"left\"\n | \"leftTop\"\n | \"leftBottom\"\n | \"right\"\n | \"rightTop\"\n | \"rightBottom\";\nexport type DropdownTrigger = \"click\" | \"hover\" | \"contextMenu\";\n\nexport interface DropdownArrowOptions {\n readonly pointAtCenter?: boolean;\n}\n\nexport interface DropdownMenuItem extends MenuItem {\n readonly id?: string;\n}\n\nexport interface DropdownMenu extends Omit<MenuProps, \"items\"> {\n readonly activeKey?: string;\n readonly items?: readonly (DropdownMenuItem | null)[];\n}\n\ntype DropdownSlot = \"root\";\n\nexport interface DropdownProps\n extends Omit<\n RcDropdownProps,\n \"arrow\" | \"children\" | \"onVisibleChange\" | \"overlay\" | \"placement\" | \"trigger\" | \"visible\"\n > {\n readonly arrow?: boolean | DropdownArrowOptions;\n readonly children: ReactNode;\n readonly className?: string;\n readonly classNames?: Partial<Record<DropdownSlot, string>>;\n readonly defaultOpen?: boolean;\n readonly disabled?: boolean;\n readonly destroyOnHidden?: boolean;\n readonly destroyPopupOnHide?: boolean;\n readonly dropdownRender?: (originNode: ReactNode) => ReactNode;\n readonly forceRender?: boolean;\n readonly menu?: DropdownMenu;\n readonly open?: boolean;\n readonly overlay?: ReactNode;\n readonly placement?: DropdownPlacement;\n readonly popupRender?: (originNode: ReactNode) => ReactNode;\n readonly rootClassName?: string;\n readonly styles?: Partial<Record<DropdownSlot, CSSProperties>>;\n readonly trigger?: readonly DropdownTrigger[];\n readonly onOpenChange?: (open: boolean, info: { source: \"trigger\" | \"menu\" }) => void;\n}\n\nconst overflow = { adjustX: 1, adjustY: 1 };\nfunction getDropdownPlacements(pointAtCenter: boolean): NonNullable<RcDropdownProps[\"placements\"]> {\n const cornerOffset = 10;\n return {\n topLeft: pointAtCenter\n ? { points: [\"bl\", \"tc\"], offset: [-cornerOffset, -4], overflow, autoArrow: false }\n : { points: [\"bl\", \"tl\"], offset: [0, -4], overflow, autoArrow: false },\n top: { points: [\"bc\", \"tc\"], offset: [0, -4], overflow },\n topRight: pointAtCenter\n ? { points: [\"br\", \"tc\"], offset: [cornerOffset, -4], overflow, autoArrow: false }\n : { points: [\"br\", \"tr\"], offset: [0, -4], overflow, autoArrow: false },\n bottomLeft: pointAtCenter\n ? { points: [\"tl\", \"bc\"], offset: [-cornerOffset, 4], overflow, autoArrow: false }\n : { points: [\"tl\", \"bl\"], offset: [0, 4], overflow, autoArrow: false },\n bottom: { points: [\"tc\", \"bc\"], offset: [0, 4], overflow },\n bottomRight: pointAtCenter\n ? { points: [\"tr\", \"bc\"], offset: [cornerOffset, 4], overflow, autoArrow: false }\n : { points: [\"tr\", \"br\"], offset: [0, 4], overflow, autoArrow: false },\n leftTop: pointAtCenter\n ? { points: [\"tr\", \"cl\"], offset: [-4, -cornerOffset], overflow, autoArrow: false }\n : { points: [\"tr\", \"tl\"], offset: [-4, 0], overflow, autoArrow: false },\n left: { points: [\"cr\", \"cl\"], offset: [-4, 0], overflow },\n leftBottom: pointAtCenter\n ? { points: [\"br\", \"cl\"], offset: [-4, cornerOffset], overflow, autoArrow: false }\n : { points: [\"br\", \"bl\"], offset: [-4, 0], overflow, autoArrow: false },\n rightTop: pointAtCenter\n ? { points: [\"tl\", \"cr\"], offset: [4, -cornerOffset], overflow, autoArrow: false }\n : { points: [\"tl\", \"tr\"], offset: [4, 0], overflow, autoArrow: false },\n right: { points: [\"cl\", \"cr\"], offset: [4, 0], overflow },\n rightBottom: pointAtCenter\n ? { points: [\"bl\", \"cr\"], offset: [4, cornerOffset], overflow, autoArrow: false }\n : { points: [\"bl\", \"br\"], offset: [4, 0], overflow, autoArrow: false },\n };\n}\n\ntype DropdownTriggerChildProps = { readonly className?: string; readonly disabled?: boolean };\n\nfunction getDropdownChild(children: ReactNode): ReactElement<DropdownTriggerChildProps> {\n const child = Children.only(\n isValidElement(children) && children.type !== Fragment ? children : <span>{children}</span>,\n );\n return child as ReactElement<DropdownTriggerChildProps>;\n}\n\nfunction getAlignedPlacement(\n points: readonly string[] | undefined,\n fallback: DropdownPlacement,\n): DropdownPlacement {\n const placementByPoints: Record<string, DropdownPlacement> = {\n \"bc,tc\": \"top\",\n \"bl,tl\": \"topLeft\",\n \"br,tr\": \"topRight\",\n \"tc,bc\": \"bottom\",\n \"tl,bl\": \"bottomLeft\",\n \"tr,br\": \"bottomRight\",\n \"cr,cl\": \"left\",\n \"tr,tl\": \"leftTop\",\n \"br,bl\": \"leftBottom\",\n \"cl,cr\": \"right\",\n \"tl,tr\": \"rightTop\",\n \"bl,br\": \"rightBottom\",\n };\n return placementByPoints[points?.join(\",\") ?? \"\"] ?? fallback;\n}\n\nfunction getTransitionName(placement: DropdownPlacement) {\n if (placement.startsWith(\"top\")) return \"hj-slide-down\";\n if (placement.startsWith(\"left\")) return \"hj-slide-right\";\n if (placement.startsWith(\"right\")) return \"hj-slide-left\";\n return \"hj-slide-up\";\n}\n\nexport const Dropdown = forwardRef<HTMLElement, DropdownProps>(function Dropdown(\n {\n arrow,\n children,\n className = \"\",\n classNames,\n defaultOpen,\n destroyOnHidden,\n destroyPopupOnHide,\n disabled = false,\n dropdownRender,\n getPopupContainer,\n menu,\n onOpenChange,\n open,\n overlay,\n overlayClassName = \"\",\n overlayStyle,\n placement = \"bottomLeft\",\n placements,\n popupRender,\n rootClassName,\n styles,\n transitionName,\n trigger = [\"hover\"],\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const mergedDisabled = disabled || config.disabled;\n const [alignedPlacement, setAlignedPlacement] = useState<DropdownPlacement>(placement);\n const [mergedOpen, setMergedOpen] = useControlledState(defaultOpen ?? false, open);\n const pointAtCenter = typeof arrow === \"object\" && arrow.pointAtCenter === true;\n const mergedPlacements = useMemo(\n () => placements ?? getDropdownPlacements(pointAtCenter),\n [placements, pointAtCenter],\n );\n const child = getDropdownChild(children);\n const composedRef = useComposeRef(ref, getNodeRef<HTMLElement>(child));\n const triggerChild = cloneElement(child, {\n className: cn(\"hj-dropdown-trigger\", child.props.className, className),\n disabled: child.props.disabled ?? mergedDisabled,\n ref: composedRef,\n } as never);\n const menuItems = useMemo(\n () =>\n menu?.items?.map((item) =>\n item && item.key == null && item.id != null ? { ...item, key: item.id } : item,\n ),\n [menu?.items],\n );\n\n const closeFromMenu = () => {\n if (menu?.selectable && menu.multiple) return;\n setMergedOpen(false);\n onOpenChange?.(false, { source: \"menu\" });\n };\n let originNode: ReactNode = overlay;\n if (!originNode && menu) {\n const { items: _items, onClick, ...menuProps } = menu;\n originNode = (\n <Menu\n {...menuProps}\n items={menuItems}\n onClick={(info) => {\n onClick?.(info);\n closeFromMenu();\n }}\n />\n );\n }\n const popupNode = (popupRender ?? dropdownRender)?.(originNode) ?? originNode ?? <span />;\n\n return (\n <RcDropdown\n {...props}\n arrow={Boolean(arrow)}\n autoDestroy={destroyOnHidden ?? destroyPopupOnHide}\n getPopupContainer={\n getPopupContainer ??\n (config.getPopupContainer ? () => config.getPopupContainer?.() ?? document.body : undefined)\n }\n overlay={isValidElement(popupNode) ? popupNode : <span>{popupNode}</span>}\n overlayClassName={cn(\n \"hj-dropdown-root\",\n `hj-dropdown-placement-${alignedPlacement}`,\n pointAtCenter && \"hj-dropdown-arrow-center\",\n classNames?.root,\n rootClassName,\n overlayClassName,\n )}\n overlayStyle={{ ...styles?.root, ...overlayStyle }}\n placement={placement as RcDropdownProps[\"placement\"]}\n placements={mergedPlacements}\n prefixCls=\"hj-dropdown\"\n transitionName={transitionName ?? getTransitionName(placement)}\n trigger={mergedDisabled ? [] : [...trigger]}\n visible={mergedOpen}\n onPopupAlign={(_element, align) => {\n setAlignedPlacement(getAlignedPlacement(align.points, placement));\n }}\n onVisibleChange={(nextOpen) => {\n if (mergedDisabled) return;\n setMergedOpen(nextOpen);\n onOpenChange?.(nextOpen, { source: \"trigger\" });\n }}\n >\n {triggerChild}\n </RcDropdown>\n );\n});\n\nDropdown.displayName = \"Dropdown\";\n",
|
|
46
|
+
"import type { HTMLAttributes, ReactNode } from \"react\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\ntype ButtonGroupSlot = \"root\";\n\nexport interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {\n readonly attached?: boolean;\n readonly block?: boolean;\n readonly children: ReactNode;\n readonly classNames?: SlotClassNames<ButtonGroupSlot>;\n readonly separated?: boolean;\n readonly styles?: SlotStyles<ButtonGroupSlot>;\n}\n\nexport function ButtonGroup({\n attached = true,\n block = false,\n children,\n className = \"\",\n classNames,\n separated = false,\n style,\n styles,\n ...props\n}: ButtonGroupProps) {\n return (\n <div\n className={slotClass(\n classNames,\n \"root\",\n \"hj-button-group\",\n attached && \"hj-button-group-attached\",\n block && \"hj-button-group-block\",\n separated && \"hj-button-group-separated\",\n className,\n )}\n // biome-ignore lint/a11y/useSemanticElements: ButtonGroup accepts div attributes; a fieldset would change its DOM contract.\n role=\"group\"\n style={slotStyle(styles, \"root\", style)}\n {...props}\n >\n {children}\n </div>\n );\n}\n",
|
|
47
|
+
"import type { CSSProperties, HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { Children, createElement, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Skeleton } from \"./Skeleton\";\nimport { Tabs, type TabsProps } from \"./Tabs\";\n\nexport type CardSize = \"small\" | \"medium\" | \"middle\" | \"default\";\nexport type CardVariant = \"borderless\" | \"outlined\";\n\nexport interface CardTabListType {\n readonly disabled?: boolean;\n readonly key: string;\n readonly label?: ReactNode;\n /** @deprecated Use `label` instead. */\n readonly tab?: ReactNode;\n}\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n readonly actions?: readonly ReactNode[];\n readonly activeTabKey?: string;\n readonly as?: \"article\" | \"section\" | \"div\" | \"button\";\n /** @deprecated Use `styles.body` instead. */\n readonly bodyStyle?: CSSProperties;\n /** @deprecated Use `variant` instead. */\n readonly bordered?: boolean;\n readonly cover?: ReactNode;\n readonly defaultActiveTabKey?: string;\n readonly extra?: ReactNode;\n /** @deprecated Use `styles.header` instead. */\n readonly headStyle?: CSSProperties;\n readonly hoverable?: boolean;\n readonly interactive?: boolean;\n readonly loading?: boolean;\n readonly rootClassName?: string;\n readonly selected?: boolean;\n readonly size?: CardSize;\n readonly styles?: Partial<\n Record<\"actions\" | \"body\" | \"cover\" | \"extra\" | \"header\" | \"root\" | \"title\", CSSProperties>\n >;\n readonly tabBarExtraContent?: ReactNode;\n readonly tabList?: readonly CardTabListType[];\n readonly tabProps?: Omit<TabsProps, \"items\">;\n readonly title?: ReactNode;\n readonly type?: \"inner\" | \"button\";\n readonly variant?: CardVariant;\n readonly onTabChange?: (key: string) => void;\n}\n\nexport interface CardMetaProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n readonly avatar?: ReactNode;\n readonly description?: ReactNode;\n readonly title?: ReactNode;\n}\n\nexport interface CardGridProps extends HTMLAttributes<HTMLDivElement> {\n readonly hoverable?: boolean;\n}\n\nfunction CardMeta({ avatar, children, className, description, title, ...props }: CardMetaProps) {\n return (\n <div className={cn(\"hj-card-meta flex min-w-0 gap-3\", className)} {...props}>\n {avatar != null ? <div className=\"hj-card-meta-avatar shrink-0\">{avatar}</div> : null}\n {title != null || description != null || children != null ? (\n <div className=\"hj-card-meta-section min-w-0 flex-1\">\n {title != null ? (\n <div className=\"hj-card-meta-title font-medium text-[var(--hj-color-web-foreground)]\">\n {title}\n </div>\n ) : null}\n {description != null ? (\n <div className=\"hj-card-meta-description mt-1 text-sm text-[var(--hj-color-web-muted)]\">\n {description}\n </div>\n ) : null}\n {children}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction CardGrid({ children, className, hoverable = true, ...props }: CardGridProps) {\n return (\n <div\n className={cn(\n \"hj-card-grid box-border inline-block w-1/3 border border-[var(--hj-color-web-border)] p-4 align-top\",\n hoverable && \"hj-card-grid-hoverable transition hover:shadow-[var(--hj-shadow-sm)]\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction CardRoot({\n actions,\n activeTabKey,\n as: Component = \"div\",\n bodyStyle,\n bordered,\n children,\n className = \"\",\n cover,\n defaultActiveTabKey,\n extra,\n headStyle,\n hoverable = false,\n interactive = false,\n loading = false,\n onTabChange,\n rootClassName,\n selected = false,\n size = \"medium\",\n style,\n styles,\n tabBarExtraContent,\n tabList,\n tabProps,\n title,\n type,\n variant,\n ...props\n}: CardProps): ReactElement {\n const [internalTabKey, setInternalTabKey] = useState(defaultActiveTabKey ?? tabList?.[0]?.key);\n const mergedTabKey = activeTabKey ?? internalTabKey;\n const interactiveClass = interactive || hoverable ? \"transition hover:bg-[#30333c]\" : \"\";\n const selectedClass = selected\n ? \"bg-[#3a321f] shadow-[inset_0_0_0_1px_rgba(255,204,51,0.75)]\"\n : \"bg-[#20232c]\";\n const mergedVariant = variant ?? (bordered === false ? \"borderless\" : \"outlined\");\n const showBorder = variant === \"outlined\" || bordered === true;\n const tabBar = tabList?.length ? (\n <Tabs\n {...tabProps}\n activeKey={mergedTabKey}\n items={tabList.map((tab) => ({\n children: null,\n disabled: tab.disabled,\n key: tab.key,\n label: tab.label ?? tab.tab,\n }))}\n styles={{ ...tabProps?.styles, body: { display: \"none\", ...tabProps?.styles?.body } }}\n tabBarExtraContent={tabBarExtraContent ?? tabProps?.tabBarExtraContent}\n onChange={(key) => {\n if (activeTabKey === undefined) setInternalTabKey(key);\n tabProps?.onChange?.(key);\n onTabChange?.(key);\n }}\n />\n ) : null;\n const content = (\n <>\n {cover != null ? (\n <div className=\"hj-card-cover\" style={styles?.cover}>\n {cover}\n </div>\n ) : null}\n {title != null || extra != null ? (\n <div\n className=\"hj-card-header flex min-w-0 items-center justify-between gap-4 px-4 py-3\"\n style={{ ...headStyle, ...styles?.header }}\n >\n {title != null ? (\n <div className=\"hj-card-title min-w-0 font-medium\" style={styles?.title}>\n {title}\n </div>\n ) : null}\n {extra != null ? (\n <div className=\"hj-card-extra shrink-0\" style={styles?.extra}>\n {extra}\n </div>\n ) : null}\n </div>\n ) : null}\n {tabBar}\n <div className=\"hj-card-body\" style={{ ...bodyStyle, ...styles?.body }}>\n {loading ? <Skeleton active loading /> : children}\n </div>\n {actions?.length ? (\n <ul\n className=\"hj-card-actions m-0 flex list-none border-t border-[var(--hj-color-web-border)] p-0\"\n style={styles?.actions}\n >\n {Children.map(actions, (action) => (\n <li className=\"flex flex-1 items-center justify-center px-3 py-2\">{action}</li>\n ))}\n </ul>\n ) : null}\n </>\n );\n const rootProps = {\n ...props,\n className: cn(\n \"hj-card rounded-[8px]\",\n `hj-card-${mergedVariant}`,\n `hj-card-size-${size}`,\n type === \"inner\" && \"hj-card-type-inner\",\n showBorder && \"border border-[var(--hj-color-web-border)]\",\n selectedClass,\n interactiveClass,\n rootClassName,\n className,\n ),\n style: { ...styles?.root, ...style },\n ...(Component === \"button\" && type === \"button\" ? { type: \"button\" as const } : {}),\n };\n\n return createElement(Component, rootProps, content);\n}\n\nexport const Card = Object.assign(CardRoot, {\n Grid: CardGrid,\n Meta: CardMeta,\n});\n",
|
|
48
|
+
"import type { CSSProperties, ReactNode } from \"react\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\ntype SkeletonSlot =\n | \"root\"\n | \"header\"\n | \"avatar\"\n | \"section\"\n | \"title\"\n | \"paragraph\"\n | \"row\"\n | \"element\";\nexport type SkeletonSize =\n | \"small\"\n | \"medium\"\n | \"middle\"\n | \"default\"\n | \"large\"\n | \"sm\"\n | \"md\"\n | \"lg\"\n | number;\nexport type SkeletonShape = \"circle\" | \"square\" | \"round\" | \"default\";\n\nexport interface SkeletonProps {\n readonly active?: boolean;\n readonly avatar?:\n | boolean\n | { readonly size?: SkeletonSize; readonly shape?: \"circle\" | \"square\" };\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: SlotClassNames<SkeletonSlot>;\n readonly loading?: boolean;\n readonly paragraph?:\n | boolean\n | { readonly rows?: number; readonly width?: number | string | readonly (number | string)[] };\n readonly round?: boolean;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<SkeletonSlot>;\n readonly title?: boolean | { readonly width?: number | string };\n}\n\nexport interface SkeletonElementProps {\n readonly active?: boolean;\n readonly className?: string;\n readonly shape?: SkeletonShape;\n readonly size?: SkeletonSize;\n readonly style?: CSSProperties;\n}\n\nexport interface SkeletonButtonProps extends SkeletonElementProps {\n readonly block?: boolean;\n}\n\nfunction getSizeStyle(size?: SkeletonSize): CSSProperties {\n if (size === undefined) return {};\n if (typeof size === \"number\") return { height: size, width: size };\n if (size === \"sm\" || size === \"small\")\n return { height: \"var(--hj-skeleton-size-sm)\", width: \"var(--hj-skeleton-size-sm)\" };\n if (size === \"lg\" || size === \"large\")\n return { height: \"var(--hj-skeleton-size-lg)\", width: \"var(--hj-skeleton-size-lg)\" };\n return { height: \"var(--hj-skeleton-size-md)\", width: \"var(--hj-skeleton-size-md)\" };\n}\n\nfunction widthAt(\n index: number,\n rows: number,\n width?: number | string | readonly (number | string)[],\n) {\n if (Array.isArray(width)) return width[index];\n if (index === rows - 1) return width ?? \"61%\";\n return undefined;\n}\n\nfunction SkeletonElement({\n active = false,\n className = \"\",\n shape = \"round\",\n size,\n style,\n}: SkeletonElementProps) {\n return (\n <span\n aria-hidden=\"true\"\n className={slotClass(\n undefined,\n \"element\",\n \"hj-skeleton-element block bg-[var(--hj-skeleton-bg)]\",\n active && \"hj-skeleton-active\",\n shape === \"circle\"\n ? \"rounded-full\"\n : shape === \"square\" || shape === \"default\"\n ? \"rounded-[var(--hj-skeleton-radius-square)]\"\n : \"rounded-[var(--hj-skeleton-radius)]\",\n className,\n )}\n style={{ ...getSizeStyle(size), ...style }}\n />\n );\n}\n\nfunction SkeletonButton({\n active = false,\n block = false,\n className = \"\",\n shape = \"default\",\n size = \"medium\",\n style,\n}: SkeletonButtonProps) {\n return (\n <SkeletonElement\n active={active}\n className={slotClass(\n undefined,\n \"element\",\n \"hj-skeleton-button\",\n block && \"w-full\",\n className,\n )}\n shape={shape}\n size={undefined}\n style={{\n height:\n size === \"sm\" || size === \"small\"\n ? \"var(--hj-button-sm-height)\"\n : size === \"lg\" || size === \"large\"\n ? \"var(--hj-button-lg-height)\"\n : \"var(--hj-button-md-height)\",\n width: block\n ? \"100%\"\n : size === \"sm\" || size === \"small\"\n ? \"var(--hj-button-sm-min-width)\"\n : size === \"lg\" || size === \"large\"\n ? \"var(--hj-button-lg-min-width)\"\n : \"var(--hj-button-md-min-width)\",\n ...style,\n }}\n />\n );\n}\n\nfunction SkeletonAvatar(props: SkeletonElementProps) {\n return (\n <SkeletonElement\n {...props}\n className={slotClass(undefined, \"element\", \"hj-skeleton-avatar\", props.className)}\n shape={props.shape ?? \"circle\"}\n size={props.size ?? \"large\"}\n />\n );\n}\n\nfunction SkeletonInput({\n active = false,\n block = false,\n className = \"\",\n size = \"medium\",\n style,\n}: SkeletonButtonProps) {\n return (\n <SkeletonElement\n active={active}\n className={slotClass(undefined, \"element\", \"hj-skeleton-input\", block && \"w-full\", className)}\n size={undefined}\n style={{\n height:\n size === \"sm\" || size === \"small\"\n ? \"var(--hj-input-height-sm)\"\n : size === \"lg\" || size === \"large\"\n ? \"var(--hj-input-height-lg)\"\n : \"var(--hj-input-height-md)\",\n width: block ? \"100%\" : 220,\n ...style,\n }}\n />\n );\n}\n\nfunction SkeletonImage({ active = false, className = \"\", style }: SkeletonElementProps) {\n return (\n <SkeletonElement\n active={active}\n className={slotClass(undefined, \"element\", \"hj-skeleton-image\", className)}\n shape=\"square\"\n style={{ height: 96, width: 96, ...style }}\n />\n );\n}\n\nfunction SkeletonNode({\n active = false,\n children,\n className = \"\",\n style,\n}: SkeletonElementProps & { readonly children?: ReactNode }) {\n return (\n <span\n className={slotClass(\n undefined,\n \"element\",\n \"hj-skeleton-node inline-flex items-center justify-center bg-[var(--hj-skeleton-bg)]\",\n active && \"hj-skeleton-active\",\n className,\n )}\n style={style}\n >\n {children}\n </span>\n );\n}\n\nfunction SkeletonRoot({\n active = false,\n avatar = false,\n children,\n className = \"\",\n classNames,\n loading,\n paragraph = true,\n round = false,\n style,\n styles,\n title = true,\n}: SkeletonProps) {\n if (loading === false) return children ?? null;\n\n const hasAvatar = Boolean(avatar);\n const hasTitle = Boolean(title);\n const hasParagraph = Boolean(paragraph);\n const avatarConfig = typeof avatar === \"object\" ? avatar : {};\n const titleConfig = typeof title === \"object\" ? title : {};\n const paragraphConfig = typeof paragraph === \"object\" ? paragraph : {};\n const rows = paragraphConfig.rows ?? (hasAvatar && hasTitle ? 2 : 3);\n const rowKeys = Array.from({ length: rows }, (_, index) => `skeleton-row-${index}`);\n\n return (\n <div\n aria-busy=\"true\"\n className={slotClass(\n classNames,\n \"root\",\n \"hj-skeleton flex w-full gap-[var(--hj-skeleton-gap)]\",\n active && \"hj-skeleton-active-root\",\n round && \"hj-skeleton-round\",\n className,\n )}\n style={slotStyle(styles, \"root\", style)}\n >\n {hasAvatar ? (\n <div\n className={slotClass(classNames, \"header\", \"shrink-0\")}\n style={slotStyle(styles, \"header\")}\n >\n <SkeletonElement\n active={active}\n className={classNames?.avatar}\n shape={avatarConfig.shape ?? \"circle\"}\n size={avatarConfig.size ?? \"lg\"}\n style={slotStyle(styles, \"avatar\")}\n />\n </div>\n ) : null}\n {hasTitle || hasParagraph ? (\n <div\n className={slotClass(classNames, \"section\", \"min-w-0 flex-1\")}\n style={slotStyle(styles, \"section\")}\n >\n {hasTitle ? (\n <span\n className={slotClass(\n classNames,\n \"title\",\n \"mb-[var(--hj-skeleton-title-margin)] block h-[var(--hj-skeleton-title-height)] bg-[var(--hj-skeleton-bg)]\",\n active && \"hj-skeleton-active\",\n round && \"rounded-[var(--hj-skeleton-radius)]\",\n )}\n style={slotStyle(styles, \"title\", {\n width: titleConfig.width ?? (hasAvatar ? \"50%\" : \"38%\"),\n })}\n />\n ) : null}\n {hasParagraph ? (\n <ul\n className={slotClass(\n classNames,\n \"paragraph\",\n \"m-0 list-none space-y-[var(--hj-skeleton-row-gap)] p-0\",\n )}\n style={slotStyle(styles, \"paragraph\")}\n >\n {rowKeys.map((rowKey, index) => (\n <li\n className={slotClass(\n classNames,\n \"row\",\n \"h-[var(--hj-skeleton-row-height)] bg-[var(--hj-skeleton-bg)]\",\n active && \"hj-skeleton-active\",\n round && \"rounded-[var(--hj-skeleton-radius)]\",\n )}\n key={rowKey}\n style={slotStyle(styles, \"row\", {\n width: widthAt(index, rows, paragraphConfig.width),\n })}\n />\n ))}\n </ul>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport const Skeleton = Object.assign(SkeletonRoot, {\n Avatar: SkeletonAvatar,\n Button: SkeletonButton,\n Element: SkeletonElement,\n Image: SkeletonImage,\n Input: SkeletonInput,\n Node: SkeletonNode,\n});\n",
|
|
49
|
+
"import RcTabs from \"@rc-component/tabs\";\nimport type {\n AnimatedConfig,\n EditableConfig,\n MoreProps,\n TabPaneProps as RcTabPaneProps,\n TabsProps as RcTabsProps,\n Tab,\n} from \"@rc-component/tabs\";\nimport { toArray } from \"@rc-component/util\";\nimport { forwardRef, isValidElement } from \"react\";\nimport type { CSSProperties, ComponentRef, FC, KeyboardEvent, MouseEvent, ReactNode } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\n\nexport type AntdTabsType = \"line\" | \"card\" | \"editable-card\";\nexport type TabsExtensionType = \"boxed\" | \"segmented\" | \"glow-pill\";\nexport type TabsType = AntdTabsType | TabsExtensionType;\nexport type TabsPosition = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface CompatibilityProps {\n /** @deprecated Use `destroyOnHidden` instead. */\n readonly destroyInactiveTabPane?: boolean;\n}\n\nexport type TabPaneProps = RcTabPaneProps & CompatibilityProps;\nexport type RcTabsRef = ComponentRef<typeof RcTabs>;\n\nexport interface TabsItem extends Omit<Tab, \"children\" | \"key\" | \"label\">, CompatibilityProps {\n readonly children?: ReactNode;\n readonly closable?: boolean;\n readonly closeIcon?: ReactNode;\n readonly disabled?: boolean;\n readonly forceRender?: boolean;\n readonly icon?: ReactNode;\n readonly key: string;\n readonly label: ReactNode;\n}\n\ntype TabsSlot = \"root\" | \"item\" | \"remove\" | \"indicator\" | \"body\" | \"content\" | \"header\" | \"popup\";\n\nexport interface TabsProps\n extends CompatibilityProps,\n Omit<\n RcTabsProps,\n | \"animated\"\n | \"classNames\"\n | \"editable\"\n | \"items\"\n | \"more\"\n | \"onEdit\"\n | \"popupClassName\"\n | \"styles\"\n | \"tabPosition\"\n > {\n readonly addIcon?: ReactNode;\n readonly animated?: boolean | AnimatedConfig;\n readonly centered?: boolean;\n readonly classNames?: Partial<Record<TabsSlot, string>>;\n readonly children?: ReactNode;\n readonly fullWidth?: boolean;\n readonly hideAdd?: boolean;\n readonly items?: readonly TabsItem[];\n readonly more?: MoreProps;\n readonly moreIcon?: ReactNode;\n readonly popupClassName?: string;\n readonly removeIcon?: ReactNode;\n readonly rootClassName?: string;\n readonly styles?: Partial<Record<TabsSlot, CSSProperties>>;\n readonly tabPosition?: TabsPosition;\n readonly type?: TabsType;\n readonly onEdit?: (\n targetKey: MouseEvent | KeyboardEvent | string,\n action: \"add\" | \"remove\",\n ) => void;\n}\n\nconst defaultAddIcon = <span aria-hidden=\"true\">+</span>;\nconst defaultRemoveIcon = <span aria-hidden=\"true\">×</span>;\nconst defaultMoreIcon = <span aria-hidden=\"true\">…</span>;\n\nfunction normalizeItem(item: TabsItem): Tab {\n const { destroyInactiveTabPane, destroyOnHidden, ...restItem } = item;\n return {\n ...restItem,\n destroyOnHidden: destroyOnHidden ?? destroyInactiveTabPane,\n };\n}\n\nfunction getLegacyItems(items: readonly TabsItem[] | undefined, children: ReactNode): Tab[] {\n if (items) return items.map(normalizeItem);\n\n return toArray(children).flatMap((node) => {\n if (!isValidElement<TabPaneProps>(node)) return [];\n\n const { destroyInactiveTabPane, destroyOnHidden, tab, ...restProps } = node.props;\n return [\n {\n ...restProps,\n destroyOnHidden: destroyOnHidden ?? destroyInactiveTabPane,\n key: String(node.key),\n label: tab,\n },\n ];\n });\n}\n\nfunction resolveEditable({\n addIcon,\n hideAdd,\n onEdit,\n removeIcon,\n type,\n}: Pick<TabsProps, \"addIcon\" | \"hideAdd\" | \"onEdit\" | \"removeIcon\" | \"type\">):\n | EditableConfig\n | undefined {\n if (type !== \"editable-card\") return undefined;\n return {\n addIcon: addIcon ?? defaultAddIcon,\n removeIcon: removeIcon ?? defaultRemoveIcon,\n showAdd: hideAdd !== true,\n onEdit: (editType, info) => {\n onEdit?.(editType === \"add\" ? info.event : (info.key ?? \"\"), editType);\n },\n };\n}\n\nconst TabPane: FC<TabPaneProps> = () => null;\nTabPane.displayName = \"Tabs.TabPane\";\n\nconst InternalTabs = forwardRef<RcTabsRef, TabsProps>(function InternalTabs(\n {\n addIcon,\n animated,\n centered = false,\n children,\n className = \"\",\n classNames,\n destroyInactiveTabPane,\n destroyOnHidden,\n fullWidth = false,\n getPopupContainer,\n hideAdd,\n items,\n locale,\n more,\n moreIcon,\n onEdit,\n popupClassName,\n removeIcon,\n rootClassName: customRootClassName,\n style,\n styles,\n tabPosition = \"top\",\n type = \"line\",\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const editable = resolveEditable({ addIcon, hideAdd, onEdit, removeIcon, type });\n const rcType = type === \"card\" || type === \"editable-card\" ? \"card\" : \"line\";\n const mergedItems = getLegacyItems(items, children);\n const mergedRootClassName = cn(\n \"hj-tabs-root min-w-0\",\n `hj-tabs-${type}`,\n rcType === \"card\" && \"hj-tabs-card\",\n type === \"editable-card\" && \"hj-tabs-editable-card\",\n centered && \"hj-tabs-centered\",\n fullWidth && \"hj-tabs-full\",\n classNames?.root,\n customRootClassName,\n className,\n );\n\n return (\n <RcTabs\n {...props}\n ref={ref}\n animated={animated}\n className={mergedRootClassName}\n data-996-tabs-extension={\n type === \"boxed\" || type === \"segmented\" || type === \"glow-pill\" ? type : undefined\n }\n classNames={{\n body: classNames?.body,\n content: classNames?.content,\n header: classNames?.header,\n indicator: classNames?.indicator,\n item: classNames?.item,\n popup: cn(popupClassName, classNames?.popup),\n remove: classNames?.remove,\n }}\n destroyOnHidden={destroyOnHidden ?? destroyInactiveTabPane}\n editable={editable}\n getPopupContainer={getPopupContainer ?? config.getPopupContainer}\n items={mergedItems}\n locale={{\n addAriaLabel: \"新增页签\",\n dropdownAriaLabel: \"更多页签\",\n removeAriaLabel: \"关闭页签\",\n ...locale,\n }}\n more={{\n icon: moreIcon ?? defaultMoreIcon,\n ...more,\n }}\n prefixCls=\"hj-tabs\"\n style={{ ...styles?.root, ...style }}\n styles={{\n body: styles?.body,\n content: styles?.content,\n header: styles?.header,\n indicator: styles?.indicator,\n item: styles?.item,\n popup: styles?.popup,\n remove: styles?.remove,\n }}\n tabPosition={tabPosition}\n />\n );\n});\n\ntype CompoundedTabs = typeof InternalTabs & { TabPane: typeof TabPane };\n\nexport const Tabs = InternalTabs as CompoundedTabs;\nTabs.TabPane = TabPane;\nTabs.displayName = \"Tabs\";\n",
|
|
50
|
+
"import Slider, { type Settings as SlickSettings } from \"@996-design/996-slick\";\nimport { warning } from \"@996-design/996-utils\";\nimport { toArray } from \"@rc-component/util\";\nimport {\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Icon } from \"./Icon\";\n\nexport type Settings = SlickSettings;\nexport type CarouselEffect = \"scrollx\" | \"fade\";\nexport type DotPlacement = \"top\" | \"bottom\" | \"start\" | \"end\";\nexport type CarouselAutoPlayType = \"update\" | \"leave\" | \"blur\";\ntype SliderRef = InstanceType<typeof Slider>;\n\ntype SlickInnerSlider = NonNullable<SliderRef[\"innerSlider\"]> & {\n autoPlay: (playType?: CarouselAutoPlayType) => void;\n};\n\ntype SlickRuntimeRef = Omit<SliderRef, \"innerSlider\"> & {\n innerSlider?: SlickInnerSlider;\n};\n\nexport interface CarouselRef {\n autoPlay: (playType?: CarouselAutoPlayType) => void;\n goTo: (slide: number, dontAnimate?: boolean) => void;\n innerSlider: SlickInnerSlider | null;\n next: () => void;\n prev: () => void;\n}\n\nexport interface CarouselItem {\n readonly alt?: string;\n readonly content?: ReactNode;\n readonly id: string;\n readonly imageUrl?: string;\n}\n\n/** @deprecated Use the AntD-compatible `dots` prop instead. */\nexport type CarouselIndicator = \"dots\" | \"none\";\n\ntype CarouselSlot =\n | \"root\"\n | \"viewport\"\n | \"track\"\n | \"slide\"\n | \"image\"\n | \"placeholder\"\n | \"arrow\"\n | \"prev\"\n | \"next\"\n | \"indicators\"\n | \"indicator\";\n\nexport interface CarouselProps extends Omit<SlickSettings, \"autoplay\" | \"dots\" | \"dotsClass\"> {\n readonly autoplay?: boolean | { readonly dotDuration?: boolean };\n readonly children?: ReactNode;\n readonly classNames?: SlotClassNames<CarouselSlot>;\n readonly dotPlacement?: DotPlacement;\n /** @deprecated Use `dotPlacement` instead. */\n readonly dotPosition?: DotPlacement | \"left\" | \"right\";\n readonly dots?: boolean | { readonly className?: string };\n readonly effect?: CarouselEffect;\n readonly id?: string;\n readonly prefixCls?: string;\n readonly rootClassName?: string;\n readonly slickGoTo?: number;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<CarouselSlot>;\n readonly waitForAnimate?: boolean;\n\n /** @deprecated Additive adapter for the former 996 Carousel API. Use `initialSlide` and the ref API. */\n readonly activeIndex?: number;\n /** @deprecated Additive adapter for the former 996 Carousel API. */\n readonly ariaLabel?: string;\n /** @deprecated Additive adapter for the former 996 Carousel API. Use `dots`. */\n readonly indicator?: CarouselIndicator;\n /** @deprecated Additive adapter for the former 996 Carousel API. Render slides as children. */\n readonly items?: readonly CarouselItem[];\n /** @deprecated Additive adapter for the former 996 Carousel API. Use `nextArrow`. */\n readonly nextAriaLabel?: string;\n /** @deprecated Additive adapter for the former 996 Carousel API. Use `afterChange`. */\n readonly onChange?: (index: number) => void;\n /** @deprecated Additive adapter for the former 996 Carousel API. Put the handler on slide children. */\n readonly onItemClick?: () => void;\n /** @deprecated Additive adapter for the former 996 Carousel API. */\n readonly placeholder?: ReactNode;\n /** @deprecated Additive adapter for the former 996 Carousel API. Use `prevArrow`. */\n readonly prevAriaLabel?: string;\n /** @deprecated Additive adapter for the former 996 Carousel API. Use `arrows`. */\n readonly showArrows?: boolean;\n}\n\ninterface ArrowButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n readonly classNames?: SlotClassNames<CarouselSlot>;\n readonly currentSlide?: number;\n readonly direction: \"prev\" | \"next\";\n readonly label: string;\n readonly slideCount?: number;\n readonly styles?: SlotStyles<CarouselSlot>;\n readonly vertical?: boolean;\n}\n\nfunction ArrowButton({\n className,\n classNames,\n currentSlide: _currentSlide,\n direction,\n label,\n slideCount: _slideCount,\n style,\n styles,\n vertical = false,\n ...buttonProps\n}: ArrowButtonProps) {\n const disabled = className?.split(/\\s+/).includes(\"slick-disabled\") ?? false;\n const placementStyle: CSSProperties = vertical\n ? {\n insetBlockEnd: direction === \"next\" ? 12 : \"auto\",\n insetBlockStart: direction === \"prev\" ? 12 : \"auto\",\n insetInlineStart: \"50%\",\n transform: \"translateX(-50%)\",\n }\n : {\n insetInlineEnd: direction === \"next\" ? 12 : \"auto\",\n insetInlineStart: direction === \"prev\" ? 12 : \"auto\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n };\n const baseStyle: CSSProperties = {\n ...style,\n ...placementStyle,\n alignItems: \"center\",\n backdropFilter: \"blur(8px)\",\n background: \"var(--hj-carousel-arrow-bg)\",\n border: \"1px solid var(--hj-carousel-arrow-border)\",\n borderRadius: \"50%\",\n boxShadow: \"0 8px 20px rgb(0 0 0 / 24%)\",\n color: \"rgb(255 255 255 / 75%)\",\n cursor: \"pointer\",\n display: \"inline-flex\",\n height: 36,\n justifyContent: \"center\",\n opacity: disabled ? 0 : 1,\n padding: 0,\n pointerEvents: disabled ? \"none\" : undefined,\n position: \"absolute\",\n transition: \"background-color 160ms ease, color 160ms ease, opacity 160ms ease\",\n width: 36,\n zIndex: 2,\n };\n\n return (\n <button\n {...buttonProps}\n aria-label={label}\n className={slotClass(\n classNames,\n direction,\n slotClass(\n classNames,\n \"arrow\",\n \"absolute top-1/2 z-[2] inline-flex h-9 w-9 -translate-y-1/2 items-center justify-center rounded-full border border-[var(--hj-carousel-arrow-border)] bg-[var(--hj-carousel-arrow-bg)] p-0 text-white/75 shadow-[0_8px_20px_rgba(0,0,0,0.24)] backdrop-blur transition hover:bg-[var(--hj-carousel-arrow-bg-hover)] hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--hj-color-brand)] active:scale-95 motion-reduce:transition-none [&.slick-disabled]:pointer-events-none [&.slick-disabled]:opacity-0\",\n vertical\n ? direction === \"prev\"\n ? \"top-3 left-1/2 -translate-x-1/2 translate-y-0\"\n : \"top-auto bottom-3 left-1/2 -translate-x-1/2 translate-y-0\"\n : direction === \"prev\"\n ? \"left-3\"\n : \"right-3\",\n className,\n ),\n )}\n style={slotStyle(styles, direction, slotStyle(styles, \"arrow\", baseStyle))}\n type=\"button\"\n >\n <Icon\n className={vertical ? \"rotate-90\" : undefined}\n name={direction === \"prev\" ? \"back\" : \"chevron-right\"}\n size={20}\n strokeWidth={2.4}\n />\n </button>\n );\n}\n\nfunction normalizeIndex(index: number, count: number) {\n if (count <= 0) return 0;\n return ((index % count) + count) % count;\n}\n\nfunction resolveDotPlacement(\n dotPlacement: DotPlacement | undefined,\n dotPosition: CarouselProps[\"dotPosition\"],\n): DotPlacement {\n const placement = dotPlacement ?? dotPosition ?? \"bottom\";\n if (placement === \"left\") return \"start\";\n if (placement === \"right\") return \"end\";\n return placement;\n}\n\nconst horizontalDotsClass =\n \"absolute inset-x-0 bottom-0 z-[15] !flex list-none justify-center p-0 m-0 [&>li]:relative [&>li]:mx-1 [&>li]:h-2 [&>li]:w-2 [&>li]:overflow-hidden [&>li]:rounded-full [&>li]:transition-all [&>li.slick-active]:w-5 [&>li>button]:block [&>li>button]:h-full [&>li>button]:w-full [&>li>button]:cursor-pointer [&>li>button]:rounded-full [&>li>button]:border-0 [&>li>button]:bg-[var(--hj-carousel-dot-bg)] [&>li>button]:p-0 [&>li>button]:text-[0] [&>li>button]:opacity-70 [&>li>button]:transition [&>li>button:hover]:bg-[var(--hj-carousel-dot-bg-hover)] [&>li.slick-active>button]:bg-[var(--hj-carousel-dot-active)] [&>li.slick-active>button]:opacity-100 motion-reduce:[&>li]:transition-none motion-reduce:[&>li>button]:transition-none\";\n\nconst verticalDotsClass =\n \"absolute top-1/2 z-[15] !flex h-auto w-2 -translate-y-1/2 flex-col p-0 m-0 list-none [&>li]:relative [&>li]:my-1 [&>li]:h-2 [&>li]:w-2 [&>li]:overflow-hidden [&>li]:rounded-full [&>li]:transition-all [&>li.slick-active]:h-5 [&>li>button]:block [&>li>button]:h-full [&>li>button]:w-full [&>li>button]:cursor-pointer [&>li>button]:rounded-full [&>li>button]:border-0 [&>li>button]:bg-[var(--hj-carousel-dot-bg)] [&>li>button]:p-0 [&>li>button]:text-[0] [&>li>button]:opacity-70 [&>li>button]:transition [&>li>button:hover]:bg-[var(--hj-carousel-dot-bg-hover)] [&>li.slick-active>button]:bg-[var(--hj-carousel-dot-active)] [&>li.slick-active>button]:opacity-100 motion-reduce:[&>li]:transition-none motion-reduce:[&>li>button]:transition-none\";\n\nfunction renderLegacySlides({\n activeIndex,\n classNames,\n items,\n onItemClick,\n placeholder,\n styles,\n}: Pick<\n CarouselProps,\n \"activeIndex\" | \"classNames\" | \"items\" | \"onItemClick\" | \"placeholder\" | \"styles\"\n>) {\n const legacyItems = items ?? [];\n const currentIndex = normalizeIndex(activeIndex ?? 0, legacyItems.length);\n\n if (legacyItems.length === 0) {\n return (\n <div\n className={slotClass(classNames, \"slide\", \"relative h-full w-full overflow-hidden\")}\n key=\"__empty\"\n style={slotStyle(styles, \"slide\")}\n >\n <span\n className={slotClass(\n classNames,\n \"placeholder\",\n \"flex h-full w-full items-center justify-center text-sm text-white/45\",\n )}\n style={slotStyle(styles, \"placeholder\")}\n >\n {placeholder}\n </span>\n </div>\n );\n }\n\n return legacyItems.map((item, index) => {\n const content = item.imageUrl ? (\n <img\n alt={index === currentIndex ? (item.alt ?? \"\") : \"\"}\n className={slotClass(classNames, \"image\", \"h-full w-full object-cover\")}\n draggable={false}\n src={item.imageUrl}\n style={slotStyle(styles, \"image\")}\n />\n ) : item.content ? (\n item.content\n ) : (\n <span\n className={slotClass(\n classNames,\n \"placeholder\",\n \"flex h-full w-full items-center justify-center text-sm text-white/45\",\n )}\n style={slotStyle(styles, \"placeholder\")}\n >\n {placeholder}\n </span>\n );\n\n return (\n <div\n className={slotClass(classNames, \"slide\", \"relative h-full w-full overflow-hidden\")}\n key={item.id}\n style={slotStyle(styles, \"slide\")}\n >\n {onItemClick ? (\n <button\n className={slotClass(\n classNames,\n \"viewport\",\n \"block h-full w-full cursor-pointer overflow-hidden border-0 bg-transparent p-0 text-left\",\n )}\n onClick={onItemClick}\n style={slotStyle(styles, \"viewport\")}\n type=\"button\"\n >\n {content}\n </button>\n ) : (\n content\n )}\n </div>\n );\n });\n}\n\nexport const Carousel = forwardRef<CarouselRef, CarouselProps>(function Carousel(\n {\n activeIndex,\n afterChange,\n ariaLabel,\n arrows,\n autoplay = false,\n autoplaySpeed = 3000,\n children,\n className,\n classNames,\n dotPlacement,\n dotPosition,\n dots,\n draggable = false,\n effect = \"scrollx\",\n id,\n indicator,\n initialSlide = 0,\n items,\n nextAriaLabel,\n nextArrow,\n onChange,\n onItemClick,\n placeholder = \"暂无图片\",\n prefixCls = \"hj-carousel\",\n prevAriaLabel,\n prevArrow,\n rootClassName,\n rtl = false,\n showArrows,\n slickGoTo,\n speed = 500,\n style,\n styles,\n useCSS = true,\n vertical,\n waitForAnimate = false,\n ...settings\n },\n ref,\n) {\n const reducedMotion = useReducedMotion();\n const sliderRef = useRef<SliderRef | null>(null);\n const nativeChildren = toArray(children);\n const useLegacyItems = nativeChildren.length === 0 && items !== undefined;\n const sliderChildren = useLegacyItems\n ? renderLegacySlides({ activeIndex, classNames, items, onItemClick, placeholder, styles })\n : children;\n const childCount = useLegacyItems ? Math.max(items?.length ?? 0, 1) : nativeChildren.length;\n const legacyItemCount = items?.length ?? 0;\n const mergedDotPlacement = resolveDotPlacement(dotPlacement, dotPosition);\n const mergedVertical =\n vertical ?? (mergedDotPlacement === \"start\" || mergedDotPlacement === \"end\");\n const isRTL = rtl && !mergedVertical;\n const isLegacyAdapter = items !== undefined;\n const requestedSlide = activeIndex ?? slickGoTo ?? initialSlide;\n const targetSlide =\n activeIndex === undefined ? requestedSlide : normalizeIndex(requestedSlide, childCount);\n const mergedArrows =\n arrows ?? (showArrows !== undefined ? showArrows : isLegacyAdapter && legacyItemCount > 1);\n const mergedDots =\n typeof dots === \"boolean\"\n ? dots\n : dots\n ? true\n : indicator !== undefined\n ? indicator === \"dots\"\n : isLegacyAdapter\n ? legacyItemCount > 1\n : true;\n const dotsClassName = slotClass(\n classNames,\n \"indicators\",\n \"slick-dots\",\n `slick-dots-${mergedDotPlacement}`,\n mergedVertical ? verticalDotsClass : horizontalDotsClass,\n mergedDotPlacement === \"top\" && \"top-3 bottom-auto\",\n mergedDotPlacement === \"bottom\" && \"bottom-3\",\n mergedVertical && mergedDotPlacement === \"start\" && \"left-3 right-auto\",\n mergedVertical && mergedDotPlacement === \"end\" && \"right-3 left-auto\",\n typeof dots === \"object\" && dots.className,\n );\n const showDotDuration = Boolean(autoplay && typeof autoplay === \"object\" && autoplay.dotDuration);\n const dotDurationStyle = showDotDuration\n ? ({ \"--dot-duration\": `${autoplaySpeed}ms` } as CSSProperties)\n : undefined;\n\n useImperativeHandle(\n ref,\n () => ({\n autoPlay(playType) {\n (sliderRef.current as SlickRuntimeRef | null)?.innerSlider?.autoPlay(playType);\n },\n goTo(slide, dontAnimate = false) {\n sliderRef.current?.slickGoTo(slide, dontAnimate);\n },\n get innerSlider() {\n return (sliderRef.current as SlickRuntimeRef | null)?.innerSlider ?? null;\n },\n next() {\n sliderRef.current?.slickNext();\n },\n prev() {\n sliderRef.current?.slickPrev();\n },\n }),\n [],\n );\n\n useEffect(() => {\n if (childCount <= 0) return;\n const nextIndex = isRTL ? childCount - targetSlide - 1 : targetSlide;\n sliderRef.current?.slickGoTo(nextIndex, false);\n }, [childCount, isRTL, targetSlide]);\n\n useEffect(() => {\n warning(\n dotPosition === undefined,\n \"Carousel `dotPosition` is deprecated. Use `dotPlacement` instead.\",\n );\n }, [dotPosition]);\n\n useEffect(() => {\n warning(\n !(items !== undefined && nativeChildren.length > 0),\n \"Carousel received both `children` and legacy `items`; `children` takes precedence.\",\n );\n }, [items, nativeChildren.length]);\n\n const handleAfterChange = (index: number) => {\n afterChange?.(index);\n const controlledIndex =\n activeIndex === undefined ? undefined : normalizeIndex(activeIndex, childCount);\n if (controlledIndex === undefined || controlledIndex !== normalizeIndex(index, childCount)) {\n onChange?.(index);\n }\n };\n\n const defaultPrevArrow = (\n <ArrowButton\n classNames={classNames}\n direction=\"prev\"\n label={prevAriaLabel ?? (isLegacyAdapter ? \"上一张\" : isRTL ? \"next\" : \"prev\")}\n styles={styles}\n vertical={mergedVertical}\n />\n );\n const defaultNextArrow = (\n <ArrowButton\n classNames={classNames}\n direction=\"next\"\n label={nextAriaLabel ?? (isLegacyAdapter ? \"下一张\" : isRTL ? \"prev\" : \"next\")}\n styles={styles}\n vertical={mergedVertical}\n />\n );\n const defaultCustomPaging = (index: number) => (\n <button\n aria-label={`Go to slide ${index + 1}`}\n className={slotClass(classNames, \"indicator\")}\n style={slotStyle(styles, \"indicator\")}\n type=\"button\"\n >\n {index + 1}\n </button>\n );\n const defaultAppendDots = (dotNodes: ReactNode) => (\n <ul style={slotStyle(styles, \"indicators\")}>{dotNodes}</ul>\n );\n const sliderClassName = slotClass(\n classNames,\n \"track\",\n \"hj-carousel-slick h-full\",\n \"[&_.slick-slide>div]:h-full [&_.slick-slide>div>div]:align-bottom [&_.slick-arrow]:absolute [&_.slick-arrow]:top-1/2 [&_.slick-arrow]:z-[2] [&_.slick-arrow]:inline-flex [&_.slick-arrow]:h-9 [&_.slick-arrow]:w-9 [&_.slick-arrow]:-translate-y-1/2 [&_.slick-arrow]:items-center [&_.slick-arrow]:justify-center [&_.slick-arrow]:rounded-full [&_.slick-arrow]:border [&_.slick-arrow]:border-[var(--hj-carousel-arrow-border)] [&_.slick-arrow]:bg-[var(--hj-carousel-arrow-bg)] [&_.slick-arrow]:p-0 [&_.slick-arrow]:text-white/75 [&_.slick-arrow.slick-disabled]:pointer-events-none [&_.slick-arrow.slick-disabled]:opacity-0 [&_.slick-prev]:left-3 [&_.slick-next]:right-3 [&.slick-vertical_.slick-slide]:float-none [&.slick-vertical_.slick-slide]:h-auto [&.slick-vertical_.slick-arrow]:left-1/2 [&.slick-vertical_.slick-arrow]:right-auto [&.slick-vertical_.slick-arrow]:-translate-x-1/2 [&.slick-vertical_.slick-arrow]:translate-y-0 [&.slick-vertical_.slick-prev]:top-3 [&.slick-vertical_.slick-next]:top-auto [&.slick-vertical_.slick-next]:bottom-3\",\n className,\n );\n const sliderProps: SlickSettings & { readonly style?: CSSProperties } = {\n ...settings,\n afterChange: handleAfterChange,\n appendDots: settings.appendDots ?? defaultAppendDots,\n arrows: mergedArrows,\n autoplay: Boolean(autoplay),\n autoplaySpeed,\n className: sliderClassName,\n customPaging: settings.customPaging ?? defaultCustomPaging,\n dots: mergedDots,\n dotsClass: dotsClassName,\n draggable,\n fade: effect === \"fade\" ? true : settings.fade,\n initialSlide: targetSlide,\n nextArrow: nextArrow ?? defaultNextArrow,\n prevArrow: prevArrow ?? defaultPrevArrow,\n rtl: isRTL,\n speed: reducedMotion ? 0 : speed,\n style: slotStyle(styles, \"track\", style),\n useCSS: reducedMotion ? false : useCSS,\n vertical: mergedVertical,\n verticalSwiping: mergedVertical,\n waitForAnimate,\n };\n\n return (\n <div\n aria-label={ariaLabel}\n className={slotClass(\n classNames,\n \"root\",\n prefixCls,\n \"relative h-full w-full overflow-hidden bg-[var(--hj-carousel-bg)]\",\n mergedVertical && `${prefixCls}-vertical`,\n isRTL && `${prefixCls}-rtl`,\n showDotDuration && `${prefixCls}-dot-duration`,\n rootClassName,\n )}\n dir={isRTL ? \"rtl\" : undefined}\n id={id}\n role={ariaLabel ? \"region\" : undefined}\n style={slotStyle(styles, \"root\", dotDurationStyle)}\n >\n <Slider {...sliderProps} ref={sliderRef}>\n {sliderChildren}\n </Slider>\n </div>\n );\n});\n\nCarousel.displayName = \"Carousel\";\n",
|
|
51
|
+
"import RcCheckbox from \"@rc-component/checkbox\";\nimport type {\n CheckboxChangeEvent,\n CheckboxRef,\n CheckboxProps as RcCheckboxProps,\n} from \"@rc-component/checkbox\";\nimport { useComposeRef, useControlledState } from \"@rc-component/util\";\nimport type {\n CSSProperties,\n ForwardedRef,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type CheckboxStatus = \"default\" | \"hover\" | \"active\";\nexport type CheckboxValueType = string | number | boolean;\nexport type { CheckboxChangeEvent, CheckboxRef };\n\ntype CheckboxSlot = \"root\" | \"input\" | \"control\" | \"icon\" | \"label\";\n\nexport interface CheckboxProps<ValueType = CheckboxValueType>\n extends Omit<\n RcCheckboxProps,\n \"children\" | \"className\" | \"onChange\" | \"prefixCls\" | \"style\" | \"value\"\n > {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: SlotClassNames<CheckboxSlot>;\n readonly indeterminate?: boolean;\n readonly label?: ReactNode;\n readonly rootClassName?: string;\n readonly skipGroup?: boolean;\n readonly status?: CheckboxStatus;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<CheckboxSlot>;\n readonly value?: ValueType;\n readonly onChange?: (event: CheckboxChangeEvent) => void;\n}\n\nexport interface CheckboxOptionType<ValueType = CheckboxValueType>\n extends Omit<\n CheckboxProps<ValueType>,\n \"checked\" | \"children\" | \"defaultChecked\" | \"label\" | \"skipGroup\"\n > {\n readonly label: ReactNode;\n readonly value: ValueType;\n}\n\nexport interface CheckboxGroupProps<ValueType = CheckboxValueType>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"defaultValue\" | \"onChange\"> {\n readonly children?: ReactNode;\n readonly defaultValue?: readonly ValueType[];\n readonly disabled?: boolean;\n readonly name?: string;\n readonly options?: readonly (CheckboxOptionType<ValueType> | string | number)[];\n readonly orientation?: \"horizontal\" | \"vertical\";\n readonly rootClassName?: string;\n readonly value?: readonly ValueType[];\n readonly vertical?: boolean;\n readonly onChange?: (checkedValue: ValueType[]) => void;\n}\n\ninterface CheckboxGroupContextValue {\n readonly disabled?: boolean;\n readonly name?: string;\n readonly value: readonly unknown[];\n readonly cancelValue: (value: unknown) => void;\n readonly registerValue: (value: unknown) => void;\n readonly toggleOption: (option: { readonly value: unknown }) => void;\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null);\n\nfunction CheckboxInner(props: CheckboxProps<unknown>, forwardedRef: ForwardedRef<CheckboxRef>) {\n const {\n children,\n checked,\n className = \"\",\n classNames,\n defaultChecked,\n disabled,\n id,\n indeterminate = false,\n label,\n onChange,\n rootClassName,\n skipGroup = false,\n status = \"default\",\n style,\n styles,\n value,\n ...inputProps\n } = props;\n const config = useConfig();\n const groupContext = useContext(CheckboxGroupContext);\n const group = skipGroup ? null : groupContext;\n const mergedChecked = group ? group.value.includes(value) : checked;\n const mergedDisabled = disabled ?? group?.disabled ?? config.disabled;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const checkboxRef = useRef<CheckboxRef>(null);\n const mergedRef = useComposeRef(forwardedRef, checkboxRef);\n const checkedProps = group || \"checked\" in props ? { checked: mergedChecked } : {};\n\n useEffect(() => {\n if (skipGroup || !group || value === undefined) return;\n group.registerValue(value);\n return () => group.cancelValue(value);\n }, [group, skipGroup, value]);\n\n useEffect(() => {\n if (checkboxRef.current?.input) {\n checkboxRef.current.input.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const content = children ?? label;\n\n return (\n <label\n className={slotClass(\n classNames,\n \"root\",\n \"hj-checkbox-label\",\n mergedDisabled && \"hj-checkbox-label-disabled\",\n status !== \"default\" && `hj-checkbox-label-${status}`,\n rootClassName,\n className,\n )}\n htmlFor={inputId}\n style={slotStyle(styles, \"root\", style)}\n >\n <RcCheckbox\n {...inputProps}\n {...checkedProps}\n className={slotClass(classNames, \"control\", indeterminate && \"hj-checkbox-indeterminate\")}\n defaultChecked={defaultChecked}\n disabled={mergedDisabled}\n id={inputId}\n name={group?.name ?? inputProps.name}\n prefixCls=\"hj-checkbox\"\n ref={mergedRef}\n style={slotStyle(styles, \"control\")}\n value={value as RcCheckboxProps[\"value\"]}\n onChange={(event) => {\n onChange?.(event);\n group?.toggleOption({ value });\n }}\n />\n {content != null ? (\n <span\n className={slotClass(classNames, \"label\", \"hj-checkbox-text\")}\n style={slotStyle(styles, \"label\")}\n >\n {content}\n </span>\n ) : null}\n </label>\n );\n}\n\ntype CheckboxStandaloneComponent = <ValueType = CheckboxValueType>(\n props: CheckboxProps<ValueType> & RefAttributes<CheckboxRef>,\n) => ReactElement;\n\nconst InternalCheckbox = forwardRef(CheckboxInner);\nInternalCheckbox.displayName = \"Checkbox\";\nconst CheckboxRoot = InternalCheckbox as CheckboxStandaloneComponent;\n\nfunction CheckboxGroupInner(props: CheckboxGroupProps<unknown>, ref: ForwardedRef<HTMLDivElement>) {\n const {\n children,\n className = \"\",\n defaultValue = [],\n disabled,\n name,\n onChange,\n options,\n orientation,\n rootClassName,\n value: controlledValue,\n vertical,\n ...divProps\n } = props;\n const [value, setValue] = useControlledState<readonly unknown[]>(defaultValue, controlledValue);\n const registeredValues = useRef<unknown[]>([]);\n\n const registerValue = useCallback((itemValue: unknown) => {\n if (!registeredValues.current.includes(itemValue)) {\n registeredValues.current = [...registeredValues.current, itemValue];\n }\n }, []);\n const cancelValue = useCallback((itemValue: unknown) => {\n registeredValues.current = registeredValues.current.filter((item) => item !== itemValue);\n }, []);\n const toggleOption = useCallback(\n ({ value: optionValue }: { readonly value: unknown }) => {\n const nextValue = value.includes(optionValue)\n ? value.filter((item) => item !== optionValue)\n : [...value, optionValue];\n const orderedValue = nextValue\n .filter((item) => registeredValues.current.includes(item))\n .sort(\n (left, right) =>\n registeredValues.current.indexOf(left) - registeredValues.current.indexOf(right),\n );\n setValue(orderedValue);\n onChange?.(orderedValue);\n },\n [onChange, setValue, value],\n );\n\n const contextValue = useMemo<CheckboxGroupContextValue>(\n () => ({ disabled, name, value, cancelValue, registerValue, toggleOption }),\n [cancelValue, disabled, name, registerValue, toggleOption, value],\n );\n const content = options\n ? options.map((option) => {\n const item: CheckboxOptionType<unknown> =\n typeof option === \"string\" || typeof option === \"number\"\n ? { label: option, value: option }\n : option;\n return (\n <CheckboxRoot {...item} key={String(item.value)}>\n {item.label}\n </CheckboxRoot>\n );\n })\n : children;\n const mergedVertical = orientation ? orientation === \"vertical\" : vertical;\n\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div\n {...divProps}\n className={cn(\n \"hj-checkbox-group inline-flex flex-wrap items-center gap-3\",\n mergedVertical && \"hj-checkbox-group-vertical flex-col items-start\",\n rootClassName,\n className,\n )}\n ref={ref}\n // biome-ignore lint/a11y/useSemanticElements: AntD-compatible Checkbox.Group accepts div layout props.\n role=\"group\"\n >\n {content}\n </div>\n </CheckboxGroupContext.Provider>\n );\n}\n\ntype CheckboxGroupComponent = <ValueType = CheckboxValueType>(\n props: CheckboxGroupProps<ValueType> & RefAttributes<HTMLDivElement>,\n) => ReactElement;\n\nconst Group = forwardRef(CheckboxGroupInner) as CheckboxGroupComponent;\n\ntype CheckboxCompoundComponent = CheckboxStandaloneComponent & {\n readonly Group: CheckboxGroupComponent;\n};\n\nexport const Checkbox = Object.assign(CheckboxRoot, { Group }) as CheckboxCompoundComponent;\n",
|
|
52
|
+
"import RcCollapse from \"@rc-component/collapse\";\nimport type {\n CollapsePanelProps as RcCollapsePanelProps,\n CollapseProps as RcCollapseProps,\n} from \"@rc-component/collapse\";\nimport type { ItemType as RcCollapseItem } from \"@rc-component/collapse/es/interface\";\nimport type { CSSProperties } from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type CollapseItem = RcCollapseItem;\nexport type CollapseSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type CollapseExpandIconPosition = \"start\" | \"end\";\nexport type CollapsePanelProps = Omit<RcCollapsePanelProps, \"prefixCls\">;\n\nexport interface CollapseProps\n extends Omit<RcCollapseProps, \"items\" | \"onChange\" | \"prefixCls\" | \"style\"> {\n readonly bordered?: boolean;\n readonly destroyInactivePanel?: boolean;\n readonly expandIconPlacement?: CollapseExpandIconPosition;\n readonly expandIconPosition?: CollapseExpandIconPosition;\n readonly ghost?: boolean;\n readonly items?: readonly CollapseItem[];\n readonly rootClassName?: string;\n readonly size?: CollapseSize;\n readonly style?: CSSProperties;\n readonly onActiveKeyChange?: (key: string | string[]) => void;\n readonly onChange?: (key: string[]) => void;\n}\n\nconst InternalCollapse = forwardRef<HTMLDivElement, CollapseProps>(function Collapse(\n {\n accordion = false,\n bordered = true,\n className = \"\",\n destroyInactivePanel,\n destroyOnHidden,\n expandIconPlacement,\n expandIconPosition,\n ghost = false,\n items,\n onActiveKeyChange,\n onChange,\n rootClassName,\n size = \"middle\",\n style,\n styles,\n ...props\n },\n ref,\n) {\n const mergedExpandIconPosition = expandIconPlacement ?? expandIconPosition ?? \"start\";\n const mergedSize = size === \"middle\" ? \"medium\" : size;\n const mergedStyles: RcCollapseProps[\"styles\"] =\n mergedExpandIconPosition === \"end\"\n ? {\n ...styles,\n icon: {\n marginInlineStart: \"auto\",\n order: 1,\n ...styles?.icon,\n },\n }\n : styles;\n\n return (\n <RcCollapse\n {...props}\n accordion={accordion}\n className={cn(\n \"hj-collapse-root\",\n `hj-collapse-${mergedSize}`,\n `hj-collapse-icon-placement-${mergedExpandIconPosition}`,\n `hj-collapse-icon-position-${mergedExpandIconPosition}`,\n !bordered && \"hj-collapse-borderless\",\n ghost && \"hj-collapse-ghost\",\n rootClassName,\n className,\n )}\n destroyOnHidden={destroyOnHidden ?? destroyInactivePanel}\n items={items?.map((item) => ({ ...item }))}\n onChange={\n onChange || onActiveKeyChange\n ? (keys) => {\n const stringKeys = keys.map(String);\n onChange?.(stringKeys);\n onActiveKeyChange?.(accordion ? String(stringKeys[0] ?? \"\") : stringKeys);\n }\n : undefined\n }\n prefixCls=\"hj-collapse\"\n ref={ref}\n style={{\n ...(!bordered || ghost ? { border: 0 } : undefined),\n ...(ghost ? { backgroundColor: \"transparent\" } : undefined),\n ...style,\n }}\n styles={mergedStyles}\n />\n );\n});\n\nInternalCollapse.displayName = \"Collapse\";\n\nconst CollapsePanel = forwardRef<HTMLDivElement, CollapsePanelProps>(\n function CollapsePanel(props, ref) {\n return <RcCollapse.Panel {...props} prefixCls=\"hj-collapse\" ref={ref} />;\n },\n);\n\nCollapsePanel.displayName = \"Collapse.Panel\";\n\nexport const Collapse = Object.assign(InternalCollapse, { Panel: CollapsePanel });\n",
|
|
53
|
+
"import RcColorPicker, {\n Color as RcColor,\n type ColorGenInput,\n type ColorPickerProps as RcColorPickerProps,\n} from \"@996-design/996-color-picker\";\nimport { useControlledState } from \"@rc-component/util\";\nimport type {\n CSSProperties,\n FC,\n ForwardedRef,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { forwardRef, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Collapse, type CollapseItem } from \"./Collapse\";\nimport { Segmented } from \"./Segmented\";\nimport { Tooltip, type TooltipPlacement } from \"./Tooltip\";\n\nexport type { ColorGenInput };\n\nexport const FORMAT_HEX = \"hex\";\nexport const FORMAT_RGB = \"rgb\";\nexport const FORMAT_HSB = \"hsb\";\n\nexport type ColorFormatType = typeof FORMAT_HEX | typeof FORMAT_RGB | typeof FORMAT_HSB;\nexport type ColorPickerSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type ColorPickerTrigger = \"click\" | \"hover\";\nexport type ModeType = \"single\" | \"gradient\";\n\nexport type Colors<T> = {\n color: ColorGenInput<T>;\n percent: number;\n}[];\n\nexport type GradientColor = {\n color: Color;\n percent: number;\n}[];\n\nexport type SingleValueType = Color | string;\nexport type LineGradientType = {\n color: SingleValueType;\n percent: number;\n}[];\nexport type ColorValueType = ColorGenInput<Color> | null | LineGradientType;\n\ntype InternalColorInput =\n | ColorGenInput<Color | RcColor>\n | Colors<Color | RcColor>\n | null\n | undefined;\n\nfunction stripHex(value?: string) {\n return value?.replace(/[^0-9a-f]/gi, \"\").slice(0, 8) ?? \"\";\n}\n\n/** AntD-compatible aggregate color backed by the scoped rc color primitive. */\nexport class Color {\n private metaColor: RcColor;\n private colors: GradientColor | undefined;\n public cleared = false;\n\n constructor(input: InternalColorInput) {\n if (input instanceof Color) {\n this.metaColor = new RcColor(input.metaColor);\n this.colors = input.colors?.map(({ color, percent }) => ({\n color: new Color(color),\n percent,\n }));\n this.cleared = input.cleared;\n return;\n }\n\n if (Array.isArray(input) && input.length > 0) {\n this.colors = input.map(({ color, percent }) => ({\n color: new Color(color),\n percent,\n }));\n this.metaColor = this.colors[0]?.color.toRcColor() ?? new RcColor(\"\");\n return;\n }\n\n this.metaColor = new RcColor(Array.isArray(input) || input == null ? \"\" : input);\n if (input == null || (Array.isArray(input) && input.length === 0)) {\n this.metaColor = this.metaColor.setA(0);\n this.cleared = true;\n }\n }\n\n toHsb() {\n return this.metaColor.toHsb();\n }\n\n toHsbString() {\n return this.metaColor.toHsbString();\n }\n\n toHex() {\n return stripHex(this.toHexString());\n }\n\n toHexString() {\n return this.metaColor.toHexString();\n }\n\n toRgb(): { r: number; g: number; b: number; a: number } {\n return this.metaColor.toRgb();\n }\n\n toRgbString() {\n return this.metaColor.toRgbString();\n }\n\n isGradient() {\n return !!this.colors && !this.cleared;\n }\n\n getColors(): GradientColor {\n return this.colors ?? [{ color: this, percent: 0 }];\n }\n\n toCssString() {\n if (this.colors) {\n const stops = this.colors\n .map(({ color, percent }) => `${color.toRgbString()} ${percent}%`)\n .join(\", \");\n return `linear-gradient(90deg, ${stops})`;\n }\n return this.metaColor.toRgbString();\n }\n\n equals(color: Color | null): boolean {\n if (!color || this.isGradient() !== color.isGradient() || this.cleared !== color.cleared) {\n return false;\n }\n if (!this.isGradient()) return this.toHexString() === color.toHexString();\n const ownColors = this.colors ?? [];\n const targetColors = color.colors ?? [];\n return (\n ownColors.length === targetColors.length &&\n ownColors.every(\n (item, index) =>\n item.percent === targetColors[index]?.percent &&\n item.color.equals(targetColors[index]?.color ?? null),\n )\n );\n }\n\n toRcColor() {\n return new RcColor(this.metaColor);\n }\n}\n\nexport interface PresetsItem {\n readonly colors: (string | Color | LineGradientType)[];\n readonly defaultOpen?: boolean;\n readonly key?: string | number;\n readonly label: ReactNode;\n}\n\nexport interface ColorPickerSemanticClassNames {\n readonly root?: string;\n readonly body?: string;\n readonly content?: string;\n readonly description?: string;\n readonly popup?: { readonly root?: string };\n}\n\nexport interface ColorPickerSemanticStyles {\n readonly root?: CSSProperties;\n readonly body?: CSSProperties;\n readonly content?: CSSProperties;\n readonly description?: CSSProperties;\n readonly popupOverlayInner?: CSSProperties;\n readonly popup?: { readonly root?: CSSProperties };\n}\n\nexport type ColorPickerClassNames =\n | ColorPickerSemanticClassNames\n | ((info: { props: ColorPickerProps }) => ColorPickerSemanticClassNames);\nexport type ColorPickerStyles =\n | ColorPickerSemanticStyles\n | ((info: { props: ColorPickerProps }) => ColorPickerSemanticStyles);\n\nexport interface ColorPickerProps\n extends Omit<\n RcColorPickerProps,\n | \"className\"\n | \"defaultValue\"\n | \"disabled\"\n | \"disabledAlpha\"\n | \"onChange\"\n | \"onChangeComplete\"\n | \"panelRender\"\n | \"prefixCls\"\n | \"style\"\n | \"value\"\n > {\n readonly allowClear?: boolean;\n readonly arrow?: boolean | { readonly pointAtCenter?: boolean };\n readonly autoAdjustOverflow?: boolean;\n readonly children?: ReactNode;\n readonly className?: string;\n readonly classNames?: ColorPickerClassNames;\n readonly defaultFormat?: ColorFormatType;\n readonly defaultOpen?: boolean;\n readonly defaultValue?: ColorValueType;\n readonly destroyOnHidden?: boolean;\n /** @deprecated Use `destroyOnHidden`. */\n readonly destroyTooltipOnHide?: boolean;\n readonly disabled?: boolean;\n readonly disabledAlpha?: boolean;\n readonly disabledFormat?: boolean;\n readonly format?: ColorFormatType;\n readonly getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly mode?: ModeType | ModeType[];\n readonly open?: boolean;\n readonly panelRender?: (\n panel: ReactNode,\n extra: { components: { Picker: FC; Presets: FC } },\n ) => ReactNode;\n readonly placement?: TooltipPlacement;\n readonly presets?: PresetsItem[];\n readonly rootClassName?: string;\n readonly showText?: boolean | ((color: Color) => ReactNode);\n readonly size?: ColorPickerSize;\n readonly style?: CSSProperties;\n readonly styles?: ColorPickerStyles;\n readonly trigger?: ColorPickerTrigger;\n readonly value?: ColorValueType;\n readonly onChange?: (color: Color, css: string) => void;\n readonly onChangeComplete?: (color: Color) => void;\n readonly onClear?: () => void;\n readonly onFormatChange?: (format?: ColorFormatType) => void;\n readonly onOpenChange?: (open: boolean) => void;\n readonly [dataAttribute: `data-${string}`]: string | number | undefined;\n}\n\nexport interface ColorPickerPanelProps\n extends Omit<\n ColorPickerProps,\n | \"arrow\"\n | \"autoAdjustOverflow\"\n | \"children\"\n | \"classNames\"\n | \"defaultOpen\"\n | \"destroyOnHidden\"\n | \"destroyTooltipOnHide\"\n | \"getPopupContainer\"\n | \"onOpenChange\"\n | \"open\"\n | \"placement\"\n | \"rootClassName\"\n | \"showText\"\n | \"size\"\n | \"styles\"\n | \"trigger\"\n > {}\n\nexport interface ColorPickerRef {\n readonly nativeElement: HTMLElement | null;\n blur: () => void;\n focus: (options?: FocusOptions) => void;\n}\n\nfunction generateColor(value: ColorValueType | undefined) {\n return value instanceof Color ? value : new Color(value);\n}\n\nfunction forceOpaque(color: Color, disabledAlpha: boolean): Color {\n if (!disabledAlpha || color.cleared) return color;\n if (color.isGradient()) {\n return new Color(\n color.getColors().map(({ color: stopColor, percent }) => ({\n color: forceOpaque(stopColor, true),\n percent,\n })),\n );\n }\n const rgb = color.toRgb();\n return rgb.a === 1 ? color : new Color({ ...rgb, a: 1 });\n}\n\nfunction resolveSemantic<Value>(\n value: Value | ((info: { props: ColorPickerProps }) => Value) | undefined,\n props: ColorPickerProps,\n): Value | undefined {\n return typeof value === \"function\"\n ? (value as (info: { props: ColorPickerProps }) => Value)({ props })\n : value;\n}\n\nfunction normalizeModes(mode: ColorPickerProps[\"mode\"]) {\n const requested = (Array.isArray(mode) ? mode : [mode]).filter(\n (item): item is ModeType => item === \"single\" || item === \"gradient\",\n );\n return requested.length > 0 ? [...new Set(requested)] : ([\"single\"] as ModeType[]);\n}\n\ninterface PickerStateProps {\n readonly defaultFormat?: ColorFormatType;\n readonly defaultValue?: ColorValueType;\n readonly disabledAlpha?: boolean;\n readonly format?: ColorFormatType;\n readonly mode?: ModeType | ModeType[];\n readonly value?: ColorValueType;\n readonly onChange?: ColorPickerProps[\"onChange\"];\n readonly onChangeComplete?: ColorPickerProps[\"onChangeComplete\"];\n readonly onFormatChange?: ColorPickerProps[\"onFormatChange\"];\n}\n\nfunction usePickerState({\n defaultFormat,\n defaultValue,\n disabledAlpha = false,\n format,\n mode,\n onChange,\n onChangeComplete,\n onFormatChange,\n value,\n}: PickerStateProps) {\n const [rawValue, setRawValue] = useControlledState<ColorValueType>(\n defaultValue === undefined ? \"#1677ff\" : defaultValue,\n value,\n );\n const color = useMemo(() => generateColor(rawValue), [rawValue]);\n const [mergedFormat, setMergedFormat] = useControlledState<ColorFormatType>(\n defaultFormat ?? FORMAT_HEX,\n format,\n );\n const modeOptions = useMemo(() => normalizeModes(mode), [mode]);\n const inferredMode: ModeType = color.isGradient() ? \"gradient\" : \"single\";\n const [modeState, setModeState] = useState<ModeType>(inferredMode);\n const mergedMode = modeOptions.includes(inferredMode)\n ? inferredMode\n : modeOptions.includes(modeState)\n ? modeState\n : (modeOptions[0] ?? \"single\");\n const cachedGradient = useRef<Color | null>(null);\n\n const emitColor = (nextColor: Color, complete = false) => {\n const normalized = forceOpaque(nextColor, disabledAlpha);\n setRawValue(normalized);\n onChange?.(normalized, normalized.cleared ? \"\" : normalized.toCssString());\n if (complete) onChangeComplete?.(normalized);\n };\n\n const changeMode = (nextMode: ModeType) => {\n if (nextMode === mergedMode) return;\n setModeState(nextMode);\n if (nextMode === \"single\" && color.isGradient()) {\n cachedGradient.current = color;\n emitColor(new Color(color.getColors()[0]?.color ?? \"#1677ff\"), true);\n return;\n }\n if (nextMode === \"gradient\" && !color.isGradient()) {\n const baseColor = color.cleared ? new Color(\"#1677ff\") : color;\n emitColor(\n cachedGradient.current ??\n new Color([\n { color: baseColor, percent: 0 },\n { color: baseColor, percent: 100 },\n ]),\n true,\n );\n }\n };\n\n const changeFormat = (nextFormat?: ColorFormatType) => {\n setMergedFormat(nextFormat ?? FORMAT_HEX);\n if (mergedFormat !== nextFormat) onFormatChange?.(nextFormat);\n };\n\n return {\n changeFormat,\n changeMode,\n color,\n emitColor,\n format: mergedFormat,\n mode: mergedMode,\n modeOptions,\n };\n}\n\ntype PickerState = ReturnType<typeof usePickerState>;\n\nfunction PresetList({\n color,\n disabled,\n onSelect,\n presets,\n}: {\n readonly color: Color;\n readonly disabled: boolean;\n readonly onSelect: (color: Color) => void;\n readonly presets?: PresetsItem[];\n}) {\n if (!presets?.length) return null;\n const panelKey = (preset: PresetsItem, index: number) => `panel-${preset.key ?? index}`;\n const defaultActiveKey = presets\n .map((preset, index) => ((preset.defaultOpen ?? true) ? panelKey(preset, index) : null))\n .filter((key): key is string => key !== null);\n const items: CollapseItem[] = presets.map((preset, index) => ({\n key: panelKey(preset, index),\n label: <div className=\"hj-color-picker-presets-label\">{preset.label}</div>,\n children: (\n <div className=\"hj-color-picker-presets-colors\">\n {preset.colors.length > 0 ? (\n preset.colors.map((presetValue, colorIndex) => {\n const presetColor = new Color(presetValue);\n return (\n <button\n aria-label={presetColor.toCssString()}\n className={cn(\n \"hj-color-picker-presets-color\",\n color.equals(presetColor) && \"hj-color-picker-presets-color-checked\",\n )}\n disabled={disabled}\n key={`${presetColor.toCssString()}-${colorIndex}`}\n style={{ background: presetColor.toCssString() }}\n type=\"button\"\n onClick={() => onSelect(presetColor)}\n />\n );\n })\n ) : (\n <span className=\"hj-color-picker-presets-empty\">Empty</span>\n )}\n </div>\n ),\n }));\n return (\n <div className=\"hj-color-picker-presets\">\n <Collapse defaultActiveKey={defaultActiveKey} ghost items={items} />\n </div>\n );\n}\n\ninterface ColorPanelContentProps {\n readonly activeIndex?: number;\n readonly allowClear?: boolean;\n readonly className?: string;\n readonly components?: RcColorPickerProps[\"components\"];\n readonly disabled?: boolean;\n readonly disabledAlpha?: boolean;\n readonly disabledFormat?: boolean;\n readonly onActiveIndexChange?: (index: number) => void;\n readonly onClear?: () => void;\n readonly panelRender?: ColorPickerProps[\"panelRender\"];\n readonly presets?: PresetsItem[];\n readonly state: PickerState;\n readonly style?: CSSProperties;\n}\n\nconst ColorPanelContent = forwardRef<HTMLDivElement, ColorPanelContentProps>(\n function ColorPanelContent(\n {\n activeIndex,\n allowClear = false,\n className,\n components,\n disabled = false,\n disabledAlpha = false,\n disabledFormat = false,\n onActiveIndexChange,\n onClear,\n panelRender,\n presets,\n state,\n style,\n },\n ref,\n ) {\n const [innerActiveIndex, setInnerActiveIndex] = useState(0);\n const requestedActiveIndex = activeIndex ?? innerActiveIndex;\n const colors =\n state.mode === \"gradient\" && !state.color.isGradient()\n ? [\n { color: state.color, percent: 0 },\n { color: state.color, percent: 100 },\n ]\n : state.color.getColors();\n const mergedActiveIndex = Math.max(0, Math.min(requestedActiveIndex, colors.length - 1));\n const activeColor = colors[mergedActiveIndex]?.color ?? state.color;\n\n const setActiveIndex = (index: number) => {\n setInnerActiveIndex(index);\n onActiveIndexChange?.(index);\n };\n\n const updateActiveColor = (nextRcColor: RcColor, complete: boolean) => {\n const nextColor = new Color(nextRcColor);\n if (state.mode === \"single\") {\n state.emitColor(nextColor, complete);\n return;\n }\n const nextGradient = colors.map((stop, index) => ({\n color: index === mergedActiveIndex ? nextColor : stop.color,\n percent: stop.percent,\n }));\n state.emitColor(new Color(nextGradient), complete);\n };\n\n const presetsNode = (\n <PresetList\n color={state.color}\n disabled={disabled}\n presets={presets}\n onSelect={(nextColor) => state.emitColor(nextColor, true)}\n />\n );\n\n return (\n <RcColorPicker\n className={className}\n components={components}\n disabled={disabled}\n disabledAlpha={disabledAlpha}\n panelRender={(picker: ReactElement) => {\n const pickerNode = (\n <>\n {state.modeOptions.length > 1 ? (\n <Segmented<ModeType>\n className=\"hj-color-picker-mode-select\"\n disabled={disabled}\n options={state.modeOptions.map((mode) => ({\n label: mode === \"single\" ? \"Single\" : \"Gradient\",\n value: mode,\n }))}\n size=\"small\"\n value={state.mode}\n onChange={state.changeMode}\n />\n ) : null}\n {state.mode === \"gradient\" ? (\n <div className=\"hj-color-picker-gradient-stops\">\n {colors.map((stop, index) => (\n <button\n aria-pressed={mergedActiveIndex === index}\n className=\"hj-color-picker-gradient-stop\"\n disabled={disabled}\n key={`${stop.percent}-${index}`}\n style={{ background: stop.color.toRgbString() }}\n title={`${stop.percent}%`}\n type=\"button\"\n onClick={() => setActiveIndex(index)}\n />\n ))}\n </div>\n ) : null}\n {picker}\n <div className=\"hj-color-picker-controls\">\n {!disabledFormat ? (\n <select\n aria-label=\"Color format\"\n className=\"hj-color-picker-format-select\"\n disabled={disabled}\n value={state.format}\n onChange={(event) =>\n state.changeFormat(event.currentTarget.value as ColorFormatType)\n }\n >\n <option value={FORMAT_HEX}>HEX</option>\n <option value={FORMAT_RGB}>RGB</option>\n <option value={FORMAT_HSB}>HSB</option>\n </select>\n ) : null}\n {allowClear ? (\n <button\n className=\"hj-color-picker-clear\"\n disabled={disabled}\n type=\"button\"\n onClick={() => {\n state.emitColor(new Color(null), true);\n onClear?.();\n }}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n ) : null}\n </div>\n </>\n );\n const Picker: FC = () => pickerNode;\n const Presets: FC = () => presetsNode;\n const defaultPanel = (\n <>\n <Picker />\n <Presets />\n </>\n );\n const rendered = panelRender\n ? panelRender(defaultPanel, { components: { Picker, Presets } })\n : defaultPanel;\n return <>{rendered}</>;\n }}\n prefixCls=\"hj-color-picker\"\n ref={ref}\n style={style}\n value={activeColor.toRcColor()}\n onChange={(nextColor: RcColor) => updateActiveColor(nextColor, false)}\n onChangeComplete={(nextColor: RcColor) => updateActiveColor(nextColor, true)}\n />\n );\n },\n);\n\nColorPanelContent.displayName = \"ColorPanelContent\";\n\nconst InternalColorPickerPanel = forwardRef<HTMLDivElement, ColorPickerPanelProps>(\n function ColorPickerPanel(\n {\n allowClear,\n className,\n components,\n defaultFormat,\n defaultValue,\n disabled = false,\n disabledAlpha,\n disabledFormat,\n format,\n mode,\n onChange,\n onChangeComplete,\n onClear,\n onFormatChange,\n panelRender,\n presets,\n style,\n value,\n },\n ref,\n ) {\n const state = usePickerState({\n defaultFormat,\n defaultValue,\n disabledAlpha,\n format,\n mode,\n onChange,\n onChangeComplete,\n onFormatChange,\n value,\n });\n return (\n <ColorPanelContent\n allowClear={allowClear}\n className={className}\n components={components}\n disabled={disabled}\n disabledAlpha={disabledAlpha}\n disabledFormat={disabledFormat}\n panelRender={panelRender}\n presets={presets}\n ref={ref}\n state={state}\n style={style}\n onClear={onClear}\n />\n );\n },\n);\n\nInternalColorPickerPanel.displayName = \"ColorPicker.Panel\";\n\nfunction getSizeClass(size: ColorPickerSize | undefined, configSize: \"sm\" | \"md\" | \"lg\") {\n const mergedSize =\n size ?? (configSize === \"sm\" ? \"small\" : configSize === \"lg\" ? \"large\" : \"middle\");\n if (mergedSize === \"small\") return \"hj-color-picker-sm\";\n if (mergedSize === \"large\") return \"hj-color-picker-lg\";\n return \"hj-color-picker-md\";\n}\n\nfunction getColorText(color: Color, format: ColorFormatType) {\n if (color.cleared) return \"Transparent\";\n if (color.isGradient()) {\n return color\n .getColors()\n .map(({ color: stopColor, percent }) => `${stopColor.toRgbString()} ${percent}%`)\n .join(\", \");\n }\n if (format === FORMAT_RGB) return color.toRgbString();\n if (format === FORMAT_HSB) return color.toHsbString();\n const alpha = Math.round(color.toHsb().a * 100);\n const hex = color.toHexString().toUpperCase();\n return alpha < 100 ? `${hex},${alpha}%` : hex;\n}\n\nfunction pickDataAttributes(props: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(props).filter(([key, value]) => key.startsWith(\"data-\") && value != null),\n ) as Record<string, string | number>;\n}\n\nfunction ColorPickerInner(\n {\n allowClear = false,\n arrow = true,\n autoAdjustOverflow = true,\n children,\n className,\n classNames,\n components,\n defaultFormat,\n defaultOpen = false,\n defaultValue,\n destroyOnHidden,\n destroyTooltipOnHide,\n disabled,\n disabledAlpha = false,\n disabledFormat = false,\n format,\n getPopupContainer,\n mode,\n onChange,\n onChangeComplete,\n onClear,\n onFormatChange,\n onOpenChange,\n open,\n panelRender,\n placement = \"bottomLeft\",\n presets,\n rootClassName,\n showText = false,\n size,\n style,\n styles,\n trigger = \"click\",\n value,\n ...restProps\n }: ColorPickerProps,\n ref: ForwardedRef<ColorPickerRef>,\n) {\n const config = useConfig();\n const mergedDisabled = disabled ?? config.disabled;\n const [controlledOpen, setControlledOpen] = useControlledState(defaultOpen, open);\n const mergedOpen = mergedDisabled ? false : controlledOpen;\n const [activeIndex, setActiveIndex] = useState(0);\n const state = usePickerState({\n defaultFormat,\n defaultValue,\n disabledAlpha,\n format,\n mode,\n onChange,\n onChangeComplete,\n onFormatChange,\n value,\n });\n const semanticProps: ColorPickerProps = {\n ...restProps,\n allowClear,\n arrow,\n autoAdjustOverflow,\n children,\n className,\n defaultFormat,\n defaultOpen,\n defaultValue,\n disabled: mergedDisabled,\n disabledAlpha,\n disabledFormat,\n format,\n mode,\n open: mergedOpen,\n placement,\n presets,\n rootClassName,\n showText,\n size,\n style,\n trigger,\n value,\n };\n const mergedClassNames = resolveSemantic(classNames, semanticProps) ?? {};\n const mergedStyles = resolveSemantic(styles, semanticProps) ?? {};\n const triggerRef = useRef<HTMLElement | null>(null);\n useImperativeHandle(\n ref,\n () => ({\n get nativeElement() {\n return triggerRef.current;\n },\n blur: () => triggerRef.current?.blur(),\n focus: (options) => triggerRef.current?.focus(options),\n }),\n [],\n );\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (mergedDisabled && nextOpen) return;\n setControlledOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n const sizeClassName = getSizeClass(size, config.size);\n const colorCss = state.color.cleared ? \"transparent\" : state.color.toCssString();\n const dataAttributes = pickDataAttributes(restProps as Record<string, unknown>);\n\n const panel = (\n <ColorPanelContent\n activeIndex={activeIndex}\n allowClear={allowClear}\n components={components}\n disabled={mergedDisabled}\n disabledAlpha={disabledAlpha}\n disabledFormat={disabledFormat}\n panelRender={panelRender}\n presets={presets}\n state={state}\n onActiveIndexChange={setActiveIndex}\n onClear={onClear}\n />\n );\n\n const triggerClassName = cn(\n \"hj-color-picker-trigger\",\n sizeClassName,\n mergedOpen && \"hj-color-picker-trigger-active\",\n mergedDisabled && \"hj-color-picker-trigger-disabled\",\n rootClassName,\n mergedClassNames.root,\n className,\n );\n const triggerStyle = { ...mergedStyles.root, ...style };\n const defaultTrigger = (\n <button\n {...dataAttributes}\n aria-expanded={mergedOpen}\n aria-haspopup=\"dialog\"\n className={triggerClassName}\n disabled={mergedDisabled}\n ref={(node) => {\n triggerRef.current = node;\n }}\n style={triggerStyle}\n type=\"button\"\n >\n <span\n className={cn(\"hj-color-picker-color-block\", mergedClassNames.body)}\n style={{ background: colorCss, ...mergedStyles.body }}\n >\n <span className={mergedClassNames.content} style={mergedStyles.content} />\n </span>\n {showText ? (\n <span\n className={cn(\"hj-color-picker-trigger-text\", mergedClassNames.description)}\n style={mergedStyles.description}\n >\n {typeof showText === \"function\"\n ? showText(state.color)\n : getColorText(state.color, state.format)}\n </span>\n ) : null}\n </button>\n );\n\n return (\n <Tooltip\n arrow={arrow}\n autoAdjustOverflow={autoAdjustOverflow}\n className={cn(\"hj-color-picker-popup\", rootClassName, mergedClassNames.popup?.root)}\n destroyOnHidden={destroyOnHidden ?? destroyTooltipOnHide}\n disabled={mergedDisabled}\n getPopupContainer={\n getPopupContainer ??\n (config.getPopupContainer ? () => config.getPopupContainer?.() ?? document.body : undefined)\n }\n open={mergedOpen}\n placement={placement}\n styles={{\n root: mergedStyles.popup?.root,\n content: mergedStyles.popupOverlayInner,\n }}\n title={panel}\n trigger={trigger}\n variant=\"light\"\n onOpenChange={handleOpenChange}\n >\n {children ? (\n <span\n {...dataAttributes}\n aria-disabled={mergedDisabled}\n aria-expanded={mergedOpen}\n aria-haspopup=\"dialog\"\n className={cn(\n \"hj-color-picker-custom-trigger\",\n mergedDisabled && \"hj-color-picker-trigger-disabled\",\n rootClassName,\n mergedClassNames.root,\n className,\n )}\n ref={(node) => {\n triggerRef.current = node;\n }}\n style={triggerStyle}\n tabIndex={mergedDisabled ? -1 : 0}\n >\n {children}\n </span>\n ) : (\n defaultTrigger\n )}\n </Tooltip>\n );\n}\n\ntype ColorPickerComponent = ((\n props: ColorPickerProps & RefAttributes<ColorPickerRef>,\n) => ReactElement) & {\n _InternalPanelDoNotUseOrYouWillBeFired: typeof InternalColorPickerPanel;\n Panel: typeof InternalColorPickerPanel;\n displayName?: string;\n};\n\nconst ForwardColorPicker = forwardRef(ColorPickerInner);\n\nexport const ColorPicker = ForwardColorPicker as unknown as ColorPickerComponent;\nColorPicker._InternalPanelDoNotUseOrYouWillBeFired = InternalColorPickerPanel;\nColorPicker.Panel = InternalColorPickerPanel;\nColorPicker.displayName = \"ColorPicker\";\n",
|
|
54
|
+
"import RcSegmented from \"@rc-component/segmented\";\nimport type {\n SegmentedLabeledOption as RcSegmentedLabeledOption,\n SegmentedProps as RcSegmentedProps,\n SegmentedRawOption,\n SegmentedValue,\n} from \"@rc-component/segmented\";\nimport type { CSSProperties, ReactNode, RefAttributes } from \"react\";\nimport { forwardRef, useId, useMemo } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Tooltip } from \"./Tooltip\";\nimport type { TooltipProps } from \"./Tooltip\";\n\nexport type { SegmentedValue } from \"@rc-component/segmented\";\n\nexport type SegmentedSize = \"small\" | \"medium\" | \"middle\" | \"large\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type SegmentedSemanticSlot = \"root\" | \"item\" | \"icon\" | \"label\";\nexport type SegmentedClassNames<ValueType = SegmentedValue> =\n | Partial<Record<SegmentedSemanticSlot, string>>\n | ((info: { props: SegmentedProps<ValueType> }) => Partial<\n Record<SegmentedSemanticSlot, string>\n >);\nexport type SegmentedStyles<ValueType = SegmentedValue> =\n | Partial<Record<SegmentedSemanticSlot, CSSProperties>>\n | ((info: { props: SegmentedProps<ValueType> }) => Partial<\n Record<SegmentedSemanticSlot, CSSProperties>\n >);\n\nexport interface SegmentedLabeledOption<ValueType = SegmentedValue>\n extends Omit<RcSegmentedLabeledOption<ValueType>, \"label\"> {\n readonly icon?: ReactNode;\n readonly label?: ReactNode;\n readonly tooltip?: string | Omit<TooltipProps, \"children\">;\n}\n\nexport type SegmentedOption<ValueType = SegmentedRawOption> =\n | ValueType\n | SegmentedLabeledOption<ValueType>;\n\nexport interface SegmentedLegacyItem<ValueType = SegmentedValue> {\n readonly disabled?: boolean;\n readonly icon?: ReactNode;\n readonly id: ValueType;\n readonly label: ReactNode;\n readonly title?: string;\n}\n\nexport interface SegmentedProps<ValueType = SegmentedValue>\n extends Omit<\n RcSegmentedProps<ValueType>,\n \"classNames\" | \"disabled\" | \"itemRender\" | \"options\" | \"prefixCls\" | \"size\" | \"styles\"\n > {\n readonly block?: boolean;\n readonly classNames?: SegmentedClassNames<ValueType>;\n readonly disabled?: boolean;\n readonly items?: readonly SegmentedLegacyItem<ValueType>[];\n readonly options?: readonly SegmentedOption<ValueType>[];\n readonly orientation?: \"horizontal\" | \"vertical\";\n readonly rootClassName?: string;\n readonly shape?: \"default\" | \"round\";\n readonly size?: SegmentedSize;\n readonly styles?: SegmentedStyles<ValueType>;\n}\n\nfunction isLabeledOption<ValueType>(\n option: SegmentedOption<ValueType>,\n): option is SegmentedLabeledOption<ValueType> {\n return typeof option === \"object\" && option !== null;\n}\n\nfunction normalizeSize(size: SegmentedSize | undefined, fallback: \"sm\" | \"md\" | \"lg\") {\n if (size === \"small\" || size === \"sm\") return \"sm\";\n if (size === \"large\" || size === \"lg\") return \"lg\";\n if (size === \"xs\") return \"xs\";\n if (size === \"medium\" || size === \"middle\" || size === \"md\") return \"md\";\n return fallback;\n}\n\nfunction resolveSemantic<ValueType, Value>(\n value: Value | ((info: { props: SegmentedProps<ValueType> }) => Value) | undefined,\n props: SegmentedProps<ValueType>,\n): Value | undefined {\n return typeof value === \"function\"\n ? (value as (info: { props: SegmentedProps<ValueType> }) => Value)({ props })\n : value;\n}\n\nconst InternalSegmented = forwardRef<HTMLDivElement, SegmentedProps>((props, ref) => {\n const {\n block = false,\n className,\n classNames,\n disabled,\n items,\n name,\n options,\n orientation,\n rootClassName,\n shape = \"default\",\n size,\n style,\n styles,\n vertical,\n ...restProps\n } = props;\n const config = useConfig();\n const generatedName = useId();\n const mergedDisabled = disabled ?? config.components.Segmented?.disabled ?? config.disabled;\n const mergedSize = normalizeSize(size ?? config.components.Segmented?.size, config.size);\n const mergedVertical = orientation ? orientation === \"vertical\" : vertical;\n const sourceOptions = useMemo(\n () => options ?? items?.map(({ id, ...item }) => ({ ...item, value: id })) ?? [],\n [items, options],\n );\n const semanticProps: SegmentedProps = {\n ...props,\n disabled: mergedDisabled,\n options: sourceOptions,\n shape,\n size,\n vertical: mergedVertical,\n };\n const mergedClassNames = resolveSemantic(classNames, semanticProps) ?? {};\n const mergedStyles = resolveSemantic(styles, semanticProps) ?? {};\n const rcOptions = useMemo(\n () =>\n sourceOptions.map((option) => {\n if (!isLabeledOption(option)) return option;\n const { icon, label, tooltip: _tooltip, ...optionProps } = option;\n return {\n ...optionProps,\n label: (\n <>\n {icon ? (\n <span\n className={cn(\"hj-segmented-item-icon\", mergedClassNames.icon)}\n style={mergedStyles.icon}\n >\n {icon}\n </span>\n ) : null}\n {label != null ? <span>{label}</span> : null}\n </>\n ),\n };\n }),\n [mergedClassNames.icon, mergedStyles.icon, sourceOptions],\n );\n\n return (\n <RcSegmented\n {...restProps}\n ref={ref}\n className={cn(\n \"hj-segmented-root\",\n `hj-segmented-${mergedSize}`,\n block && \"hj-segmented-block\",\n shape === \"round\" && \"hj-segmented-shape-round\",\n rootClassName,\n mergedClassNames.root,\n className,\n )}\n classNames={{ item: mergedClassNames.item, label: mergedClassNames.label }}\n disabled={mergedDisabled}\n itemRender={(node, { item }) => {\n const sourceOption = sourceOptions.find(\n (option) => isLabeledOption(option) && option.value === item.value,\n );\n const tooltip =\n sourceOption && isLabeledOption(sourceOption) ? sourceOption.tooltip : undefined;\n if (!tooltip) return node;\n return typeof tooltip === \"string\" ? (\n <Tooltip title={tooltip}>{node}</Tooltip>\n ) : (\n <Tooltip {...tooltip}>{node}</Tooltip>\n );\n }}\n motionName=\"thumb-motion\"\n name={name ?? generatedName}\n options={rcOptions}\n prefixCls=\"hj-segmented\"\n style={{ ...style, ...mergedStyles.root }}\n styles={{ item: mergedStyles.item, label: mergedStyles.label }}\n vertical={mergedVertical}\n />\n );\n});\n\nexport const Segmented = InternalSegmented as (<ValueType>(\n props: SegmentedProps<ValueType> & RefAttributes<HTMLDivElement>,\n) => ReturnType<typeof InternalSegmented>) & { displayName?: string };\n\nSegmented.displayName = \"Segmented\";\n",
|
|
55
|
+
"import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type DividerOrientation = \"horizontal\" | \"vertical\";\nexport type DividerTitlePlacement = \"left\" | \"right\" | \"center\" | \"start\" | \"end\";\nexport type DividerVariant = \"dashed\" | \"dotted\" | \"solid\";\nexport type DividerSize = \"small\" | \"medium\" | \"middle\" | \"large\" | \"default\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n readonly children?: ReactNode;\n readonly dashed?: boolean;\n /**\n * AntD 6 orientation. The legacy title-placement values remain accepted for compatibility.\n */\n readonly orientation?: DividerOrientation | \"left\" | \"right\" | \"center\";\n /** @deprecated Use `styles.content.margin` in AntD-compatible code. */\n readonly orientationMargin?: number | string;\n readonly plain?: boolean;\n readonly rootClassName?: string;\n readonly size?: DividerSize;\n readonly titlePlacement?: DividerTitlePlacement;\n /** @deprecated Use `orientation` instead. */\n readonly type?: DividerOrientation;\n readonly variant?: DividerVariant;\n readonly vertical?: boolean;\n}\n\nfunction borderVariantClass(variant: DividerVariant) {\n if (variant === \"dashed\") return \"border-dashed\";\n if (variant === \"dotted\") return \"border-dotted\";\n return \"border-solid\";\n}\n\nexport function Divider({\n children,\n className = \"\",\n dashed = false,\n orientation = \"horizontal\",\n orientationMargin,\n plain = false,\n rootClassName,\n size = \"medium\",\n style,\n titlePlacement,\n type,\n variant,\n vertical = false,\n ...props\n}: DividerProps) {\n const legacyPlacement =\n orientation === \"left\" || orientation === \"right\" || orientation === \"center\"\n ? orientation\n : undefined;\n const mergedOrientation =\n vertical || orientation === \"vertical\" || type === \"vertical\" ? \"vertical\" : \"horizontal\";\n const mergedPlacement = titlePlacement ?? legacyPlacement ?? \"center\";\n const mergedVariant = variant ?? (dashed ? \"dashed\" : \"solid\");\n const lineClass = borderVariantClass(mergedVariant);\n\n if (mergedOrientation === \"vertical\") {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"hj-divider hj-divider-vertical mx-2 inline-block h-4 border-l border-[var(--hj-color-web-border)] align-middle\",\n `hj-divider-size-${size}`,\n lineClass,\n rootClassName,\n className,\n )}\n style={style}\n {...props}\n />\n );\n }\n\n if (children == null) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"hj-divider hj-divider-horizontal my-4 border-t border-[var(--hj-color-web-border)]\",\n `hj-divider-size-${size}`,\n lineClass,\n rootClassName,\n className,\n )}\n style={style}\n {...props}\n />\n );\n }\n\n const marginStyle: CSSProperties | undefined =\n orientationMargin == null ? undefined : { flex: \"none\", width: orientationMargin };\n const firstRailStyle =\n mergedPlacement === \"left\" || mergedPlacement === \"start\" ? marginStyle : undefined;\n const lastRailStyle =\n mergedPlacement === \"right\" || mergedPlacement === \"end\" ? marginStyle : undefined;\n\n return (\n <div\n className={cn(\n \"hj-divider hj-divider-horizontal hj-divider-with-text my-4 flex items-center gap-3 text-xs text-[var(--hj-color-web-muted)]\",\n `hj-divider-with-text-${mergedPlacement}`,\n `hj-divider-size-${size}`,\n plain && \"hj-divider-plain font-normal\",\n rootClassName,\n className,\n )}\n style={style}\n {...props}\n >\n <span\n className={cn(\n \"hj-divider-rail h-px flex-1 border-t border-[var(--hj-color-web-border)]\",\n lineClass,\n (mergedPlacement === \"left\" || mergedPlacement === \"start\") &&\n orientationMargin == null &&\n \"max-w-8\",\n )}\n style={firstRailStyle}\n />\n <span className=\"hj-divider-content shrink-0\">{children}</span>\n <span\n className={cn(\n \"hj-divider-rail h-px flex-1 border-t border-[var(--hj-color-web-border)]\",\n lineClass,\n (mergedPlacement === \"right\" || mergedPlacement === \"end\") &&\n orientationMargin == null &&\n \"max-w-8\",\n )}\n style={lastRailStyle}\n />\n </div>\n );\n}\n",
|
|
56
|
+
"import RcDrawer from \"@rc-component/drawer\";\nimport type {\n CSSProperties,\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n Ref,\n} from \"react\";\nimport { useId } from \"react\";\nimport { isMotionDisabled, useConfig } from \"../ConfigProvider\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Skeleton } from \"./Skeleton\";\n\nexport type DrawerPlacement = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type DrawerSize = \"default\" | \"large\" | number | string;\nexport type DrawerPush = boolean | { readonly distance?: number | string };\nexport type DrawerResizable =\n | boolean\n | {\n readonly onResize?: (size: number) => void;\n readonly onResizeEnd?: () => void;\n readonly onResizeStart?: () => void;\n };\nexport type DrawerClosable =\n | boolean\n | {\n readonly closeIcon?: ReactNode;\n readonly disabled?: boolean;\n readonly placement?: \"start\" | \"end\";\n };\nexport type DrawerMask = boolean | { readonly blur?: boolean; readonly closable?: boolean };\n\ntype DrawerSlot =\n | \"root\"\n | \"mask\"\n | \"wrapper\"\n | \"panel\"\n | \"dragger\"\n | \"header\"\n | \"title\"\n | \"extra\"\n | \"close\"\n | \"body\"\n | \"footer\";\n\nexport interface DrawerProps {\n readonly afterOpenChange?: (open: boolean) => void;\n readonly autoFocus?: boolean;\n readonly children?: ReactNode;\n readonly bodyStyle?: CSSProperties;\n readonly className?: string;\n readonly classNames?: SlotClassNames<DrawerSlot>;\n readonly closeIcon?: ReactNode;\n readonly closable?: DrawerClosable;\n readonly contentWrapperStyle?: CSSProperties;\n readonly defaultSize?: number | string;\n readonly destroyOnClose?: boolean;\n readonly destroyOnHidden?: boolean;\n readonly drawerRender?: (node: ReactNode) => ReactNode;\n readonly drawerStyle?: CSSProperties;\n readonly extra?: ReactNode;\n readonly focusTriggerAfterClose?: boolean;\n readonly forceRender?: boolean;\n readonly footer?: ReactNode;\n readonly footerStyle?: CSSProperties;\n readonly getContainer?: false | HTMLElement | (() => HTMLElement);\n readonly height?: number | string;\n readonly headerStyle?: CSSProperties;\n readonly keyboard?: boolean;\n readonly loading?: boolean;\n readonly mask?: DrawerMask;\n readonly maskClosable?: boolean;\n readonly maskStyle?: CSSProperties;\n readonly maxSize?: number;\n readonly open?: boolean;\n readonly panelRef?: Ref<HTMLDivElement>;\n readonly placement?: DrawerPlacement;\n readonly push?: DrawerPush;\n readonly resizable?: DrawerResizable;\n readonly rootClassName?: string;\n readonly rootStyle?: CSSProperties;\n readonly size?: DrawerSize;\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<DrawerSlot>;\n readonly title?: ReactNode;\n readonly width?: number | string;\n readonly zIndex?: number;\n readonly onClose?: (\n event?:\n | ReactMouseEvent<HTMLButtonElement>\n | ReactMouseEvent\n | ReactKeyboardEvent\n | KeyboardEvent,\n ) => void;\n}\n\nfunction resolveDrawerSize(size: DrawerSize | undefined) {\n if (size === \"large\") return 736;\n if (size === \"default\") return 378;\n if (typeof size === \"string\" && /^\\d+(\\.\\d+)?$/.test(size)) return Number(size);\n return size;\n}\n\nexport function Drawer({\n afterOpenChange,\n autoFocus = true,\n bodyStyle,\n children,\n className = \"\",\n classNames,\n closeIcon,\n closable = true,\n contentWrapperStyle,\n defaultSize = 378,\n destroyOnClose,\n destroyOnHidden,\n drawerRender,\n drawerStyle,\n extra,\n focusTriggerAfterClose = true,\n forceRender,\n footer,\n footerStyle,\n getContainer,\n height,\n headerStyle,\n keyboard = true,\n loading = false,\n mask = true,\n maskClosable = true,\n maskStyle,\n maxSize,\n onClose,\n open = false,\n panelRef,\n placement = \"right\",\n push = { distance: 180 },\n resizable,\n rootClassName = \"\",\n rootStyle,\n size,\n style,\n styles,\n title,\n width,\n zIndex,\n}: DrawerProps) {\n const config = useConfig();\n const titleId = useId();\n const motionDisabled = isMotionDisabled(config.motion);\n const drawerSize =\n resolveDrawerSize(size) ?? (placement === \"left\" || placement === \"right\" ? width : height);\n const container = getContainer ?? config.getPopupContainer;\n const closableConfig = typeof closable === \"object\" ? closable : undefined;\n const mergedClosable = typeof closable === \"object\" ? true : closable;\n const closePlacement = closableConfig?.placement ?? \"start\";\n const mergedMask = typeof mask === \"object\" ? true : mask;\n const mergedMaskClosable =\n typeof mask === \"object\" ? (mask.closable ?? maskClosable) : maskClosable;\n const closeButton = mergedClosable ? (\n <button\n aria-label=\"Close\"\n className={slotClass(\n classNames,\n \"close\",\n \"hj-drawer-close\",\n `hj-drawer-close-${closePlacement}`,\n )}\n disabled={closableConfig?.disabled}\n onClick={onClose}\n style={slotStyle(styles, \"close\")}\n type=\"button\"\n >\n {closableConfig?.closeIcon ?? closeIcon ?? \"×\"}\n </button>\n ) : null;\n\n return (\n <RcDrawer\n afterOpenChange={afterOpenChange}\n aria-labelledby={title ? titleId : undefined}\n autoFocus={autoFocus}\n className={slotClass(classNames, \"panel\", \"hj-drawer-section\", className)}\n classNames={{\n mask: slotClass(\n classNames,\n \"mask\",\n \"hj-drawer-mask-layer\",\n typeof mask === \"object\" && mask.blur && \"hj-drawer-mask-blur\",\n ),\n wrapper: slotClass(classNames, \"wrapper\", \"hj-drawer-wrapper\"),\n section: slotClass(classNames, \"panel\", \"hj-drawer-panel\"),\n dragger: slotClass(classNames, \"dragger\"),\n }}\n defaultSize={defaultSize}\n destroyOnHidden={destroyOnHidden ?? destroyOnClose}\n drawerRender={drawerRender}\n focusTriggerAfterClose={focusTriggerAfterClose}\n forceRender={forceRender}\n getContainer={container}\n keyboard={keyboard}\n mask={mergedMask}\n maskClosable={mergedMaskClosable}\n maskMotion={\n motionDisabled ? undefined : { motionDeadline: 500, motionName: \"hj-drawer-mask-motion\" }\n }\n maxSize={maxSize}\n motion={\n motionDisabled\n ? undefined\n : (motionPlacement) => ({\n motionDeadline: 500,\n motionName: `hj-drawer-slide-${motionPlacement}`,\n })\n }\n open={open}\n panelRef={panelRef}\n placement={placement}\n prefixCls=\"hj-drawer\"\n push={push}\n resizable={resizable}\n rootClassName={slotClass(classNames, \"root\", rootClassName)}\n rootStyle={slotStyle(styles, \"root\", rootStyle)}\n size={drawerSize}\n style={slotStyle(styles, \"panel\", { ...drawerStyle, ...style })}\n styles={{\n mask: slotStyle(styles, \"mask\", maskStyle),\n wrapper: slotStyle(styles, \"wrapper\", contentWrapperStyle),\n section: slotStyle(styles, \"panel\"),\n dragger: slotStyle(styles, \"dragger\"),\n }}\n zIndex={zIndex}\n onClose={onClose}\n >\n {title || extra || mergedClosable ? (\n <header\n className={slotClass(classNames, \"header\", \"hj-drawer-header\")}\n style={slotStyle(styles, \"header\", headerStyle)}\n >\n {closePlacement === \"start\" ? closeButton : null}\n <h2\n className={slotClass(classNames, \"title\", \"hj-drawer-title\")}\n id={title ? titleId : undefined}\n style={slotStyle(styles, \"title\")}\n >\n {title}\n </h2>\n {extra ? (\n <div\n className={slotClass(classNames, \"extra\", \"hj-drawer-extra\")}\n style={slotStyle(styles, \"extra\")}\n >\n {extra}\n </div>\n ) : null}\n {closePlacement === \"end\" ? closeButton : null}\n </header>\n ) : null}\n <div\n className={slotClass(classNames, \"body\", \"hj-drawer-body\")}\n style={slotStyle(styles, \"body\", bodyStyle)}\n >\n {loading ? <Skeleton active paragraph={{ rows: 5 }} title /> : children}\n </div>\n {footer ? (\n <footer\n className={slotClass(classNames, \"footer\", \"hj-drawer-footer\")}\n style={slotStyle(styles, \"footer\", footerStyle)}\n >\n {footer}\n </footer>\n ) : null}\n </RcDrawer>\n );\n}\n",
|
|
57
|
+
"import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface EmptyProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n readonly description?: ReactNode;\n readonly image?: ReactNode;\n /** @deprecated Use `styles.image` in AntD-compatible code. */\n readonly imageStyle?: CSSProperties;\n readonly rootClassName?: string;\n}\n\nconst PresentedImageDefault = (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex h-14 w-14 items-center justify-center rounded-full border border-[var(--hj-color-web-border)] bg-[rgb(255_255_255_/_0.04)] text-2xl text-[var(--hj-color-web-subtle)]\"\n >\n \\u2205\n </span>\n);\n\nconst PresentedImageSimple = (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex h-10 w-10 items-center justify-center text-xl text-[var(--hj-color-web-subtle)]\"\n >\n \\u2014\n </span>\n);\n\nfunction EmptyRoot({\n children,\n className = \"\",\n description = \"\\u6682\\u65e0\\u6570\\u636e\",\n image = PresentedImageDefault,\n imageStyle,\n rootClassName,\n ...props\n}: EmptyProps) {\n return (\n <div\n className={cn(\n \"hj-empty flex flex-col items-center justify-center px-6 py-10 text-center text-sm text-[var(--hj-color-web-muted)]\",\n rootClassName,\n className,\n )}\n {...props}\n >\n {image != null && image !== false ? (\n <div className=\"hj-empty-image mb-3 flex items-center justify-center\" style={imageStyle}>\n {image}\n </div>\n ) : null}\n {description != null && description !== false ? (\n <div className=\"hj-empty-description\">{description}</div>\n ) : null}\n {children != null ? <div className=\"hj-empty-footer mt-4\">{children}</div> : null}\n </div>\n );\n}\n\nexport const Empty = Object.assign(EmptyRoot, {\n PRESENTED_IMAGE_DEFAULT: PresentedImageDefault,\n PRESENTED_IMAGE_SIMPLE: PresentedImageSimple,\n});\n",
|
|
58
|
+
"interface EmptyStateProps {\n readonly description?: string;\n readonly title: string;\n}\n\nexport function EmptyState({ description, title }: EmptyStateProps) {\n return (\n <div className=\"rounded-[4px] border border-dashed border-[#3b4652] bg-[#111923] p-4 text-center\">\n <p className=\"text-sm font-semibold text-[#f2f4f6]\">{title}</p>\n {description ? <p className=\"mt-1.5 text-xs text-[#6f7985]\">{description}</p> : null}\n </div>\n );\n}\n",
|
|
59
|
+
"import RcForm, {\n Field,\n FieldContext as RcFieldContext,\n FormProvider,\n List as RcList,\n ListContext as RcListContext,\n useForm as useRcForm,\n useWatch,\n} from \"@rc-component/form\";\nimport type {\n FieldProps,\n FormInstance,\n FormRef,\n InternalNamePath,\n Meta,\n NamePath,\n FormProps as RcFormProps,\n Rule,\n RuleObject,\n Store,\n StoreValue,\n ValidatorRule,\n} from \"@rc-component/form\";\nimport { composeRef, getNodeRef, supportRef } from \"@rc-component/util\";\nimport type {\n ForwardedRef,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport {\n Fragment,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { FormItemInputContext, useFormItemStatus } from \"./form/statusContext\";\nimport type { FormItemStatus } from \"./form/statusContext\";\n\nexport type {\n FormControlStatus,\n FormItemStatus,\n FormItemUseStatusResult,\n} from \"./form/statusContext\";\n\nexport interface FormProps<Values = Store> extends RcFormProps<Values> {\n readonly disabled?: boolean;\n readonly layout?: \"horizontal\" | \"vertical\" | \"inline\";\n}\n\ntype FormItemChildren<Values> = ReactNode | ((form: FormInstance<Values>) => ReactNode);\n\nexport interface FormItemProps<Values = Store>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onReset\">,\n Omit<FieldProps<Values>, \"children\"> {\n readonly children?: FormItemChildren<Values>;\n readonly help?: ReactNode;\n readonly htmlFor?: string | null;\n readonly label?: ReactNode;\n readonly noStyle?: boolean;\n readonly required?: boolean;\n readonly status?: FormItemStatus;\n readonly validateStatus?: FormItemStatus;\n}\n\nexport interface ErrorListProps {\n readonly className?: string;\n readonly errors?: readonly ReactNode[];\n readonly fieldId?: string;\n readonly help?: ReactNode;\n readonly helpStatus?: FormItemStatus;\n readonly onVisibleChanged?: (visible: boolean) => void;\n readonly warnings?: readonly ReactNode[];\n}\n\nexport interface FormListFieldData {\n readonly fieldKey: number;\n readonly isListField: boolean;\n readonly key: number;\n readonly name: number;\n}\n\nexport interface FormListOperation {\n readonly add: (defaultValue?: StoreValue, insertIndex?: number) => void;\n readonly move: (from: number, to: number) => void;\n readonly remove: (index: number | number[]) => void;\n}\n\nexport interface FormListProps<Values = Store> {\n readonly children: (\n fields: FormListFieldData[],\n operation: FormListOperation,\n meta: Pick<Meta, \"errors\" | \"warnings\">,\n ) => ReactNode;\n readonly initialValue?: StoreValue[];\n readonly name: NamePath<Values>;\n readonly rules?: ValidatorRule[];\n readonly validateTrigger?: string | string[] | false;\n}\n\ninterface FormRuntimeContextValue {\n readonly disabled: boolean;\n readonly form?: FormInstance;\n readonly layout: NonNullable<FormProps[\"layout\"]>;\n readonly name?: string;\n}\n\ntype FieldMeta = Meta & { destroy?: boolean };\ntype NoStyleMetaChange = (meta: FieldMeta, namePath: InternalNamePath) => void;\ntype ControlProps = Record<string, unknown>;\n\nconst EMPTY_META: Meta = {\n errors: [],\n name: [],\n touched: false,\n validated: false,\n validating: false,\n warnings: [],\n};\nconst EMPTY_NODES: readonly ReactNode[] = [];\nconst FormRuntimeContext = createContext<FormRuntimeContextValue>({\n disabled: false,\n layout: \"horizontal\",\n});\nconst NoStyleMetaContext = createContext<NoStyleMetaChange | null>(null);\n\nfunction InternalForm<Values = Store>(\n {\n children,\n className = \"\",\n component = \"form\",\n disabled = false,\n form,\n id,\n layout = \"horizontal\",\n name,\n ...props\n }: FormProps<Values>,\n ref: ForwardedRef<FormRef<Values>>,\n) {\n const [formInstance] = useRcForm(form);\n const contextValue = useMemo<FormRuntimeContextValue>(\n () => ({ disabled, form: formInstance, layout, name }),\n [disabled, formInstance, layout, name],\n );\n const wrapChildren = (node: ReactNode) => (\n <fieldset className=\"contents\" disabled={disabled}>\n {node}\n </fieldset>\n );\n const mergedChildren: RcFormProps<Values>[\"children\"] =\n typeof children === \"function\"\n ? (values, currentForm) => wrapChildren(children(values, currentForm))\n : wrapChildren(children);\n\n return (\n <FormRuntimeContext.Provider value={contextValue}>\n <RcForm\n {...props}\n className={cn(\n \"hj-form\",\n `hj-form-${layout}`,\n layout === \"inline\" ? \"flex flex-wrap items-start gap-3\" : \"space-y-4\",\n className,\n )}\n component={component}\n form={formInstance}\n id={id ?? name}\n name={name}\n ref={ref}\n >\n {mergedChildren}\n </RcForm>\n </FormRuntimeContext.Provider>\n );\n}\n\nconst FormRoot = forwardRef(InternalForm) as <Values = Store>(\n props: FormProps<Values> & RefAttributes<FormRef<Values>>,\n) => ReactElement;\n\nfunction useFormInstance<Values = Store>(): FormInstance<Values> {\n return useContext(FormRuntimeContext).form as FormInstance<Values>;\n}\n\nfunction toArray<T>(value: T | T[] | false | undefined): T[] {\n if (value === undefined || value === false) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction getFieldId(namePath: InternalNamePath, formName?: string): string | undefined {\n if (!namePath.length) return undefined;\n const fieldName = namePath.join(\"_\");\n const safeFieldName = fieldName === \"parentNode\" ? `form_item_${fieldName}` : fieldName;\n return formName ? `${formName}_${safeFieldName}` : safeFieldName;\n}\n\nfunction isControlElement(node: ReactNode): node is ReactElement<ControlProps> {\n return isValidElement(node) && node.type !== Fragment;\n}\n\nfunction getElementId(node: ReactNode): string | undefined {\n if (!isControlElement(node)) return undefined;\n return typeof node.props.id === \"string\" && node.props.id ? node.props.id : undefined;\n}\n\nfunction mergeAriaDescribedBy(...values: unknown[]): string | undefined {\n const ids = new Set<string>();\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n for (const id of value.split(/\\s+/)) {\n if (id) ids.add(id);\n }\n }\n return ids.size ? [...ids].join(\" \") : undefined;\n}\n\nfunction asReactRef(value: unknown): Ref<unknown> | null {\n if (typeof value === \"function\") return value as Ref<unknown>;\n if (value && typeof value === \"object\" && \"current\" in value) return value as Ref<unknown>;\n return null;\n}\n\nfunction cloneControl(\n child: ReactElement<ControlProps>,\n control: ControlProps,\n fieldId: string | undefined,\n described: boolean,\n required: boolean,\n status: FormItemStatus,\n trigger: string,\n validateTrigger: string | string[] | false | undefined,\n): { id?: string; node: ReactElement } {\n const childProps = child.props;\n const mergedProps: ControlProps = { ...childProps, ...control };\n\n for (const eventName of new Set([trigger, ...toArray(validateTrigger)])) {\n const fieldHandler = control[eventName];\n const childHandler = childProps[eventName];\n if (\n typeof fieldHandler === \"function\" &&\n typeof childHandler === \"function\" &&\n fieldHandler !== childHandler\n ) {\n mergedProps[eventName] = (...args: unknown[]) => {\n fieldHandler(...args);\n childHandler(...args);\n };\n }\n }\n\n if (!mergedProps.id && fieldId) mergedProps.id = fieldId;\n const mergedId = typeof mergedProps.id === \"string\" && mergedProps.id ? mergedProps.id : fieldId;\n const helpId = described && mergedId ? `${mergedId}_help` : undefined;\n const describedBy = mergeAriaDescribedBy(\n childProps[\"aria-describedby\"],\n control[\"aria-describedby\"],\n helpId,\n );\n if (describedBy) mergedProps[\"aria-describedby\"] = describedBy;\n if (required) mergedProps[\"aria-required\"] = true;\n if (status === \"error\") mergedProps[\"aria-invalid\"] = true;\n if (status === \"validating\") mergedProps[\"aria-busy\"] = true;\n if (status) mergedProps[\"data-form-item-status\"] = status;\n\n const childRef = getNodeRef<unknown>(child);\n const controlRef = asReactRef(control.ref);\n const refs = [childRef, controlRef].filter(\n (item, index, list): item is Ref<unknown> => Boolean(item) && list.indexOf(item) === index,\n );\n if (refs.length && supportRef(child)) {\n mergedProps.ref = refs.length === 1 ? refs[0] : composeRef(...refs);\n } else {\n mergedProps.ref = undefined;\n }\n\n return { id: mergedId, node: cloneElement(child, mergedProps) };\n}\n\nfunction getRequired<Values>(\n explicitRequired: boolean | undefined,\n rules: Rule[] | undefined,\n form: FormInstance<Values>,\n): boolean {\n if (explicitRequired !== undefined) return explicitRequired;\n return Boolean(\n rules?.some((rule) => {\n const ruleObject = typeof rule === \"function\" ? rule(form) : (rule as RuleObject);\n return ruleObject?.required && !ruleObject.warningOnly;\n }),\n );\n}\n\nfunction getStatus(\n meta: Meta,\n errors: readonly ReactNode[],\n warnings: readonly ReactNode[],\n explicitStatus: FormItemStatus | undefined,\n): FormItemStatus | undefined {\n if (explicitStatus !== undefined) return explicitStatus;\n if (meta.validating) return \"validating\";\n if (errors.length) return \"error\";\n if (warnings.length) return \"warning\";\n if (meta.touched) return \"success\";\n return undefined;\n}\n\nconst helpStatusClass: Record<FormItemStatus, string> = {\n \"\": \"text-[var(--hj-color-web-muted)]\",\n error: \"text-[var(--hj-color-danger)]\",\n success: \"text-[var(--hj-color-success)]\",\n validating: \"text-[var(--hj-color-web-muted)]\",\n warning: \"text-[var(--hj-color-warning)]\",\n};\n\nexport function ErrorList({\n className,\n errors = EMPTY_NODES,\n fieldId,\n help,\n helpStatus = \"\",\n onVisibleChanged,\n warnings = EMPTY_NODES,\n}: ErrorListProps) {\n const hasHelp = help !== undefined && help !== null;\n const items = hasHelp\n ? [{ content: help, status: helpStatus }]\n : [\n ...errors.map((content) => ({ content, status: \"error\" as const })),\n ...warnings.map((content) => ({ content, status: \"warning\" as const })),\n ];\n const visible = items.length > 0;\n const previousVisible = useRef<boolean | undefined>(undefined);\n\n useEffect(() => {\n if (previousVisible.current === visible) return;\n previousVisible.current = visible;\n onVisibleChanged?.(visible);\n }, [onVisibleChanged, visible]);\n\n if (!visible) return null;\n\n return (\n <div\n aria-live=\"polite\"\n className={cn(\"hj-form-item-explain mt-1 text-xs\", className)}\n id={fieldId ? `${fieldId}_help` : undefined}\n >\n {items.map(({ content, status: itemStatus }, index) => (\n <div\n className={cn(\n \"hj-form-item-explain-item\",\n `hj-form-item-explain-${itemStatus || \"help\"}`,\n helpStatusClass[itemStatus],\n )}\n key={typeof content === \"string\" ? `${content}-${index}` : index}\n >\n {content}\n </div>\n ))}\n </div>\n );\n}\n\nfunction Item<Values = Store>({\n children,\n className = \"\",\n dependencies,\n getValueFromEvent,\n getValueProps,\n help,\n hidden,\n htmlFor,\n initialValue,\n isList,\n isListField,\n label,\n messageVariables,\n name,\n noStyle = false,\n normalize,\n onMetaChange,\n onReset,\n preserve,\n required,\n rules,\n shouldUpdate,\n status,\n trigger = \"onChange\",\n validateDebounce,\n validateFirst,\n validateStatus,\n validateTrigger,\n valuePropName,\n ...itemProps\n}: FormItemProps<Values>) {\n const runtime = useContext(FormRuntimeContext);\n const fieldContext = useContext(RcFieldContext);\n const listContext = useContext(RcListContext);\n const notifyParentMetaChange = useContext(NoStyleMetaContext);\n const parentItemStatus = useContext(FormItemInputContext);\n const fieldKeyPath = useRef<InternalNamePath | null>(null);\n const [subFieldMeta, setSubFieldMeta] = useState<Record<string, FieldMeta>>({});\n const inline = runtime.layout === \"inline\";\n const horizontal = runtime.layout === \"horizontal\";\n const hasName = name !== undefined && name !== null;\n const isRenderProps = typeof children === \"function\";\n const mergedValidateTrigger =\n validateTrigger !== undefined ? validateTrigger : fieldContext.validateTrigger;\n const variables = {\n ...(typeof label === \"string\" ? { label } : hasName ? { label: String(name) } : {}),\n ...messageVariables,\n };\n\n const onSubItemMetaChange = useCallback<NoStyleMetaChange>((nextMeta, namePath) => {\n const key = JSON.stringify(namePath);\n setSubFieldMeta((previous) => {\n if (nextMeta.destroy) {\n if (!(key in previous)) return previous;\n const next = { ...previous };\n delete next[key];\n return next;\n }\n return { ...previous, [key]: nextMeta };\n });\n }, []);\n\n const onInternalMetaChange = useCallback(\n (nextMeta: FieldMeta) => {\n onMetaChange?.(nextMeta);\n if (!noStyle || help === false || !notifyParentMetaChange) return;\n\n let namePath = nextMeta.name;\n const keyInfo = listContext?.getKey(nextMeta.name);\n if (!nextMeta.destroy && keyInfo) {\n const [fieldKey, restPath] = keyInfo;\n namePath = [fieldKey, ...restPath];\n fieldKeyPath.current = namePath;\n } else if (nextMeta.destroy && fieldKeyPath.current) {\n namePath = fieldKeyPath.current;\n }\n notifyParentMetaChange(nextMeta, namePath);\n },\n [help, listContext, noStyle, notifyParentMetaChange, onMetaChange],\n );\n\n const getMergedItemStatus = (\n meta: Meta,\n errors: readonly ReactNode[],\n warnings: readonly ReactNode[],\n ): FormItemStatus =>\n getStatus(meta, errors, warnings, validateStatus ?? status) ??\n (noStyle ? parentItemStatus.status : undefined) ??\n \"\";\n\n const renderLayout = (\n baseChildren: ReactNode,\n meta: Meta,\n fieldId: string | undefined,\n isRequired: boolean,\n ) => {\n const nestedMeta = Object.values(subFieldMeta);\n const errors = [...meta.errors, ...nestedMeta.flatMap((item) => item.errors)];\n const warnings = [...meta.warnings, ...nestedMeta.flatMap((item) => item.warnings)];\n const mergedStatus = getMergedItemStatus(meta, errors, warnings);\n const labelFor = htmlFor === undefined ? fieldId : (htmlFor ?? undefined);\n const controlNode = (\n <FormItemInputContext.Provider\n value={{\n errors: [...meta.errors],\n isFormItemInput: noStyle ? parentItemStatus.isFormItemInput : true,\n status: mergedStatus,\n warnings: [...meta.warnings],\n }}\n >\n <NoStyleMetaContext.Provider value={onSubItemMetaChange}>\n {baseChildren}\n </NoStyleMetaContext.Provider>\n </FormItemInputContext.Provider>\n );\n\n if (noStyle && !hidden) return controlNode;\n\n return (\n <div\n {...itemProps}\n className={cn(\n \"hj-form-item\",\n inline\n ? \"inline-flex min-w-0 items-start gap-2\"\n : horizontal\n ? \"grid min-w-0 gap-2 sm:grid-cols-[minmax(0,auto)_minmax(0,1fr)] sm:items-start\"\n : \"min-w-0\",\n mergedStatus === \"error\" && \"hj-form-item-has-error\",\n mergedStatus === \"warning\" && \"hj-form-item-has-warning\",\n mergedStatus === \"success\" && \"hj-form-item-has-success\",\n mergedStatus === \"validating\" && \"hj-form-item-is-validating\",\n className,\n )}\n data-status={mergedStatus || undefined}\n hidden={hidden}\n >\n {label !== undefined && label !== null ? (\n <label\n className={cn(\n \"mb-2 block text-sm text-[var(--hj-color-web-foreground-80)]\",\n (inline || horizontal) && \"mb-0\",\n )}\n htmlFor={labelFor}\n >\n {isRequired ? (\n <span aria-hidden=\"true\" className=\"mr-1 text-[var(--hj-color-danger)]\">\n *\n </span>\n ) : null}\n {label}\n </label>\n ) : null}\n <div className=\"min-w-0\" aria-busy={mergedStatus === \"validating\" || undefined}>\n {controlNode}\n <ErrorList\n errors={errors}\n fieldId={fieldId}\n help={help}\n helpStatus={mergedStatus}\n warnings={warnings}\n />\n </div>\n </div>\n );\n };\n\n if (!hasName && !isRenderProps && !dependencies) {\n return renderLayout(children, EMPTY_META, getElementId(children), required ?? false);\n }\n\n return (\n <Field<Values>\n dependencies={dependencies}\n getValueFromEvent={getValueFromEvent}\n getValueProps={getValueProps}\n initialValue={initialValue}\n isList={isList}\n isListField={isListField}\n messageVariables={variables}\n name={hasName ? name : undefined}\n normalize={normalize}\n onMetaChange={onInternalMetaChange}\n onReset={onReset}\n preserve={preserve}\n rules={rules}\n shouldUpdate={shouldUpdate}\n trigger={trigger}\n validateDebounce={validateDebounce}\n validateFirst={validateFirst}\n validateTrigger={mergedValidateTrigger}\n valuePropName={valuePropName}\n >\n {(control, meta, form) => {\n const generatedId = getFieldId(meta.name, runtime.name);\n const isRequired = getRequired(required, rules, form);\n const nestedMeta = Object.values(subFieldMeta);\n const errors = [...meta.errors, ...nestedMeta.flatMap((item) => item.errors)];\n const warnings = [...meta.warnings, ...nestedMeta.flatMap((item) => item.warnings)];\n const mergedStatus = getMergedItemStatus(meta, errors, warnings);\n const described =\n (help !== undefined && help !== null) || errors.length > 0 || warnings.length > 0;\n const child = isRenderProps ? null : children;\n let childNode: ReactNode = child;\n let controlId = generatedId;\n\n if (isControlElement(child)) {\n const cloned = cloneControl(\n child,\n control,\n generatedId,\n described,\n isRequired,\n mergedStatus,\n trigger,\n mergedValidateTrigger,\n );\n childNode = cloned.node;\n controlId = cloned.id;\n } else if (isRenderProps && !hasName && Boolean(shouldUpdate || dependencies)) {\n childNode = children(form);\n } else if (isRenderProps) {\n childNode = null;\n }\n\n return renderLayout(childNode, meta, controlId, isRequired);\n }}\n </Field>\n );\n}\n\ntype FormItemComponent = typeof Item & {\n readonly useStatus: typeof useFormItemStatus;\n};\n\nconst FormItem = Object.assign(Item, { useStatus: useFormItemStatus }) as FormItemComponent;\n\nfunction FormList<Values = Store>({ children, ...props }: FormListProps<Values>) {\n return (\n <RcList<Values> {...props}>\n {(fields, operation, meta) =>\n children(\n fields.map((field) => ({ ...field, fieldKey: field.key })),\n operation,\n { errors: meta.errors, warnings: meta.warnings },\n )\n }\n </RcList>\n );\n}\n\ntype FormComponent = typeof FormRoot & {\n readonly ErrorList: typeof ErrorList;\n readonly Item: typeof FormItem;\n readonly List: typeof FormList;\n readonly Provider: typeof FormProvider;\n readonly useForm: typeof useRcForm;\n readonly useFormInstance: typeof useFormInstance;\n readonly useWatch: typeof useWatch;\n};\n\n(FormRoot as { displayName?: string }).displayName = \"Form\";\nexport const Form = Object.assign(FormRoot, {\n ErrorList,\n Item: FormItem,\n List: FormList,\n Provider: FormProvider,\n useForm: useRcForm,\n useFormInstance,\n useWatch,\n}) as FormComponent;\n",
|
|
60
|
+
"interface GameCoverProps {\n readonly alt?: string;\n readonly className?: string;\n readonly fallback: string;\n readonly src?: string;\n}\n\nexport function GameCover({ alt = \"\", className = \"\", fallback, src }: GameCoverProps) {\n if (src) {\n return <img className={`h-full w-full object-cover ${className}`} alt={alt} src={src} />;\n }\n\n return (\n <div\n className={`flex h-full w-full items-center justify-center bg-[#151f29] text-xl font-semibold text-[#6f7985] ${className}`}\n >\n {fallback}\n </div>\n );\n}\n",
|
|
61
|
+
"import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport type IconButtonTone = \"default\" | \"primary\" | \"ghost\" | \"selected\";\nexport type IconButtonSize = \"xs\" | \"sm\" | \"md\";\ntype IconButtonSlot = \"root\" | \"content\";\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n readonly children: ReactNode;\n readonly classNames?: SlotClassNames<IconButtonSlot>;\n readonly styles?: SlotStyles<IconButtonSlot>;\n readonly tone?: IconButtonTone;\n readonly size?: IconButtonSize;\n}\n\nconst toneClass: Record<IconButtonTone, string> = {\n default:\n \"border-[var(--hj-icon-button-default-border)] bg-[var(--hj-icon-button-default-bg)] text-[var(--hj-icon-button-default-fg)] hover:border-[var(--hj-icon-button-default-border-hover)] hover:text-[var(--hj-icon-button-default-fg-hover)]\",\n primary:\n \"border-[var(--hj-icon-button-primary-border)] bg-[var(--hj-icon-button-primary-bg)] text-[var(--hj-icon-button-primary-fg)] hover:bg-[var(--hj-icon-button-primary-bg-hover)]\",\n ghost:\n \"border-[var(--hj-icon-button-ghost-border)] bg-[var(--hj-icon-button-ghost-bg)] text-[var(--hj-icon-button-ghost-fg)] hover:text-[var(--hj-icon-button-ghost-fg-hover)]\",\n selected:\n \"border-[var(--hj-icon-button-selected-border)] bg-[var(--hj-icon-button-selected-bg)] text-[var(--hj-icon-button-selected-fg)]\",\n};\n\nconst sizeClass: Record<IconButtonSize, string> = {\n xs: \"h-2 w-2 text-[0px]\",\n sm: \"h-6 w-6 text-sm\",\n md: \"h-9 w-9 text-lg\",\n};\n\nexport function IconButton({\n children,\n className = \"\",\n classNames,\n size = \"sm\",\n style,\n styles,\n tone = \"default\",\n type = \"button\",\n ...props\n}: IconButtonProps) {\n return (\n <button\n className={slotClass(\n classNames,\n \"root\",\n \"hj-wave inline-flex shrink-0 items-center justify-center rounded-[3px] border font-semibold leading-none transition disabled:cursor-not-allowed disabled:opacity-50\",\n toneClass[tone],\n sizeClass[size],\n className,\n )}\n style={slotStyle(styles, \"root\", style)}\n type={type}\n {...props}\n >\n <span className={slotClass(classNames, \"content\")} style={slotStyle(styles, \"content\")}>\n {children}\n </span>\n </button>\n );\n}\n",
|
|
62
|
+
"import RcInputNumber from \"@rc-component/input-number\";\nimport type {\n InputNumberProps as RcInputNumberProps,\n InputNumberRef as RcInputNumberRef,\n ValueType,\n} from \"@rc-component/input-number\";\nimport type { CSSProperties, ForwardedRef, ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { type InputSize, type InputStatus, type InputVariant, normalizeInputSize } from \"./Input\";\nimport { useMergedFormItemStatus } from \"./form/statusContext\";\nimport type { FormItemStatus } from \"./form/statusContext\";\n\nexport type InputNumberRef = RcInputNumberRef;\nexport type InputNumberValue = ValueType;\n\ntype InputNumberSlot =\n | \"group\"\n | \"root\"\n | \"prefix\"\n | \"suffix\"\n | \"input\"\n | \"actions\"\n | \"action\"\n | \"addonBefore\"\n | \"addonAfter\";\n\nexport type InputNumberClassNames = Partial<Record<InputNumberSlot, string>>;\nexport type InputNumberStyles = Partial<Record<InputNumberSlot, CSSProperties>>;\n\nexport interface InputNumberControls {\n readonly downIcon?: ReactNode;\n readonly upIcon?: ReactNode;\n}\n\nexport interface InputNumberProps<T extends ValueType = ValueType>\n extends Omit<\n RcInputNumberProps<T>,\n \"className\" | \"classNames\" | \"controls\" | \"prefixCls\" | \"size\" | \"style\" | \"styles\"\n > {\n readonly addonAfter?: ReactNode;\n readonly addonBefore?: ReactNode;\n /** @deprecated Use variant instead. */\n readonly bordered?: boolean;\n readonly className?: string;\n readonly classNames?: InputNumberClassNames;\n readonly controls?: boolean | InputNumberControls;\n readonly rootClassName?: string;\n readonly size?: InputSize;\n readonly status?: InputStatus;\n readonly style?: CSSProperties;\n readonly styles?: InputNumberStyles;\n readonly variant?: InputVariant;\n}\n\nconst inputNumberStatusClass: Record<FormItemStatus, string> = {\n \"\": \"border-[var(--hj-input-border)] focus-within:border-[var(--hj-input-border-active)]\",\n error: \"border-[var(--hj-color-danger)] focus-within:border-[var(--hj-color-danger)]\",\n warning: \"border-[var(--hj-color-warning)] focus-within:border-[var(--hj-color-warning)]\",\n success: \"border-[var(--hj-color-success)] focus-within:border-[var(--hj-color-success)]\",\n validating: \"border-[var(--hj-input-border)] focus-within:border-[var(--hj-input-border-active)]\",\n};\n\nconst inputNumberVariantClass: Record<InputVariant, string> = {\n active: \"border-[var(--hj-input-border-active)] bg-[var(--hj-input-bg-active)]\",\n borderless: \"border-transparent bg-transparent\",\n default: \"\",\n filled: \"border-transparent bg-[var(--hj-input-bg-active)]\",\n outlined: \"\",\n underlined: \"rounded-none border-x-0 border-t-0 bg-transparent\",\n};\n\nconst nativeSizeClass = {\n sm: \"hj-input-number-small\",\n md: \"hj-input-number-medium\",\n lg: \"hj-input-number-large\",\n} as const;\n\nfunction mergeVariant(\n variant: InputVariant | undefined,\n bordered: boolean | undefined,\n): InputVariant {\n if (variant) return variant;\n return bordered === false ? \"borderless\" : \"outlined\";\n}\n\nfunction InputNumberInner<T extends ValueType = ValueType>(\n props: InputNumberProps<T>,\n ref: ForwardedRef<InputNumberRef>,\n) {\n const {\n addonAfter,\n addonBefore,\n bordered,\n className,\n classNames,\n controls,\n disabled,\n downHandler,\n mode,\n prefix,\n readOnly,\n rootClassName,\n size,\n status,\n style,\n styles,\n suffix,\n upHandler,\n variant,\n ...rcProps\n } = props;\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size, config.size);\n const mergedDisabled = disabled ?? config.disabled;\n const mergedVariant = mergeVariant(variant, bordered);\n const controlsEnabled = controls !== false && !mergedDisabled && !readOnly;\n const controlOptions = typeof controls === \"object\" ? controls : undefined;\n const mergedUpHandler = controlOptions?.upIcon ?? upHandler ?? (mode === \"spinner\" ? \"+\" : \"▴\");\n const mergedDownHandler =\n controlOptions?.downIcon ?? downHandler ?? (mode === \"spinner\" ? \"−\" : \"▾\");\n const hasAddon = addonBefore != null || addonAfter != null;\n\n const inputNumberNode = (\n <RcInputNumber<T>\n {...rcProps}\n className={cn(\n \"hj-input-number-root\",\n `hj-input-number-${mergedSize}`,\n nativeSizeClass[mergedSize],\n mergedStatus && `hj-input-number-status-${mergedStatus}`,\n `hj-input-number-variant-${mergedVariant}`,\n mergedVariant === \"outlined\" && \"hj-input-number-variant-default\",\n \"border transition disabled:cursor-not-allowed\",\n inputNumberStatusClass[mergedStatus],\n inputNumberVariantClass[mergedVariant],\n !controlsEnabled && \"hj-input-number-without-controls\",\n !hasAddon && rootClassName,\n className,\n )}\n classNames={{\n action: cn(\"hj-input-number-handler\", classNames?.action),\n actions: cn(\"hj-input-number-handler-wrap\", classNames?.actions),\n input: cn(\n \"px-[var(--hj-input-padding-x)] text-[length:var(--hj-input-font-size)] leading-[var(--hj-input-line-height)] placeholder:text-[var(--hj-input-placeholder)]\",\n classNames?.input,\n ),\n prefix: cn(\n \"inline-flex shrink-0 items-center pl-[var(--hj-input-padding-x)] text-[var(--hj-input-icon)]\",\n classNames?.prefix,\n ),\n root: classNames?.root,\n suffix: cn(\n \"inline-flex shrink-0 items-center pr-[var(--hj-input-padding-x)] text-[var(--hj-input-icon)]\",\n classNames?.suffix,\n ),\n }}\n controls={controlsEnabled}\n disabled={mergedDisabled}\n downHandler={mergedDownHandler}\n mode={mode}\n prefix={prefix}\n prefixCls=\"hj-input-number\"\n readOnly={readOnly}\n ref={ref}\n style={{ ...styles?.root, ...style }}\n styles={{\n action: styles?.action,\n actions: styles?.actions,\n input: styles?.input,\n prefix: styles?.prefix,\n suffix: styles?.suffix,\n }}\n suffix={suffix}\n upHandler={mergedUpHandler}\n />\n );\n\n if (!hasAddon) return inputNumberNode;\n\n return (\n <span\n className={cn(\n \"hj-input-number-group inline-flex min-w-0 items-stretch overflow-hidden rounded-[var(--hj-input-radius)]\",\n `hj-input-number-group-${mergedSize}`,\n mergedStatus && `hj-input-number-group-status-${mergedStatus}`,\n `hj-input-number-group-variant-${mergedVariant}`,\n classNames?.group,\n rootClassName,\n )}\n style={styles?.group}\n >\n {addonBefore == null ? null : (\n <span\n className={cn(\n \"hj-input-number-addon-before flex shrink-0 items-center border border-r-0 border-[var(--hj-input-border)] bg-[var(--hj-input-addon-bg)] px-[var(--hj-input-padding-x)] text-[var(--hj-input-addon-fg)]\",\n classNames?.addonBefore,\n )}\n style={styles?.addonBefore}\n >\n {addonBefore}\n </span>\n )}\n {inputNumberNode}\n {addonAfter == null ? null : (\n <span\n className={cn(\n \"hj-input-number-addon-after flex shrink-0 items-center border border-l-0 border-[var(--hj-input-border)] bg-[var(--hj-input-addon-bg)] px-[var(--hj-input-padding-x)] text-[var(--hj-input-addon-fg)]\",\n classNames?.addonAfter,\n )}\n style={styles?.addonAfter}\n >\n {addonAfter}\n </span>\n )}\n </span>\n );\n}\n\nconst ForwardInputNumber = forwardRef(InputNumberInner) as <T extends ValueType = ValueType>(\n props: InputNumberProps<T> & RefAttributes<InputNumberRef>,\n) => ReactElement | null;\n\nexport const InputNumber = ForwardInputNumber;\n",
|
|
63
|
+
"import type {\n CSSProperties,\n ForwardedRef,\n HTMLAttributes,\n Key,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport {\n Children,\n Fragment,\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Empty } from \"./Empty\";\nimport { Pagination, type PaginationProps } from \"./Pagination\";\nimport { Spin, type SpinProps } from \"./Spin\";\n\nexport type ListSize = \"small\" | \"default\" | \"large\";\nexport type ListItemLayout = \"horizontal\" | \"vertical\";\nexport type ListBreakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"xxxl\";\nexport type ListGutter = number | string | Partial<Record<ListBreakpoint, number>> | undefined;\n\nexport interface ListGridType {\n readonly column?: number;\n readonly gutter?: ListGutter | readonly [ListGutter, ListGutter];\n readonly lg?: number;\n readonly md?: number;\n readonly sm?: number;\n readonly xl?: number;\n readonly xs?: number;\n readonly xxl?: number;\n readonly xxxl?: number;\n}\n\nexport type ListPaginationConfig = Omit<PaginationProps, \"total\"> & {\n readonly align?: \"start\" | \"center\" | \"end\";\n readonly position?: \"top\" | \"bottom\" | \"both\";\n readonly total?: number;\n};\n\nexport interface ListProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n readonly bordered?: boolean;\n readonly children?: ReactNode;\n readonly dataSource?: readonly T[];\n readonly extra?: ReactNode;\n readonly footer?: ReactNode;\n readonly grid?: ListGridType;\n readonly header?: ReactNode;\n readonly itemLayout?: ListItemLayout;\n readonly loading?: boolean | SpinProps;\n readonly loadMore?: ReactNode;\n readonly locale?: { readonly emptyText?: ReactNode };\n readonly pagination?: ListPaginationConfig | false;\n readonly rootClassName?: string;\n readonly rowKey?: ((item: T) => Key) | keyof T;\n readonly size?: ListSize;\n readonly split?: boolean;\n readonly renderItem?: (item: T, index: number) => ReactNode;\n}\n\nexport interface ListItemProps extends HTMLAttributes<HTMLDivElement> {\n readonly actions?: readonly ReactNode[];\n readonly classNames?: Partial<Record<\"actions\" | \"extra\", string>>;\n readonly colStyle?: CSSProperties;\n readonly extra?: ReactNode;\n readonly styles?: Partial<Record<\"actions\" | \"extra\", CSSProperties>>;\n}\n\nexport interface ListItemMetaProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n readonly avatar?: ReactNode;\n readonly description?: ReactNode;\n readonly title?: ReactNode;\n}\n\ninterface ListContextValue {\n readonly grid: boolean;\n readonly itemLayout: ListItemLayout;\n readonly split: boolean;\n}\n\nconst ListContext = createContext<ListContextValue>({\n grid: false,\n itemLayout: \"horizontal\",\n split: true,\n});\n\nconst responsiveBreakpoints: readonly ListBreakpoint[] = [\n \"xxxl\",\n \"xxl\",\n \"xl\",\n \"lg\",\n \"md\",\n \"sm\",\n \"xs\",\n];\n\nconst breakpointQueries: Readonly<Record<ListBreakpoint, string>> = {\n xxxl: \"(min-width: 1920px)\",\n xxl: \"(min-width: 1600px)\",\n xl: \"(min-width: 1200px)\",\n lg: \"(min-width: 992px)\",\n md: \"(min-width: 768px)\",\n sm: \"(min-width: 576px)\",\n xs: \"(max-width: 575px)\",\n};\n\nfunction getServerBreakpoint(): ListBreakpoint | undefined {\n return undefined;\n}\n\nfunction getBreakpoint(enabled: boolean): ListBreakpoint | undefined {\n if (!enabled || typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return undefined;\n }\n\n return responsiveBreakpoints.find(\n (breakpoint) => window.matchMedia(breakpointQueries[breakpoint]).matches,\n );\n}\n\nfunction subscribeBreakpoint(enabled: boolean, onStoreChange: () => void) {\n if (!enabled || typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return () => undefined;\n }\n\n const queryLists = responsiveBreakpoints.map((breakpoint) =>\n window.matchMedia(breakpointQueries[breakpoint]),\n );\n for (const queryList of queryLists) {\n if (typeof queryList.addEventListener === \"function\") {\n queryList.addEventListener(\"change\", onStoreChange);\n } else {\n queryList.addListener(onStoreChange);\n }\n }\n\n return () => {\n for (const queryList of queryLists) {\n if (typeof queryList.removeEventListener === \"function\") {\n queryList.removeEventListener(\"change\", onStoreChange);\n } else {\n queryList.removeListener(onStoreChange);\n }\n }\n };\n}\n\nfunction useListBreakpoint(enabled: boolean) {\n const subscribe = useCallback(\n (onStoreChange: () => void) => subscribeBreakpoint(enabled, onStoreChange),\n [enabled],\n );\n const getSnapshot = useCallback(() => getBreakpoint(enabled), [enabled]);\n return useSyncExternalStore(subscribe, getSnapshot, getServerBreakpoint);\n}\n\nfunction isResponsiveGutter(gutter: ListGutter): gutter is Partial<Record<ListBreakpoint, number>> {\n return gutter != null && typeof gutter === \"object\" && !Array.isArray(gutter);\n}\n\nfunction hasResponsiveGrid(grid: ListGridType | undefined) {\n if (!grid) return false;\n if (responsiveBreakpoints.some((breakpoint) => grid[breakpoint] !== undefined)) return true;\n const gutters = Array.isArray(grid.gutter) ? grid.gutter : [grid.gutter];\n return gutters.some(isResponsiveGutter);\n}\n\nfunction resolveGutter(gutter: ListGutter, breakpoint: ListBreakpoint | undefined) {\n if (!isResponsiveGutter(gutter)) return gutter;\n\n if (breakpoint === undefined) {\n for (const candidate of responsiveBreakpoints) {\n if (gutter[candidate] !== undefined) return gutter[candidate];\n }\n return undefined;\n }\n\n if (breakpoint === \"xs\") return gutter.xs;\n const startIndex = responsiveBreakpoints.indexOf(breakpoint);\n const smallIndex = responsiveBreakpoints.indexOf(\"sm\");\n for (let index = startIndex; index <= smallIndex; index += 1) {\n const value = gutter[responsiveBreakpoints[index]];\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction ListItemMeta({\n avatar,\n children,\n className,\n description,\n title,\n ...props\n}: ListItemMetaProps) {\n return (\n <div className={cn(\"hj-list-item-meta flex min-w-0 gap-3\", className)} {...props}>\n {avatar != null ? <div className=\"hj-list-item-meta-avatar shrink-0\">{avatar}</div> : null}\n {title != null || description != null || children != null ? (\n <div className=\"hj-list-item-meta-content min-w-0 flex-1\">\n {title != null ? (\n <h4 className=\"hj-list-item-meta-title m-0 font-medium text-[var(--hj-color-web-foreground)]\">\n {title}\n </h4>\n ) : null}\n {description != null ? (\n <div className=\"hj-list-item-meta-description mt-1 text-sm text-[var(--hj-color-web-muted)]\">\n {description}\n </div>\n ) : null}\n {children}\n </div>\n ) : null}\n </div>\n );\n}\n\nconst ListItemRoot = forwardRef<HTMLDivElement, ListItemProps>(function ListItem(\n { actions, children, className = \"\", classNames, colStyle, extra, style, styles, ...props },\n ref,\n) {\n const { grid, itemLayout, split } = useContext(ListContext);\n const actionsNode = actions?.length ? (\n <ul\n className={cn(\n \"hj-list-item-actions m-0 flex shrink-0 list-none items-center gap-2 p-0 text-xs text-[var(--hj-color-web-muted)]\",\n classNames?.actions,\n )}\n style={styles?.actions}\n >\n {Children.map(actions, (action, index) => (\n <li className=\"inline-flex items-center gap-2\">\n {action}\n {index < Children.count(actions) - 1 ? (\n <span\n aria-hidden=\"true\"\n className=\"hj-list-item-action-split text-[var(--hj-color-web-border)]\"\n >\n |\n </span>\n ) : null}\n </li>\n ))}\n </ul>\n ) : null;\n const content =\n itemLayout === \"vertical\" && extra != null ? (\n <>\n <div className=\"hj-list-item-main min-w-0 flex-1\">\n {children}\n {actionsNode ? <div className=\"mt-3\">{actionsNode}</div> : null}\n </div>\n <div className={cn(\"hj-list-item-extra shrink-0\", classNames?.extra)} style={styles?.extra}>\n {extra}\n </div>\n </>\n ) : (\n <>\n <div className=\"hj-list-item-content min-w-0 flex-1\">{children}</div>\n {extra != null ? (\n <div\n className={cn(\"hj-list-item-extra shrink-0\", classNames?.extra)}\n style={styles?.extra}\n >\n {extra}\n </div>\n ) : null}\n {actionsNode}\n </>\n );\n const itemProps = {\n ...(props as HTMLAttributes<HTMLElement>),\n className: cn(\n \"hj-list-item flex gap-4 px-4 py-3\",\n split && \"border-b border-[var(--hj-color-web-border)] last:border-b-0\",\n itemLayout === \"vertical\" && extra != null ? \"items-start\" : \"items-center\",\n className,\n ),\n style: { ...colStyle, ...style },\n };\n\n return grid ? (\n <div {...itemProps} ref={ref}>\n {content}\n </div>\n ) : (\n <li {...itemProps} ref={ref as ForwardedRef<HTMLLIElement>}>\n {content}\n </li>\n );\n});\n\nconst ListItem = Object.assign(ListItemRoot, { Meta: ListItemMeta });\n\nfunction getItemKey<T>(item: T, index: number, rowKey?: ((item: T) => Key) | keyof T): Key {\n if (typeof rowKey === \"function\") return rowKey(item);\n if (rowKey != null && item != null && typeof item === \"object\") {\n const value = item[rowKey];\n if (typeof value === \"string\" || typeof value === \"number\") return value;\n }\n if (item != null && typeof item === \"object\" && \"key\" in item) {\n const value = item.key;\n if (typeof value === \"string\" || typeof value === \"number\") return value;\n }\n return index;\n}\n\nfunction ListRoot<T>(\n {\n bordered = false,\n children,\n className = \"\",\n dataSource = [],\n extra,\n footer,\n grid,\n header,\n itemLayout = \"horizontal\",\n loading = false,\n loadMore,\n locale,\n pagination = false,\n renderItem,\n rootClassName,\n rowKey,\n size = \"default\",\n split = true,\n style,\n ...props\n }: ListProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const breakpoint = useListBreakpoint(hasResponsiveGrid(grid));\n const paginationConfig = pagination || undefined;\n const [internalCurrent, setInternalCurrent] = useState(paginationConfig?.defaultCurrent ?? 1);\n const [internalPageSize, setInternalPageSize] = useState(paginationConfig?.defaultPageSize ?? 10);\n const current = paginationConfig?.current ?? internalCurrent;\n const pageSize = paginationConfig?.pageSize ?? internalPageSize;\n const visibleData = paginationConfig\n ? dataSource.slice((current - 1) * pageSize, current * pageSize)\n : dataSource;\n const renderedItems = renderItem\n ? visibleData.map((item, index) => (\n <Fragment key={getItemKey(item, (current - 1) * pageSize + index, rowKey)}>\n {renderItem(item, (current - 1) * pageSize + index)}\n </Fragment>\n ))\n : null;\n const loadingProps = typeof loading === \"object\" ? loading : undefined;\n const isLoading = typeof loading === \"object\" ? (loading.spinning ?? true) : loading;\n const {\n align = \"end\",\n onShowSizeChange,\n position = \"bottom\",\n total,\n ...paginationProps\n } = paginationConfig ?? {};\n const pager = paginationConfig ? (\n <div\n className={cn(\n \"hj-list-pagination flex px-4 py-3\",\n align === \"start\" ? \"justify-start\" : align === \"center\" ? \"justify-center\" : \"justify-end\",\n )}\n >\n <Pagination\n {...paginationProps}\n current={current}\n pageSize={pageSize}\n total={total ?? dataSource.length}\n onChange={(nextCurrent, nextPageSize) => {\n if (paginationConfig.current === undefined) setInternalCurrent(nextCurrent);\n if (paginationConfig.pageSize === undefined) setInternalPageSize(nextPageSize);\n paginationConfig.onChange?.(nextCurrent, nextPageSize);\n }}\n onShowSizeChange={(nextCurrent, nextPageSize) => {\n if (paginationConfig.current === undefined) setInternalCurrent(nextCurrent);\n if (paginationConfig.pageSize === undefined) setInternalPageSize(nextPageSize);\n onShowSizeChange?.(nextCurrent, nextPageSize);\n }}\n />\n </div>\n ) : null;\n const configuredColumn = breakpoint && grid?.[breakpoint] ? grid[breakpoint] : grid?.column;\n const columnCount = Math.max(1, Math.floor(configuredColumn ?? 1));\n const gutterPair = Array.isArray(grid?.gutter) ? grid.gutter : [grid?.gutter, undefined];\n const horizontalGutter = resolveGutter(gutterPair[0], breakpoint);\n const verticalGutter = resolveGutter(gutterPair[1], breakpoint);\n const gridStyle: CSSProperties | undefined = grid\n ? {\n columnGap: horizontalGutter,\n display: \"grid\",\n gridTemplateColumns: `repeat(${columnCount}, minmax(0, 1fr))`,\n rowGap: verticalGutter,\n }\n : undefined;\n let body: ReactNode;\n\n if (isLoading && children == null && visibleData.length === 0) {\n body = <div className=\"hj-list-items\" style={{ minHeight: 53 }} />;\n } else if (children == null && visibleData.length === 0) {\n body = (\n <div className=\"hj-list-empty-text\">\n <Empty description={locale?.emptyText} />\n </div>\n );\n } else if (grid) {\n body = (\n <div className=\"hj-list-items\" style={gridStyle}>\n {renderedItems}\n {children}\n </div>\n );\n } else {\n body = (\n <ul className=\"hj-list-items m-0 list-none p-0\">\n {renderedItems}\n {children}\n </ul>\n );\n }\n\n return (\n <ListContext.Provider value={{ grid: Boolean(grid), itemLayout, split }}>\n <div\n className={cn(\n \"hj-list overflow-hidden\",\n `hj-list-${size}`,\n `hj-list-${itemLayout}`,\n grid && \"hj-list-grid\",\n bordered &&\n \"hj-list-bordered rounded-[var(--hj-radius-md)] border border-[var(--hj-color-web-border)]\",\n rootClassName,\n className,\n )}\n ref={ref}\n style={style}\n {...props}\n >\n {header != null ? (\n <div className=\"hj-list-header border-b border-[var(--hj-color-web-border)] px-4 py-3 text-sm font-medium text-[var(--hj-color-web-foreground)]\">\n {header}\n </div>\n ) : null}\n {position === \"top\" || position === \"both\" ? pager : null}\n <Spin {...loadingProps} spinning={isLoading}>\n {body}\n </Spin>\n {loadMore != null ? <div className=\"hj-list-load-more\">{loadMore}</div> : null}\n {extra != null ? <div className=\"hj-list-extra\">{extra}</div> : null}\n {footer != null ? (\n <div className=\"hj-list-footer border-t border-[var(--hj-color-web-border)] px-4 py-3 text-sm text-[var(--hj-color-web-muted)]\">\n {footer}\n </div>\n ) : null}\n {position === \"bottom\" || position === \"both\" ? pager : null}\n </div>\n </ListContext.Provider>\n );\n}\n\ntype ListComponent = <T>(props: ListProps<T> & RefAttributes<HTMLDivElement>) => ReactElement;\n\nconst InternalList = forwardRef(ListRoot) as ListComponent;\n\nexport const List = Object.assign(InternalList, { Item: ListItem });\n",
|
|
64
|
+
"import RcPagination from \"@rc-component/pagination\";\nimport type {\n PaginationLocale,\n PaginationProps as RcPaginationProps,\n} from \"@rc-component/pagination\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Select, type SelectOption, type SelectProps } from \"./DataEntryPrimitives\";\nimport { type InputSize, normalizeInputSize } from \"./Input\";\n\nexport type { PaginationLocale };\nexport type PaginationSize = InputSize;\nexport type PaginationSizeChangerProps = SelectProps<number, SelectOption>;\n\ntype PaginationSlot = \"root\" | \"item\";\n\nexport interface PaginationProps\n extends Omit<\n RcPaginationProps,\n \"classNames\" | \"pageSizeOptions\" | \"prefixCls\" | \"showSizeChanger\" | \"styles\"\n > {\n readonly classNames?: SlotClassNames<PaginationSlot>;\n readonly pageSizeOptions?: readonly (number | string)[];\n readonly responsive?: boolean;\n readonly rootClassName?: string;\n readonly showSizeChanger?: boolean | PaginationSizeChangerProps;\n readonly size?: PaginationSize;\n readonly styles?: SlotStyles<PaginationSlot>;\n}\n\nconst paginationLocale: PaginationLocale = {\n items_per_page: \"条/页\",\n jump_to: \"跳至\",\n jump_to_confirm: \"确定\",\n page: \"页\",\n prev_page: \"上一页\",\n next_page: \"下一页\",\n prev_5: \"向前 5 页\",\n next_5: \"向后 5 页\",\n prev_3: \"向前 3 页\",\n next_3: \"向后 3 页\",\n page_size: \"页码\",\n};\n\nconst defaultPrevIcon = <span aria-hidden=\"true\">‹</span>;\nconst defaultNextIcon = <span aria-hidden=\"true\">›</span>;\nconst defaultJumpPrevIcon = <span aria-hidden=\"true\">...</span>;\nconst defaultJumpNextIcon = <span aria-hidden=\"true\">...</span>;\n\nconst nativeSizeClass = {\n sm: \"hj-pagination-small\",\n md: \"hj-pagination-medium\",\n lg: \"hj-pagination-large\",\n} as const;\n\nfunction useResponsiveSmall(enabled: boolean) {\n const [small, setSmall] = useState(false);\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") {\n setSmall(false);\n return undefined;\n }\n\n const mediaQuery = window.matchMedia(\"(max-width: 575px)\");\n const update = () => setSmall(mediaQuery.matches);\n update();\n mediaQuery.addEventListener(\"change\", update);\n return () => mediaQuery.removeEventListener(\"change\", update);\n }, [enabled]);\n\n return small;\n}\n\nexport function Pagination({\n className,\n classNames,\n disabled,\n jumpNextIcon = defaultJumpNextIcon,\n jumpPrevIcon = defaultJumpPrevIcon,\n locale,\n nextIcon = defaultNextIcon,\n pageSizeOptions,\n prevIcon = defaultPrevIcon,\n responsive = false,\n rootClassName,\n showSizeChanger,\n size,\n sizeChangerRender,\n style,\n styles,\n ...paginationProps\n}: PaginationProps) {\n const config = useConfig();\n const responsiveSmall = useResponsiveSmall(responsive && size == null);\n const mergedSize = responsiveSmall ? \"sm\" : normalizeInputSize(size, config.size);\n const mergedDisabled = disabled ?? config.disabled;\n const sizeChangerProps = typeof showSizeChanger === \"object\" ? showSizeChanger : undefined;\n const mergedShowSizeChanger: boolean | undefined =\n typeof showSizeChanger === \"object\" ? true : showSizeChanger;\n\n const defaultSizeChangerRender: NonNullable<RcPaginationProps[\"sizeChangerRender\"]> = (info) => {\n const {\n className: selectClassName,\n disabled: selectDisabled,\n getPopupContainer,\n onChange: onSelectChange,\n options: configuredOptions,\n size: selectSize,\n ...selectProps\n } = sizeChangerProps ?? {};\n const options: readonly SelectOption[] =\n configuredOptions ??\n info.options.map((option) => ({\n label: option.label,\n value: Number(option.value),\n }));\n\n return (\n <Select<number, SelectOption>\n {...selectProps}\n aria-label={info[\"aria-label\"]}\n className={cn(\"hj-pagination-options-size-changer-select\", info.className, selectClassName)}\n disabled={selectDisabled ?? info.disabled}\n getPopupContainer={\n getPopupContainer ?? ((triggerNode) => triggerNode.parentElement ?? triggerNode)\n }\n onChange={(nextSize, option) => {\n info.onSizeChange(nextSize);\n onSelectChange?.(nextSize, option);\n }}\n options={options}\n popupMatchSelectWidth={false}\n showSearch={selectProps.showSearch ?? true}\n size={selectSize ?? mergedSize}\n value={info.size}\n />\n );\n };\n\n return (\n <RcPagination\n {...paginationProps}\n className={slotClass(\n classNames,\n \"root\",\n \"hj-pagination-root\",\n `hj-pagination-${mergedSize}`,\n nativeSizeClass[mergedSize],\n rootClassName,\n className,\n )}\n classNames={{ item: classNames?.item }}\n disabled={mergedDisabled}\n jumpNextIcon={jumpNextIcon as ReactNode}\n jumpPrevIcon={jumpPrevIcon as ReactNode}\n locale={{ ...paginationLocale, ...locale }}\n nextIcon={nextIcon as ReactNode}\n pageSizeOptions={pageSizeOptions?.map(Number)}\n prefixCls=\"hj-pagination\"\n prevIcon={prevIcon as ReactNode}\n showSizeChanger={mergedShowSizeChanger}\n sizeChangerRender={sizeChangerRender ?? defaultSizeChangerRender}\n style={slotStyle(styles, \"root\", style)}\n styles={{ item: slotStyle(styles, \"item\") }}\n />\n );\n}\n",
|
|
65
|
+
"import type { HTMLAttributes, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type SpinSize = \"small\" | \"medium\" | \"middle\" | \"default\" | \"large\";\n\nexport interface SpinProps extends HTMLAttributes<HTMLDivElement> {\n readonly delay?: number;\n readonly description?: ReactNode;\n readonly fullscreen?: boolean;\n readonly indicator?: ReactNode;\n readonly percent?: number | \"auto\";\n readonly rootClassName?: string;\n readonly size?: SpinSize;\n readonly spinning?: boolean;\n /** @deprecated Use `description` instead. */\n readonly tip?: ReactNode;\n /** @deprecated Use the root semantic class in AntD-compatible code. */\n readonly wrapperClassName?: string;\n}\n\nconst sizeClass: Record<SpinSize, string> = {\n small: \"h-4 w-4\",\n medium: \"h-6 w-6\",\n middle: \"h-6 w-6\",\n default: \"h-6 w-6\",\n large: \"h-9 w-9\",\n};\n\nlet defaultIndicator: ReactNode;\n\nfunction SpinRoot({\n children,\n className = \"\",\n delay = 0,\n description,\n fullscreen = false,\n indicator,\n percent,\n rootClassName,\n size = \"medium\",\n spinning = true,\n style,\n tip,\n wrapperClassName,\n ...props\n}: SpinProps) {\n const [delayedSpinning, setDelayedSpinning] = useState(spinning && !(delay > 0));\n\n useEffect(() => {\n if (!spinning) {\n setDelayedSpinning(false);\n return;\n }\n if (!(delay > 0) || Number.isNaN(Number(delay))) {\n setDelayedSpinning(true);\n return;\n }\n setDelayedSpinning(false);\n const timer = window.setTimeout(() => setDelayedSpinning(true), delay);\n return () => window.clearTimeout(timer);\n }, [delay, spinning]);\n\n const mergedDescription = description ?? tip;\n const indicatorNode = indicator ?? defaultIndicator ?? (\n <span\n className={cn(\n \"hj-spin-dot block animate-spin rounded-full border-2 border-current border-t-transparent motion-reduce:animate-none\",\n sizeClass[size],\n )}\n />\n );\n const spinner = (\n <div\n className={cn(\n \"hj-spin inline-flex flex-col items-center justify-center gap-2 text-[var(--hj-color-brand)]\",\n `hj-spin-${size}`,\n rootClassName,\n className,\n )}\n style={style}\n {...props}\n >\n <span className=\"hj-spin-indicator relative inline-flex items-center justify-center\">\n {indicatorNode}\n {typeof percent === \"number\" ? (\n <span className=\"absolute text-[9px] font-semibold leading-none\">\n {Math.round(percent)}\n </span>\n ) : null}\n </span>\n {mergedDescription != null ? (\n <span className=\"hj-spin-description text-xs leading-4 text-[var(--hj-color-web-muted)]\">\n {mergedDescription}\n </span>\n ) : null}\n </div>\n );\n\n if (fullscreen) {\n return delayedSpinning ? (\n <div className=\"hj-spin-fullscreen fixed inset-0 z-[var(--hj-z-toast)] flex items-center justify-center bg-[rgb(0_0_0_/_0.24)]\">\n {spinner}\n </div>\n ) : null;\n }\n\n if (children == null) return delayedSpinning ? spinner : null;\n\n return (\n <div className={cn(\"hj-spin-nested-loading relative\", wrapperClassName)}>\n <div\n className={cn(\n \"hj-spin-container transition-opacity\",\n delayedSpinning && \"pointer-events-none opacity-45\",\n )}\n >\n {children}\n </div>\n {delayedSpinning ? (\n <div className=\"hj-spin-blur absolute inset-0 flex items-center justify-center\">\n {spinner}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport const Spin = Object.assign(SpinRoot, {\n setDefaultIndicator(indicator: ReactNode) {\n defaultIndicator = indicator;\n },\n});\n",
|
|
66
|
+
"import type { CSSProperties, ReactNode } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\nexport interface MenuListItem {\n readonly id: string;\n readonly label: ReactNode;\n readonly description?: ReactNode;\n readonly avatar?: ReactNode;\n readonly suffix?: ReactNode;\n readonly disabled?: boolean;\n}\n\ntype MenuListSlot = \"root\" | \"item\" | \"avatar\" | \"content\" | \"label\" | \"description\" | \"suffix\";\n\nexport interface MenuListProps {\n readonly activeId?: string;\n readonly className?: string;\n readonly classNames?: SlotClassNames<MenuListSlot>;\n readonly disabled?: boolean;\n readonly items: readonly MenuListItem[];\n readonly style?: CSSProperties;\n readonly styles?: SlotStyles<MenuListSlot>;\n readonly variant?: \"menu\" | \"user\" | \"dropdown\";\n readonly onSelect?: (id: string) => void;\n}\n\nconst rootWidthClass: Record<NonNullable<MenuListProps[\"variant\"]>, string> = {\n dropdown: \"w-full py-0\",\n menu: \"w-40 py-2\",\n user: \"w-[172px] py-2\",\n};\n\nconst itemClass: Record<NonNullable<MenuListProps[\"variant\"]>, string> = {\n dropdown: \"h-[45px] px-4 text-base leading-6\",\n menu: \"h-10 px-4 text-sm leading-[18px]\",\n user: \"h-16 px-4\",\n};\n\nexport function MenuList({\n activeId,\n className = \"\",\n classNames,\n disabled,\n items,\n onSelect,\n style,\n styles,\n variant,\n}: MenuListProps) {\n const config = useConfig();\n const mergedVariant = variant ?? config.components.MenuList?.variant ?? \"menu\";\n const mergedDisabled = disabled || config.disabled || config.components.MenuList?.disabled;\n\n return (\n <div\n className={slotClass(\n classNames,\n \"root\",\n \"overflow-hidden rounded-[var(--hj-radius-md)] border border-[var(--hj-menu-border)] bg-[var(--hj-menu-bg)] shadow-[var(--hj-menu-shadow)]\",\n rootWidthClass[mergedVariant],\n className,\n )}\n aria-disabled={mergedDisabled || undefined}\n role=\"menu\"\n style={slotStyle(styles, \"root\", style)}\n >\n {items.map((item) => {\n const active = item.id === activeId;\n return (\n <button\n aria-current={active || undefined}\n className={slotClass(\n classNames,\n \"item\",\n \"flex w-full items-center gap-3 text-left transition hover:bg-[var(--hj-menu-item-bg-hover)] disabled:cursor-not-allowed disabled:opacity-50\",\n itemClass[mergedVariant],\n active\n ? \"bg-[var(--hj-menu-item-bg-active)] text-[var(--hj-menu-item-fg-active)]\"\n : \"bg-[var(--hj-menu-item-bg)] text-[var(--hj-menu-item-fg)]\",\n )}\n disabled={mergedDisabled || item.disabled}\n key={item.id}\n onClick={() => onSelect?.(item.id)}\n role=\"menuitem\"\n style={slotStyle(styles, \"item\")}\n type=\"button\"\n >\n {item.avatar ? (\n <span\n className={slotClass(\n classNames,\n \"avatar\",\n \"flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-full bg-[var(--hj-menu-avatar-bg)] text-[var(--hj-menu-avatar-fg)]\",\n )}\n style={slotStyle(styles, \"avatar\")}\n >\n {item.avatar}\n </span>\n ) : null}\n <span\n className={slotClass(classNames, \"content\", \"min-w-0 flex-1\")}\n style={slotStyle(styles, \"content\")}\n >\n <span\n className={slotClass(\n classNames,\n \"label\",\n \"block truncate\",\n active ? \"font-semibold\" : \"font-normal\",\n mergedVariant === \"dropdown\" ? \"text-base leading-6\" : \"text-sm leading-[18px]\",\n active\n ? \"text-[var(--hj-menu-item-fg-active)]\"\n : mergedVariant === \"user\"\n ? \"text-[var(--hj-menu-item-fg-active)]\"\n : \"text-[var(--hj-menu-item-fg)]\",\n )}\n style={slotStyle(styles, \"label\")}\n >\n {item.label}\n </span>\n {item.description ? (\n <span\n className={slotClass(\n classNames,\n \"description\",\n \"mt-[5px] block truncate text-xs leading-4 text-[var(--hj-menu-item-muted)]\",\n )}\n style={slotStyle(styles, \"description\")}\n >\n {item.description}\n </span>\n ) : null}\n </span>\n {item.suffix ? (\n <span\n className={slotClass(classNames, \"suffix\", \"shrink-0 text-[var(--hj-input-clear)]\")}\n style={slotStyle(styles, \"suffix\")}\n >\n {item.suffix}\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n );\n}\n",
|
|
67
|
+
"import type { HTMLAttributes, ReactNode } from \"react\";\n\ninterface PanelProps extends HTMLAttributes<HTMLElement> {\n readonly as?: \"article\" | \"section\" | \"div\";\n readonly children: ReactNode;\n readonly radius?: \"sm\" | \"md\";\n}\n\nconst radiusClass = { sm: \"rounded-[6px]\", md: \"rounded-[8px]\" } as const;\n\nexport function Panel({\n as: Component = \"section\",\n children,\n className = \"\",\n radius = \"md\",\n ...props\n}: PanelProps) {\n return (\n <Component className={`${radiusClass[radius]} bg-[#242731] ${className}`} {...props}>\n {children}\n </Component>\n );\n}\n",
|
|
68
|
+
"import { useControlledState } from \"@rc-component/util\";\nimport type { MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button, type ButtonProps } from \"./Button\";\nimport { Popover, type PopoverProps } from \"./Popover\";\nimport type { TooltipRef } from \"./Tooltip\";\n\nexport interface PopconfirmProps extends Omit<PopoverProps, \"content\" | \"title\"> {\n readonly cancelButtonProps?: Partial<Omit<ButtonProps, \"children\" | \"onClick\">>;\n readonly cancelText?: ReactNode;\n readonly description?: ReactNode;\n readonly icon?: ReactNode;\n readonly okButtonProps?: Partial<Omit<ButtonProps, \"children\" | \"onClick\">>;\n readonly okText?: ReactNode;\n readonly okType?: ButtonProps[\"type\"];\n readonly showCancel?: boolean;\n readonly title: ReactNode;\n readonly onCancel?: (event?: ReactMouseEvent<HTMLButtonElement>) => void;\n readonly onConfirm?: (event?: ReactMouseEvent<HTMLButtonElement>) => void | PromiseLike<void>;\n readonly onPopupClick?: (event: ReactMouseEvent<HTMLElement>) => void;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof value.then === \"function\"\n );\n}\n\nexport const Popconfirm = forwardRef<TooltipRef, PopconfirmProps>(function Popconfirm(\n {\n cancelButtonProps,\n cancelText = \"取消\",\n className,\n description,\n icon = <span aria-hidden=\"true\">!</span>,\n okButtonProps,\n okText = \"确定\",\n okType = \"primary\",\n onCancel,\n onConfirm,\n onOpenChange,\n onPopupClick,\n open,\n defaultOpen,\n showCancel = true,\n title,\n ...props\n },\n ref,\n) {\n const [mergedOpen, setMergedOpen] = useControlledState(defaultOpen ?? false, open);\n const [confirmLoading, setConfirmLoading] = useState(false);\n const pendingRef = useRef(false);\n const close = () => {\n setMergedOpen(false);\n onOpenChange?.(false);\n };\n const handleConfirm = (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (pendingRef.current) return;\n\n const result = onConfirm?.(event);\n if (!isThenable(result)) {\n close();\n return;\n }\n\n pendingRef.current = true;\n setConfirmLoading(true);\n void Promise.resolve(result).then(\n () => {\n pendingRef.current = false;\n setConfirmLoading(false);\n close();\n },\n () => {\n pendingRef.current = false;\n setConfirmLoading(false);\n },\n );\n };\n\n return (\n <Popover\n {...props}\n className={cn(\"hj-popconfirm\", className)}\n open={mergedOpen}\n ref={ref}\n onOpenChange={(nextOpen) => {\n setMergedOpen(nextOpen);\n onOpenChange?.(nextOpen);\n }}\n content={\n // biome-ignore lint/a11y/useKeyWithClickEvents: Mirrors AntD's popup-level mouse callback; keyboard actions remain on native buttons.\n <div className=\"hj-popconfirm-inner\" onClick={onPopupClick}>\n <div className=\"hj-popconfirm-message\">\n {icon ? <span className=\"hj-popconfirm-icon\">{icon}</span> : null}\n <div className=\"hj-popconfirm-message-text\">\n <div className=\"hj-popconfirm-title\">{title}</div>\n {description ? <div className=\"hj-popconfirm-description\">{description}</div> : null}\n </div>\n </div>\n <div className=\"hj-popconfirm-buttons\">\n {showCancel ? (\n <Button\n {...cancelButtonProps}\n size={cancelButtonProps?.size ?? \"xs\"}\n tone={cancelButtonProps?.tone ?? \"secondary\"}\n width={cancelButtonProps?.width ?? \"auto\"}\n onClick={(event) => {\n close();\n onCancel?.(event as ReactMouseEvent<HTMLButtonElement>);\n }}\n >\n {cancelText}\n </Button>\n ) : null}\n <Button\n {...okButtonProps}\n loading={confirmLoading || okButtonProps?.loading}\n size={okButtonProps?.size ?? \"xs\"}\n tone={okButtonProps?.tone ?? \"primary\"}\n type={okButtonProps?.type ?? okType}\n width={okButtonProps?.width ?? \"auto\"}\n onClick={(event) => handleConfirm(event as ReactMouseEvent<HTMLButtonElement>)}\n >\n {okText}\n </Button>\n </div>\n </div>\n }\n trigger={props.trigger ?? \"click\"}\n />\n );\n});\n\nPopconfirm.displayName = \"Popconfirm\";\n",
|
|
69
|
+
"interface PriceTextProps {\n readonly className?: string;\n readonly freeLabel?: string;\n readonly freeClassName?: string;\n readonly originalPrice?: string | null;\n readonly price: string;\n}\n\nexport function PriceText({\n className,\n freeClassName,\n freeLabel = \"免费\",\n originalPrice,\n price,\n}: PriceTextProps) {\n const priceClassName = className ?? \"text-base\";\n const numericPrice = Number(price);\n if (numericPrice === 0) {\n return (\n <span className={`${priceClassName} ${freeClassName ?? \"font-semibold text-[#69c04a]\"}`}>\n {freeLabel}\n </span>\n );\n }\n\n return (\n <span className=\"inline-flex items-baseline gap-2\">\n {originalPrice && originalPrice !== price ? (\n <span className=\"text-xs text-[#6f7985] line-through\">¥{originalPrice}</span>\n ) : null}\n <span className={`${priceClassName} font-semibold text-[#ffcc33]`}>¥{price}</span>\n </span>\n );\n}\n",
|
|
70
|
+
"interface ProgressBarProps {\n readonly className?: string;\n readonly max?: number;\n readonly tone?: \"primary\" | \"success\" | \"achievement\";\n readonly value: number;\n}\n\nconst toneClass = {\n primary: \"bg-[#ffcc33]\",\n success: \"bg-[#69c04a]\",\n achievement: \"\",\n} as const;\n\nexport function ProgressBar({\n className = \"\",\n max = 100,\n tone = \"primary\",\n value,\n}: ProgressBarProps) {\n const width = `${Math.round((value / Math.max(max, 1)) * 100)}%`;\n const achievementGradient = \"linear-gradient(90deg, #ffa50e 0%, #ff5f0b 100%)\";\n const trackColor = tone === \"achievement\" ? \"rgba(255, 255, 255, 0.2)\" : \"#24303a\";\n\n return (\n <div\n className={`h-1.5 overflow-hidden rounded ${tone === \"achievement\" ? \"bg-white/20\" : \"bg-[#24303a]\"} ${className}`}\n style={{ backgroundColor: trackColor, flexShrink: 0, height: \"6px\", minHeight: \"6px\" }}\n >\n <div\n className={`h-full rounded ${toneClass[tone]}`}\n style={{\n height: \"100%\",\n width,\n ...(tone === \"achievement\" ? { backgroundImage: achievementGradient } : {}),\n }}\n />\n </div>\n );\n}\n",
|
|
71
|
+
"import { Button, type ButtonProps, type ButtonTone } from \"./Button\";\n\ninterface ProgressButtonProps extends Omit<ButtonProps, \"children\" | \"value\"> {\n readonly label: string;\n readonly max?: number;\n readonly tone?: ButtonTone;\n readonly value: number | null;\n}\n\nexport function ProgressButton({\n className = \"\",\n disabled,\n label,\n max = 100,\n tone = \"download\",\n value,\n ...props\n}: ProgressButtonProps) {\n const normalizedMax = Number.isFinite(max) && max > 0 ? max : 100;\n const normalizedValue =\n value == null || !Number.isFinite(value) ? null : Math.max(0, Math.min(normalizedMax, value));\n const width = normalizedValue == null ? \"100%\" : `${(normalizedValue / normalizedMax) * 100}%`;\n\n return (\n <Button\n {...props}\n className={`relative overflow-hidden ${className}`}\n disabled={disabled}\n tone={tone}\n >\n {/* biome-ignore lint/a11y/useFocusableInteractive: the parent button owns focus; this nested progressbar is read-only. */}\n <span\n aria-label={label}\n aria-valuemax={normalizedMax}\n aria-valuemin={0}\n aria-valuenow={normalizedValue ?? undefined}\n className={`absolute inset-y-0 left-0 bg-[#d6a84a]/30 ${normalizedValue == null ? \"animate-pulse motion-reduce:animate-none\" : \"\"}`}\n role=\"progressbar\"\n style={{ width }}\n />\n <span className=\"relative\">{label}</span>\n </Button>\n );\n}\n",
|
|
72
|
+
"import RcCheckbox from \"@rc-component/checkbox\";\nimport type { CheckboxChangeEvent, CheckboxRef } from \"@rc-component/checkbox\";\nimport { useControlledState } from \"@rc-component/util\";\nimport type {\n CSSProperties,\n ForwardedRef,\n HTMLAttributes,\n InputHTMLAttributes,\n MouseEventHandler,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { createContext, forwardRef, useCallback, useContext, useId, useMemo } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\n\ntype RadioSlot = \"root\" | \"icon\" | \"label\";\n\nexport type RadioValue = string | number;\nexport type RadioGroupButtonStyle = \"outline\" | \"solid\";\nexport type RadioGroupOptionType = \"default\" | \"button\";\nexport type RadioSize = \"small\" | \"medium\" | \"middle\" | \"large\";\nexport type RadioRef = CheckboxRef;\n\nexport interface RadioProps<ValueType = RadioValue>\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"children\" | \"onChange\" | \"onMouseEnter\" | \"onMouseLeave\" | \"type\" | \"value\"\n > {\n readonly children?: ReactNode;\n readonly classNames?: SlotClassNames<RadioSlot>;\n readonly optionType?: RadioGroupOptionType;\n readonly rootClassName?: string;\n readonly skipGroup?: boolean;\n readonly styles?: SlotStyles<RadioSlot>;\n readonly value?: ValueType;\n readonly onChange?: (event: RadioChangeEvent<ValueType>) => void;\n readonly onMouseEnter?: MouseEventHandler<HTMLElement>;\n readonly onMouseLeave?: MouseEventHandler<HTMLElement>;\n}\n\nexport interface RadioChangeEventTarget<ValueType = RadioValue> extends RadioProps<ValueType> {\n readonly checked: boolean;\n}\n\nexport interface RadioChangeEvent<ValueType = RadioValue> {\n readonly nativeEvent: MouseEvent;\n readonly target: RadioChangeEventTarget<ValueType>;\n readonly preventDefault: () => void;\n readonly stopPropagation: () => void;\n}\n\nexport interface RadioOptionType<ValueType = RadioValue> {\n readonly className?: string;\n readonly disabled?: boolean;\n readonly id?: string;\n readonly label: ReactNode;\n readonly required?: boolean;\n readonly style?: CSSProperties;\n readonly title?: string;\n readonly value: ValueType;\n readonly onChange?: (event: RadioChangeEvent<ValueType>) => void;\n}\n\nexport interface RadioGroupProps<ValueType = RadioValue>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"defaultValue\" | \"onChange\"> {\n readonly block?: boolean;\n readonly buttonStyle?: RadioGroupButtonStyle;\n readonly children?: ReactNode;\n readonly defaultValue?: ValueType;\n readonly disabled?: boolean;\n readonly name?: string;\n readonly optionType?: RadioGroupOptionType;\n readonly options?: readonly (RadioOptionType<ValueType> | string | number)[];\n readonly orientation?: \"horizontal\" | \"vertical\";\n readonly rootClassName?: string;\n readonly size?: RadioSize;\n readonly value?: ValueType;\n readonly vertical?: boolean;\n readonly onChange?: (event: RadioChangeEvent<ValueType>) => void;\n readonly onValueChange?: (value: ValueType, event: RadioChangeEvent<ValueType>) => void;\n}\n\ninterface RadioContextValue {\n readonly buttonStyle: RadioGroupButtonStyle;\n readonly disabled?: boolean;\n readonly name: string;\n readonly optionType: RadioGroupOptionType;\n readonly size?: RadioSize;\n readonly value: unknown;\n readonly onChange: (event: RadioChangeEvent<unknown>) => void;\n}\n\nconst RadioContext = createContext<RadioContextValue | null>(null);\n\nfunction toRadioChangeEvent<ValueType>(\n event: CheckboxChangeEvent,\n value: ValueType | undefined,\n): RadioChangeEvent<ValueType> {\n return {\n nativeEvent: event.nativeEvent as MouseEvent,\n preventDefault: event.preventDefault,\n stopPropagation: event.stopPropagation,\n target: {\n ...event.target,\n value,\n } as RadioChangeEventTarget<ValueType>,\n };\n}\n\nfunction RadioInner(props: RadioProps<unknown>, ref: ForwardedRef<CheckboxRef>) {\n const {\n children,\n checked,\n className = \"\",\n classNames,\n disabled,\n name,\n onChange,\n onMouseEnter,\n onMouseLeave,\n optionType,\n rootClassName,\n skipGroup = false,\n style,\n styles,\n title,\n value,\n ...inputProps\n } = props;\n const config = useConfig();\n const groupContext = useContext(RadioContext);\n const group = skipGroup ? null : groupContext;\n const mergedChecked = group ? group.value === value : checked;\n const mergedDisabled = disabled ?? group?.disabled ?? config.disabled;\n const isButton = optionType === \"button\" || group?.optionType === \"button\";\n const buttonStyle = group?.buttonStyle ?? \"outline\";\n const prefixCls = isButton ? \"hj-radio-button\" : \"hj-radio\";\n const wrapperPrefixCls = `${prefixCls}-wrapper`;\n const checkedProps = group || \"checked\" in props ? { checked: mergedChecked } : {};\n const generatedId = useId();\n const inputId = inputProps.id ?? generatedId;\n\n return (\n <label\n className={slotClass(\n classNames,\n \"root\",\n wrapperPrefixCls,\n mergedChecked && `${wrapperPrefixCls}-checked`,\n mergedDisabled && `${wrapperPrefixCls}-disabled`,\n \"inline-flex cursor-pointer select-none items-center gap-2 text-sm text-[var(--hj-checkbox-label)] transition [&_.hj-radio-button-input]:sr-only [&_.hj-radio-input]:sr-only\",\n mergedDisabled && \"cursor-not-allowed opacity-50\",\n isButton &&\n (group?.size === \"small\"\n ? \"h-6 rounded-[var(--hj-radius-md)] border px-2 text-xs\"\n : group?.size === \"large\"\n ? \"h-10 rounded-[var(--hj-radius-md)] border px-4\"\n : \"h-8 rounded-[var(--hj-radius-md)] border px-3\"),\n isButton &&\n (mergedChecked\n ? buttonStyle === \"solid\"\n ? \"border-[var(--hj-color-brand)] bg-[var(--hj-color-brand)] text-[var(--hj-button-primary-fg)]\"\n : \"border-[var(--hj-color-brand)] bg-[rgb(255_204_51_/_0.1)] text-[var(--hj-color-brand)]\"\n : \"border-[var(--hj-color-web-border)] bg-[rgb(255_255_255_/_0.04)] hover:text-white\"),\n rootClassName,\n className,\n )}\n htmlFor={inputId}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n style={slotStyle(styles, \"root\", style)}\n title={title}\n >\n <RcCheckbox\n {...inputProps}\n {...checkedProps}\n className={slotClass(\n classNames,\n \"icon\",\n isButton && \"contents\",\n !isButton &&\n \"inline-flex h-[var(--hj-checkbox-size)] w-[var(--hj-checkbox-size)] shrink-0 items-center justify-center rounded-full border-2 border-[var(--hj-checkbox-border)] transition hover:border-[var(--hj-color-brand)]\",\n !isButton &&\n \"[&.hj-radio-checked]:border-[var(--hj-color-brand)] [&.hj-radio-checked]:bg-[var(--hj-color-brand)] [&.hj-radio-checked]:[box-shadow:inset_0_0_0_3px_var(--hj-color-web-bg)]\",\n )}\n disabled={mergedDisabled}\n id={inputId}\n name={group?.name ?? name}\n onChange={(event) => {\n const radioEvent = toRadioChangeEvent(event, value);\n onChange?.(radioEvent);\n if (event.target.checked) {\n group?.onChange(radioEvent as RadioChangeEvent<unknown>);\n }\n }}\n prefixCls={prefixCls}\n ref={ref}\n style={slotStyle(styles, \"icon\")}\n type=\"radio\"\n value={value as InputHTMLAttributes<HTMLInputElement>[\"value\"]}\n />\n {children != null ? (\n <span\n className={slotClass(classNames, \"label\", `${prefixCls}-label`)}\n style={slotStyle(styles, \"label\")}\n >\n {children}\n </span>\n ) : null}\n </label>\n );\n}\n\ntype RadioStandaloneComponent = <ValueType = RadioValue>(\n props: RadioProps<ValueType> & RefAttributes<CheckboxRef>,\n) => ReactElement;\n\nconst InternalRadio = forwardRef(RadioInner);\nInternalRadio.displayName = \"Radio\";\nconst RadioRoot = InternalRadio as RadioStandaloneComponent;\n\nfunction RadioGroupInner(props: RadioGroupProps<unknown>, ref: ForwardedRef<HTMLDivElement>) {\n const {\n block = false,\n buttonStyle = \"outline\",\n children,\n className = \"\",\n defaultValue,\n disabled,\n name,\n onChange,\n onValueChange,\n optionType = \"default\",\n options,\n orientation,\n role = \"radiogroup\",\n rootClassName,\n size,\n value: controlledValue,\n vertical,\n ...divProps\n } = props;\n const generatedName = useId();\n const mergedName = name ?? generatedName;\n const [value, setValue] = useControlledState(defaultValue, controlledValue);\n const handleChange = useCallback(\n (event: RadioChangeEvent<unknown>) => {\n const nextValue = event.target.value;\n if (nextValue === value) return;\n setValue(nextValue);\n onChange?.(event);\n onValueChange?.(nextValue, event);\n },\n [onChange, onValueChange, setValue, value],\n );\n const content =\n options && options.length > 0\n ? options.map((option) => {\n const item: RadioOptionType<unknown> =\n typeof option === \"string\" || typeof option === \"number\"\n ? { label: option, value: option }\n : option;\n return (\n <RadioRoot\n className={item.className}\n disabled={item.disabled || disabled ? true : undefined}\n id={item.id}\n key={String(item.value)}\n onChange={item.onChange}\n required={item.required}\n style={item.style}\n title={item.title}\n value={item.value}\n >\n {item.label}\n </RadioRoot>\n );\n })\n : children;\n const contextValue = useMemo<RadioContextValue>(\n () => ({\n buttonStyle,\n disabled,\n name: mergedName,\n onChange: handleChange,\n optionType,\n size,\n value,\n }),\n [buttonStyle, disabled, handleChange, mergedName, optionType, size, value],\n );\n const mergedVertical = orientation ? orientation === \"vertical\" : vertical;\n\n return (\n <RadioContext.Provider value={contextValue}>\n <div\n {...divProps}\n className={cn(\n \"hj-radio-group inline-flex flex-wrap items-center gap-3\",\n `hj-radio-group-${buttonStyle}`,\n optionType === \"button\" && \"hj-radio-group-button gap-2\",\n size && `hj-radio-group-${size === \"middle\" ? \"medium\" : size}`,\n block && \"hj-radio-group-block flex\",\n mergedVertical && \"hj-radio-group-vertical flex-col items-start\",\n rootClassName,\n className,\n )}\n ref={ref}\n role={role}\n >\n {content}\n </div>\n </RadioContext.Provider>\n );\n}\n\ntype RadioGroupComponent = <ValueType = RadioValue>(\n props: RadioGroupProps<ValueType> & RefAttributes<HTMLDivElement>,\n) => ReactElement;\n\nconst Group = forwardRef(RadioGroupInner) as RadioGroupComponent;\n\nconst InternalRadioButton = forwardRef(function RadioButton<ValueType = RadioValue>(\n props: RadioProps<ValueType>,\n ref: ForwardedRef<CheckboxRef>,\n) {\n return <RadioRoot {...props} optionType=\"button\" ref={ref} />;\n});\n\nInternalRadioButton.displayName = \"Radio.Button\";\nconst RadioButton = InternalRadioButton as RadioStandaloneComponent;\n\ntype RadioCompoundComponent = RadioStandaloneComponent & {\n readonly Button: RadioStandaloneComponent;\n readonly Group: RadioGroupComponent;\n readonly __ANT_RADIO: boolean;\n};\n\nexport const Radio = Object.assign(RadioRoot, {\n Button: RadioButton,\n Group,\n __ANT_RADIO: true,\n}) as RadioCompoundComponent;\n",
|
|
73
|
+
"import RcRate from \"@rc-component/rate\";\nimport type { ComponentPropsWithoutRef, ComponentRef, ReactElement, Ref } from \"react\";\nimport { forwardRef } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { type InputSize, normalizeInputSize } from \"./Input\";\nimport { Tooltip, type TooltipProps } from \"./Tooltip\";\n\ntype RcRateProps = ComponentPropsWithoutRef<typeof RcRate>;\n\nexport type RateRef = ComponentRef<typeof RcRate>;\nexport type RateSize = InputSize;\nexport type RateTooltip = string | Omit<TooltipProps, \"children\">;\n\nexport interface RateProps extends RcRateProps {\n readonly rootClassName?: string;\n readonly size?: RateSize;\n readonly tooltips?: readonly RateTooltip[];\n}\n\nconst nativeSizeClass = {\n sm: \"hj-rate-small text-base\",\n md: \"hj-rate-medium text-xl\",\n lg: \"hj-rate-large text-2xl\",\n} as const;\n\nexport const Rate = forwardRef<RateRef, RateProps>(function Rate(props, ref) {\n const {\n character = \"★\",\n characterRender,\n className,\n disabled,\n rootClassName,\n size,\n tooltips,\n ...rateProps\n } = props;\n const config = useConfig();\n const mergedDisabled = disabled ?? config.disabled;\n const mergedSize = normalizeInputSize(size, config.size);\n\n const renderCharacter: NonNullable<RcRateProps[\"characterRender\"]> = (origin, info) => {\n const customOrigin = characterRender ? characterRender(origin, info) : origin;\n const tooltip = tooltips?.[info.index ?? 0];\n if (tooltip == null) return customOrigin;\n\n if (typeof tooltip === \"string\") {\n return <Tooltip title={tooltip}>{customOrigin}</Tooltip>;\n }\n return <Tooltip {...tooltip}>{customOrigin}</Tooltip>;\n };\n\n return (\n <RcRate\n {...rateProps}\n character={character}\n characterRender={tooltips || characterRender ? renderCharacter : undefined}\n className={cn(\n \"hj-rate-root\",\n `hj-rate-${mergedSize}`,\n nativeSizeClass[mergedSize],\n rootClassName,\n className,\n )}\n disabled={mergedDisabled}\n prefixCls=\"hj-rate\"\n ref={ref}\n />\n );\n}) as (props: RateProps & { readonly ref?: Ref<RateRef> }) => ReactElement;\n",
|
|
74
|
+
"import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type ResultStatus =\n | \"success\"\n | \"error\"\n | \"info\"\n | \"warning\"\n | 403\n | 404\n | 500\n | \"403\"\n | \"404\"\n | \"500\";\n\nexport interface ResultProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n readonly extra?: ReactNode;\n readonly icon?: ReactNode;\n readonly rootClassName?: string;\n readonly status?: ResultStatus;\n readonly subTitle?: ReactNode;\n readonly title?: ReactNode;\n}\n\nconst iconMap: Record<string, string> = {\n success: \"\\u2713\",\n error: \"!\",\n info: \"i\",\n warning: \"!\",\n \"403\": \"403\",\n \"404\": \"404\",\n \"500\": \"500\",\n};\n\nexport function Result({\n children,\n className = \"\",\n extra,\n icon,\n rootClassName,\n status = \"info\",\n subTitle,\n title,\n ...props\n}: ResultProps) {\n const normalizedStatus = String(status);\n return (\n <div\n className={cn(\n \"hj-result flex flex-col items-center justify-center px-6 py-12 text-center\",\n `hj-result-${normalizedStatus}`,\n rootClassName,\n className,\n )}\n {...props}\n >\n <div className=\"hj-result-icon mb-5 flex h-16 min-w-16 items-center justify-center rounded-full border border-[var(--hj-color-web-border)] bg-[rgb(255_255_255_/_0.05)] px-3 text-2xl font-semibold text-[var(--hj-color-brand)]\">\n {icon ?? iconMap[normalizedStatus]}\n </div>\n {title != null ? (\n <div className=\"hj-result-title text-xl font-semibold text-[var(--hj-color-web-foreground)]\">\n {title}\n </div>\n ) : null}\n {subTitle != null ? (\n <div className=\"hj-result-subtitle mt-2 max-w-[520px] text-sm leading-6 text-[var(--hj-color-web-muted)]\">\n {subTitle}\n </div>\n ) : null}\n {children != null ? <div className=\"hj-result-body mt-6\">{children}</div> : null}\n {extra != null ? (\n <div className=\"hj-result-extra mt-6 flex justify-center gap-3\">{extra}</div>\n ) : null}\n </div>\n );\n}\n",
|
|
75
|
+
"import { TextArea as RcTextArea } from \"@rc-component/input\";\nimport type { AutoSizeType, TextAreaRef } from \"@rc-component/input\";\nimport ResizeObserver from \"@rc-component/resize-observer\";\nimport {\n composeRef,\n toArray,\n useControlledState,\n useEvent,\n useLayoutEffect,\n} from \"@rc-component/util\";\nimport type {\n AnchorHTMLAttributes,\n CSSProperties,\n ChangeEventHandler,\n FocusEventHandler,\n HTMLAttributes,\n KeyboardEventHandler,\n MouseEvent,\n ReactNode,\n} from \"react\";\nimport {\n createElement,\n forwardRef,\n isValidElement,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Icon } from \"./Icon\";\nimport { Tooltip, type TooltipProps } from \"./Tooltip\";\n\nexport type TitleVariant = \"page\" | \"section\" | \"card\";\nexport type TextVariant = \"body\" | \"muted\" | \"action\";\nexport type TypographyType = \"secondary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface TypographyActionsConfig {\n readonly placement?: \"start\" | \"end\";\n}\n\nexport interface TypographyCopyConfig {\n readonly format?: \"text/html\" | \"text/plain\";\n readonly icon?: ReactNode | readonly [ReactNode, ReactNode];\n readonly onCopy?: (event?: MouseEvent<HTMLButtonElement>) => void;\n readonly tabIndex?: number;\n readonly text?: string | (() => string | Promise<string>);\n readonly tooltips?: boolean | ReactNode | readonly [ReactNode, ReactNode];\n}\n\nexport interface TypographyEditableConfig {\n readonly autoSize?: boolean | AutoSizeType;\n readonly editing?: boolean;\n readonly enterIcon?: ReactNode;\n readonly icon?: ReactNode;\n readonly maxLength?: number;\n readonly onCancel?: () => void;\n readonly onChange?: (value: string) => void;\n readonly onEnd?: () => void;\n readonly onStart?: () => void;\n readonly tabIndex?: number;\n readonly text?: string;\n readonly tooltip?: boolean | ReactNode;\n readonly triggerType?: readonly (\"icon\" | \"text\")[];\n}\n\nexport type TypographyEllipsisTooltip = ReactNode | Omit<TooltipProps, \"children\">;\n\nexport interface TypographyEllipsisConfig {\n readonly defaultExpanded?: boolean;\n readonly expandable?: boolean | \"collapsible\";\n readonly expanded?: boolean;\n readonly onEllipsis?: (ellipsis: boolean) => void;\n readonly onExpand?: (\n event: MouseEvent<HTMLElement>,\n info: { readonly expanded: boolean },\n ) => void;\n readonly rows?: number;\n readonly suffix?: string;\n readonly symbol?: ReactNode | ((expanded: boolean) => ReactNode);\n readonly tooltip?: TypographyEllipsisTooltip;\n}\n\ninterface TypographyBehaviorProps {\n readonly actions?: TypographyActionsConfig;\n readonly code?: boolean;\n readonly copyable?: boolean | TypographyCopyConfig;\n readonly delete?: boolean;\n readonly disabled?: boolean;\n readonly editable?: boolean | TypographyEditableConfig;\n readonly ellipsis?: boolean | TypographyEllipsisConfig;\n readonly italic?: boolean;\n readonly keyboard?: boolean;\n readonly mark?: boolean;\n readonly rootClassName?: string;\n readonly strong?: boolean;\n readonly type?: TypographyType | \"button\";\n readonly underline?: boolean;\n}\n\nexport interface BaseTypographyProps\n extends Omit<HTMLAttributes<HTMLElement>, \"type\">,\n TypographyBehaviorProps {\n readonly children?: ReactNode;\n}\n\nexport interface TitleProps extends Omit<BaseTypographyProps, \"strong\"> {\n readonly as?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"p\";\n readonly level?: 1 | 2 | 3 | 4 | 5;\n readonly variant?: TitleVariant;\n}\n\nexport interface TextProps extends BaseTypographyProps {\n readonly as?: \"p\" | \"span\" | \"div\" | \"button\";\n readonly variant?: TextVariant;\n}\n\nexport interface ParagraphProps extends BaseTypographyProps {\n readonly as?: \"p\" | \"div\";\n}\n\nexport type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"type\"> &\n TypographyBehaviorProps;\n\nexport interface TypographyProps extends HTMLAttributes<HTMLElement> {\n readonly component?: keyof HTMLElementTagNameMap;\n readonly rootClassName?: string;\n}\n\nconst titleClass: Record<TitleVariant, string> = {\n page: \"text-[32px] font-bold leading-[38px] tracking-normal text-white\",\n section: \"text-sm font-semibold text-[#f2f4f6]\",\n card: \"text-[13px] font-semibold text-[#f2f4f6]\",\n};\n\nconst titleLevelClass: Record<NonNullable<TitleProps[\"level\"]>, string> = {\n 1: \"text-[32px] font-semibold leading-[1.25] text-[var(--hj-color-web-foreground)]\",\n 2: \"text-2xl font-semibold leading-[1.3] text-[var(--hj-color-web-foreground)]\",\n 3: \"text-xl font-semibold leading-[1.35] text-[var(--hj-color-web-foreground)]\",\n 4: \"text-base font-semibold leading-[1.4] text-[var(--hj-color-web-foreground)]\",\n 5: \"text-sm font-semibold leading-[1.45] text-[var(--hj-color-web-foreground)]\",\n};\n\nconst textClass: Record<TextVariant, string> = {\n body: \"text-sm text-[#a5adb8]\",\n muted: \"text-xs text-[#8b94a0]\",\n action: \"text-xs font-normal leading-none text-[#8b94a0] hover:text-[#d6a84a]\",\n};\n\nconst typeClass: Record<TypographyType, string> = {\n secondary: \"text-[var(--hj-color-web-muted)]\",\n success: \"text-[var(--hj-color-success)]\",\n warning: \"text-[var(--hj-color-warning)]\",\n danger: \"text-[var(--hj-color-danger)]\",\n};\n\nconst EMPTY_COPY_CONFIG: TypographyCopyConfig = {};\nconst EMPTY_EDIT_CONFIG: TypographyEditableConfig = {};\nconst EMPTY_ELLIPSIS_CONFIG: TypographyEllipsisConfig = {};\nconst ELLIPSIS_TEXT = \"...\";\n\nfunction decorateContent(props: TypographyBehaviorProps, content: ReactNode) {\n let result = content;\n if (props.mark) result = <mark>{result}</mark>;\n if (props.code) result = <code>{result}</code>;\n if (props.keyboard) result = <kbd>{result}</kbd>;\n if (props.underline) result = <u>{result}</u>;\n if (props.delete) result = <del>{result}</del>;\n if (props.strong) result = <strong>{result}</strong>;\n if (props.italic) result = <i>{result}</i>;\n return result;\n}\n\nfunction getNodeText(node: ReactNode): string {\n if (typeof node === \"string\" || typeof node === \"number\" || typeof node === \"bigint\") {\n return String(node);\n }\n if (Array.isArray(node)) return node.map(getNodeText).join(\"\");\n if (isValidElement<{ readonly children?: ReactNode }>(node)) {\n return getNodeText(node.props.children);\n }\n return \"\";\n}\n\nfunction legacyCopy(text: string, format: \"text/html\" | \"text/plain\") {\n const holder = document.createElement(\"textarea\");\n holder.value = text;\n holder.setAttribute(\"readonly\", \"\");\n holder.style.position = \"fixed\";\n holder.style.insetInlineStart = \"-9999px\";\n holder.style.opacity = \"0\";\n\n const handleCopy = (event: ClipboardEvent) => {\n event.clipboardData?.setData(format, text);\n event.preventDefault();\n };\n\n document.addEventListener(\"copy\", handleCopy);\n document.body.appendChild(holder);\n holder.select();\n let copied = false;\n try {\n if (typeof document.execCommand !== \"function\") throw new Error(\"Clipboard is unavailable\");\n copied = document.execCommand(\"copy\");\n } finally {\n holder.remove();\n document.removeEventListener(\"copy\", handleCopy);\n }\n\n if (!copied) throw new Error(\"Unable to copy text to the clipboard\");\n}\n\nasync function copyText(text: string, format: \"text/html\" | \"text/plain\" = \"text/plain\") {\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n try {\n if (\n format === \"text/html\" &&\n typeof ClipboardItem !== \"undefined\" &&\n typeof navigator.clipboard.write === \"function\"\n ) {\n const item = new ClipboardItem({\n [format]: new Blob([text], { type: format }),\n });\n await navigator.clipboard.write([item]);\n return;\n }\n if (typeof navigator.clipboard.writeText === \"function\") {\n await navigator.clipboard.writeText(text);\n return;\n }\n } catch {\n // The legacy path still works in browsers that reject the async clipboard permission.\n }\n }\n\n if (typeof document === \"undefined\") throw new Error(\"Clipboard is unavailable\");\n legacyCopy(text, format);\n}\n\nfunction toConfigList(value: ReactNode | readonly ReactNode[] | undefined): readonly ReactNode[] {\n if (value === false) return [false, false];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction getConfigNode(value: ReactNode, fallback: ReactNode, alwaysRender = false) {\n if (value === true || value === undefined) return fallback;\n return value || (alwaysRender ? fallback : value);\n}\n\ninterface EditableTypographyProps {\n readonly ariaLabel?: string;\n readonly className?: string;\n readonly component: keyof HTMLElementTagNameMap;\n readonly config: TypographyEditableConfig;\n readonly disabled?: boolean;\n readonly style?: CSSProperties;\n readonly value: string;\n readonly onCancel: () => void;\n readonly onSave: (value: string) => void;\n}\n\nfunction EditableTypography({\n ariaLabel,\n className,\n component,\n config,\n disabled,\n onCancel,\n onSave,\n style,\n value,\n}: EditableTypographyProps) {\n const inputRef = useRef<TextAreaRef>(null);\n const composingRef = useRef(false);\n const lastKeyCodeRef = useRef<number | null>(null);\n const [current, setCurrent] = useState(value);\n\n useEffect(() => setCurrent(value), [value]);\n\n useLayoutEffect(() => {\n const textArea = inputRef.current?.resizableTextArea.textArea;\n if (!textArea) return;\n textArea.focus();\n textArea.setSelectionRange(textArea.value.length, textArea.value.length);\n }, []);\n\n const confirmChange = useEvent(() => onSave(current.trim()));\n\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (event) => {\n setCurrent(event.target.value.replace(/[\\n\\r]/g, \"\"));\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = (event) => {\n if (!composingRef.current) lastKeyCodeRef.current = event.keyCode;\n };\n\n const handleKeyUp: KeyboardEventHandler<HTMLTextAreaElement> = (event) => {\n if (\n composingRef.current ||\n lastKeyCodeRef.current !== event.keyCode ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n ) {\n return;\n }\n\n if (event.key === \"Enter\" || event.keyCode === 13) {\n confirmChange();\n config.onEnd?.();\n } else if (event.key === \"Escape\" || event.keyCode === 27) {\n onCancel();\n }\n };\n\n const handleBlur: FocusEventHandler<HTMLTextAreaElement> = () => confirmChange();\n const enterIcon =\n config.enterIcon === undefined ? (\n <Icon aria-hidden=\"true\" name=\"check\" size={14} />\n ) : (\n config.enterIcon\n );\n\n return (\n <div\n className={cn(\n \"hj-typography hj-typography-edit-content relative inline-flex w-full min-w-0 items-start\",\n `hj-typography-${component}`,\n className,\n )}\n style={style}\n >\n <RcTextArea\n aria-label={ariaLabel}\n autoSize={config.autoSize ?? true}\n className=\"hj-typography-edit-input min-w-0 flex-1 rounded-[var(--hj-input-radius)] border border-[var(--hj-input-border-active)] bg-[var(--hj-input-bg)] text-[var(--hj-input-fg)]\"\n classNames={{\n affixWrapper:\n \"hj-typography-edit-input min-w-0 flex-1 rounded-[var(--hj-input-radius)] border border-[var(--hj-input-border-active)] bg-[var(--hj-input-bg)]\",\n textarea: cn(\n \"hj-typography-edit-textarea block min-h-8 w-full resize-none bg-transparent px-3 py-2 font-[inherit] leading-[inherit] text-[var(--hj-input-fg)] outline-none\",\n enterIcon !== null && \"pr-8\",\n ),\n }}\n disabled={disabled}\n maxLength={config.maxLength}\n prefixCls=\"hj-typography-edit\"\n ref={inputRef}\n rows={1}\n value={current}\n onBlur={handleBlur}\n onChange={handleChange}\n onCompositionEnd={() => {\n composingRef.current = false;\n }}\n onCompositionStart={() => {\n composingRef.current = true;\n }}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n />\n {enterIcon !== null ? (\n <span\n aria-hidden=\"true\"\n className=\"hj-typography-edit-content-confirm pointer-events-none absolute right-2 top-2 inline-flex text-[var(--hj-color-brand)]\"\n >\n {enterIcon}\n </span>\n ) : null}\n </div>\n );\n}\n\ninterface MeasureTextRef {\n readonly getHeight: () => number;\n readonly isExceed: () => boolean;\n}\n\ninterface MeasureTextProps {\n readonly children: ReactNode;\n readonly style?: CSSProperties;\n}\n\nconst MeasureText = forwardRef<MeasureTextRef, MeasureTextProps>(function MeasureText(\n { children, style },\n ref,\n) {\n const elementRef = useRef<HTMLSpanElement>(null);\n\n useImperativeHandle(ref, () => ({\n getHeight: () => {\n const element = elementRef.current;\n return element ? element.getBoundingClientRect().height || element.clientHeight : 0;\n },\n isExceed: () => {\n const element = elementRef.current;\n return element ? element.scrollHeight > element.clientHeight : false;\n },\n }));\n\n return (\n <span\n aria-hidden=\"true\"\n ref={elementRef}\n style={{\n background: \"transparent\",\n insetInlineStart: 0,\n pointerEvents: \"none\",\n position: \"fixed\",\n top: 0,\n visibility: \"hidden\",\n zIndex: -1,\n ...style,\n }}\n >\n {children}\n </span>\n );\n});\n\nfunction getNodesLength(nodes: readonly ReactNode[]) {\n return nodes.reduce<number>(\n (length, node) =>\n length + (typeof node === \"string\" || typeof node === \"number\" ? String(node).length : 1),\n 0,\n );\n}\n\nfunction sliceNodes(nodes: readonly ReactNode[], length: number) {\n let currentLength = 0;\n const result: ReactNode[] = [];\n\n for (const node of nodes) {\n if (currentLength === length) break;\n const canSlice = typeof node === \"string\" || typeof node === \"number\";\n const nodeLength = canSlice ? String(node).length : 1;\n const nextLength = currentLength + nodeLength;\n\n if (nextLength > length) {\n result.push(String(node).slice(0, length - currentLength));\n break;\n }\n\n result.push(node);\n currentLength = nextLength;\n }\n\n return result;\n}\n\ntype EllipsisMeasureStatus = \"none\" | \"prepare\" | \"start\" | \"need\" | \"not-needed\";\n\nconst lineClampStyle: CSSProperties = {\n WebkitBoxOrient: \"vertical\",\n display: \"-webkit-box\",\n overflow: \"hidden\",\n};\n\ninterface EllipsisMeasureProps {\n readonly enable: boolean;\n readonly expanded: boolean;\n readonly measureKey: object;\n readonly rows: number;\n readonly text: ReactNode;\n readonly width: number;\n readonly onEllipsis: (ellipsis: boolean) => void;\n readonly renderContent: (nodes: readonly ReactNode[], canEllipsis: boolean) => ReactNode;\n}\n\nfunction EllipsisMeasure({\n enable,\n expanded,\n measureKey,\n onEllipsis,\n renderContent,\n rows,\n text,\n width,\n}: EllipsisMeasureProps) {\n const render = useEvent(renderContent);\n const triggerEllipsis = useEvent(onEllipsis);\n const nodes = useMemo(() => toArray(text) as ReactNode[], [text]);\n const nodeLength = useMemo(() => getNodesLength(nodes), [nodes]);\n const cutMeasureRef = useRef<MeasureTextRef>(null);\n const overflowMeasureRef = useRef<MeasureTextRef>(null);\n const previousRowsMeasureRef = useRef<MeasureTextRef>(null);\n const operationMeasureRef = useRef<MeasureTextRef>(null);\n const whiteSpaceMeasureRef = useRef<HTMLSpanElement>(null);\n const [status, setStatus] = useState<EllipsisMeasureStatus>(\"none\");\n const [cutRange, setCutRange] = useState<readonly [number, number] | null>(null);\n const [canEllipsis, setCanEllipsis] = useState(false);\n const [ellipsisHeight, setEllipsisHeight] = useState(0);\n const [parentWhiteSpace, setParentWhiteSpace] = useState<CSSProperties[\"whiteSpace\"] | null>(\n null,\n );\n\n useLayoutEffect(() => {\n if (enable && width > 0 && nodeLength > 0) {\n setStatus(\"prepare\");\n } else {\n setStatus(\"none\");\n setCutRange(null);\n setCanEllipsis(false);\n }\n }, [enable, measureKey, nodeLength, rows, text, width]);\n\n useLayoutEffect(() => {\n if (status === \"prepare\") {\n setParentWhiteSpace(\n whiteSpaceMeasureRef.current\n ? getComputedStyle(whiteSpaceMeasureRef.current).whiteSpace\n : null,\n );\n setStatus(\"start\");\n return;\n }\n\n if (status !== \"start\") return;\n const overflowing = overflowMeasureRef.current?.isExceed() ?? false;\n const baseHeight = overflowMeasureRef.current?.getHeight() ?? 0;\n const previousRowsHeight = rows === 1 ? 0 : (previousRowsMeasureRef.current?.getHeight() ?? 0);\n const operationHeight = operationMeasureRef.current?.getHeight() ?? 0;\n\n setCanEllipsis(overflowing);\n setCutRange(overflowing ? [0, nodeLength] : null);\n setEllipsisHeight(Math.max(baseHeight, previousRowsHeight + operationHeight) + 1);\n setStatus(overflowing ? \"need\" : \"not-needed\");\n triggerEllipsis(overflowing);\n }, [nodeLength, rows, status, triggerEllipsis]);\n\n const cutMiddle = cutRange ? Math.ceil((cutRange[0] + cutRange[1]) / 2) : 0;\n\n useLayoutEffect(() => {\n if (!cutRange || cutRange[0] === cutRange[1]) return;\n const [minimum, maximum] = cutRange;\n const overflowing = (cutMeasureRef.current?.getHeight() ?? 0) > ellipsisHeight;\n let target = cutMiddle;\n if (maximum - minimum === 1) target = overflowing ? minimum : maximum;\n setCutRange(overflowing ? [minimum, target] : [target, maximum]);\n }, [cutMiddle, cutRange, ellipsisHeight]);\n\n const fullContent = render(nodes, false);\n let visibleContent: ReactNode;\n\n if (!enable || status === \"none\" || status === \"not-needed\") {\n visibleContent = fullContent;\n } else if (status !== \"need\" || !cutRange || cutRange[0] !== cutRange[1]) {\n visibleContent = (\n <span style={{ ...lineClampStyle, WebkitLineClamp: rows }}>{fullContent}</span>\n );\n } else {\n visibleContent = render(expanded ? nodes : sliceNodes(nodes, cutRange[0]), canEllipsis);\n }\n\n const measureStyle: CSSProperties = {\n margin: 0,\n padding: 0,\n whiteSpace: parentWhiteSpace === \"nowrap\" ? \"normal\" : \"inherit\",\n width,\n };\n\n return (\n <>\n {visibleContent}\n {status === \"start\" ? (\n <>\n <MeasureText\n ref={overflowMeasureRef}\n style={{ ...measureStyle, ...lineClampStyle, WebkitLineClamp: rows }}\n >\n {fullContent}\n </MeasureText>\n <MeasureText\n ref={previousRowsMeasureRef}\n style={{ ...measureStyle, ...lineClampStyle, WebkitLineClamp: rows - 1 }}\n >\n {fullContent}\n </MeasureText>\n <MeasureText\n ref={operationMeasureRef}\n style={{ ...measureStyle, ...lineClampStyle, WebkitLineClamp: 1 }}\n >\n {render([], true)}\n </MeasureText>\n </>\n ) : null}\n {status === \"need\" && cutRange && cutRange[0] !== cutRange[1] ? (\n <MeasureText ref={cutMeasureRef} style={{ ...measureStyle, top: 400 }}>\n {render(sliceNodes(nodes, cutMiddle), true)}\n </MeasureText>\n ) : null}\n {status === \"prepare\" ? (\n <span ref={whiteSpaceMeasureRef} style={{ whiteSpace: \"inherit\" }} />\n ) : null}\n </>\n );\n}\n\nfunction isPlainObject(value: unknown): value is Record<PropertyKey, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value) || isValidElement(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction getEllipsisTooltipProps(\n tooltip: TypographyEllipsisTooltip | undefined,\n editText: string | undefined,\n children: ReactNode,\n): Omit<TooltipProps, \"children\"> {\n if (tooltip === true) return { title: editText ?? children };\n if (isValidElement(tooltip)) return { title: tooltip };\n if (isPlainObject(tooltip)) {\n return {\n title: editText ?? children,\n ...(tooltip as Omit<TooltipProps, \"children\">),\n };\n }\n return { title: tooltip };\n}\n\nfunction isElementEllipsized(element: HTMLElement, rows: number) {\n return rows === 1\n ? element.scrollWidth > element.clientWidth\n : element.scrollHeight > element.clientHeight;\n}\n\nfunction TypographyBase({\n actions,\n children,\n className,\n code,\n copyable = false,\n delete: deleted,\n disabled = false,\n editable = false,\n ellipsis,\n italic,\n keyboard,\n mark,\n rootClassName,\n strong,\n style,\n type,\n underline,\n component,\n onClick,\n \"aria-label\": ariaLabel,\n ...props\n}: BaseTypographyProps & { readonly component: keyof HTMLElementTagNameMap }) {\n const typographyRef = useRef<HTMLElement>(null);\n const editButtonRef = useRef<HTMLButtonElement>(null);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const enableCopy = Boolean(copyable);\n const enableEdit = Boolean(editable);\n const enableEllipsis = Boolean(ellipsis);\n const copyConfig = typeof copyable === \"object\" ? copyable : EMPTY_COPY_CONFIG;\n const editConfig = typeof editable === \"object\" ? editable : EMPTY_EDIT_CONFIG;\n const ellipsisConfig = typeof ellipsis === \"object\" ? ellipsis : EMPTY_ELLIPSIS_CONFIG;\n const triggerType = editConfig.triggerType ?? [\"icon\"];\n const placement = actions?.placement ?? \"end\";\n const [editing, setEditing] = useControlledState(false, editConfig.editing);\n const [expanded, setExpanded] = useControlledState(\n ellipsisConfig.defaultExpanded ?? false,\n ellipsisConfig.expanded,\n );\n const [copied, setCopied] = useState(false);\n const [copyLoading, setCopyLoading] = useState(false);\n const [ellipsisWidth, setEllipsisWidth] = useState(0);\n const [isJsEllipsis, setIsJsEllipsis] = useState(false);\n const [isNativeEllipsis, setIsNativeEllipsis] = useState(false);\n const previousEditingRef = useRef(editing);\n const rows = Math.max(1, Math.floor(ellipsisConfig.rows ?? 1));\n const mergedEnableEllipsis =\n enableEllipsis && (!expanded || ellipsisConfig.expandable === \"collapsible\");\n const needMeasureEllipsis =\n mergedEnableEllipsis &&\n (ellipsisConfig.suffix !== undefined ||\n Boolean(ellipsisConfig.onEllipsis) ||\n Boolean(ellipsisConfig.expandable) ||\n enableEdit ||\n enableCopy);\n const cssEllipsis = mergedEnableEllipsis && !needMeasureEllipsis;\n const tooltipProps = getEllipsisTooltipProps(ellipsisConfig.tooltip, editConfig.text, children);\n const { title: ellipsisTooltipTitle, ...ellipsisTooltipRest } = tooltipProps;\n const hasEllipsisTooltip = ellipsisTooltipTitle !== undefined && ellipsisTooltipTitle !== false;\n const isMergedEllipsis = mergedEnableEllipsis\n ? cssEllipsis\n ? hasEllipsisTooltip && isNativeEllipsis\n : isJsEllipsis\n : false;\n const measureKey = useMemo(\n () => ({\n code,\n copied,\n copyIcon: copyConfig.icon,\n copyLoading,\n deleted,\n editIcon: editConfig.icon,\n enableCopy,\n enableEdit,\n expanded,\n italic,\n keyboard,\n mark,\n placement,\n strong,\n style,\n suffix: ellipsisConfig.suffix,\n symbol: ellipsisConfig.symbol,\n underline,\n }),\n [\n code,\n copied,\n copyConfig.icon,\n copyLoading,\n deleted,\n editConfig.icon,\n ellipsisConfig.suffix,\n ellipsisConfig.symbol,\n enableCopy,\n enableEdit,\n expanded,\n italic,\n keyboard,\n mark,\n placement,\n strong,\n style,\n underline,\n ],\n );\n\n useEffect(\n () => () => {\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n useLayoutEffect(() => {\n if (!editing && previousEditingRef.current) editButtonRef.current?.focus();\n previousEditingRef.current = editing;\n }, [editing]);\n\n useLayoutEffect(() => {\n const element = typographyRef.current;\n if (!cssEllipsis || !hasEllipsisTooltip || !element) {\n setIsNativeEllipsis(false);\n return;\n }\n setIsNativeEllipsis(isElementEllipsized(element, rows));\n }, [children, cssEllipsis, ellipsisWidth, hasEllipsisTooltip, rows, style]);\n\n const triggerEditing = useEvent((nextEditing: boolean) => {\n if (nextEditing) editConfig.onStart?.();\n setEditing(nextEditing);\n });\n\n const handleEditSave = useEvent((value: string) => {\n editConfig.onChange?.(value);\n setEditing(false);\n });\n\n const handleEditCancel = useEvent(() => {\n editConfig.onCancel?.();\n setEditing(false);\n });\n\n const handleCopy = useEvent(async (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled || copyLoading) return;\n\n setCopyLoading(true);\n try {\n const configuredText =\n typeof copyConfig.text === \"function\" ? await copyConfig.text() : copyConfig.text;\n await copyText(configuredText ?? getNodeText(children), copyConfig.format);\n setCopied(true);\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => setCopied(false), 3000);\n copyConfig.onCopy?.(event);\n } finally {\n setCopyLoading(false);\n }\n });\n\n const handleJsEllipsis = useEvent((nextEllipsis: boolean) => {\n setIsJsEllipsis((previous) => {\n if (previous !== nextEllipsis) ellipsisConfig.onEllipsis?.(nextEllipsis);\n return nextEllipsis;\n });\n });\n\n if (enableEdit && editing) {\n const editableValue =\n editConfig.text ??\n (typeof children === \"string\" || typeof children === \"number\" ? String(children) : \"\");\n return (\n <EditableTypography\n ariaLabel={ariaLabel}\n className={cn(\n type && type !== \"button\" ? `hj-typography-${type}` : undefined,\n type && type !== \"button\" ? typeClass[type] : undefined,\n disabled && \"hj-typography-disabled cursor-not-allowed opacity-45\",\n rootClassName,\n className,\n )}\n component={component}\n config={editConfig}\n disabled={disabled}\n style={style}\n value={editableValue}\n onCancel={handleEditCancel}\n onSave={handleEditSave}\n />\n );\n }\n\n const renderExpand = (canEllipsis: boolean) => {\n if (!canEllipsis || !ellipsisConfig.expandable) return null;\n const nextExpanded = !expanded;\n const defaultSymbol = expanded ? \"Collapse\" : \"Expand\";\n const symbol =\n typeof ellipsisConfig.symbol === \"function\"\n ? ellipsisConfig.symbol(expanded)\n : (ellipsisConfig.symbol ?? defaultSymbol);\n\n return (\n <button\n aria-expanded={expanded}\n aria-label={defaultSymbol}\n className={cn(\n \"hj-typography-action border-0 bg-transparent p-0 text-[var(--hj-color-brand)] hover:text-[var(--hj-color-brand-hover)]\",\n expanded ? \"hj-typography-collapse\" : \"hj-typography-expand\",\n )}\n disabled={disabled}\n key=\"expand\"\n type=\"button\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setExpanded(nextExpanded);\n ellipsisConfig.onExpand?.(event, { expanded: nextExpanded });\n }}\n >\n {symbol}\n </button>\n );\n };\n\n const renderEdit = () => {\n if (!enableEdit || !triggerType.includes(\"icon\")) return null;\n const editTitle =\n editConfig.tooltip === false\n ? undefined\n : editConfig.tooltip === true || editConfig.tooltip === undefined\n ? \"Edit\"\n : editConfig.tooltip;\n\n return (\n <Tooltip key=\"edit\" title={editTitle}>\n <button\n aria-label={typeof editTitle === \"string\" ? editTitle : \"Edit\"}\n className=\"hj-typography-action hj-typography-edit inline-flex border-0 bg-transparent p-0 text-current opacity-70 hover:text-[var(--hj-color-brand)] hover:opacity-100\"\n disabled={disabled}\n ref={editButtonRef}\n tabIndex={editConfig.tabIndex}\n type=\"button\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n triggerEditing(true);\n }}\n >\n {editConfig.icon ?? (\n <span aria-hidden=\"true\" className=\"text-[15px] leading-none\">\n {\"\\u270e\"}\n </span>\n )}\n </button>\n </Tooltip>\n );\n };\n\n const renderCopy = () => {\n if (!enableCopy) return null;\n const icons = toConfigList(copyConfig.icon);\n const tooltips = toConfigList(copyConfig.tooltips);\n const defaultTitle = copied ? \"Copied\" : \"Copy\";\n const copyTitle = getConfigNode(tooltips[copied ? 1 : 0], defaultTitle);\n const defaultIcon = copied ? (\n <Icon aria-hidden=\"true\" name=\"check\" size={14} />\n ) : copyLoading ? (\n <Icon aria-hidden=\"true\" className=\"animate-spin\" name=\"refresh\" size={14} />\n ) : (\n <Icon aria-hidden=\"true\" name=\"copy\" size={14} />\n );\n\n return (\n <Tooltip key=\"copy\" title={copyTitle}>\n <button\n aria-label={typeof copyTitle === \"string\" ? copyTitle : defaultTitle}\n className={cn(\n \"hj-typography-action hj-typography-copy inline-flex border-0 bg-transparent p-0 text-current opacity-70 hover:text-[var(--hj-color-brand)] hover:opacity-100\",\n copied && \"hj-typography-copy-success text-[var(--hj-color-success)] opacity-100\",\n copyLoading && \"hj-typography-copy-loading\",\n )}\n disabled={disabled || copyLoading}\n tabIndex={copyConfig.tabIndex}\n type=\"button\"\n onClick={handleCopy}\n >\n {getConfigNode(icons[copied ? 1 : 0], defaultIcon, true)}\n </button>\n </Tooltip>\n );\n };\n\n const renderOperations = (canEllipsis: boolean) => {\n const operations = [renderExpand(canEllipsis), renderEdit(), renderCopy()];\n if (operations.every((operation) => operation == null)) return null;\n\n return (\n <span\n className={cn(\n \"hj-typography-actions inline-flex items-center gap-1 align-baseline\",\n placement === \"start\" ? \"hj-typography-actions-start mr-1\" : \"ml-1\",\n )}\n >\n {operations}\n </span>\n );\n };\n\n const renderContent = (nodes: readonly ReactNode[], canEllipsis: boolean) => {\n const textContent = decorateContent(\n { code, delete: deleted, italic, keyboard, mark, strong, underline },\n <>\n {nodes}\n {canEllipsis && !expanded ? <span aria-hidden=\"true\">{ELLIPSIS_TEXT}</span> : null}\n {ellipsisConfig.suffix}\n </>,\n );\n const operations = renderOperations(canEllipsis);\n\n return (\n <>\n {placement === \"start\" ? operations : null}\n {textContent}\n {placement === \"end\" ? operations : null}\n </>\n );\n };\n\n const cssEllipsisStyle: CSSProperties | undefined = cssEllipsis\n ? rows > 1\n ? { ...lineClampStyle, WebkitLineClamp: rows }\n : {\n display: component === \"span\" || component === \"a\" ? \"inline-block\" : undefined,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined;\n const fullText = editConfig.text ?? getNodeText(children);\n const rootProps = {\n ...props,\n \"aria-disabled\": disabled || undefined,\n \"aria-label\": ariaLabel ?? (needMeasureEllipsis && isMergedEllipsis ? fullText : undefined),\n className: cn(\n \"hj-typography\",\n type && type !== \"button\" ? `hj-typography-${type}` : undefined,\n type && type !== \"button\" ? typeClass[type] : undefined,\n disabled && \"hj-typography-disabled cursor-not-allowed opacity-45\",\n enableEllipsis && \"hj-typography-ellipsis\",\n cssEllipsis && rows === 1 && \"hj-typography-ellipsis-single-line\",\n cssEllipsis && rows > 1 && \"hj-typography-ellipsis-multiple-line\",\n expanded && \"hj-typography-ellipsis-expanded\",\n triggerType.includes(\"text\") && enableEdit && !disabled && \"cursor-pointer\",\n rootClassName,\n className,\n ),\n onClick: (event: MouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && enableEdit && !disabled && triggerType.includes(\"text\")) {\n event.preventDefault();\n triggerEditing(true);\n }\n },\n style: { ...cssEllipsisStyle, ...style },\n ...(component === \"button\" ? { disabled, type: type === \"button\" ? \"button\" : undefined } : {}),\n };\n\n return (\n <ResizeObserver\n disabled={!mergedEnableEllipsis}\n onResize={({ offsetWidth }) => setEllipsisWidth(offsetWidth)}\n >\n {(resizeRef) => {\n const typographyNode = createElement(\n component,\n { ...rootProps, ref: composeRef(resizeRef, typographyRef) },\n <EllipsisMeasure\n enable={needMeasureEllipsis}\n expanded={expanded}\n measureKey={measureKey}\n rows={rows}\n text={children}\n width={ellipsisWidth}\n onEllipsis={handleJsEllipsis}\n renderContent={renderContent}\n />,\n );\n\n return hasEllipsisTooltip ? (\n <Tooltip\n {...ellipsisTooltipRest}\n title={isMergedEllipsis ? ellipsisTooltipTitle : undefined}\n >\n {typographyNode}\n </Tooltip>\n ) : (\n typographyNode\n );\n }}\n </ResizeObserver>\n );\n}\n\nexport function Title({ as, className, level = 1, variant, ...props }: TitleProps) {\n const component = as ?? (variant ? \"h2\" : (`h${level}` as const));\n return (\n <TypographyBase\n {...props}\n className={cn(\n \"hj-typography-title\",\n variant ? titleClass[variant] : titleLevelClass[level],\n className,\n )}\n component={component}\n />\n );\n}\n\nexport function Text({ as, className, variant, ...props }: TextProps) {\n const component = as ?? (variant ? \"p\" : \"span\");\n return (\n <TypographyBase\n {...props}\n className={cn(\"hj-typography-text\", textClass[variant ?? \"body\"], className)}\n component={component}\n />\n );\n}\n\nexport function Paragraph({ as = \"p\", className, ...props }: ParagraphProps) {\n return (\n <TypographyBase\n {...props}\n className={cn(\"hj-typography-paragraph\", className)}\n component={as}\n />\n );\n}\n\nexport function Link({ className, ...props }: LinkProps) {\n return (\n <TypographyBase\n {...(props as BaseTypographyProps)}\n className={cn(\n \"hj-typography-link text-[var(--hj-color-brand)] transition hover:underline\",\n className,\n )}\n component=\"a\"\n />\n );\n}\n\nfunction TypographyRoot({\n children,\n className,\n component = \"article\",\n rootClassName,\n ...props\n}: TypographyProps) {\n return createElement(\n component,\n { ...props, className: cn(\"hj-typography\", rootClassName, className) },\n children,\n );\n}\n\nexport const Typography = Object.assign(TypographyRoot, {\n Link,\n Paragraph,\n Text,\n Title,\n});\n",
|
|
76
|
+
"import type { ReactNode } from \"react\";\nimport { Text, Title } from \"./Typography\";\n\ninterface SectionHeaderProps {\n readonly action?: ReactNode;\n readonly className?: string;\n readonly meta?: ReactNode;\n readonly middle?: ReactNode;\n readonly onAction?: () => void;\n readonly title: ReactNode;\n}\n\nexport function SectionHeader({\n action,\n className = \"\",\n meta,\n middle,\n onAction,\n title,\n}: SectionHeaderProps) {\n return (\n <div className={`flex items-center justify-between gap-3 ${className}`}>\n <div className=\"flex min-w-0 items-baseline gap-2\">\n <Title className=\"shrink-0\" variant=\"section\">\n {title}\n </Title>\n {meta ? (\n <Text as=\"span\" className=\"truncate font-semibold text-[#a5adb8]\" variant=\"muted\">\n {meta}\n </Text>\n ) : null}\n </div>\n {middle ? <div className=\"min-w-0 flex-1\">{middle}</div> : null}\n {action ? (\n <Text\n as={onAction ? \"button\" : \"span\"}\n className=\"shrink-0\"\n onClick={onAction}\n type={onAction ? \"button\" : undefined}\n variant=\"action\"\n >\n {action}\n </Text>\n ) : null}\n </div>\n );\n}\n",
|
|
77
|
+
"import RcSelect from \"@rc-component/select\";\nimport type { SelectProps as RcSelectProps } from \"@rc-component/select\";\nimport type { ReactNode } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport type { SlotClassNames, SlotStyles } from \"../utils/slots\";\nimport { slotClass, slotStyle } from \"../utils/slots\";\nimport { Icon } from \"./Icon\";\nimport { normalizeInputSize } from \"./Input\";\nimport type { InputProps, InputSize, InputStatus, InputVariant } from \"./Input\";\nimport { useMergedFormItemStatus } from \"./form/statusContext\";\n\nexport interface SelectInputOption {\n readonly disabled?: boolean;\n readonly label: ReactNode;\n readonly suffix?: ReactNode;\n readonly value: string;\n}\n\ntype SelectInputSlot = \"root\" | \"input\" | \"popup\" | \"option\" | \"suffix\";\n\nexport interface SelectInputProps\n extends Omit<InputProps, \"classNames\" | \"onChange\" | \"styles\" | \"suffix\" | \"value\"> {\n readonly activeFirstOption?: boolean;\n readonly activeValue?: string;\n readonly classNames?: SlotClassNames<SelectInputSlot>;\n readonly defaultValue?: string;\n readonly defaultPopupOpen?: boolean;\n readonly displayValue?: string;\n readonly onChange?: (value: string, option?: SelectInputOption) => void;\n readonly onPopupOpenChange?: (open: boolean) => void;\n readonly options: readonly SelectInputOption[];\n readonly popupMatchInputWidth?: boolean;\n readonly popupOffset?: number;\n readonly popupOpen?: boolean;\n readonly placeholder?: string;\n readonly size?: InputSize;\n readonly status?: InputStatus;\n readonly styles?: SlotStyles<SelectInputSlot>;\n readonly suffixIcon?: ReactNode;\n readonly value?: string;\n readonly variant?: InputVariant;\n}\n\nexport function SelectInput({\n activeFirstOption = false,\n activeValue,\n allowClear,\n autoFocus,\n className = \"\",\n classNames,\n defaultPopupOpen = false,\n defaultValue,\n disabled,\n displayValue,\n id,\n onBlur,\n onChange,\n onClick,\n onFocus,\n onKeyDown,\n onPopupOpenChange,\n options,\n placeholder,\n popupMatchInputWidth = true,\n popupOffset,\n popupOpen,\n prefix,\n size,\n status,\n style,\n styles,\n suffixIcon,\n tabIndex,\n title,\n value,\n variant,\n}: SelectInputProps) {\n const config = useConfig();\n const mergedStatus = useMergedFormItemStatus(status);\n const mergedSize = normalizeInputSize(size ?? config.components.SelectInput?.size, config.size);\n const mergedPopupOffset = popupOffset ?? config.components.SelectInput?.popupOffset ?? 8;\n const mergedDisabled = disabled ?? config.components.SelectInput?.disabled ?? config.disabled;\n const rcOptions = options.map((option) => ({ ...option }));\n\n return (\n <RcSelect<string, SelectInputOption>\n allowClear={allowClear}\n autoFocus={autoFocus}\n className={cn(\n \"hj-select-input-root\",\n `hj-select-input-${mergedSize}`,\n mergedStatus && `hj-select-input-status-${mergedStatus}`,\n variant && `hj-select-input-variant-${variant}`,\n slotClass(classNames, \"root\"),\n className,\n )}\n classNames={{ input: slotClass(classNames, \"input\") }}\n defaultActiveFirstOption={activeFirstOption}\n defaultOpen={defaultPopupOpen}\n defaultValue={defaultValue}\n disabled={mergedDisabled}\n getPopupContainer={\n config.getPopupContainer ? () => config.getPopupContainer?.() ?? document.body : undefined\n }\n id={id}\n labelRender={displayValue === undefined ? undefined : () => displayValue}\n open={popupOpen}\n optionRender={(option) => (\n <span\n className={cn(\n \"hj-select-input-option-content\",\n activeValue === option.value && \"hj-select-input-option-active\",\n )}\n >\n <span className=\"hj-select-input-option-label\">{option.label}</span>\n {option.data.suffix ? (\n <span className=\"hj-select-input-option-suffix\">{option.data.suffix}</span>\n ) : null}\n </span>\n )}\n options={rcOptions}\n placeholder={placeholder}\n popupAlign={{ offset: [0, mergedPopupOffset] }}\n popupClassName={slotClass(classNames, \"popup\", \"hj-select-input-popup\")}\n popupMatchSelectWidth={popupMatchInputWidth}\n popupStyle={slotStyle(styles, \"popup\")}\n prefix={prefix}\n prefixCls=\"hj-select-input\"\n style={slotStyle(styles, \"root\", style)}\n suffix={() => (\n <span\n className={slotClass(classNames, \"suffix\", \"hj-select-input-suffix\")}\n style={slotStyle(styles, \"suffix\")}\n >\n {suffixIcon ?? <Icon name=\"chevron-down\" size={16} strokeWidth={2} />}\n </span>\n )}\n tabIndex={tabIndex}\n title={title}\n value={value}\n onBlur={onBlur as RcSelectProps<string, SelectInputOption>[\"onBlur\"]}\n onChange={(nextValue, option) => onChange?.(nextValue, option as SelectInputOption)}\n onClick={onClick as RcSelectProps<string, SelectInputOption>[\"onClick\"]}\n onFocus={onFocus as RcSelectProps<string, SelectInputOption>[\"onFocus\"]}\n onKeyDown={onKeyDown as RcSelectProps<string, SelectInputOption>[\"onKeyDown\"]}\n onPopupVisibleChange={onPopupOpenChange}\n />\n );\n}\n",
|
|
78
|
+
"import type { ReactNode } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Segmented } from \"./Segmented\";\nimport type {\n SegmentedLabeledOption,\n SegmentedProps,\n SegmentedSize,\n SegmentedValue,\n} from \"./Segmented\";\n\nexport type SegmentedTabSize = SegmentedSize;\nexport type SegmentedTabAppearance = \"boxed\" | \"glow-pill\" | \"plain\" | \"segmented\";\n\n/**\n * @deprecated Use `SegmentedTabAppearance`. This alias only selects a legacy\n * Segmented visual and does not provide Tabs behavior.\n */\nexport type SegmentedTabsType = \"line\" | \"boxed\" | \"segmented\" | \"glow-pill\";\n\n/**\n * @deprecated SegmentedTabs does not render a Tabs indicator. This type is\n * retained only for the legacy `indicator` visual adapter.\n */\nexport type SegmentedTabIndicator = \"ink\" | \"none\";\n\nexport interface SegmentedTabItem<T extends SegmentedValue>\n extends Omit<SegmentedLabeledOption<T>, \"label\" | \"value\"> {\n readonly id: T;\n readonly label: ReactNode;\n}\n\nexport interface SegmentedTabsProps<T extends SegmentedValue = SegmentedValue>\n extends Omit<SegmentedProps<T>, \"items\" | \"options\" | \"shape\" | \"size\"> {\n /** 996-owned visual treatment over the Segmented selection control. */\n readonly appearance?: SegmentedTabAppearance;\n\n /**\n * @deprecated SegmentedTabs does not expose Tabs animation contracts.\n * `false` only disables the legacy rc-segmented thumb transition class.\n */\n readonly animated?: boolean;\n\n /** @deprecated Use the native Segmented `block` prop. */\n readonly fullWidth?: boolean;\n\n /**\n * @deprecated SegmentedTabs does not render a Tabs indicator. `none` only\n * suppresses the rc-segmented thumb for the plain legacy appearance.\n */\n readonly indicator?: SegmentedTabIndicator;\n readonly items: readonly SegmentedTabItem<T>[];\n readonly size?: SegmentedTabSize;\n\n /**\n * @deprecated Use `appearance`. This prop is a visual compatibility adapter\n * only and does not provide Tabs type or pane behavior.\n */\n readonly type?: SegmentedTabsType;\n}\n\nconst legacyTypeAppearance: Record<SegmentedTabsType, SegmentedTabAppearance> = {\n boxed: \"boxed\",\n \"glow-pill\": \"glow-pill\",\n line: \"plain\",\n segmented: \"segmented\",\n};\n\nconst appearanceClass: Record<SegmentedTabAppearance, SegmentedTabsType> = {\n boxed: \"boxed\",\n \"glow-pill\": \"glow-pill\",\n plain: \"line\",\n segmented: \"segmented\",\n};\n\nexport function SegmentedTabs<T extends SegmentedValue>(props: SegmentedTabsProps<T>) {\n const {\n animated,\n appearance,\n block,\n disabled,\n fullWidth,\n indicator,\n items,\n size,\n type,\n ...segmentedProps\n } = props;\n const config = useConfig();\n const mergedSize = size ?? config.components.SegmentedTabs?.size ?? \"sm\";\n const mergedDisabled = disabled ?? config.components.SegmentedTabs?.disabled ?? config.disabled;\n const mergedAppearance = appearance ?? (type ? legacyTypeAppearance[type] : \"boxed\");\n const visualClass = appearanceClass[mergedAppearance];\n const hideLegacyThumb = mergedAppearance === \"plain\" && indicator === \"none\";\n\n return (\n <Segmented<T>\n {...segmentedProps}\n block={block ?? fullWidth}\n className={cn(\n \"hj-segmented-tabs\",\n `hj-segmented-tabs-${visualClass}`,\n animated === false && \"hj-segmented-tabs-no-motion\",\n hideLegacyThumb && \"hj-segmented-tabs-no-indicator\",\n segmentedProps.className,\n )}\n disabled={mergedDisabled}\n options={items.map(({ id, ...item }) => ({ ...item, value: id }))}\n shape={mergedAppearance === \"segmented\" ? \"round\" : \"default\"}\n size={mergedSize}\n />\n );\n}\n",
|
|
79
|
+
"import RcSlider from \"@rc-component/slider\";\nimport type { SliderProps as RcSliderProps, SliderRef as RcSliderRef } from \"@rc-component/slider\";\nimport type { CSSProperties, ForwardedRef, ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\nimport { Tooltip } from \"./Tooltip\";\nimport type { TooltipProps } from \"./Tooltip\";\n\nexport type SliderValue = number | number[];\nexport type SliderRef = RcSliderRef;\nexport type SliderMarks = RcSliderProps[\"marks\"];\nexport type SliderFormatter = ((value?: number) => ReactNode) | null;\nexport type SliderSemanticSlot = \"root\" | \"tracks\" | \"track\" | \"rail\" | \"handle\";\ntype SliderSemanticClassNameMap = Partial<Record<SliderSemanticSlot, string>>;\ntype SliderSemanticStyleMap = Partial<Record<SliderSemanticSlot, CSSProperties>>;\nexport type SliderClassNames =\n | SliderSemanticClassNameMap\n | ((info: { props: SliderProps<SliderValue> }) => SliderSemanticClassNameMap);\nexport type SliderStyles =\n | SliderSemanticStyleMap\n | ((info: { props: SliderProps<SliderValue> }) => SliderSemanticStyleMap);\n\nexport interface SliderTooltipProps extends Omit<TooltipProps, \"children\" | \"title\"> {\n readonly formatter?: SliderFormatter;\n}\n\nexport type SliderProps<ValueType extends SliderValue = number> = Omit<\n RcSliderProps<ValueType>,\n \"classNames\" | \"prefixCls\" | \"styles\"\n> & {\n readonly classNames?: SliderClassNames;\n readonly orientation?: \"horizontal\" | \"vertical\";\n readonly rootClassName?: string;\n readonly styles?: SliderStyles;\n readonly tooltip?: SliderTooltipProps;\n /** @deprecated Use `tooltip.formatter`. */\n readonly tipFormatter?: SliderFormatter;\n /** @deprecated Use `tooltip.getPopupContainer`. */\n readonly getTooltipPopupContainer?: SliderTooltipProps[\"getPopupContainer\"];\n /** @deprecated Use `tooltip.placement`. */\n readonly tooltipPlacement?: SliderTooltipProps[\"placement\"];\n /** @deprecated Use `tooltip.open`. */\n readonly tooltipVisible?: boolean;\n};\n\nexport type SliderRange = Exclude<NonNullable<RcSliderProps<number[]>[\"range\"]>, boolean>;\n\nexport type SliderSingleProps = SliderProps<number> & {\n readonly range?: false;\n};\n\nexport type SliderRangeProps = SliderProps<number[]> & {\n readonly range: true | SliderRange;\n};\n\nconst GenericRcSlider = RcSlider as <ValueType extends SliderValue>(\n props: RcSliderProps<ValueType> & RefAttributes<RcSliderRef>,\n) => ReactElement;\n\nfunction defaultFormatter(value?: number) {\n return value == null ? \"\" : String(value);\n}\n\nfunction resolveSemantic<Value>(\n value: Value | ((info: { props: SliderProps<SliderValue> }) => Value) | undefined,\n props: SliderProps<SliderValue>,\n): Value | undefined {\n return typeof value === \"function\"\n ? (value as (info: { props: SliderProps<SliderValue> }) => Value)({ props })\n : value;\n}\n\nfunction SliderInner(\n {\n className = \"\",\n classNames,\n disabled,\n getTooltipPopupContainer,\n handleRender: customHandleRender,\n max = 100,\n min = 0,\n orientation,\n rootClassName,\n step = 1,\n style,\n styles,\n tipFormatter,\n tooltip,\n tooltipPlacement,\n tooltipVisible,\n vertical,\n ...props\n }: SliderProps<SliderValue>,\n ref: ForwardedRef<RcSliderRef>,\n) {\n const config = useConfig();\n const mergedVertical = orientation ? orientation === \"vertical\" : vertical;\n const mergedDisabled = disabled ?? config.disabled;\n const semanticProps: SliderProps<SliderValue> = {\n ...props,\n className,\n disabled: mergedDisabled,\n max,\n min,\n orientation,\n rootClassName,\n step,\n style,\n tooltip,\n vertical: mergedVertical,\n };\n const mergedClassNames = resolveSemantic(classNames, semanticProps) ?? {};\n const mergedStyles = resolveSemantic(styles, semanticProps) ?? {};\n const {\n formatter = tipFormatter === undefined ? defaultFormatter : tipFormatter,\n getPopupContainer = getTooltipPopupContainer,\n open = tooltipVisible,\n placement = tooltipPlacement ?? (mergedVertical ? \"right\" : \"top\"),\n ...tooltipProps\n } = tooltip ?? {};\n const handleRender: NonNullable<RcSliderProps<SliderValue>[\"handleRender\"]> = (node, info) => {\n const handleNode = customHandleRender?.(node, info) ?? node;\n if (formatter === null) return handleNode;\n\n return (\n <Tooltip\n {...tooltipProps}\n className={cn(\"hj-slider-tooltip\", tooltipProps.className)}\n getPopupContainer={getPopupContainer}\n open={open}\n placement={placement}\n title={formatter(info.value)}\n trigger={tooltipProps.trigger ?? [\"hover\", \"focus\"]}\n >\n {handleNode}\n </Tooltip>\n );\n };\n\n return (\n <GenericRcSlider<SliderValue>\n {...props}\n className={cn(\"hj-slider-root\", rootClassName, mergedClassNames.root, className)}\n classNames={{\n handle: mergedClassNames.handle,\n rail: mergedClassNames.rail,\n track: mergedClassNames.track,\n tracks: mergedClassNames.tracks,\n }}\n disabled={mergedDisabled}\n handleRender={handleRender}\n max={max}\n min={min}\n prefixCls=\"hj-slider\"\n ref={ref}\n step={step}\n style={{ ...style, ...mergedStyles.root }}\n styles={{\n handle: mergedStyles.handle,\n rail: mergedStyles.rail,\n track: mergedStyles.track,\n tracks: mergedStyles.tracks,\n }}\n vertical={mergedVertical}\n />\n );\n}\n\ntype SliderComponent = {\n (props: SliderRangeProps & RefAttributes<RcSliderRef>): ReactElement;\n (props: SliderSingleProps & RefAttributes<RcSliderRef>): ReactElement;\n <ValueType extends SliderValue = number>(\n props: SliderProps<ValueType> & RefAttributes<RcSliderRef>,\n ): ReactElement;\n};\n\nconst InternalSlider = forwardRef(SliderInner);\nInternalSlider.displayName = \"Slider\";\n\nexport const Slider = InternalSlider as SliderComponent;\n",
|
|
80
|
+
"import type { ReactNode } from \"react\";\nimport { Text, Title } from \"./Typography\";\n\ninterface StatCardProps {\n readonly accent?: ReactNode;\n readonly className?: string;\n readonly label: ReactNode;\n readonly meta?: ReactNode;\n readonly value: ReactNode;\n}\n\nexport function StatCard({ accent, className = \"\", label, meta, value }: StatCardProps) {\n return (\n <div className={`rounded-[4px] border border-[#24303a] bg-[#151f29] p-3 ${className}`}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <Text as=\"div\" className=\"truncate\" variant=\"muted\">\n {label}\n </Text>\n <Title as=\"p\" className=\"mt-1 text-2xl\" variant=\"page\">\n {value}\n </Title>\n </div>\n {accent ? <div className=\"shrink-0 text-[#d6a84a]\">{accent}</div> : null}\n </div>\n {meta ? (\n <Text as=\"div\" className=\"mt-2 truncate\" variant=\"muted\">\n {meta}\n </Text>\n ) : null}\n </div>\n );\n}\n",
|
|
81
|
+
"import { useEvent } from \"@rc-component/util\";\nimport type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef, memo, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Skeleton } from \"./Skeleton\";\n\nexport type StatisticValue = number | string;\nexport type StatisticSemanticSlot =\n | \"root\"\n | \"header\"\n | \"title\"\n | \"content\"\n | \"value\"\n | \"prefix\"\n | \"suffix\";\n\nexport interface StatisticRef {\n readonly nativeElement: HTMLDivElement;\n}\n\nexport interface StatisticFormatConfig {\n readonly decimalSeparator?: string;\n readonly formatter?: StatisticFormatter;\n readonly groupSeparator?: string;\n readonly precision?: number;\n}\n\nexport type StatisticFormatter =\n | false\n | \"number\"\n | \"countdown\"\n | ((value: StatisticValue, config?: StatisticFormatConfig) => ReactNode);\n\nexport interface StatisticProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"prefix\" | \"title\">,\n StatisticFormatConfig {\n readonly loading?: boolean;\n readonly classNames?: Partial<Record<StatisticSemanticSlot, string>>;\n readonly prefix?: ReactNode;\n readonly rootClassName?: string;\n readonly styles?: Partial<Record<StatisticSemanticSlot, CSSProperties>>;\n readonly suffix?: ReactNode;\n readonly title?: ReactNode;\n readonly value?: StatisticValue;\n readonly valueRender?: (node: ReactNode) => ReactNode;\n /** @deprecated Use `styles.content` in AntD-compatible code. */\n readonly valueStyle?: CSSProperties;\n}\n\nexport type StatisticTimerType = \"countdown\" | \"countup\";\n\nexport interface StatisticTimerProps extends Omit<StatisticProps, \"onChange\"> {\n readonly format?: string;\n readonly onChange?: (value?: StatisticValue) => void;\n /** Called only when a countdown crosses its target time. */\n readonly onFinish?: () => void;\n readonly type: StatisticTimerType;\n}\n\nexport interface CountdownProps extends Omit<StatisticProps, \"onChange\"> {\n readonly format?: string;\n readonly onChange?: (value?: StatisticValue) => void;\n readonly onFinish?: () => void;\n}\n\nfunction formatStatistic(value: StatisticValue, config: StatisticFormatConfig): ReactNode {\n if (typeof config.formatter === \"function\") return config.formatter(value, config);\n\n const cells = String(value).match(/^(-?)(\\d*)(\\.(\\d+))?$/);\n if (!cells || String(value) === \"-\") return String(value);\n\n const negative = cells[1] ?? \"\";\n let integer = cells[2] || \"0\";\n let decimal = cells[4] || \"\";\n integer = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, config.groupSeparator ?? \",\");\n\n if (typeof config.precision === \"number\") {\n const precision = Math.max(0, config.precision);\n decimal = decimal.padEnd(precision, \"0\").slice(0, precision);\n }\n\n return `${negative}${integer}${decimal ? `${config.decimalSeparator ?? \".\"}${decimal}` : \"\"}`;\n}\n\nconst StatisticRoot = forwardRef<StatisticRef, StatisticProps>(function Statistic(\n {\n className = \"\",\n classNames,\n decimalSeparator = \".\",\n formatter,\n groupSeparator = \",\",\n loading = false,\n precision,\n prefix,\n rootClassName,\n style,\n styles,\n suffix,\n title,\n value = 0,\n valueRender,\n valueStyle,\n ...props\n },\n ref,\n) {\n const config: StatisticFormatConfig = { decimalSeparator, formatter, groupSeparator, precision };\n const formatted = formatStatistic(value, config);\n const valueNode = valueRender ? valueRender(formatted) : formatted;\n const nativeRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(\n ref,\n () => {\n const nativeElement = nativeRef.current;\n if (!nativeElement) throw new Error(\"Statistic ref is not mounted\");\n return { nativeElement };\n },\n [],\n );\n\n return (\n <div\n className={cn(\"hj-statistic min-w-0\", classNames?.root, rootClassName, className)}\n ref={nativeRef}\n style={{ ...styles?.root, ...style }}\n {...props}\n >\n {title != null ? (\n <div className={cn(\"hj-statistic-header\", classNames?.header)} style={styles?.header}>\n <div\n className={cn(\n \"hj-statistic-title mb-1 text-xs text-[var(--hj-color-web-muted)]\",\n classNames?.title,\n )}\n style={styles?.title}\n >\n {title}\n </div>\n </div>\n ) : null}\n {loading ? (\n <Skeleton.Input active size=\"small\" />\n ) : (\n <div\n className={cn(\n \"hj-statistic-content flex items-baseline gap-1 text-2xl font-semibold leading-none text-[var(--hj-color-web-foreground)]\",\n classNames?.content,\n )}\n style={{ ...valueStyle, ...styles?.content }}\n >\n {prefix != null ? (\n <span\n className={cn(\n \"hj-statistic-prefix text-base text-[var(--hj-color-web-muted)]\",\n classNames?.prefix,\n )}\n style={styles?.prefix}\n >\n {prefix}\n </span>\n ) : null}\n <span\n className={cn(\"hj-statistic-content-value\", classNames?.value)}\n style={styles?.value}\n >\n {valueNode}\n </span>\n {suffix != null ? (\n <span\n className={cn(\n \"hj-statistic-suffix text-sm text-[var(--hj-color-web-muted)]\",\n classNames?.suffix,\n )}\n style={styles?.suffix}\n >\n {suffix}\n </span>\n ) : null}\n </div>\n )}\n </div>\n );\n});\n\nconst timeUnits: readonly (readonly [string, number])[] = [\n [\"Y\", 1000 * 60 * 60 * 24 * 365],\n [\"M\", 1000 * 60 * 60 * 24 * 30],\n [\"D\", 1000 * 60 * 60 * 24],\n [\"H\", 1000 * 60 * 60],\n [\"m\", 1000 * 60],\n [\"s\", 1000],\n [\"S\", 1],\n];\n\nexport function formatStatisticTime(duration: number, format: string) {\n let remaining = duration;\n const escapedExpression = /\\[[^\\]]*]/g;\n const escapedText = (format.match(escapedExpression) ?? []).map((value) => value.slice(1, -1));\n const template = format.replace(escapedExpression, \"[]\");\n const formatted = timeUnits.reduce((current, [name, unit]) => {\n if (!current.includes(name)) return current;\n const value = Math.floor(remaining / unit);\n remaining -= value * unit;\n return current.replace(new RegExp(`${name}+`, \"g\"), (token) =>\n String(value).padStart(token.length, \"0\"),\n );\n }, template);\n let escapedIndex = 0;\n\n return formatted.replace(escapedExpression, () => {\n const value = escapedText[escapedIndex] ?? \"\";\n escapedIndex += 1;\n return value;\n });\n}\n\nfunction getTimestamp(value: StatisticValue | undefined) {\n if (typeof value === \"number\") return new Date(value).getTime();\n if (typeof value === \"string\") return new Date(value).getTime();\n return Number.NaN;\n}\n\nfunction formatCounter(value: StatisticValue, format: string, countdown: boolean) {\n const target = getTimestamp(value);\n const current = Date.now();\n const difference = countdown ? Math.max(target - current, 0) : Math.max(current - target, 0);\n return formatStatisticTime(difference, format);\n}\n\nconst TIMER_UPDATE_INTERVAL = 1000 / 60;\n\nfunction StatisticTimer({\n format = \"HH:mm:ss\",\n onChange,\n onFinish,\n type,\n value,\n ...props\n}: StatisticTimerProps) {\n const countdown = type === \"countdown\";\n const [showTime, setShowTime] = useState(false);\n const timerKey = `${type}:${typeof value}:${value ?? \"\"}`;\n const update = useEvent(() => {\n const now = Date.now();\n const timestamp = getTimestamp(value);\n const difference = countdown ? timestamp - now : now - timestamp;\n\n setShowTime(true);\n onChange?.(difference);\n if (countdown && timestamp < now) {\n onFinish?.();\n return false;\n }\n return true;\n });\n\n useEffect(() => {\n setShowTime(timerKey.length > 0);\n const intervalId = window.setInterval(() => {\n if (!update()) window.clearInterval(intervalId);\n }, TIMER_UPDATE_INTERVAL);\n return () => window.clearInterval(intervalId);\n }, [timerKey, update]);\n\n const timerFormatter: StatisticFormatter = (formatValue) =>\n showTime ? formatCounter(formatValue, format, countdown) : \"-\";\n\n return <StatisticRoot {...props} formatter={timerFormatter} value={value} />;\n}\n\nfunction StatisticCountdown(props: CountdownProps) {\n return <StatisticTimer {...props} type=\"countdown\" />;\n}\n\nconst Countdown = memo(StatisticCountdown);\n\nexport const Statistic = Object.assign(StatisticRoot, {\n /** @deprecated Use `Statistic.Timer` with `type=\"countdown\"`. */\n Countdown,\n Timer: StatisticTimer,\n});\n",
|
|
82
|
+
"import type { ReactNode } from \"react\";\nimport { ProgressBar } from \"./ProgressBar\";\n\ninterface StatusItemProps {\n readonly className?: string;\n readonly icon?: ReactNode;\n readonly label: string;\n readonly max?: number;\n readonly orientation?: \"column\" | \"row\";\n readonly progress?: number;\n readonly value: string;\n}\n\nexport function StatusItem({\n className = \"\",\n icon,\n label,\n max = 100,\n orientation,\n progress,\n value,\n}: StatusItemProps) {\n if (icon === undefined && orientation === undefined && progress === undefined) {\n return (\n <div\n className={`flex items-center justify-between gap-3 rounded-[4px] border border-[#24303a] bg-[#111923] px-3 py-2 ${className}`}\n >\n <dt className=\"text-[#6f7985]\">{label}</dt>\n <dd className=\"font-mono text-white\">{value}</dd>\n </div>\n );\n }\n\n const layoutClass = orientation === \"column\" ? \"flex-col text-center\" : \"items-center\";\n return (\n <div className={`flex gap-3 rounded-[4px] bg-[#151f29] p-3 ${layoutClass} ${className}`}>\n {icon ? <div className=\"shrink-0\">{icon}</div> : null}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate text-sm text-[#f2f4f6]\">{label}</span>\n <span className=\"shrink-0 text-xs text-[#a5adb8]\">{value}</span>\n </div>\n {progress === undefined ? null : (\n <ProgressBar className=\"mt-2\" max={max} value={progress} />\n )}\n </div>\n </div>\n );\n}\n",
|
|
83
|
+
"import RcSwitch from \"@rc-component/switch\";\nimport type { SwitchChangeEventHandler, SwitchClickEventHandler } from \"@rc-component/switch\";\nimport type { CSSProperties, ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport { useConfig } from \"../ConfigProvider\";\nimport { cn } from \"../utils/cn\";\n\nexport type SwitchStatus = \"default\" | \"hover\" | \"active\";\nexport type SwitchSize = \"small\" | \"medium\" | \"middle\" | \"default\";\nexport type SwitchSemanticSlot = \"root\" | \"content\" | \"indicator\";\ntype SwitchLegacySemanticSlot = SwitchSemanticSlot | \"thumb\";\nexport type SwitchClassNames =\n | Partial<Record<SwitchLegacySemanticSlot, string>>\n | ((info: { props: SwitchProps }) => Partial<Record<SwitchLegacySemanticSlot, string>>);\nexport type SwitchStyles =\n | Partial<Record<SwitchLegacySemanticSlot, CSSProperties>>\n | ((info: { props: SwitchProps }) => Partial<Record<SwitchLegacySemanticSlot, CSSProperties>>);\n\nexport type { SwitchChangeEventHandler, SwitchClickEventHandler };\n\nexport interface SwitchProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RcSwitch>,\n | \"checked\"\n | \"className\"\n | \"classNames\"\n | \"defaultChecked\"\n | \"defaultValue\"\n | \"disabled\"\n | \"loadingIcon\"\n | \"onChange\"\n | \"onClick\"\n | \"prefixCls\"\n | \"style\"\n | \"styles\"\n | \"value\"\n > {\n readonly checked?: boolean;\n readonly checkedChildren?: ReactNode;\n readonly className?: string;\n readonly classNames?: SwitchClassNames;\n readonly defaultChecked?: boolean;\n readonly defaultValue?: boolean;\n readonly disabled?: boolean;\n readonly loading?: boolean;\n /** @deprecated Prefer `loading`; this remains an additive 996 adapter. */\n readonly loadingIcon?: ReactNode;\n readonly rootClassName?: string;\n readonly size?: SwitchSize;\n readonly status?: SwitchStatus;\n readonly style?: CSSProperties;\n readonly styles?: SwitchStyles;\n readonly unCheckedChildren?: ReactNode;\n readonly value?: boolean;\n readonly onChange?: SwitchChangeEventHandler;\n readonly onClick?: SwitchClickEventHandler;\n}\n\nfunction resolveSemantic<Value>(\n value: Value | ((info: { props: SwitchProps }) => Value) | undefined,\n props: SwitchProps,\n): Value | undefined {\n return typeof value === \"function\"\n ? (value as (info: { props: SwitchProps }) => Value)({ props })\n : value;\n}\n\nconst InternalSwitch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n {\n checked,\n className = \"\",\n classNames,\n defaultChecked,\n defaultValue,\n disabled,\n loading = false,\n loadingIcon,\n rootClassName,\n size = \"default\",\n status = \"default\",\n style,\n styles,\n value,\n ...props\n },\n ref,\n) {\n const config = useConfig();\n const mergedChecked = checked ?? value;\n const mergedDefaultChecked = defaultChecked ?? defaultValue;\n const mergedDisabled =\n (disabled ?? config.components.Switch?.disabled ?? config.disabled) || loading;\n const mergedSize = size === \"small\" ? \"small\" : \"medium\";\n const semanticProps: SwitchProps = {\n ...props,\n checked: mergedChecked,\n defaultChecked: mergedDefaultChecked,\n disabled: mergedDisabled,\n loading,\n size,\n };\n const mergedClassNames = resolveSemantic(classNames, semanticProps) ?? {};\n const mergedStyles = resolveSemantic(styles, semanticProps) ?? {};\n const indicatorClassName = mergedClassNames.indicator ?? mergedClassNames.thumb;\n const indicatorStyle = mergedStyles.indicator ?? mergedStyles.thumb;\n const indicator = (\n <span\n aria-hidden=\"true\"\n className={cn(\"hj-switch-handle\", indicatorClassName, loading && \"hj-switch-loading-icon\")}\n style={indicatorStyle}\n >\n {loadingIcon ?? null}\n </span>\n );\n\n return (\n <RcSwitch\n {...props}\n aria-busy={loading || props[\"aria-busy\"]}\n checked={mergedChecked}\n className={cn(\n `hj-switch-${mergedSize}`,\n size === \"default\" && \"hj-switch-default\",\n loading && \"hj-switch-loading\",\n status !== \"default\" && `hj-switch-${status}`,\n rootClassName,\n mergedClassNames.root,\n className,\n )}\n classNames={{ content: mergedClassNames.content }}\n defaultChecked={mergedDefaultChecked}\n disabled={mergedDisabled}\n loadingIcon={indicator}\n prefixCls=\"hj-switch\"\n ref={ref}\n style={{ ...style, ...mergedStyles.root }}\n styles={{ content: mergedStyles.content }}\n />\n );\n});\n\nInternalSwitch.displayName = \"Switch\";\n\ntype SwitchComponent = typeof InternalSwitch & {\n /** @internal AntD-compatible marker used by compact/form integrations. */\n __ANT_SWITCH: boolean;\n};\n\nexport const Switch = InternalSwitch as SwitchComponent;\nSwitch.__ANT_SWITCH = true;\n",
|
|
84
|
+
"import RcTable, {\n Column as RcColumn,\n ColumnGroup as RcColumnGroup,\n EXPAND_COLUMN,\n INTERNAL_HOOKS,\n Summary,\n VirtualTable as RcVirtualTable,\n convertChildrenToColumns,\n} from \"@rc-component/table\";\nimport type {\n ColumnsType as RcColumnsType,\n TableProps as RcTableProps,\n Reference as RcTableReference,\n} from \"@rc-component/table\";\nimport { composeRef } from \"@rc-component/util\";\nimport type {\n CSSProperties,\n ForwardedRef,\n Key,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { forwardRef, useCallback, useMemo, useRef } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { useBreakpoint } from \"./Grid\";\nimport { Spin, type SpinProps } from \"./Spin\";\nimport { useColumnState } from \"./table/columnState\";\nimport {\n TablePaginationNode,\n getPageData,\n getTablePaginationPlacements,\n useTablePagination,\n} from \"./table/pagination\";\nimport {\n SELECTION_ALL,\n SELECTION_COLUMN,\n SELECTION_INVERT,\n SELECTION_NONE,\n useTableSelection,\n} from \"./table/selection\";\nimport type {\n ColumnsType,\n FilterValue,\n SortOrder,\n TableAction,\n TableChangeExtra,\n TableColumn,\n TableLocale,\n TablePaginationConfig,\n TableRowSelection,\n TableSorterResult,\n TableSorterTooltipProps,\n} from \"./table/types\";\n\nexport type {\n ColumnFilterItem,\n ColumnsType,\n FilterValue,\n RowSelectMethod,\n SortOrder,\n TableAction,\n TableChangeExtra,\n TableColumn,\n TableFilterDropdownProps,\n TableLocale,\n TablePaginationConfig,\n TablePaginationProps,\n TableRowSelection,\n TableSelectionItem,\n TableSelectionPreset,\n TableSorterResult,\n TableSorterTooltipProps,\n TableSorterTooltipTarget,\n} from \"./table/types\";\n\nexport type TableRef = RcTableReference;\n\nconst GenericRcTable = RcTable as <T>(\n props: RcTableProps<T> & RefAttributes<RcTableReference>,\n) => ReactElement;\nconst GenericRcVirtualTable = RcVirtualTable as <T>(\n props: RcTableProps<T> & RefAttributes<RcTableReference> & { readonly listItemHeight?: number },\n) => ReactElement;\n\ntype LegacyTableSlot =\n | \"root\"\n | \"table\"\n | \"thead\"\n | \"tbody\"\n | \"row\"\n | \"cell\"\n | \"pagination\"\n | \"empty\"\n | \"loading\";\ntype TableClassNames<T> = NonNullable<RcTableProps<T>[\"classNames\"]> &\n Partial<Record<LegacyTableSlot, string>>;\ntype TableStyles<T> = NonNullable<RcTableProps<T>[\"styles\"]> &\n Partial<Record<LegacyTableSlot, CSSProperties>>;\n\ntype ChangeSorter<T> = TableSorterResult<T> | TableSorterResult<T>[];\n\ninterface ChangeContext<T> {\n readonly currentDataSource: T[];\n readonly filters: Record<string, FilterValue | null>;\n readonly pagination: TablePaginationConfig;\n readonly sorter: ChangeSorter<T>;\n}\n\ninterface ChangeOverrides<T> {\n readonly currentDataSource?: T[];\n readonly filters?: Record<string, FilterValue | null>;\n readonly pagination?: TablePaginationConfig;\n readonly sorter?: ChangeSorter<T>;\n}\n\nconst defaultLocale: Required<TableLocale> = {\n cancelSort: \"取消排序\",\n emptyText: \"暂无数据\",\n filterCheckAll: \"全选\",\n filterConfirm: \"确定\",\n filterEmptyText: \"暂无筛选项\",\n filterReset: \"重置\",\n filterSearchPlaceholder: \"在筛选项中搜索\",\n selectAll: \"全选\",\n selectInvert: \"反选当前页\",\n selectNone: \"清空所有选择\",\n selectRow: (index) => `选择第 ${index + 1} 行`,\n selectionAll: \"全选所有数据\",\n sortTitle: \"可排序列\",\n triggerAsc: \"点击升序\",\n triggerDesc: \"点击降序\",\n};\nconst EMPTY_DATA: readonly never[] = [];\nconst DEFAULT_VIRTUAL_ITEM_HEIGHT = 45;\n\nexport interface TableProps<T>\n extends Omit<\n RcTableProps<T>,\n | \"className\"\n | \"classNames\"\n | \"columns\"\n | \"data\"\n | \"emptyText\"\n | \"footer\"\n | \"prefixCls\"\n | \"rowKey\"\n | \"scroll\"\n | \"style\"\n | \"styles\"\n | \"title\"\n > {\n readonly className?: string;\n readonly classNames?: TableClassNames<T>;\n readonly columns?: ColumnsType<T>;\n readonly data?: readonly T[];\n readonly dataSource?: readonly T[];\n readonly emptyText?: ReactNode | (() => ReactNode);\n readonly footer?: (data: readonly T[]) => ReactNode;\n readonly getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly hidePaginationWhenSinglePage?: boolean;\n readonly loading?: boolean | SpinProps;\n readonly loadingText?: string;\n readonly locale?: TableLocale;\n readonly minWidth?: string;\n readonly pagination?: false | TablePaginationConfig;\n readonly pageSizeOptions?: readonly number[];\n readonly rowKey?: keyof T | string | ((record: T, index: number) => Key);\n readonly rowSelection?: TableRowSelection<T>;\n readonly scroll?: NonNullable<RcTableProps<T>[\"scroll\"]> & {\n readonly scrollToFirstRowOnChange?: boolean;\n };\n readonly showSorterTooltip?: boolean | TableSorterTooltipProps;\n readonly sortDirections?: readonly Exclude<SortOrder, null>[];\n readonly style?: CSSProperties;\n readonly styles?: TableStyles<T>;\n readonly title?: (data: readonly T[]) => ReactNode;\n readonly truncate?: boolean;\n readonly virtual?: boolean;\n readonly onChange?: (\n pagination: TablePaginationConfig,\n filters: Record<string, FilterValue | null>,\n sorter: ChangeSorter<T>,\n extra: TableChangeExtra<T>,\n ) => void;\n}\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\nexport type TableColumnProps<T> = DistributiveOmit<TableColumn<T>, \"children\"> & {\n readonly children?: null;\n};\n\nexport type TableColumnGroupProps<T> = DistributiveOmit<TableColumn<T>, \"children\"> & {\n readonly children: ReactNode;\n};\n\nfunction getFallbackColumnKey<T>(column: TableColumn<T>, position: string) {\n if (column.key != null) return column.key;\n const dataIndex = \"dataIndex\" in column ? column.dataIndex : undefined;\n if (Array.isArray(dataIndex)) return dataIndex.join(\".\");\n if (dataIndex != null) return String(dataIndex);\n return `__hj_table_column_${position}`;\n}\n\nfunction resolveColumns<T>(\n columns: ColumnsType<T>,\n truncate: boolean | undefined,\n parent?: string,\n): ColumnsType<T> {\n return columns.map((column, index) => {\n if (column === EXPAND_COLUMN || column === SELECTION_COLUMN) return column;\n const position = parent ? `${parent}-${index}` : `${index}`;\n if (column.children?.length) {\n return {\n ...column,\n children: resolveColumns(column.children, truncate, position),\n key: getFallbackColumnKey(column, position),\n } as TableColumn<T>;\n }\n const resolvedColumn = {\n ...column,\n key: getFallbackColumnKey(column, position),\n } as TableColumn<T>;\n return truncate === true && column.ellipsis == null\n ? { ...resolvedColumn, ellipsis: true }\n : resolvedColumn;\n });\n}\n\nfunction resolveClassNames<T>(\n classNames: TableClassNames<T> | undefined,\n): RcTableProps<T>[\"classNames\"] {\n return {\n ...classNames,\n content: cn(classNames?.content, classNames?.table),\n header: {\n ...classNames?.header,\n wrapper: cn(classNames?.header?.wrapper, classNames?.thead),\n },\n body: {\n ...classNames?.body,\n wrapper: cn(classNames?.body?.wrapper, classNames?.tbody),\n row: cn(classNames?.body?.row, classNames?.row),\n cell: cn(classNames?.body?.cell, classNames?.cell),\n },\n };\n}\n\nfunction resolveStyles<T>(styles: TableStyles<T> | undefined): RcTableProps<T>[\"styles\"] {\n return {\n ...styles,\n content: { ...styles?.content, ...styles?.table },\n header: {\n ...styles?.header,\n wrapper: { ...styles?.header?.wrapper, ...styles?.thead },\n },\n body: {\n ...styles?.body,\n wrapper: { ...styles?.body?.wrapper, ...styles?.tbody },\n row: { ...styles?.body?.row, ...styles?.row },\n cell: { ...styles?.body?.cell, ...styles?.cell },\n },\n };\n}\n\nfunction hasNestedData<T>(data: readonly T[], childrenColumnName: string) {\n return data.some((record) => {\n if (record == null || typeof record !== \"object\") return false;\n return Array.isArray((record as Record<string, unknown>)[childrenColumnName]);\n });\n}\n\nfunction getPaginationParam(\n enabled: boolean,\n current: number,\n pageSize: number,\n mergedProps: TablePaginationConfig,\n pagination: false | TablePaginationConfig | undefined,\n): TablePaginationConfig {\n if (!enabled) return {};\n const result: TablePaginationConfig = { current, pageSize };\n if (!pagination || typeof pagination !== \"object\") return result;\n for (const key of Object.keys(pagination)) {\n const value = mergedProps[key as keyof TablePaginationConfig];\n if (typeof value !== \"function\") {\n (result as Record<string, unknown>)[key] = value;\n }\n }\n return result;\n}\n\nfunction InternalTable<T>(\n {\n children,\n className,\n classNames,\n columns,\n data,\n dataSource,\n emptyText,\n expandable,\n expandIconColumnIndex,\n footer,\n getPopupContainer,\n hidePaginationWhenSinglePage = false,\n loading = false,\n loadingText = \"加载中\",\n locale,\n minWidth,\n onChange,\n pageSizeOptions,\n pagination,\n rowClassName,\n rowKey,\n rowSelection,\n scroll,\n showSorterTooltip = { target: \"full-header\" },\n sortDirections,\n style,\n styles,\n title,\n truncate,\n virtual = false,\n childrenColumnName: legacyChildrenColumnName,\n ...props\n }: TableProps<T>,\n ref: ForwardedRef<RcTableReference>,\n) {\n const hasExplicitDataSource = data !== undefined || dataSource !== undefined;\n const source = (data ?? dataSource ?? EMPTY_DATA) as readonly T[];\n const tableRef = useRef<RcTableReference>(null);\n const mergedTableRef = useMemo(() => composeRef(ref, tableRef), [ref]);\n const sourceColumns = useMemo(\n () => columns ?? (convertChildrenToColumns<T>(children) as unknown as ColumnsType<T>),\n [children, columns],\n );\n const childrenColumnName =\n expandable?.childrenColumnName ?? legacyChildrenColumnName ?? \"children\";\n const mergedLocale = useMemo(() => ({ ...defaultLocale, ...locale }), [locale]);\n const resolvedColumns = useMemo(\n () => resolveColumns(sourceColumns, truncate),\n [sourceColumns, truncate],\n );\n const screens = useBreakpoint();\n const responsiveColumns = useMemo(\n () =>\n resolvedColumns.filter(\n (column) =>\n !column.responsive || column.responsive.some((breakpoint) => screens[breakpoint]),\n ),\n [resolvedColumns, screens],\n );\n const spinProps = useMemo<SpinProps>(() => {\n const merged =\n typeof loading === \"boolean\" ? { spinning: loading } : { spinning: true, ...loading };\n if (merged.spinning && merged.description == null && merged.tip == null && loadingText) {\n return { ...merged, tip: loadingText };\n }\n return merged;\n }, [loading, loadingText]);\n const spinning = spinProps.spinning === true;\n const getRowKey = useCallback(\n (record: T, index = 0): Key => {\n if (typeof rowKey === \"function\") return rowKey(record, index);\n const keyName = rowKey ?? \"key\";\n return (record as Record<PropertyKey, Key>)[keyName as PropertyKey];\n },\n [rowKey],\n );\n\n const changeContextRef = useRef<ChangeContext<T>>({\n currentDataSource: [...source],\n filters: {},\n pagination: { current: 1, pageSize: 10 },\n sorter: {},\n });\n const paginationResetRef = useRef<(current?: number, pageSize?: number) => void>(() => {});\n\n const triggerChange = useCallback(\n (action: TableAction, overrides: ChangeOverrides<T> = {}) => {\n const current = changeContextRef.current;\n const next: ChangeContext<T> = {\n currentDataSource: overrides.currentDataSource ?? current.currentDataSource,\n filters: overrides.filters ?? current.filters,\n pagination: overrides.pagination ?? current.pagination,\n sorter: Object.prototype.hasOwnProperty.call(overrides, \"sorter\")\n ? (overrides.sorter ?? {})\n : current.sorter,\n };\n changeContextRef.current = next;\n if (scroll && scroll.scrollToFirstRowOnChange !== false) {\n tableRef.current?.scrollTo({ top: 0 });\n }\n onChange?.(next.pagination, next.filters, next.sorter, {\n action,\n currentDataSource: next.currentDataSource,\n });\n },\n [onChange, scroll],\n );\n\n const resetForDataChange = useCallback(\n (action: \"filter\" | \"sort\", overrides: ChangeOverrides<T>) => {\n if (pagination === false) {\n triggerChange(action, { ...overrides, pagination: {} });\n return;\n }\n const currentPagination = changeContextRef.current.pagination;\n const pageSize = currentPagination.pageSize ?? 10;\n paginationResetRef.current(1, pageSize);\n if (pagination && typeof pagination === \"object\") pagination.onChange?.(1, pageSize);\n triggerChange(action, {\n ...overrides,\n pagination: { ...currentPagination, current: 1, pageSize },\n });\n },\n [pagination, triggerChange],\n );\n const handleSorterChange = useCallback(\n (sorter: ChangeSorter<T>, currentDataSource: T[]) => {\n resetForDataChange(\"sort\", { currentDataSource, sorter });\n },\n [resetForDataChange],\n );\n const handleFilterChange = useCallback(\n (filters: Record<string, FilterValue | null>, currentDataSource: readonly T[]) => {\n resetForDataChange(\"filter\", { currentDataSource: [...currentDataSource], filters });\n },\n [resetForDataChange],\n );\n\n const columnState = useColumnState({\n baseColumns: resolvedColumns,\n childrenColumnName,\n columns: responsiveColumns,\n data: source,\n getPopupContainer,\n locale: mergedLocale,\n onFilterChange: handleFilterChange,\n onSorterChange: handleSorterChange,\n showSorterTooltip,\n sortDirections,\n });\n const handlePaginationChange = useCallback(\n (current: number, pageSize: number) => {\n triggerChange(\"paginate\", {\n pagination: { ...changeContextRef.current.pagination, current, pageSize },\n });\n },\n [triggerChange],\n );\n const mergedPagination = useTablePagination({\n hidePaginationWhenSinglePage,\n onChange: handlePaginationChange,\n pageSizeOptions,\n pagination,\n total: columnState.filteredData.length,\n });\n const pageData = getPageData(columnState.filteredData, mergedPagination);\n const selection = useTableSelection({\n childrenColumnName,\n data: columnState.filteredData,\n getPopupContainer,\n getRowKey,\n locale: mergedLocale,\n pageData,\n rowSelection,\n sourceData: source,\n });\n const paginationParam = getPaginationParam(\n mergedPagination.enabled,\n mergedPagination.current,\n mergedPagination.pageSize,\n mergedPagination.props,\n pagination,\n );\n\n paginationResetRef.current = mergedPagination.reset;\n changeContextRef.current = {\n currentDataSource: columnState.filteredData,\n filters: columnState.filters,\n pagination: paginationParam,\n sorter: columnState.sorter,\n };\n\n const transformColumns = useCallback(\n (innerColumns: RcColumnsType<T>) =>\n selection.transformColumns(columnState.transformColumns(innerColumns)),\n [columnState.transformColumns, selection.transformColumns],\n );\n const mergedRowClassName = useCallback(\n (record: T, index: number, indent: number) =>\n cn(\n selection.selectedKeySet.has(getRowKey(record, index)) && \"hj-table-row-selected\",\n typeof rowClassName === \"function\" ? rowClassName(record, index, indent) : rowClassName,\n ),\n [getRowKey, rowClassName, selection.selectedKeySet],\n );\n const mergedExpandable = useMemo(() => {\n let iconColumnIndex = expandable?.expandIconColumnIndex ?? expandIconColumnIndex;\n if (hasNestedData(source, childrenColumnName) && iconColumnIndex === undefined) {\n iconColumnIndex = rowSelection ? 1 : 0;\n } else if (iconColumnIndex !== undefined && iconColumnIndex > 0 && rowSelection) {\n iconColumnIndex -= 1;\n }\n return iconColumnIndex === undefined\n ? expandable\n : { ...expandable, expandIconColumnIndex: iconColumnIndex };\n }, [childrenColumnName, expandIconColumnIndex, expandable, rowSelection, source]);\n const mergedScroll = useMemo<RcTableProps<T>[\"scroll\"]>(() => {\n if (!scroll) return minWidth == null ? undefined : { x: minWidth };\n const { scrollToFirstRowOnChange: _scrollToFirstRowOnChange, ...rcScroll } = scroll;\n void _scrollToFirstRowOnChange;\n return minWidth != null && rcScroll.x == null ? { ...rcScroll, x: minWidth } : rcScroll;\n }, [minWidth, scroll]);\n const paginationPlacements = getTablePaginationPlacements(mergedPagination.props);\n const renderEmpty = () => {\n if (spinning && !hasExplicitDataSource) return null;\n const content = emptyText ?? mergedLocale.emptyText;\n return (\n <span className={classNames?.empty} style={styles?.empty}>\n {typeof content === \"function\" ? content() : content}\n </span>\n );\n };\n\n const rcTableProps: RcTableProps<T> = {\n ...props,\n childrenColumnName,\n classNames: resolveClassNames(classNames),\n columns: responsiveColumns as RcColumnsType<T>,\n data: pageData,\n emptyText: renderEmpty,\n expandable: mergedExpandable,\n footer,\n internalHooks: INTERNAL_HOOKS,\n rowClassName: mergedRowClassName,\n rowKey: getRowKey,\n scroll: mergedScroll,\n styles: resolveStyles(styles),\n title,\n transformColumns,\n };\n const tableNode = virtual ? (\n <GenericRcVirtualTable<T>\n {...rcTableProps}\n listItemHeight={DEFAULT_VIRTUAL_ITEM_HEIGHT}\n prefixCls=\"hj-table\"\n ref={mergedTableRef}\n />\n ) : (\n <GenericRcTable<T> {...rcTableProps} prefixCls=\"hj-table\" ref={mergedTableRef} />\n );\n\n return (\n <div\n className={cn(\"hj-table-root\", spinning && \"hj-table-loading\", classNames?.root, className)}\n style={{ ...styles?.root, ...style }}\n >\n <Spin\n {...spinProps}\n className={cn(spinProps.className, classNames?.loading)}\n style={{ ...styles?.loading, ...spinProps.style }}\n >\n {paginationPlacements.top ? (\n <TablePaginationNode\n alignment={paginationPlacements.top}\n className={classNames?.pagination}\n pagination={mergedPagination}\n style={styles?.pagination}\n />\n ) : null}\n {tableNode}\n {paginationPlacements.bottom ? (\n <TablePaginationNode\n alignment={paginationPlacements.bottom}\n className={classNames?.pagination}\n pagination={mergedPagination}\n style={styles?.pagination}\n />\n ) : null}\n </Spin>\n </div>\n );\n}\n\ntype TableComponent = (<T>(\n props: TableProps<T> & RefAttributes<RcTableReference>,\n) => ReactElement) & {\n Column: <T>(props: TableColumnProps<T>) => ReactElement | null;\n ColumnGroup: <T>(props: TableColumnGroupProps<T>) => ReactElement | null;\n EXPAND_COLUMN: typeof EXPAND_COLUMN;\n SELECTION_ALL: typeof SELECTION_ALL;\n SELECTION_COLUMN: typeof SELECTION_COLUMN;\n SELECTION_INVERT: typeof SELECTION_INVERT;\n SELECTION_NONE: typeof SELECTION_NONE;\n Summary: typeof Summary;\n displayName?: string;\n};\n\nexport const Table = forwardRef(InternalTable) as unknown as TableComponent;\n\nTable.Column = RcColumn as TableComponent[\"Column\"];\nTable.ColumnGroup = RcColumnGroup as TableComponent[\"ColumnGroup\"];\nTable.EXPAND_COLUMN = EXPAND_COLUMN;\nTable.SELECTION_ALL = SELECTION_ALL;\nTable.SELECTION_COLUMN = SELECTION_COLUMN;\nTable.SELECTION_INVERT = SELECTION_INVERT;\nTable.SELECTION_NONE = SELECTION_NONE;\nTable.Summary = Summary;\nTable.displayName = \"Table\";\n",
|
|
85
|
+
"import RcCheckbox from \"@rc-component/checkbox\";\nimport RcDropdown from \"@rc-component/dropdown\";\nimport { EXPAND_COLUMN, type ColumnsType as RcColumnsType } from \"@rc-component/table\";\nimport RcTree from \"@rc-component/tree\";\nimport type { HTMLAttributes, Key, ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Input } from \"../Input\";\nimport { Tooltip } from \"../Tooltip\";\nimport { SELECTION_COLUMN } from \"./selection\";\nimport type {\n ColumnFilterItem,\n ColumnsType,\n FilterValue,\n SortOrder,\n TableColumn,\n TableColumnTitleProps,\n TableLocale,\n TableSorterResult,\n TableSorterTooltipProps,\n} from \"./types\";\n\ninterface SortState<T> {\n readonly column: TableColumn<T>;\n readonly key: Key;\n readonly multiplePriority: number | false;\n readonly order: SortOrder;\n}\n\ninterface FilterState<T> {\n readonly column: TableColumn<T>;\n readonly filteredKeys?: FilterValue | null;\n readonly key: Key;\n}\n\ninterface ColumnStateOptions<T> {\n readonly baseColumns?: ColumnsType<T>;\n readonly childrenColumnName: string;\n readonly columns: ColumnsType<T>;\n readonly data: readonly T[];\n readonly getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly locale: TableLocale;\n readonly onFilterChange: (\n filters: Record<string, FilterValue | null>,\n currentDataSource: readonly T[],\n ) => void;\n readonly onSorterChange: (\n sorter: TableSorterResult<T> | TableSorterResult<T>[],\n currentDataSource: T[],\n ) => void;\n readonly sortDirections?: readonly Exclude<SortOrder, null>[];\n readonly showSorterTooltip?: boolean | TableSorterTooltipProps;\n}\n\ninterface ColumnStateResult<T> {\n readonly filteredData: T[];\n readonly filters: Record<string, FilterValue | null>;\n readonly sorter: TableSorterResult<T> | TableSorterResult<T>[];\n readonly transformColumns: (columns: RcColumnsType<T>) => RcColumnsType<T>;\n}\n\nconst hasOwn = (value: object, key: PropertyKey) =>\n Object.prototype.hasOwnProperty.call(value, key);\n\nfunction getColumnPos(index: number, parent?: string) {\n return parent ? `${parent}-${index}` : `${index}`;\n}\n\nfunction getColumnKey<T>(column: TableColumn<T>, fallback: string): Key {\n if (column.key != null) return column.key;\n const dataIndex = \"dataIndex\" in column ? column.dataIndex : undefined;\n if (Array.isArray(dataIndex)) return dataIndex.join(\".\");\n if (dataIndex != null) return String(dataIndex);\n return fallback;\n}\n\nfunction visitColumns<T>(\n columns: ColumnsType<T>,\n visitor: (column: TableColumn<T>, position: string) => boolean | undefined,\n parent?: string,\n): boolean {\n for (let index = 0; index < columns.length; index += 1) {\n const column = columns[index];\n const position = getColumnPos(index, parent);\n if (visitor(column, position)) return true;\n if (column.children?.length && visitColumns(column.children, visitor, position)) return true;\n }\n return false;\n}\n\nfunction getMultiplePriority<T>(column: TableColumn<T>): number | false {\n const sorter = column.sorter;\n return sorter && typeof sorter === \"object\" && typeof sorter.multiple === \"number\"\n ? sorter.multiple\n : false;\n}\n\nfunction collectSortStates<T>(\n columns: ColumnsType<T>,\n initialize: boolean,\n parent?: string,\n): SortState<T>[] {\n const states: SortState<T>[] = [];\n for (let index = 0; index < columns.length; index += 1) {\n const column = columns[index];\n const position = getColumnPos(index, parent);\n if (column.children?.length) {\n if (hasOwn(column, \"sortOrder\")) {\n states.push({\n column,\n key: getColumnKey(column, position),\n multiplePriority: getMultiplePriority(column),\n order: column.sortOrder ?? null,\n });\n }\n states.push(...collectSortStates(column.children, initialize, position));\n continue;\n }\n\n if (!column.sorter) continue;\n if (hasOwn(column, \"sortOrder\")) {\n states.push({\n column,\n key: getColumnKey(column, position),\n multiplePriority: getMultiplePriority(column),\n order: column.sortOrder ?? null,\n });\n } else if (initialize && column.defaultSortOrder) {\n states.push({\n column,\n key: getColumnKey(column, position),\n multiplePriority: getMultiplePriority(column),\n order: column.defaultSortOrder,\n });\n }\n }\n return states;\n}\n\nfunction getColumnsByKey<T>(columns: ColumnsType<T>, parent?: string) {\n const result = new Map<Key, TableColumn<T>>();\n for (let index = 0; index < columns.length; index += 1) {\n const column = columns[index];\n const position = getColumnPos(index, parent);\n result.set(getColumnKey(column, position), column);\n if (column.children?.length) {\n for (const [key, child] of getColumnsByKey(column.children, position)) result.set(key, child);\n }\n }\n return result;\n}\n\nfunction getSortFunction<T>(sorter: TableColumn<T>[\"sorter\"]) {\n if (typeof sorter === \"function\") return sorter;\n if (sorter && typeof sorter === \"object\" && typeof sorter.compare === \"function\") {\n return sorter.compare;\n }\n return undefined;\n}\n\nfunction getChildRecords<T>(record: T, childrenColumnName: string): readonly T[] | undefined {\n if (record == null || typeof record !== \"object\") return undefined;\n const children = (record as Record<string, unknown>)[childrenColumnName];\n return Array.isArray(children) ? (children as readonly T[]) : undefined;\n}\n\nfunction withChildRecords<T>(record: T, childrenColumnName: string, children: T[]): T {\n if (record == null || typeof record !== \"object\") return record;\n return { ...record, [childrenColumnName]: children };\n}\n\nexport function getSortData<T>(\n data: readonly T[],\n sortStates: readonly SortState<T>[],\n childrenColumnName: string,\n): T[] {\n const runningSorters = sortStates\n .slice()\n .sort((left, right) => Number(right.multiplePriority) - Number(left.multiplePriority))\n .filter((state) => state.order && getSortFunction(state.column.sorter));\n const ordered = data.slice();\n\n if (runningSorters.length) {\n ordered.sort((left, right) => {\n for (const state of runningSorters) {\n const compare = getSortFunction(state.column.sorter);\n if (!compare || !state.order) continue;\n const result = compare(left, right, state.order);\n if (result !== 0) return state.order === \"ascend\" ? result : -result;\n }\n return 0;\n });\n }\n\n return ordered.map((record) => {\n const children = getChildRecords(record, childrenColumnName);\n return children\n ? withChildRecords(\n record,\n childrenColumnName,\n getSortData(children, sortStates, childrenColumnName),\n )\n : record;\n });\n}\n\nfunction flattenFilterValues(filters?: readonly ColumnFilterItem[]): FilterValue {\n const values: FilterValue = [];\n for (const filter of filters ?? []) {\n values.push(filter.value);\n if (filter.children?.length) values.push(...flattenFilterValues(filter.children));\n }\n return values;\n}\n\nfunction normalizeFilterKeys<T>(\n column: TableColumn<T>,\n keys: readonly (Key | boolean)[] | null | undefined,\n): FilterValue | null | undefined {\n if (keys == null) return keys;\n if (column.filterDropdown) return [...keys];\n return keys.map((key) => String(key));\n}\n\nfunction collectInitialFilterKeys<T>(columns: ColumnsType<T>) {\n const initial: Record<string, FilterValue | null | undefined> = {};\n visitColumns(columns, (column, position) => {\n const filterable =\n Boolean(column.filters) || column.filterDropdown !== undefined || hasOwn(column, \"onFilter\");\n if (!filterable || column.defaultFilteredValue === undefined) return;\n initial[String(getColumnKey(column, position))] = normalizeFilterKeys(\n column,\n column.defaultFilteredValue,\n );\n });\n return initial;\n}\n\nfunction collectFilterStates<T>(\n columns: ColumnsType<T>,\n innerFilterKeys: Record<string, FilterValue | null | undefined>,\n) {\n const states: FilterState<T>[] = [];\n visitColumns(columns, (column, position) => {\n const filterable =\n Boolean(column.filters) || column.filterDropdown !== undefined || hasOwn(column, \"onFilter\");\n if (!filterable) return;\n\n const key = getColumnKey(column, position);\n const keyString = String(key);\n const filteredKeys = hasOwn(column, \"filteredValue\")\n ? normalizeFilterKeys(column, column.filteredValue)\n : innerFilterKeys[keyString];\n states.push({ column, filteredKeys, key });\n });\n return states;\n}\n\nfunction getFilterInfo<T>(states: readonly FilterState<T>[]) {\n const result: Record<string, FilterValue | null> = {};\n for (const { column, filteredKeys, key } of states) {\n if (column.filterDropdown) {\n result[String(key)] = filteredKeys?.length ? [...filteredKeys] : null;\n continue;\n }\n\n if (!filteredKeys) {\n result[String(key)] = null;\n continue;\n }\n\n const selected = new Set(filteredKeys.map(String));\n result[String(key)] = flattenFilterValues(column.filters).filter((value) =>\n selected.has(String(value)),\n );\n }\n return result;\n}\n\nexport function getFilterData<T>(\n data: readonly T[],\n filterStates: readonly FilterState<T>[],\n childrenColumnName: string,\n): T[] {\n return filterStates.reduce<T[]>((currentData, state) => {\n const { column, filteredKeys } = state;\n if (!column.onFilter || !filteredKeys?.length) return currentData;\n\n const originalValues = flattenFilterValues(column.filters);\n const originalByString = new Map(originalValues.map((value) => [String(value), value]));\n const realKeys = filteredKeys.map((key) => originalByString.get(String(key)) ?? key);\n\n return currentData.reduce<T[]>((records, record) => {\n const children = getChildRecords(record, childrenColumnName);\n const candidate = children\n ? withChildRecords(\n record,\n childrenColumnName,\n getFilterData(children, filterStates, childrenColumnName),\n )\n : record;\n if (realKeys.some((key) => column.onFilter?.(key, candidate))) records.push(candidate);\n return records;\n }, []);\n }, data.slice());\n}\n\nfunction stateToSorterResult<T>(state: SortState<T>): TableSorterResult<T> {\n return {\n column: state.column,\n columnKey: state.key,\n field: (\"dataIndex\" in state.column ? state.column.dataIndex : undefined) as\n | Key\n | readonly Key[]\n | undefined,\n order: state.order,\n };\n}\n\nfunction generateSorterInfo<T>(\n states: readonly SortState<T>[],\n): TableSorterResult<T> | TableSorterResult<T>[] {\n const activeSorters = states\n .filter((state) => state.order)\n .map((state) => stateToSorterResult(state));\n\n if (!activeSorters.length && states.length) {\n const legacy = stateToSorterResult(states[states.length - 1]);\n return {\n ...legacy,\n column: undefined,\n columnKey: undefined,\n field: undefined,\n order: undefined,\n };\n }\n return activeSorters.length <= 1 ? (activeSorters[0] ?? {}) : activeSorters;\n}\n\nfunction nextSortOrder(\n directions: readonly Exclude<SortOrder, null>[],\n current: SortOrder | undefined,\n) {\n if (!current) return directions[0] ?? null;\n return directions[directions.indexOf(current) + 1] ?? null;\n}\n\nfunction renderColumnTitle<T>(title: TableColumn<T>[\"title\"], props: TableColumnTitleProps<T>) {\n return typeof title === \"function\" ? title(props) : title;\n}\n\nfunction titleToString(title: ReactNode) {\n return typeof title === \"string\" || typeof title === \"number\" ? String(title) : undefined;\n}\n\nfunction DefaultSorterIcon({ order }: { readonly order: SortOrder | null }) {\n return (\n <span className=\"hj-table-column-sorter\" aria-hidden=\"true\">\n <span className=\"hj-table-column-sorter-inner\">\n <span className={cn(\"hj-table-column-sorter-up\", order === \"ascend\" && \"active\")}>\n {\"\\u2191\"}\n </span>\n <span className={cn(\"hj-table-column-sorter-down\", order === \"descend\" && \"active\")}>\n {\"\\u2193\"}\n </span>\n </span>\n </span>\n );\n}\n\nfunction keysEqual(left: readonly (Key | boolean)[], right: readonly (Key | boolean)[]) {\n return (\n left.length === right.length && left.every((key, index) => String(key) === String(right[index]))\n );\n}\n\nfunction flattenFilterItems(\n filters: readonly ColumnFilterItem[],\n depth = 0,\n): Array<{ readonly filter: ColumnFilterItem; readonly depth: number }> {\n return filters.flatMap((filter) => [\n { filter, depth },\n ...flattenFilterItems(filter.children ?? [], depth + 1),\n ]);\n}\n\nfunction filterTextMatches(input: string, text: ReactNode) {\n return (\n (typeof text === \"string\" || typeof text === \"number\") &&\n String(text).toLowerCase().includes(input)\n );\n}\n\nfunction filterItemMatches(\n input: string,\n filter: ColumnFilterItem,\n filterSearch: TableColumn<unknown>[\"filterSearch\"],\n) {\n if (!input) return true;\n return typeof filterSearch === \"function\"\n ? filterSearch(input, filter)\n : filterTextMatches(input, filter.text);\n}\n\nfunction getSearchedFilterItems(\n filters: readonly ColumnFilterItem[],\n searchValue: string,\n filterSearch: TableColumn<unknown>[\"filterSearch\"],\n depth = 0,\n): Array<{ readonly filter: ColumnFilterItem; readonly depth: number }> {\n const result: Array<{ readonly filter: ColumnFilterItem; readonly depth: number }> = [];\n for (const filter of filters) {\n const children = getSearchedFilterItems(\n filter.children ?? [],\n searchValue,\n filterSearch,\n depth + 1,\n );\n if (filterItemMatches(searchValue, filter, filterSearch) || children.length) {\n result.push({ filter, depth }, ...children);\n }\n }\n return result;\n}\n\ninterface FilterTreeNode {\n readonly children?: FilterTreeNode[];\n readonly filter: ColumnFilterItem;\n readonly key: string;\n readonly title: ReactNode;\n}\n\nfunction getFilterTreeData(filters: readonly ColumnFilterItem[]): FilterTreeNode[] {\n return filters.map((filter) => ({\n children: filter.children?.length ? getFilterTreeData(filter.children) : undefined,\n filter,\n key: String(filter.value),\n title: filter.text,\n }));\n}\n\ninterface FilterDropdownProps<T> {\n readonly children: ReactNode;\n readonly column: TableColumn<T>;\n readonly columnKey: Key;\n readonly filterState?: FilterState<T>;\n readonly getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly locale: TableLocale;\n readonly triggerFilter: (state: FilterState<T>) => void;\n}\n\nfunction FilterDropdown<T>({\n children,\n column,\n columnKey,\n filterState,\n getPopupContainer,\n locale,\n triggerFilter,\n}: FilterDropdownProps<T>) {\n const [innerOpen, setInnerOpen] = useState(false);\n const [selectedKeys, setSelectedKeys] = useState<FilterValue>(() => [\n ...(filterState?.filteredKeys ?? []),\n ]);\n const [searchValue, setSearchValue] = useState(\"\");\n const control = column.filterDropdownProps;\n const open = control?.open ?? innerOpen;\n const filtered = Boolean(filterState?.filteredKeys?.length || column.filtered);\n const resetKeys = column.filterResetToDefaultFilteredValue\n ? (column.defaultFilteredValue ?? []).map((key) => String(key))\n : [];\n\n useEffect(() => {\n if (open) {\n setSelectedKeys([...(filterState?.filteredKeys ?? [])]);\n } else {\n setSearchValue(\"\");\n }\n }, [filterState?.filteredKeys, open]);\n\n const setOpen = (nextOpen: boolean) => {\n if (control?.open === undefined) setInnerOpen(nextOpen);\n control?.onOpenChange?.(nextOpen);\n };\n\n const commit = (keys: FilterValue) => {\n const current = filterState?.filteredKeys ?? [];\n if (keysEqual(current, keys)) return;\n triggerFilter({\n column,\n filteredKeys: keys.length ? [...keys] : null,\n key: columnKey,\n });\n };\n\n const confirm = ({ closeDropdown = true }: { readonly closeDropdown?: boolean } = {}) => {\n commit(selectedKeys);\n if (closeDropdown) setOpen(false);\n };\n\n const clearFilters = ({\n closeDropdown = false,\n confirm: shouldConfirm = false,\n }: {\n readonly closeDropdown?: boolean;\n readonly confirm?: boolean;\n } = {}) => {\n setSelectedKeys(resetKeys);\n setSearchValue(\"\");\n if (shouldConfirm) commit(resetKeys);\n if (closeDropdown) setOpen(false);\n };\n\n const handleVisibleChange = (nextOpen: boolean) => {\n if (!nextOpen && column.filterOnClose !== false && !column.filterDropdown) {\n commit(selectedKeys);\n }\n setOpen(nextOpen);\n };\n\n const toggleFilter = (value: Key | boolean, checked: boolean) => {\n const stringValue = String(value);\n if (column.filterMultiple === false) {\n setSelectedKeys(checked ? [stringValue] : []);\n return;\n }\n setSelectedKeys((current) => {\n const next = current.filter((key) => String(key) !== stringValue);\n if (checked) next.push(stringValue);\n return next;\n });\n };\n\n let content: ReactNode;\n if (typeof column.filterDropdown === \"function\") {\n content = column.filterDropdown({\n close: () => setOpen(false),\n confirm,\n clearFilters,\n filters: column.filters,\n prefixCls: \"hj-table-filter-custom\",\n selectedKeys: [...selectedKeys] as Key[],\n setSelectedKeys: (keys) => setSelectedKeys([...keys]),\n visible: open,\n });\n } else if (column.filterDropdown) {\n content = column.filterDropdown;\n } else {\n const normalizedSearchValue = searchValue.trim().toLowerCase();\n const filterSearch = column.filterSearch ?? false;\n const allFilterKeys = flattenFilterValues(column.filters).map((key) => String(key));\n const items = filterSearch\n ? getSearchedFilterItems(\n column.filters ?? [],\n normalizedSearchValue,\n filterSearch as TableColumn<unknown>[\"filterSearch\"],\n )\n : flattenFilterItems(column.filters ?? []);\n const searchNode = filterSearch ? (\n <div className=\"hj-table-filter-dropdown-search\">\n <Input\n aria-label={locale.filterSearchPlaceholder ?? \"在筛选项中搜索\"}\n className=\"hj-table-filter-dropdown-search-input\"\n htmlSize={1}\n name={`table-filter-${String(columnKey)}`}\n placeholder={locale.filterSearchPlaceholder ?? \"在筛选项中搜索\"}\n size=\"small\"\n value={searchValue}\n onChange={(event) => setSearchValue(event.target.value)}\n />\n </div>\n ) : null;\n const emptyNode = (\n <span className=\"hj-table-filter-dropdown-empty\">\n {locale.filterEmptyText ?? \"暂无筛选项\"}\n </span>\n );\n const filterItems =\n column.filterMode === \"tree\" ? (\n <>\n {column.filterMultiple !== false ? (\n <Checkbox\n checked={allFilterKeys.length > 0 && selectedKeys.length === allFilterKeys.length}\n className=\"hj-table-filter-dropdown-checkall\"\n indeterminate={selectedKeys.length > 0 && selectedKeys.length < allFilterKeys.length}\n label={locale.filterCheckAll ?? \"全选\"}\n skipGroup\n onChange={(event) => setSelectedKeys(event.target.checked ? allFilterKeys : [])}\n />\n ) : null}\n <RcTree<FilterTreeNode>\n autoExpandParent\n checkStrictly={column.filterMultiple === false}\n checkable\n checkedKeys={selectedKeys.map((key) => String(key))}\n className=\"hj-dropdown-menu hj-table-filter-dropdown-tree\"\n defaultExpandAll\n filterTreeNode={\n normalizedSearchValue\n ? (node) =>\n filterItemMatches(\n typeof filterSearch === \"function\" ? searchValue : normalizedSearchValue,\n node.filter,\n filterSearch as TableColumn<unknown>[\"filterSearch\"],\n )\n : undefined\n }\n multiple={column.filterMultiple !== false}\n prefixCls=\"hj-tree\"\n selectable={false}\n selectedKeys={selectedKeys.map((key) => String(key))}\n treeData={getFilterTreeData(column.filters ?? [])}\n onCheck={(checked, info) => {\n if (column.filterMultiple === false) {\n setSelectedKeys(info.checked ? [String(info.node.key)] : []);\n return;\n }\n const checkedKeys = Array.isArray(checked) ? checked : checked.checked;\n setSelectedKeys(checkedKeys.map((key) => String(key)));\n }}\n />\n </>\n ) : (\n <div className=\"hj-table-filter-dropdown-list\">\n {items.length\n ? items.map(({ depth, filter }, index) => {\n const checked = selectedKeys.some(\n (selectedKey) => String(selectedKey) === String(filter.value),\n );\n const inputId = `hj-table-filter-${String(columnKey)}-${index}`;\n return (\n <label\n className=\"hj-checkbox-label hj-table-filter-dropdown-item\"\n htmlFor={inputId}\n key={`${String(filter.value)}-${index}`}\n style={{ paddingInlineStart: 8 + depth * 16 }}\n >\n <RcCheckbox\n checked={checked}\n id={inputId}\n prefixCls=\"hj-checkbox\"\n type={column.filterMultiple === false ? \"radio\" : \"checkbox\"}\n onChange={(event) => toggleFilter(filter.value, event.target.checked)}\n />\n <span className=\"hj-checkbox-text\">{filter.text}</span>\n </label>\n );\n })\n : emptyNode}\n </div>\n );\n content = (\n <>\n {searchNode}\n {column.filters?.length ? filterItems : emptyNode}\n <div\n className=\"hj-table-filter-dropdown-btns\"\n style={{ display: \"flex\", gap: 8, justifyContent: \"space-between\", paddingTop: 8 }}\n >\n <Button\n disabled={keysEqual(selectedKeys, resetKeys)}\n size=\"xs\"\n type=\"link\"\n onClick={() => clearFilters()}\n >\n {locale.filterReset ?? \"重置\"}\n </Button>\n <Button size=\"xs\" type=\"primary\" onClick={() => confirm()}>\n {locale.filterConfirm ?? \"确定\"}\n </Button>\n </div>\n </>\n );\n }\n\n const overlay = (\n <div\n className=\"hj-menu hj-table-filter-dropdown\"\n style={{ minWidth: 160 }}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {content}\n </div>\n );\n\n const icon =\n typeof column.filterIcon === \"function\"\n ? column.filterIcon(filtered)\n : (column.filterIcon ?? <span aria-hidden=\"true\">{\"\\u25BC\"}</span>);\n\n return (\n <div className=\"hj-table-filter-column\">\n <span className=\"hj-table-column-title\">{children}</span>\n <RcDropdown\n autoDestroy\n getPopupContainer={getPopupContainer}\n overlay={overlay}\n overlayClassName={cn(\"hj-dropdown-root\", control?.overlayClassName)}\n placement={control?.placement ?? \"bottomRight\"}\n prefixCls=\"hj-dropdown\"\n transitionName=\"hj-slide-up\"\n trigger={[\"click\"]}\n visible={open}\n onVisibleChange={handleVisibleChange}\n >\n <button\n aria-label=\"筛选\"\n aria-pressed={filtered}\n className={cn(\"hj-table-filter-trigger\", filtered && \"active\")}\n type=\"button\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {icon}\n </button>\n </RcDropdown>\n </div>\n );\n}\n\nexport function useColumnState<T>({\n baseColumns: passedBaseColumns,\n childrenColumnName,\n columns,\n data,\n getPopupContainer,\n locale,\n onFilterChange,\n onSorterChange,\n showSorterTooltip = { target: \"full-header\" },\n sortDirections = [\"ascend\", \"descend\"],\n}: ColumnStateOptions<T>): ColumnStateResult<T> {\n const baseColumns = passedBaseColumns ?? columns;\n const [innerSortStates, setInnerSortStates] = useState<SortState<T>[]>(() =>\n collectSortStates(baseColumns, true),\n );\n const [innerFilterKeys, setInnerFilterKeys] = useState<\n Record<string, FilterValue | null | undefined>\n >(() => collectInitialFilterKeys(columns));\n\n const mergedSortStates = useMemo(() => {\n const controlledStates = collectSortStates(baseColumns, false);\n if (!controlledStates.length) {\n const columnsByKey = getColumnsByKey(baseColumns);\n return innerSortStates.reduce<SortState<T>[]>((states, state) => {\n const column = columnsByKey.get(state.key);\n if (column?.sorter) states.push({ ...state, column });\n return states;\n }, []);\n }\n\n let validate = true;\n let multipleMode: boolean | null = null;\n const validatedStates: SortState<T>[] = [];\n const pushState = (state: SortState<T>) => {\n validatedStates.push(validate ? state : { ...state, order: null });\n };\n for (const state of controlledStates) {\n if (multipleMode === null) {\n pushState(state);\n if (state.order) {\n if (state.multiplePriority === false) validate = false;\n else multipleMode = true;\n }\n } else if (multipleMode && state.multiplePriority !== false) {\n pushState(state);\n } else {\n validate = false;\n pushState(state);\n }\n }\n return validatedStates;\n }, [baseColumns, innerSortStates]);\n\n const filterStates = useMemo(\n () => collectFilterStates(columns, innerFilterKeys),\n [columns, innerFilterKeys],\n );\n const filters = useMemo(() => getFilterInfo(filterStates), [filterStates]);\n const sortedData = useMemo(\n () => getSortData(data, mergedSortStates, childrenColumnName),\n [childrenColumnName, data, mergedSortStates],\n );\n const filteredData = useMemo(\n () => getFilterData(sortedData, filterStates, childrenColumnName),\n [childrenColumnName, filterStates, sortedData],\n );\n const sorter = useMemo(() => generateSorterInfo(mergedSortStates), [mergedSortStates]);\n\n const triggerSorter = useCallback(\n (state: SortState<T>) => {\n const nextStates =\n state.multiplePriority === false ||\n !mergedSortStates.length ||\n mergedSortStates[0].multiplePriority === false\n ? [state]\n : [...mergedSortStates.filter((current) => current.key !== state.key), state];\n setInnerSortStates(nextStates);\n const nextSortedData = getSortData(data, nextStates, childrenColumnName);\n const nextData = getFilterData(nextSortedData, filterStates, childrenColumnName);\n onSorterChange(generateSorterInfo(nextStates), nextData);\n },\n [childrenColumnName, data, filterStates, mergedSortStates, onSorterChange],\n );\n\n const triggerFilter = useCallback(\n (state: FilterState<T>) => {\n if (!hasOwn(state.column, \"filteredValue\")) {\n setInnerFilterKeys((current) => ({\n ...current,\n [String(state.key)]: state.filteredKeys,\n }));\n }\n const nextStates = filterStates.map((current) =>\n current.key === state.key ? state : current,\n );\n const nextFilters = getFilterInfo(nextStates);\n const nextData = getFilterData(sortedData, nextStates, childrenColumnName);\n onFilterChange(nextFilters, nextData);\n },\n [childrenColumnName, filterStates, onFilterChange, sortedData],\n );\n\n const transformColumns = useMemo(\n () =>\n (innerColumns: RcColumnsType<T>): RcColumnsType<T> => {\n const transform = (sourceColumns: RcColumnsType<T>, parent?: string): RcColumnsType<T> =>\n sourceColumns.map((rawColumn, index) => {\n if (rawColumn === EXPAND_COLUMN || rawColumn === SELECTION_COLUMN) return rawColumn;\n const column = rawColumn as TableColumn<T>;\n const position = getColumnPos(index, parent);\n const columnKey = getColumnKey(column, position);\n const sortState = mergedSortStates.find((state) => state.key === columnKey);\n const sortOrder = sortState?.order ?? null;\n const sortColumns = mergedSortStates.map((state) => ({\n column: state.column,\n order: state.order,\n }));\n const titleProps: TableColumnTitleProps<T> = {\n filters,\n sortColumn: sortColumns[0]?.column,\n sortColumns,\n sortOrder: sortColumns[0]?.order,\n };\n const renderedTitle = renderColumnTitle(column.title, titleProps);\n let title = renderedTitle;\n let onHeaderCell = column.onHeaderCell;\n\n if (column.sorter) {\n const directions = column.sortDirections?.length\n ? column.sortDirections\n : sortDirections;\n const nextOrder = nextSortOrder(directions, sortOrder);\n const sorterIcon = column.sortIcon ? (\n column.sortIcon({ sortOrder })\n ) : (\n <DefaultSorterIcon order={sortOrder} />\n );\n const columnTooltip =\n column.showSorterTooltip === undefined\n ? showSorterTooltip\n : column.showSorterTooltip;\n const sortTip =\n nextOrder === \"ascend\"\n ? locale.triggerAsc\n : nextOrder === \"descend\"\n ? locale.triggerDesc\n : locale.cancelSort;\n const sorterTitle = (\n <div className=\"hj-table-column-sorters\">\n <span className=\"hj-table-column-title\">{renderedTitle}</span>\n {sorterIcon}\n </div>\n );\n if (columnTooltip) {\n const { target = \"full-header\", ...tooltipProps } =\n typeof columnTooltip === \"object\" ? columnTooltip : {};\n title =\n target === \"sorter-icon\" ? (\n <div className=\"hj-table-column-sorters hj-table-column-sorters-tooltip-target-sorter\">\n <span className=\"hj-table-column-title\">{renderedTitle}</span>\n <Tooltip title={sortTip} {...tooltipProps}>\n {sorterIcon}\n </Tooltip>\n </div>\n ) : (\n <Tooltip title={sortTip} {...tooltipProps}>\n {sorterTitle}\n </Tooltip>\n );\n } else {\n title = sorterTitle;\n }\n onHeaderCell = (currentColumn) => {\n const cell = (column.onHeaderCell?.(currentColumn) ??\n {}) as HTMLAttributes<HTMLElement>;\n const originalClick = cell.onClick;\n const originalKeyDown = cell.onKeyDown;\n const sort = () =>\n triggerSorter({\n column,\n key: columnKey,\n multiplePriority: getMultiplePriority(column),\n order: nextOrder,\n });\n return {\n ...cell,\n \"aria-label\": titleToString(renderedTitle) ?? locale.sortTitle ?? \"可排序列\",\n \"aria-sort\":\n sortOrder === \"ascend\"\n ? \"ascending\"\n : sortOrder === \"descend\"\n ? \"descending\"\n : \"none\",\n className: cn(\n cell.className,\n \"hj-table-column-has-sorters\",\n sortOrder && \"hj-table-column-sort\",\n ),\n tabIndex: cell.tabIndex ?? 0,\n title: column.ellipsis ? titleToString(renderedTitle) : cell.title,\n onClick: (event) => {\n sort();\n originalClick?.(event);\n },\n onKeyDown: (event) => {\n if (event.key === \"Enter\") sort();\n originalKeyDown?.(event);\n },\n };\n };\n }\n\n if (column.filters || column.filterDropdown) {\n const filterState = filterStates.find((state) => state.key === columnKey);\n title = (\n <FilterDropdown\n column={column}\n columnKey={columnKey}\n filterState={filterState}\n getPopupContainer={getPopupContainer}\n locale={locale}\n triggerFilter={triggerFilter}\n >\n {title}\n </FilterDropdown>\n );\n }\n\n return {\n ...column,\n children: column.children?.length\n ? transform(column.children as RcColumnsType<T>, position)\n : undefined,\n className: cn(column.className, sortOrder && \"hj-table-column-sort\"),\n onHeaderCell,\n title,\n } as RcColumnsType<T>[number];\n });\n\n return transform(innerColumns);\n },\n [\n filterStates,\n filters,\n getPopupContainer,\n locale,\n mergedSortStates,\n showSorterTooltip,\n sortDirections,\n triggerFilter,\n triggerSorter,\n ],\n );\n\n return { filteredData, filters, sorter, transformColumns };\n}\n",
|
|
86
|
+
"import RcCheckbox from \"@rc-component/checkbox\";\nimport type {\n CheckboxChangeEvent,\n CheckboxRef,\n CheckboxProps as RcCheckboxProps,\n} from \"@rc-component/checkbox\";\nimport RcDropdown from \"@rc-component/dropdown\";\nimport {\n type FixedType,\n INTERNAL_COL_DEFINE,\n type ColumnsType as RcColumnsType,\n} from \"@rc-component/table\";\nimport { conductCheck, convertDataToEntities } from \"@rc-component/tree\";\nimport type { Key, ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n type RowSelectMethod,\n TABLE_SELECTION_ALL,\n TABLE_SELECTION_INVERT,\n TABLE_SELECTION_NONE,\n type TableLocale,\n type TableRowSelection,\n type TableSelectionItem,\n type TableSelectionPreset,\n} from \"./types\";\n\nexport const SELECTION_COLUMN = {};\nexport const SELECTION_ALL = TABLE_SELECTION_ALL;\nexport const SELECTION_INVERT = TABLE_SELECTION_INVERT;\nexport const SELECTION_NONE = TABLE_SELECTION_NONE;\n\ninterface SelectionOptions<T> {\n readonly childrenColumnName: string;\n readonly data: readonly T[];\n readonly getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n readonly getRowKey: (record: T, index: number) => Key;\n readonly locale: TableLocale;\n readonly pageData: readonly T[];\n readonly rowSelection?: TableRowSelection<T>;\n readonly sourceData: readonly T[];\n}\n\ninterface SelectionResult<T> {\n readonly selectedKeySet: ReadonlySet<Key>;\n readonly transformColumns: (columns: RcColumnsType<T>) => RcColumnsType<T>;\n}\n\ntype SelectionCheckboxProps = RcCheckboxProps & { readonly indeterminate?: boolean };\n\nfunction SelectionCheckbox({ className, indeterminate = false, ...props }: SelectionCheckboxProps) {\n const checkboxRef = useRef<CheckboxRef>(null);\n\n useEffect(() => {\n if (checkboxRef.current?.input) checkboxRef.current.input.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return (\n <RcCheckbox\n {...props}\n aria-checked={indeterminate ? \"mixed\" : props.checked}\n className={cn(className, indeterminate && \"hj-checkbox-indeterminate\")}\n prefixCls=\"hj-checkbox\"\n ref={checkboxRef}\n />\n );\n}\n\nfunction getChildren<T>(record: T, childrenColumnName: string): readonly T[] | undefined {\n if (record == null || typeof record !== \"object\") return undefined;\n const children = (record as Record<string, unknown>)[childrenColumnName];\n return Array.isArray(children) ? (children as readonly T[]) : undefined;\n}\n\nfunction flattenData<T>(data: readonly T[], childrenColumnName: string, target: T[] = []): T[] {\n for (const record of data) {\n target.push(record);\n const children = getChildren(record, childrenColumnName);\n if (children) flattenData(children, childrenColumnName, target);\n }\n return target;\n}\n\nfunction createRecordMap<T>(\n data: readonly T[],\n childrenColumnName: string,\n getRowKey: (record: T, index: number) => Key,\n target = new Map<Key, T>(),\n) {\n for (let index = 0; index < data.length; index += 1) {\n const record = data[index];\n target.set(getRowKey(record, index), record);\n const children = getChildren(record, childrenColumnName);\n if (children) createRecordMap(children, childrenColumnName, getRowKey, target);\n }\n return target;\n}\n\nfunction updateRangeSelection(\n currentIndex: number,\n previousIndex: number | null,\n keys: readonly Key[],\n selectedKeys: Set<Key>,\n) {\n const anchor = previousIndex ?? currentIndex;\n const start = Math.min(anchor, currentIndex);\n const end = Math.max(anchor, currentIndex);\n const rangeKeys = keys.slice(start, end + 1);\n const shouldSelect = rangeKeys.some((key) => !selectedKeys.has(key));\n const changedKeys: Key[] = [];\n for (const key of rangeKeys) {\n if (shouldSelect) {\n if (!selectedKeys.has(key)) changedKeys.push(key);\n selectedKeys.add(key);\n } else {\n selectedKeys.delete(key);\n changedKeys.push(key);\n }\n }\n return { changedKeys, nextAnchor: shouldSelect ? end : null };\n}\n\ninterface SelectionMenuProps {\n readonly items: readonly TableSelectionItem[];\n readonly rowKeys: Key[];\n}\n\nfunction SelectionMenu({ items, rowKeys }: SelectionMenuProps) {\n return (\n <div className=\"hj-table-selection-menu\" role=\"menu\">\n {items.map((item, index) => (\n <button\n className=\"hj-table-selection-menu-item\"\n key={item.key ?? index}\n role=\"menuitem\"\n type=\"button\"\n onClick={() => item.onSelect?.(rowKeys)}\n >\n {item.text}\n </button>\n ))}\n </div>\n );\n}\n\nfunction isSelectionPreset(\n selection: TableSelectionPreset | TableSelectionItem,\n): selection is TableSelectionPreset {\n return typeof selection === \"string\";\n}\n\nexport function useTableSelection<T>({\n childrenColumnName,\n data,\n getPopupContainer,\n getRowKey,\n locale,\n pageData,\n rowSelection,\n sourceData,\n}: SelectionOptions<T>): SelectionResult<T> {\n const [innerSelectedKeys, setInnerSelectedKeys] = useState<readonly Key[]>(\n () => rowSelection?.defaultSelectedRowKeys ?? [],\n );\n const previousSelectedIndexRef = useRef<number | null>(null);\n const preserveRecordsRef = useRef(new Map<Key, T>());\n const currentRecordByKey = useMemo(\n () => createRecordMap(data, childrenColumnName, getRowKey),\n [childrenColumnName, data, getRowKey],\n );\n const pageRecords = useMemo(\n () => flattenData(pageData, childrenColumnName),\n [childrenColumnName, pageData],\n );\n const recordByKey = useMemo(\n () => createRecordMap(sourceData, childrenColumnName, getRowKey),\n [childrenColumnName, getRowKey, sourceData],\n );\n const mergedSelectedKeys = rowSelection?.selectedRowKeys ?? innerSelectedKeys;\n const getCheckboxProps = rowSelection?.getCheckboxProps;\n const checkStrictly = rowSelection?.checkStrictly ?? true;\n\n const updatePreserveRecordsCache = useCallback(\n (keys: readonly Key[]) => {\n if (!rowSelection?.preserveSelectedRowKeys) return;\n const next = new Map<Key, T>();\n for (const key of keys) {\n const record = recordByKey.get(key) ?? preserveRecordsRef.current.get(key);\n if (record !== undefined) next.set(key, record);\n }\n preserveRecordsRef.current = next;\n },\n [recordByKey, rowSelection?.preserveSelectedRowKeys],\n );\n\n useEffect(() => {\n updatePreserveRecordsCache(mergedSelectedKeys);\n }, [mergedSelectedKeys, updatePreserveRecordsCache]);\n\n useEffect(() => {\n if (!rowSelection) setInnerSelectedKeys([]);\n }, [rowSelection]);\n\n const entityData = useMemo(() => {\n if (checkStrictly || !rowSelection?.preserveSelectedRowKeys) return data;\n const preserved: T[] = [];\n for (const [key, record] of preserveRecordsRef.current) {\n if (!currentRecordByKey.has(key)) preserved.push(record);\n }\n return [...data, ...preserved];\n }, [checkStrictly, currentRecordByKey, data, rowSelection?.preserveSelectedRowKeys]);\n\n const keyEntities = useMemo(() => {\n if (checkStrictly) return null;\n return convertDataToEntities(entityData as never[], {\n childrenPropName: childrenColumnName,\n externalGetKey: getRowKey as never,\n }).keyEntities;\n }, [checkStrictly, childrenColumnName, entityData, getRowKey]);\n\n const isCheckboxDisabled = useCallback(\n (record: T) => Boolean(getCheckboxProps?.(record)?.disabled),\n [getCheckboxProps],\n );\n\n const [derivedSelectedKeys, derivedHalfSelectedKeys] = useMemo(() => {\n if (checkStrictly || !keyEntities) return [[...mergedSelectedKeys], []] as const;\n const result = conductCheck(\n [...mergedSelectedKeys] as never[],\n true,\n keyEntities as never,\n isCheckboxDisabled as never,\n );\n return [result.checkedKeys as Key[], result.halfCheckedKeys as Key[]] as const;\n }, [checkStrictly, isCheckboxDisabled, keyEntities, mergedSelectedKeys]);\n\n const selectedKeySet = useMemo(\n () =>\n new Set(\n rowSelection?.type === \"radio\" ? derivedSelectedKeys.slice(0, 1) : derivedSelectedKeys,\n ),\n [derivedSelectedKeys, rowSelection?.type],\n );\n const halfSelectedKeySet = useMemo(\n () => new Set(rowSelection?.type === \"radio\" ? [] : derivedHalfSelectedKeys),\n [derivedHalfSelectedKeys, rowSelection?.type],\n );\n\n const getRowsForKeys = useCallback(\n (keys: readonly Key[]) =>\n keys.reduce<T[]>((rows, key) => {\n const record = recordByKey.get(key) ?? preserveRecordsRef.current.get(key);\n if (record !== undefined) rows.push(record);\n return rows;\n }, []),\n [recordByKey],\n );\n\n const commitSelection = useCallback(\n (keys: readonly Key[], method: RowSelectMethod) => {\n updatePreserveRecordsCache(keys);\n const availableKeys = rowSelection?.preserveSelectedRowKeys\n ? [...keys]\n : keys.filter((key) => recordByKey.has(key));\n if (rowSelection?.selectedRowKeys === undefined) setInnerSelectedKeys(availableKeys);\n const rows = getRowsForKeys(availableKeys);\n rowSelection?.onChange?.(availableKeys, rows, { type: method });\n return rows;\n },\n [getRowsForKeys, recordByKey, rowSelection, updatePreserveRecordsCache],\n );\n\n const triggerSingleSelection = useCallback(\n (key: Key, selected: boolean, keys: Key[], nativeEvent: Event) => {\n const record = recordByKey.get(key) ?? preserveRecordsRef.current.get(key);\n if (record !== undefined) {\n rowSelection?.onSelect?.(record, selected, getRowsForKeys(keys), nativeEvent);\n }\n commitSelection(keys, \"single\");\n },\n [commitSelection, getRowsForKeys, recordByKey, rowSelection],\n );\n\n const checkboxPropsByKey = useMemo(() => {\n const map = new Map<Key, ReturnType<NonNullable<TableRowSelection<T>[\"getCheckboxProps\"]>>>();\n for (let index = 0; index < pageRecords.length; index += 1) {\n const record = pageRecords[index];\n map.set(getRowKey(record, index), getCheckboxProps?.(record) ?? {});\n }\n return map;\n }, [getCheckboxProps, getRowKey, pageRecords]);\n\n const mergedSelections = useMemo<TableSelectionItem[] | null>(() => {\n const selections = rowSelection?.selections;\n if (!selections || rowSelection.hideSelectAll) return null;\n const source =\n selections === true ? [SELECTION_ALL, SELECTION_INVERT, SELECTION_NONE] : [...selections];\n return source.map((selection) => {\n if (!isSelectionPreset(selection)) return selection;\n if (selection === SELECTION_ALL) {\n return {\n key: \"all\",\n text: locale.selectionAll ?? locale.selectAll ?? \"全选所有数据\",\n onSelect: () => {\n const keys = data.reduce<Key[]>((result, record, index) => {\n const key = getRowKey(record, index);\n const checkboxProps = getCheckboxProps?.(record);\n if (!checkboxProps?.disabled || selectedKeySet.has(key)) result.push(key);\n return result;\n }, []);\n commitSelection(keys, \"all\");\n },\n };\n }\n if (selection === SELECTION_INVERT) {\n return {\n key: \"invert\",\n text: locale.selectInvert ?? \"反选当前页\",\n onSelect: () => {\n const keys = new Set(selectedKeySet);\n for (let index = 0; index < pageRecords.length; index += 1) {\n const record = pageRecords[index];\n const key = getRowKey(record, index);\n if (!checkboxPropsByKey.get(key)?.disabled) {\n if (keys.has(key)) keys.delete(key);\n else keys.add(key);\n }\n }\n const nextKeys = [...keys];\n rowSelection.onSelectInvert?.(nextKeys);\n commitSelection(nextKeys, \"invert\");\n },\n };\n }\n return {\n key: \"none\",\n text: locale.selectNone ?? \"清空所有选择\",\n onSelect: () => {\n rowSelection.onSelectNone?.();\n commitSelection(\n [...selectedKeySet].filter((key) => checkboxPropsByKey.get(key)?.disabled),\n \"none\",\n );\n },\n };\n });\n }, [\n checkboxPropsByKey,\n commitSelection,\n data,\n getCheckboxProps,\n getRowKey,\n locale,\n pageRecords,\n rowSelection,\n selectedKeySet,\n ]);\n\n const transformColumns = useCallback(\n (columns: RcColumnsType<T>): RcColumnsType<T> => {\n if (!rowSelection) return columns.filter((column) => column !== SELECTION_COLUMN);\n\n let nextColumns = [...columns];\n const recordKeys = pageRecords.reduce<Key[]>((keys, record, index) => {\n const key = getRowKey(record, index);\n if (!checkboxPropsByKey.get(key)?.disabled) keys.push(key);\n return keys;\n }, []);\n const checkedCurrentAll =\n recordKeys.length > 0 && recordKeys.every((key) => selectedKeySet.has(key));\n const checkedCurrentSome = recordKeys.some((key) => selectedKeySet.has(key));\n\n const handleSelectAll = () => {\n const keys = new Set(selectedKeySet);\n const changedKeys: Key[] = [];\n if (checkedCurrentAll) {\n for (const key of recordKeys) {\n if (keys.delete(key)) changedKeys.push(key);\n }\n } else {\n for (const key of recordKeys) {\n if (!keys.has(key)) {\n keys.add(key);\n changedKeys.push(key);\n }\n }\n }\n const nextKeys = [...keys];\n rowSelection.onSelectAll?.(\n !checkedCurrentAll,\n getRowsForKeys(nextKeys),\n getRowsForKeys(changedKeys),\n );\n commitSelection(nextKeys, \"all\");\n previousSelectedIndexRef.current = null;\n };\n\n let title: ReactNode = null;\n let titleCheckbox: ReactNode = null;\n if (rowSelection.type !== \"radio\") {\n const disabledRows = pageRecords.reduce<\n Array<{ readonly checked: boolean; readonly disabled: boolean }>\n >((rows, record, index) => {\n const key = getRowKey(record, index);\n const disabled = Boolean(checkboxPropsByKey.get(key)?.disabled);\n if (disabled) rows.push({ checked: selectedKeySet.has(key), disabled });\n return rows;\n }, []);\n const allDisabled = disabledRows.length > 0 && disabledRows.length === pageRecords.length;\n const allDisabledAndChecked = allDisabled && disabledRows.every((item) => item.checked);\n const allDisabledSomeChecked = allDisabled && disabledRows.some((item) => item.checked);\n const titleProps = rowSelection.getTitleCheckboxProps?.() ?? {};\n const {\n indeterminate: customIndeterminate,\n onChange: customOnChange,\n onClick: customOnClick,\n ...restTitleProps\n } = titleProps;\n titleCheckbox = (\n <SelectionCheckbox\n {...restTitleProps}\n aria-label={\n titleProps[\"aria-label\"] ??\n (typeof locale.selectAll === \"string\" ? locale.selectAll : \"全选\")\n }\n checked={!allDisabled ? checkedCurrentAll : allDisabledAndChecked}\n disabled={titleProps.disabled ?? (pageRecords.length === 0 || allDisabled)}\n indeterminate={\n customIndeterminate ??\n (!allDisabled\n ? !checkedCurrentAll && checkedCurrentSome\n : !allDisabledAndChecked && allDisabledSomeChecked)\n }\n onClick={(event) => {\n event.stopPropagation();\n customOnClick?.(event);\n }}\n onChange={(event) => {\n handleSelectAll();\n customOnChange?.(event);\n }}\n />\n );\n const selectionMenu = mergedSelections ? (\n <RcDropdown\n getPopupContainer={getPopupContainer}\n overlay={<SelectionMenu items={mergedSelections} rowKeys={recordKeys} />}\n overlayClassName=\"hj-table-selection-dropdown\"\n placement=\"bottomLeft\"\n prefixCls=\"hj-dropdown\"\n trigger={[\"click\"]}\n >\n <button\n aria-label=\"选择菜单\"\n className=\"hj-table-selection-extra\"\n type=\"button\"\n onClick={(event) => event.stopPropagation()}\n >\n <span aria-hidden=\"true\">{\"\\u2304\"}</span>\n </button>\n </RcDropdown>\n ) : null;\n title = !rowSelection.hideSelectAll ? (\n <div className=\"hj-table-selection\">\n {titleCheckbox}\n {selectionMenu}\n </div>\n ) : null;\n }\n\n if (rowSelection.columnTitle !== undefined) {\n title =\n typeof rowSelection.columnTitle === \"function\"\n ? rowSelection.columnTitle(titleCheckbox)\n : rowSelection.columnTitle;\n }\n\n const renderSelectionCell = (_: unknown, record: T, index: number) => {\n const key = getRowKey(record, index);\n const checked = selectedKeySet.has(key);\n const checkboxProps = checkboxPropsByKey.get(key) ?? getCheckboxProps?.(record) ?? {};\n const {\n indeterminate: customIndeterminate,\n onChange: customOnChange,\n onClick: customOnClick,\n ...restCheckboxProps\n } = checkboxProps;\n const originNode = (\n <SelectionCheckbox\n {...restCheckboxProps}\n aria-label={\n checkboxProps[\"aria-label\"] ??\n locale.selectRow?.(index) ??\n (checked ? `第 ${index + 1} 行已选择` : `选择第 ${index + 1} 行`)\n }\n checked={checked}\n indeterminate={\n rowSelection.type === \"radio\"\n ? false\n : checkStrictly\n ? customIndeterminate\n : halfSelectedKeySet.has(key)\n }\n type={rowSelection.type === \"radio\" ? \"radio\" : \"checkbox\"}\n onClick={(event) => {\n event.stopPropagation();\n customOnClick?.(event);\n }}\n onChange={(event: CheckboxChangeEvent) => {\n if (rowSelection.type === \"radio\") {\n if (!checked) triggerSingleSelection(key, true, [key], event.nativeEvent);\n customOnChange?.(event);\n return;\n }\n\n const currentIndex = recordKeys.indexOf(key);\n const nextKeys = new Set(selectedKeySet);\n const shiftKey =\n \"shiftKey\" in event.nativeEvent && Boolean(event.nativeEvent.shiftKey);\n const canRangeSelect =\n shiftKey &&\n checkStrictly &&\n selectedKeySet.size > 0 &&\n recordKeys.some((recordKey) => selectedKeySet.has(recordKey));\n if (canRangeSelect) {\n const range = updateRangeSelection(\n currentIndex,\n previousSelectedIndexRef.current,\n recordKeys,\n nextKeys,\n );\n previousSelectedIndexRef.current = range.nextAnchor;\n const keys = [...nextKeys];\n rowSelection.onSelectMultiple?.(\n !checked,\n getRowsForKeys(keys),\n getRowsForKeys(range.changedKeys),\n );\n commitSelection(keys, \"multiple\");\n } else if (checkStrictly || !keyEntities) {\n if (checked) nextKeys.delete(key);\n else nextKeys.add(key);\n triggerSingleSelection(key, !checked, [...nextKeys], event.nativeEvent);\n previousSelectedIndexRef.current = checked ? null : currentIndex;\n } else {\n const filled = conductCheck(\n [...derivedSelectedKeys, key] as never[],\n true,\n keyEntities as never,\n isCheckboxDisabled as never,\n );\n let conductedKeys = filled.checkedKeys as Key[];\n if (checked) {\n const keySet = new Set(conductedKeys);\n keySet.delete(key);\n conductedKeys = conductCheck(\n [...keySet] as never[],\n { checked: false, halfCheckedKeys: filled.halfCheckedKeys },\n keyEntities as never,\n isCheckboxDisabled as never,\n ).checkedKeys as Key[];\n }\n triggerSingleSelection(key, !checked, conductedKeys, event.nativeEvent);\n previousSelectedIndexRef.current = checked ? null : currentIndex;\n }\n customOnChange?.(event);\n }}\n />\n );\n return rowSelection.renderCell\n ? rowSelection.renderCell(checked, record, index, originNode)\n : originNode;\n };\n\n if (!nextColumns.includes(SELECTION_COLUMN)) {\n const firstColumn = nextColumns[0] as\n | (RcColumnsType<T>[number] & {\n [INTERNAL_COL_DEFINE]?: { readonly columnType?: string };\n })\n | undefined;\n const insertIndex =\n firstColumn?.[INTERNAL_COL_DEFINE]?.columnType === \"EXPAND_COLUMN\" ? 1 : 0;\n nextColumns.splice(insertIndex, 0, SELECTION_COLUMN);\n }\n const selectionIndex = nextColumns.indexOf(SELECTION_COLUMN);\n nextColumns = nextColumns.filter(\n (column, index) => column !== SELECTION_COLUMN || index === selectionIndex,\n );\n const previousColumn = nextColumns[selectionIndex - 1];\n const nextColumn = nextColumns[selectionIndex + 1];\n const fixed = (rowSelection.fixed ?? nextColumn?.fixed ?? previousColumn?.fixed) as\n | FixedType\n | undefined;\n const selectionColumn = {\n [INTERNAL_COL_DEFINE]: {\n className: cn(\n \"hj-table-selection-col\",\n rowSelection.selections && \"hj-table-selection-col-with-dropdown\",\n ),\n columnType: \"SELECTION_COLUMN\",\n },\n align: rowSelection.align,\n className: \"hj-table-selection-column\",\n fixed,\n key: \"__hj_table_selection__\",\n onCell: rowSelection.onCell,\n render: renderSelectionCell,\n title,\n width: rowSelection.columnWidth,\n } as RcColumnsType<T>[number];\n return nextColumns.map((column) => (column === SELECTION_COLUMN ? selectionColumn : column));\n },\n [\n checkStrictly,\n checkboxPropsByKey,\n commitSelection,\n derivedSelectedKeys,\n getCheckboxProps,\n getPopupContainer,\n getRowKey,\n getRowsForKeys,\n halfSelectedKeySet,\n isCheckboxDisabled,\n keyEntities,\n locale,\n mergedSelections,\n pageRecords,\n rowSelection,\n selectedKeySet,\n triggerSingleSelection,\n ],\n );\n\n return { selectedKeySet, transformColumns };\n}\n",
|
|
87
|
+
"import type { CheckboxProps as RcCheckboxProps } from \"@rc-component/checkbox\";\nimport type { PaginationProps as RcPaginationProps } from \"@rc-component/pagination\";\nimport type {\n FixedType,\n GetComponentProps,\n ColumnsType as RcColumnsType,\n RenderedCell,\n} from \"@rc-component/table\";\nimport type { Key, ReactNode } from \"react\";\nimport type { Breakpoint } from \"../Grid\";\nimport type { TooltipProps } from \"../Tooltip\";\n\nexport type SortOrder = \"ascend\" | \"descend\" | null;\nexport type TableAction = \"paginate\" | \"sort\" | \"filter\";\nexport type FilterValue = (Key | boolean)[];\n\nexport type CompareFn<T> = (a: T, b: T, sortOrder?: SortOrder) => number;\n\nexport interface ColumnSorter<T> {\n readonly compare?: CompareFn<T>;\n readonly multiple?: number;\n}\n\nexport interface ColumnFilterItem {\n readonly text: ReactNode;\n readonly value: Key | boolean;\n readonly children?: readonly ColumnFilterItem[];\n}\n\nexport interface TableColumnTitleProps<T> {\n readonly filters?: Record<string, FilterValue | null>;\n readonly sortColumn?: TableColumn<T>;\n readonly sortOrder?: SortOrder | null;\n readonly sortColumns?: readonly {\n readonly column: TableColumn<T>;\n readonly order: SortOrder;\n }[];\n}\n\nexport type TableFilterMode = \"menu\" | \"tree\";\nexport type TableFilterSearch = boolean | ((input: string, record: ColumnFilterItem) => boolean);\nexport type TableSorterTooltipTarget = \"full-header\" | \"sorter-icon\";\nexport type TableSorterTooltipProps = Omit<TooltipProps, \"children\"> & {\n readonly target?: TableSorterTooltipTarget;\n};\n\nexport interface FilterConfirmProps {\n readonly closeDropdown?: boolean;\n}\n\nexport interface FilterResetProps {\n readonly closeDropdown?: boolean;\n readonly confirm?: boolean;\n}\n\nexport interface TableFilterDropdownProps {\n readonly close: () => void;\n readonly confirm: (props?: FilterConfirmProps) => void;\n readonly clearFilters?: (props?: FilterResetProps) => void;\n readonly filters?: readonly ColumnFilterItem[];\n readonly prefixCls: string;\n readonly selectedKeys: Key[];\n readonly setSelectedKeys: (selectedKeys: Key[]) => void;\n readonly visible: boolean;\n}\n\nexport interface TableFilterDropdownControlProps {\n readonly open?: boolean;\n readonly overlayClassName?: string;\n readonly placement?: \"bottomLeft\" | \"bottomRight\" | \"topLeft\" | \"topRight\";\n readonly onOpenChange?: (open: boolean) => void;\n}\n\nexport type TableSorter<T> = boolean | CompareFn<T> | ColumnSorter<T>;\n\ntype RcColumn<T> = RcColumnsType<T>[number];\n\nexport type TableColumn<T, Column = RcColumn<T>> = Column extends unknown\n ? Omit<Column, \"children\" | \"title\"> & {\n readonly children?: ColumnsType<T>;\n readonly defaultFilteredValue?: readonly (Key | boolean)[] | null;\n readonly defaultSortOrder?: SortOrder | null;\n readonly filtered?: boolean;\n readonly filteredValue?: readonly (Key | boolean)[] | null;\n readonly filterDropdown?: ReactNode | ((props: TableFilterDropdownProps) => ReactNode);\n readonly filterDropdownProps?: TableFilterDropdownControlProps;\n readonly filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);\n readonly filterMode?: TableFilterMode;\n readonly filterMultiple?: boolean;\n readonly filterOnClose?: boolean;\n readonly filterResetToDefaultFilteredValue?: boolean;\n readonly filterSearch?: TableFilterSearch;\n readonly filters?: readonly ColumnFilterItem[];\n readonly onFilter?: (value: Key | boolean, record: T) => boolean;\n readonly responsive?: readonly Breakpoint[];\n readonly showSorterTooltip?: boolean | TableSorterTooltipProps;\n readonly sorter?: TableSorter<T>;\n readonly sortDirections?: readonly Exclude<SortOrder, null>[];\n readonly sortIcon?: (props: { readonly sortOrder: SortOrder | null }) => ReactNode;\n readonly sortOrder?: SortOrder | null;\n readonly title?: ReactNode | ((props: TableColumnTitleProps<T>) => ReactNode);\n }\n : never;\n\nexport type ColumnsType<T> = readonly TableColumn<T>[];\n\nexport interface TableSorterResult<T> {\n readonly column?: TableColumn<T>;\n readonly columnKey?: Key;\n readonly field?: Key | readonly Key[];\n readonly order?: SortOrder;\n}\n\nexport type RowSelectMethod = \"all\" | \"none\" | \"invert\" | \"single\" | \"multiple\";\n\nexport const TABLE_SELECTION_ALL = \"SELECT_ALL\" as const;\nexport const TABLE_SELECTION_INVERT = \"SELECT_INVERT\" as const;\nexport const TABLE_SELECTION_NONE = \"SELECT_NONE\" as const;\n\nexport type TableSelectionPreset =\n | typeof TABLE_SELECTION_ALL\n | typeof TABLE_SELECTION_INVERT\n | typeof TABLE_SELECTION_NONE;\n\nexport interface TableSelectionItem {\n readonly key?: Key;\n readonly text: ReactNode;\n readonly onSelect?: (changeableRowKeys: Key[]) => void;\n}\n\nexport interface TableSelectionCheckboxProps\n extends Omit<RcCheckboxProps, \"checked\" | \"defaultChecked\"> {\n readonly indeterminate?: boolean;\n}\n\nexport interface TableRowSelection<T> {\n readonly align?: \"left\" | \"center\" | \"right\";\n readonly checkStrictly?: boolean;\n readonly columnTitle?: ReactNode | ((checkboxNode: ReactNode) => ReactNode);\n readonly columnWidth?: string | number;\n readonly defaultSelectedRowKeys?: readonly Key[];\n readonly fixed?: FixedType;\n readonly getCheckboxProps?: (record: T) => TableSelectionCheckboxProps;\n readonly getTitleCheckboxProps?: () => TableSelectionCheckboxProps;\n readonly hideSelectAll?: boolean;\n readonly onCell?: GetComponentProps<T>;\n readonly onChange?: (\n selectedRowKeys: Key[],\n selectedRows: T[],\n info: { readonly type: RowSelectMethod },\n ) => void;\n readonly onSelect?: (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void;\n readonly onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;\n readonly onSelectInvert?: (selectedRowKeys: Key[]) => void;\n readonly onSelectMultiple?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;\n readonly onSelectNone?: () => void;\n readonly preserveSelectedRowKeys?: boolean;\n readonly renderCell?: (\n checked: boolean,\n record: T,\n index: number,\n originNode: ReactNode,\n ) => ReactNode | RenderedCell<T>;\n readonly selections?: boolean | readonly (TableSelectionPreset | TableSelectionItem)[];\n readonly selectedRowKeys?: readonly Key[];\n readonly type?: \"checkbox\" | \"radio\";\n}\n\nexport type TablePaginationProps = Omit<\n RcPaginationProps,\n \"classNames\" | \"onChange\" | \"pageSizeOptions\" | \"prefixCls\" | \"styles\"\n> & {\n readonly onChange?: (page: number, pageSize: number) => void;\n readonly pageSizeOptions?: readonly number[];\n};\n\nexport type TablePaginationPlacement =\n | \"topStart\"\n | \"topCenter\"\n | \"topEnd\"\n | \"bottomStart\"\n | \"bottomCenter\"\n | \"bottomEnd\"\n | \"none\";\nexport type TablePaginationPosition =\n | \"topLeft\"\n | \"topCenter\"\n | \"topRight\"\n | \"bottomLeft\"\n | \"bottomCenter\"\n | \"bottomRight\"\n | \"none\";\nexport type TablePaginationConfig = TablePaginationProps & {\n readonly placement?: readonly TablePaginationPlacement[];\n /** @deprecated Use placement instead. */\n readonly position?: readonly TablePaginationPosition[];\n};\n\nexport interface TableLocale {\n readonly cancelSort?: string;\n readonly filterConfirm?: ReactNode;\n readonly filterCheckAll?: ReactNode;\n readonly filterEmptyText?: ReactNode;\n readonly filterReset?: ReactNode;\n readonly filterSearchPlaceholder?: string;\n readonly emptyText?: ReactNode | (() => ReactNode);\n readonly selectAll?: ReactNode;\n readonly selectInvert?: ReactNode;\n readonly selectNone?: ReactNode;\n readonly selectRow?: (index: number) => string;\n readonly selectionAll?: ReactNode;\n readonly sortTitle?: string;\n readonly triggerAsc?: string;\n readonly triggerDesc?: string;\n}\n\nexport interface TableChangeExtra<T> {\n readonly action: TableAction;\n readonly currentDataSource: T[];\n}\n",
|
|
88
|
+
"import RcPagination from \"@rc-component/pagination\";\nimport type { CSSProperties } from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { TablePaginationConfig, TablePaginationProps } from \"./types\";\n\nconst DEFAULT_PAGE_SIZE = 10;\nconst EMPTY_PAGINATION_PROPS: TablePaginationConfig = {};\n\nconst paginationLocale = {\n items_per_page: \"条/页\",\n jump_to: \"跳至\",\n jump_to_confirm: \"确定\",\n page: \"页\",\n prev_page: \"上一页\",\n next_page: \"下一页\",\n prev_5: \"向前 5 页\",\n next_5: \"向后 5 页\",\n prev_3: \"向前 3 页\",\n next_3: \"向后 3 页\",\n page_size: \"页码\",\n};\n\nconst defaultPrevIcon = <span aria-hidden=\"true\">{\"\\u2039\"}</span>;\nconst defaultNextIcon = <span aria-hidden=\"true\">{\"\\u203a\"}</span>;\nconst defaultJumpPrevIcon = <span aria-hidden=\"true\">...</span>;\nconst defaultJumpNextIcon = <span aria-hidden=\"true\">...</span>;\n\nconst defaultSizeChangerRender: NonNullable<TablePaginationProps[\"sizeChangerRender\"]> = ({\n \"aria-label\": ariaLabel,\n className,\n disabled,\n onSizeChange,\n options,\n size,\n}) => (\n <select\n aria-label={ariaLabel}\n className={className}\n disabled={disabled}\n value={size}\n onChange={(event) => onSizeChange(event.target.value)}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n);\n\ninterface PaginationOptions {\n readonly hidePaginationWhenSinglePage?: boolean;\n readonly onChange: (current: number, pageSize: number) => void;\n readonly pageSizeOptions?: readonly number[];\n readonly pagination?: false | TablePaginationConfig;\n readonly total: number;\n}\n\nexport interface MergedPagination {\n readonly current: number;\n readonly enabled: boolean;\n readonly onChange: (current: number, pageSize: number) => void;\n readonly pageSize: number;\n readonly props: TablePaginationConfig;\n readonly reset: (current?: number, pageSize?: number) => void;\n readonly total: number;\n}\n\nfunction asPaginationProps(pagination: false | TablePaginationConfig | undefined) {\n return pagination && typeof pagination === \"object\" ? pagination : EMPTY_PAGINATION_PROPS;\n}\n\nexport function useTablePagination({\n hidePaginationWhenSinglePage,\n onChange,\n pageSizeOptions,\n pagination,\n total: dataTotal,\n}: PaginationOptions): MergedPagination {\n const props = asPaginationProps(pagination);\n const [inner, setInner] = useState(() => ({\n current: props.defaultCurrent ?? 1,\n pageSize: props.defaultPageSize ?? DEFAULT_PAGE_SIZE,\n }));\n const pageSize =\n pagination === false ? Math.max(1, dataTotal) : Math.max(1, props.pageSize ?? inner.pageSize);\n const total = Math.max(0, props.total ?? dataTotal);\n const maxPage = Math.max(1, Math.ceil(total / pageSize));\n const current = Math.min(Math.max(1, props.current ?? inner.current), maxPage);\n\n useEffect(() => {\n if (props.current === undefined && inner.current !== current) {\n setInner((value) => ({ ...value, current }));\n }\n }, [current, inner.current, props.current]);\n\n const reset = useCallback(\n (nextCurrent = 1, nextPageSize = pageSize) => {\n setInner((value) => ({\n current: props.current === undefined ? Math.max(1, nextCurrent) : value.current,\n pageSize: props.pageSize === undefined ? Math.max(1, nextPageSize) : value.pageSize,\n }));\n },\n [pageSize, props.current, props.pageSize],\n );\n\n const handleChange = useCallback(\n (nextCurrent: number, nextPageSize: number) => {\n const safePageSize = Math.max(1, nextPageSize || pageSize);\n const nextMaxPage = Math.max(1, Math.ceil(total / safePageSize));\n const safeCurrent = Math.min(Math.max(1, nextCurrent), nextMaxPage);\n setInner((value) => ({\n current: props.current === undefined ? safeCurrent : value.current,\n pageSize: props.pageSize === undefined ? safePageSize : value.pageSize,\n }));\n props.onChange?.(safeCurrent, safePageSize);\n onChange(safeCurrent, safePageSize);\n },\n [onChange, pageSize, props, total],\n );\n\n const mergedProps = useMemo<TablePaginationConfig>(\n () => ({\n ...props,\n hideOnSinglePage: props.hideOnSinglePage ?? hidePaginationWhenSinglePage ?? false,\n pageSizeOptions: props.pageSizeOptions ?? pageSizeOptions ?? [10, 20, 50],\n }),\n [hidePaginationWhenSinglePage, pageSizeOptions, props],\n );\n\n return {\n current,\n enabled: pagination !== false,\n onChange: handleChange,\n pageSize,\n props: mergedProps,\n reset,\n total,\n };\n}\n\nexport function getPageData<T>(data: readonly T[], pagination: MergedPagination): T[] {\n if (!pagination.enabled) return data.slice();\n const { current, pageSize, total } = pagination;\n\n // When total exceeds the supplied rows, the caller is providing a server-side page.\n if (data.length < total) {\n if (data.length > pageSize) {\n return data.slice((current - 1) * pageSize, current * pageSize);\n }\n return data.slice();\n }\n\n return data.slice((current - 1) * pageSize, current * pageSize);\n}\n\ninterface TablePaginationNodeProps {\n readonly alignment?: TablePaginationAlignment;\n readonly className?: string;\n readonly pagination: MergedPagination;\n readonly style?: CSSProperties;\n}\n\nexport type TablePaginationAlignment = \"start\" | \"center\" | \"end\";\n\nexport interface TablePaginationPlacements {\n readonly bottom?: TablePaginationAlignment;\n readonly top?: TablePaginationAlignment;\n}\n\nfunction normalizePlacement(placement: string): TablePaginationAlignment {\n const normalized = placement.toLowerCase();\n if (normalized.includes(\"center\")) return \"center\";\n return normalized.includes(\"left\") || normalized.includes(\"start\") ? \"start\" : \"end\";\n}\n\nexport function getTablePaginationPlacements(\n pagination: TablePaginationConfig,\n): TablePaginationPlacements {\n const placements = pagination.placement ?? pagination.position;\n if (!Array.isArray(placements)) return { bottom: \"end\" };\n\n const top = placements.find((placement) => placement.includes(\"top\"));\n const bottom = placements.find((placement) => placement.includes(\"bottom\"));\n const disabled = placements.every((placement) => placement === \"none\");\n\n if (!top && !bottom) return disabled ? {} : { bottom: \"end\" };\n return {\n bottom: bottom ? normalizePlacement(bottom) : undefined,\n top: top ? normalizePlacement(top) : undefined,\n };\n}\n\nexport function TablePaginationNode({\n alignment = \"end\",\n className,\n pagination,\n style,\n}: TablePaginationNodeProps) {\n if (!pagination.enabled || pagination.total <= 0) return null;\n\n const {\n className: paginationClassName,\n nextIcon = defaultNextIcon,\n pageSizeOptions = [10, 20, 50],\n prevIcon = defaultPrevIcon,\n jumpNextIcon = defaultJumpNextIcon,\n jumpPrevIcon = defaultJumpPrevIcon,\n showSizeChanger = false,\n sizeChangerRender = defaultSizeChangerRender,\n style: paginationStyle,\n placement: _placement,\n position: _position,\n ...props\n } = pagination.props;\n void _placement;\n void _position;\n\n return (\n <RcPagination\n {...props}\n className={cn(\n \"hj-table-pagination\",\n `hj-table-pagination-${alignment}`,\n `hj-pagination-${alignment}`,\n paginationClassName,\n className,\n )}\n current={pagination.current}\n jumpNextIcon={jumpNextIcon}\n jumpPrevIcon={jumpPrevIcon}\n locale={paginationLocale}\n nextIcon={nextIcon}\n pageSize={pagination.pageSize}\n pageSizeOptions={[...pageSizeOptions]}\n prefixCls=\"hj-pagination\"\n prevIcon={prevIcon}\n showSizeChanger={showSizeChanger}\n sizeChangerRender={sizeChangerRender}\n style={{ ...paginationStyle, ...style }}\n total={pagination.total}\n onChange={pagination.onChange}\n />\n );\n}\n",
|
|
89
|
+
"import type {\n AriaAttributes,\n CSSProperties,\n HTMLAttributes,\n MouseEvent,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { createElement, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type TagPresetColor = \"default\" | \"success\" | \"processing\" | \"error\" | \"warning\" | \"gold\";\nexport type TagColor = TagPresetColor | (string & {});\nexport type TagVariant = \"filled\" | \"solid\" | \"outlined\";\n\nexport interface TagClosableConfig extends AriaAttributes {\n readonly afterClose?: () => void;\n readonly closeIcon?: ReactNode;\n readonly disabled?: boolean;\n}\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n /** @deprecated Use `variant` instead. */\n readonly bordered?: boolean;\n readonly closable?: boolean | TagClosableConfig;\n readonly closeIcon?: ReactNode;\n readonly color?: TagColor;\n readonly disabled?: boolean;\n readonly href?: string;\n readonly icon?: ReactNode;\n readonly rootClassName?: string;\n readonly target?: string;\n readonly variant?: TagVariant;\n readonly onClose?: (event: MouseEvent<HTMLElement>) => void;\n}\n\nexport interface CheckableTagProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"onChange\"> {\n readonly checked: boolean;\n readonly disabled?: boolean;\n readonly icon?: ReactNode;\n /** Legacy button prop retained as a no-op for source compatibility. */\n readonly type?: \"button\" | \"reset\" | \"submit\";\n readonly onChange?: (checked: boolean) => void;\n}\n\nexport interface CheckableTagOption<Value extends string | number = string | number> {\n readonly disabled?: boolean;\n readonly label: ReactNode;\n readonly value: Value;\n}\n\nexport interface CheckableTagGroupProps<Value extends string | number = string | number>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\" | \"onChange\"> {\n readonly defaultValue?: Value | readonly Value[];\n readonly disabled?: boolean;\n readonly multiple?: boolean;\n readonly options?: readonly CheckableTagOption<Value>[];\n readonly value?: Value | readonly Value[];\n readonly onChange?: (value: Value | Value[]) => void;\n}\n\nconst colorClass: Record<TagPresetColor, string> = {\n default:\n \"border-[var(--hj-color-web-border)] bg-[rgb(255_255_255_/_0.06)] text-[var(--hj-color-web-foreground-80)]\",\n success:\n \"border-[color-mix(in_srgb,var(--hj-color-success)_40%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-success)_14%,transparent)] text-[var(--hj-color-success)]\",\n processing:\n \"border-[color-mix(in_srgb,var(--hj-color-info)_40%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-info)_14%,transparent)] text-[var(--hj-color-info)]\",\n error:\n \"border-[color-mix(in_srgb,var(--hj-color-danger)_40%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-danger)_14%,transparent)] text-[var(--hj-color-danger)]\",\n warning:\n \"border-[color-mix(in_srgb,var(--hj-color-warning)_40%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-warning)_14%,transparent)] text-[var(--hj-color-warning)]\",\n gold: \"border-[color-mix(in_srgb,var(--hj-color-brand)_40%,transparent)] bg-[color-mix(in_srgb,var(--hj-color-brand)_14%,transparent)] text-[var(--hj-color-brand)]\",\n};\n\nfunction isPresetColor(color: TagColor): color is TagPresetColor {\n return color in colorClass;\n}\n\nfunction customColorStyle(color: string, variant: TagVariant): CSSProperties {\n if (variant === \"solid\") return { backgroundColor: color, borderColor: color, color: \"#fff\" };\n if (variant === \"outlined\") return { borderColor: color, color };\n return {\n backgroundColor: `color-mix(in srgb, ${color} 14%, transparent)`,\n borderColor: color,\n color,\n };\n}\n\nfunction TagRoot({\n bordered,\n children,\n className = \"\",\n closable = false,\n closeIcon,\n color = \"default\",\n disabled = false,\n href,\n icon,\n onClick,\n onClose,\n rootClassName,\n style,\n target,\n variant: customVariant,\n ...props\n}: TagProps): ReactElement | null {\n const [visible, setVisible] = useState(true);\n const closableConfig = typeof closable === \"object\" ? closable : undefined;\n const mergedDisabled = disabled || closableConfig?.disabled === true;\n const variant = customVariant ?? (bordered === false ? \"filled\" : \"outlined\");\n const mergedCloseIcon = closableConfig?.closeIcon ?? closeIcon ?? \"\\u00d7\";\n const isClosable = closable === true || closableConfig !== undefined || closeIcon != null;\n const preset = isPresetColor(color);\n const afterCloseCalled = useRef(false);\n\n useEffect(() => {\n if (!visible && !afterCloseCalled.current) {\n afterCloseCalled.current = true;\n closableConfig?.afterClose?.();\n }\n }, [closableConfig?.afterClose, visible]);\n\n if (!visible) return null;\n\n const closeNode =\n isClosable && mergedCloseIcon !== false && mergedCloseIcon !== null ? (\n <span\n aria-disabled={mergedDisabled || undefined}\n aria-label=\"Close\"\n // biome-ignore lint/a11y/useSemanticElements: a button would be invalid when the Tag itself is a link.\n className=\"hj-tag-close ml-0.5 inline-flex h-4 w-4 cursor-pointer items-center justify-center rounded text-current opacity-70 transition hover:bg-white/10 hover:opacity-100\"\n role=\"button\"\n tabIndex={mergedDisabled ? -1 : 0}\n onClick={(event) => {\n event.stopPropagation();\n if (mergedDisabled) return;\n onClose?.(event);\n if (!event.defaultPrevented) setVisible(false);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n }}\n >\n {mergedCloseIcon}\n </span>\n ) : null;\n const rootProps = {\n ...props,\n \"aria-disabled\": mergedDisabled || undefined,\n className: cn(\n \"hj-tag inline-flex h-6 items-center gap-1 rounded-[var(--hj-radius-sm)] border px-2 text-xs leading-none\",\n `hj-tag-${variant}`,\n preset ? colorClass[color] : undefined,\n mergedDisabled && \"hj-tag-disabled cursor-not-allowed opacity-45\",\n rootClassName,\n className,\n ),\n href: href && !mergedDisabled ? href : undefined,\n onClick: mergedDisabled ? undefined : onClick,\n style: { ...(!preset ? customColorStyle(color, variant) : {}), ...style },\n target,\n };\n const content = (\n <>\n {icon != null ? <span className=\"hj-tag-icon inline-flex\">{icon}</span> : null}\n <span className=\"hj-tag-content\">{children}</span>\n {closeNode}\n </>\n );\n\n return createElement(href ? \"a\" : \"span\", rootProps, content);\n}\n\nfunction CheckableTag({\n checked,\n children,\n className = \"\",\n disabled = false,\n icon,\n onChange,\n onClick,\n onKeyDown,\n type: _type,\n ...props\n}: CheckableTagProps) {\n return (\n <span\n {...props}\n aria-checked={checked}\n aria-disabled={disabled || undefined}\n className={cn(\n \"hj-tag hj-tag-checkable inline-flex h-6 items-center gap-1 rounded-[var(--hj-radius-sm)] border px-2 text-xs leading-none transition\",\n checked\n ? \"hj-tag-checkable-checked border-[var(--hj-color-brand)] bg-[rgb(255_204_51_/_0.12)] text-[var(--hj-color-brand)]\"\n : \"border-[var(--hj-color-web-border)] bg-[rgb(255_255_255_/_0.06)] text-[var(--hj-color-web-muted)] hover:text-white\",\n disabled ? \"hj-tag-checkable-disabled cursor-not-allowed opacity-45\" : \"cursor-pointer\",\n className,\n )}\n // biome-ignore lint/a11y/useSemanticElements: AntD CheckableTag is a non-form controlled selection tag.\n role=\"checkbox\"\n tabIndex={disabled ? -1 : 0}\n onClick={(event) => {\n if (disabled) return;\n onChange?.(!checked);\n onClick?.(event);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented && !disabled && event.key === \" \") {\n event.preventDefault();\n onChange?.(!checked);\n }\n }}\n >\n {icon}\n <span>{children}</span>\n </span>\n );\n}\n\nfunction CheckableTagGroup<Value extends string | number = string | number>({\n className,\n defaultValue,\n disabled = false,\n multiple = false,\n onChange,\n options = [],\n value,\n ...props\n}: CheckableTagGroupProps<Value>) {\n const [internalValue, setInternalValue] = useState<Value | readonly Value[] | undefined>(\n defaultValue,\n );\n const mergedValue = value ?? internalValue;\n const selectedValues = Array.isArray(mergedValue)\n ? mergedValue\n : mergedValue == null\n ? []\n : [mergedValue];\n\n return (\n <div className={cn(\"hj-tag-checkable-group flex flex-wrap gap-2\", className)} {...props}>\n {options.map((option) => {\n const checked = selectedValues.includes(option.value);\n return (\n <CheckableTag\n checked={checked}\n disabled={disabled || option.disabled}\n key={option.value}\n onChange={(nextChecked) => {\n const nextValue = multiple\n ? nextChecked\n ? [...selectedValues, option.value]\n : selectedValues.filter((item) => item !== option.value)\n : option.value;\n if (value === undefined) setInternalValue(nextValue);\n onChange?.(nextValue);\n }}\n >\n {option.label}\n </CheckableTag>\n );\n })}\n </div>\n );\n}\n\nexport const Tag = Object.assign(TagRoot, {\n CheckableTag,\n CheckableTagGroup,\n});\n",
|
|
90
|
+
"import type { ReactNode } from \"react\";\n\ntype TagTone = \"amber\" | \"slate\" | \"green\" | \"red\";\n\nconst toneClass: Record<TagTone, string> = {\n amber: \"border-[#6f5529] bg-[#2a2115] text-[#d6a84a]\",\n slate: \"border-[#3b4652] bg-[#161d24] text-[#aab0b8]\",\n green: \"border-[#3f6f36] bg-[#172a19] text-[#69c04a]\",\n red: \"border-[#ff8f86]/50 bg-[#3a2426] text-[#ff8f86]\",\n};\n\nexport function TagPill({\n children,\n tone = \"slate\",\n}: {\n readonly children: ReactNode;\n readonly tone?: TagTone;\n}) {\n return (\n <span\n className={`inline-flex h-5 items-center rounded-[3px] border px-1.5 text-[11px] ${toneClass[tone]}`}\n >\n {children}\n </span>\n );\n}\n",
|
|
91
|
+
"export const uiPackage = {\n package: \"@996-design/996-ui\",\n styling: \"tailwind-v4\",\n componentPolicy: \"antd-compatible-wrapper\",\n} as const;\n\nexport {\n ConfigConsumer,\n ConfigContext,\n ConfigProvider,\n Variants,\n defaultIconPrefixCls,\n defaultPrefixCls,\n globalConfig,\n useConfig,\n} from \"./ConfigProvider\";\nexport type {\n AntdSize,\n ComponentDefaults,\n ConfigConsumerProps,\n ConfigProviderProps,\n ConfigProviderType,\n DirectionType,\n GetPopupContainer,\n GetPrefixCls,\n GetTargetContainer,\n GlobalConfig,\n GlobalConfigProps,\n HolderRender,\n Locale,\n PopupContainer,\n RenderEmptyHandler,\n TargetContainer,\n ThemeConfig,\n ThemeCssVarConfig,\n ThemeComponentTokens,\n UiConfig,\n UiMotionConfig,\n UiSize,\n UiSurface,\n UiVisualSize,\n Variant,\n} from \"./ConfigProvider\";\nexport { cssVar, themeToken } from \"./tokens\";\nexport type { CssVarName, ThemeToken } from \"./tokens\";\nexport { useReducedMotion } from \"./hooks/useReducedMotion\";\n\nexport { Alert } from \"./components/Alert\";\nexport type {\n AlertClosableConfig,\n AlertErrorBoundaryProps,\n AlertProps,\n AlertType,\n AlertVariant,\n} from \"./components/Alert\";\nexport { Avatar } from \"./components/Avatar\";\nexport type {\n AvatarGroupMaxConfig,\n AvatarGroupProps,\n AvatarNamedSize,\n AvatarProps,\n AvatarResponsiveSize,\n AvatarShape,\n AvatarSize,\n} from \"./components/Avatar\";\nexport { Badge } from \"./components/Badge\";\nexport type { BadgeProps, BadgeRibbonProps, BadgeSize, BadgeStatus } from \"./components/Badge\";\nexport {\n AutoComplete,\n Cascader,\n DatePicker,\n Mentions,\n Select,\n TimePicker,\n Transfer,\n TreeSelect,\n Upload,\n} from \"./components/DataEntryPrimitives\";\nexport type {\n AutoCompleteOption,\n AutoCompleteProps,\n CascaderOption,\n CascaderPanelProps,\n CascaderProps,\n DatePickerProps,\n DraggerProps,\n GeneratedDatePickerProps,\n GeneratedRangePickerProps,\n MentionsConfig,\n MentionsEntity,\n MentionsOption,\n MentionsProps,\n PickerRangeValue,\n PickerValue,\n RangePickerProps,\n SelectOption,\n SelectProps,\n TimePickerProps,\n TimeRangePickerProps,\n TransferClassNames,\n TransferCustomListBodyProps,\n TransferDirection,\n TransferItem,\n TransferKey,\n TransferListProps,\n TransferLocale,\n TransferOperationProps,\n TransferPagination,\n TransferPaginationConfig,\n TransferProps,\n TransferRenderResult,\n TransferRenderResultObject,\n TransferSearchOption,\n TransferSearchProps,\n TransferSelectAllLabel,\n TransferStyles,\n TreeSelectNode,\n TreeSelectProps,\n ShowUploadListInterface,\n UploadActions,\n UploadChangeParam,\n UploadFile,\n UploadFileStatus,\n UploadItemRender,\n UploadListProgressProps,\n UploadListType,\n UploadLocale,\n UploadProps,\n UploadRef,\n UploadSemanticProps,\n UploadType,\n} from \"./components/DataEntryPrimitives\";\nexport {\n Calendar,\n Descriptions,\n Image,\n ImagePreviewGroup,\n QRCode,\n Timeline,\n Tour,\n Tree,\n} from \"./components/DataDisplayPrimitives\";\nexport type {\n CalendarCellRenderInfo,\n CalendarHeaderRender,\n CalendarMode,\n CalendarProps,\n CalendarSelectInfo,\n CalendarValue,\n DescriptionItem,\n DescriptionsProps,\n DirectoryTreeExpandAction,\n DirectoryTreeProps,\n ImagePreviewConfig,\n ImagePreviewGroupProps,\n ImageProps,\n QRCodeLocale,\n QRCodeProps,\n QRCodeStatus,\n QRCodeStatusRenderInfo,\n TimelineItem,\n TimelineItemPlacement,\n TimelineItemPlacement as TimelinePlacement,\n TimelineMode,\n TimelineProps,\n TourActionsRender,\n TourButtonProps,\n TourIndicatorsRender,\n TourProps,\n TourStep,\n TourType,\n TreeNode,\n TreeProps,\n TreeRef,\n} from \"./components/DataDisplayPrimitives\";\nexport type DescriptionsClassNames = NonNullable<\n import(\"./components/DataDisplayPrimitives\").DescriptionsProps[\"classNames\"]\n>;\nexport type DescriptionsSemanticSlot = keyof DescriptionsClassNames;\nexport type DescriptionsStyles = NonNullable<\n import(\"./components/DataDisplayPrimitives\").DescriptionsProps[\"styles\"]\n>;\nexport { Affix, BorderBeam, Util } from \"./components/OtherPrimitives\";\nexport type { AffixProps, AffixRef, BorderBeamProps } from \"./components/OtherPrimitives\";\nexport {\n App,\n FloatButton,\n NotificationPlacements,\n Watermark,\n notification,\n useNotification,\n} from \"./components/FeedbackPrimitives\";\nexport type {\n AppApi,\n AppConfig,\n AppProps,\n FloatButtonBackTopProps,\n FloatButtonBadgeProps,\n FloatButtonElement,\n FloatButtonGroupProps,\n FloatButtonGroupTrigger,\n FloatButtonProps,\n FloatButtonShape,\n FloatButtonTooltipProps,\n FloatButtonType,\n GlobalConfigProps as NotificationGlobalConfigProps,\n NotificationArgs,\n NotificationClassNames,\n NotificationClosable,\n NotificationConfig,\n NotificationInstance,\n NotificationMethods,\n NotificationPlacement,\n NotificationStyles,\n NotificationType,\n WatermarkContent,\n WatermarkFont,\n WatermarkProps,\n WatermarkText,\n} from \"./components/FeedbackPrimitives\";\nexport { Anchor, Menu } from \"./components/NavigationPrimitives\";\nexport type {\n AnchorItem,\n AnchorLinkProps,\n AnchorProps,\n MenuItem,\n MenuMode,\n MenuProps,\n} from \"./components/NavigationPrimitives\";\nexport type { MenuRef } from \"@rc-component/menu\";\nexport type { ItemType, MenuInfo, SelectInfo } from \"@rc-component/menu/es/interface\";\nexport { Flex, Layout, Space } from \"./components/LayoutPrimitives\";\nexport type {\n CollapseType,\n FlexProps,\n GapSize,\n LayoutContentProps,\n LayoutFooterProps,\n LayoutHeaderProps,\n LayoutProps,\n LegacyGapSize,\n NativeGapSize,\n Orientation,\n SiderClassNames,\n SiderContextValue,\n SiderProps,\n SiderSemanticSlot,\n SiderStyles,\n SiderTheme,\n SpaceClassNames,\n SpaceAddonProps,\n SpaceAddonStatus,\n SpaceCompactProps,\n SpaceCompactCellProps,\n SpaceCompactSize,\n SpaceProps,\n SpaceSemanticSlot,\n SpaceStyles,\n} from \"./components/LayoutPrimitives\";\nexport { Splitter } from \"./components/Splitter\";\nexport type {\n ShowCollapsibleIconMode,\n SplitterClassNames,\n SplitterOrientation,\n SplitterPanelProps,\n SplitterProps,\n SplitterStyles,\n} from \"./components/Splitter\";\nexport { Masonry } from \"./components/Masonry\";\nexport type {\n MasonryBreakpoint,\n MasonryGap,\n MasonryGutter,\n MasonryItem,\n MasonryProps,\n MasonryRef,\n MasonryResponsiveValue,\n} from \"./components/Masonry\";\nexport { Breadcrumb } from \"./components/Breadcrumb\";\nexport type {\n BreadcrumbItem,\n BreadcrumbItemProps,\n BreadcrumbProps,\n BreadcrumbSeparatorProps,\n} from \"./components/Breadcrumb\";\nexport { Button } from \"./components/Button\";\nexport type {\n AntdButtonSize,\n AntdButtonVariant,\n ButtonColor,\n ButtonProps,\n ButtonShape,\n ButtonSize,\n ButtonStatus,\n ButtonTone,\n ButtonType,\n ButtonVariant,\n ButtonWidth,\n} from \"./components/Button\";\nexport { ButtonGroup } from \"./components/ButtonGroup\";\nexport type { ButtonGroupProps } from \"./components/ButtonGroup\";\nexport { Card } from \"./components/Card\";\nexport type {\n CardGridProps,\n CardMetaProps,\n CardProps,\n CardSize,\n CardTabListType,\n CardVariant,\n} from \"./components/Card\";\nexport { Carousel } from \"./components/Carousel\";\nexport type {\n CarouselEffect,\n CarouselIndicator,\n CarouselItem,\n CarouselProps,\n CarouselRef,\n DotPlacement,\n Settings,\n} from \"./components/Carousel\";\nexport { Checkbox } from \"./components/Checkbox\";\nexport type {\n CheckboxChangeEvent,\n CheckboxGroupProps,\n CheckboxOptionType,\n CheckboxProps,\n CheckboxRef,\n CheckboxStatus,\n CheckboxValueType,\n} from \"./components/Checkbox\";\nexport { Collapse } from \"./components/Collapse\";\nexport type {\n CollapseExpandIconPosition,\n CollapseItem,\n CollapsePanelProps,\n CollapseProps,\n CollapseSize,\n} from \"./components/Collapse\";\nexport { Color, ColorPicker } from \"./components/ColorPicker\";\nexport type {\n ColorGenInput,\n ColorFormatType,\n ColorPickerClassNames,\n ColorPickerPanelProps,\n ColorPickerProps,\n ColorPickerRef,\n ColorPickerSemanticClassNames,\n ColorPickerSemanticStyles,\n ColorPickerSize,\n ColorPickerStyles,\n ColorPickerTrigger,\n ColorValueType,\n Colors,\n GradientColor,\n LineGradientType,\n ModeType as ColorPickerMode,\n PresetsItem as ColorPickerPreset,\n SingleValueType as ColorPickerSingleValue,\n} from \"./components/ColorPicker\";\nexport { Divider } from \"./components/Divider\";\nexport type {\n DividerOrientation,\n DividerProps,\n DividerSize,\n DividerTitlePlacement,\n DividerVariant,\n} from \"./components/Divider\";\nexport { Drawer } from \"./components/Drawer\";\nexport type {\n DrawerPlacement,\n DrawerProps,\n DrawerPush,\n DrawerResizable,\n DrawerSize,\n DrawerClosable,\n DrawerMask,\n} from \"./components/Drawer\";\nexport { Dropdown } from \"./components/Dropdown\";\nexport type {\n DropdownArrowOptions,\n DropdownMenu,\n DropdownMenuItem,\n DropdownPlacement,\n DropdownProps,\n DropdownTrigger,\n} from \"./components/Dropdown\";\nexport { Empty } from \"./components/Empty\";\nexport type { EmptyProps } from \"./components/Empty\";\nexport { EmptyState } from \"./components/EmptyState\";\nexport { Form } from \"./components/Form\";\nexport type {\n ErrorListProps,\n FormControlStatus,\n FormItemProps,\n FormItemStatus,\n FormItemUseStatusResult,\n FormListFieldData,\n FormListOperation,\n FormListProps,\n FormProps,\n} from \"./components/Form\";\nexport type { FormInstance, FormRef, NamePath, Rule, RuleObject } from \"@rc-component/form\";\nexport { GameCover } from \"./components/GameCover\";\nexport { Col, Grid, Row, useBreakpoint, useBreakpointValue } from \"./components/Grid\";\nexport type {\n Breakpoint,\n BreakpointValues,\n ColProps,\n ColSize,\n ColSpanType,\n FlexType,\n GridProps,\n Gutter,\n GutterUnit,\n RowAlign,\n RowJustify,\n RowProps,\n ScreenMap,\n} from \"./components/Grid\";\nexport { Icon } from \"./components/Icon\";\nexport type { IconName, IconProps } from \"./components/Icon\";\nexport { IconButton } from \"./components/IconButton\";\nexport type { IconButtonProps, IconButtonSize, IconButtonTone } from \"./components/IconButton\";\nexport { Input } from \"./components/Input\";\nexport type {\n AntdInputSize,\n AntdInputVariant,\n GroupProps as InputGroupProps,\n InputComponent,\n InputFocusOptions,\n InputProps,\n InputRef,\n InputSize,\n InputStatus,\n InputVariant,\n InputVisualSize,\n OTPProps,\n OTPRef,\n PasswordProps,\n PasswordVisibilityToggle,\n SearchProps as InputSearchProps,\n TextAreaProps,\n TextAreaRef,\n} from \"./components/Input\";\nexport { InputNumber } from \"./components/InputNumber\";\nexport type {\n InputNumberClassNames,\n InputNumberControls,\n InputNumberProps,\n InputNumberRef,\n InputNumberStyles,\n InputNumberValue,\n} from \"./components/InputNumber\";\nexport { List } from \"./components/List\";\nexport type {\n ListGridType,\n ListItemLayout,\n ListItemMetaProps,\n ListItemProps,\n ListPaginationConfig,\n ListProps,\n ListSize,\n} from \"./components/List\";\nexport { MenuList } from \"./components/MenuList\";\nexport type { MenuListItem, MenuListProps } from \"./components/MenuList\";\nexport { message, useMessage } from \"./components/Message\";\nexport type {\n ArgsProps as MessageArgsProps,\n ConfigOptions as MessageConfigOptions,\n JointContent as MessageContent,\n MessageArgs,\n MessageClassNames,\n MessageInstance,\n MessageMethods,\n MessageOpen,\n MessageStyles,\n NoticeType as MessageNoticeType,\n TypeOpen as MessageTypeOpen,\n} from \"./components/Message\";\nexport { MessageToast } from \"./components/MessageToast\";\nexport type { MessageType, MessageToastProps } from \"./components/MessageToast\";\nexport { Modal, useModal } from \"./components/Modal\";\nexport type {\n HookModalApi,\n HookModalFunc,\n HookModalFuncReturn,\n ModalComponent,\n ModalConfigUpdate,\n ModalFooterRender,\n ModalFunc,\n ModalFuncProps,\n ModalFuncReturn,\n ModalGlobalConfig,\n ModalProps,\n ModalStaticAction,\n ModalStaticFunctions,\n MousePosition,\n} from \"./components/Modal\";\nexport { Panel } from \"./components/Panel\";\nexport { Pagination } from \"./components/Pagination\";\nexport type { PaginationProps } from \"./components/Pagination\";\nexport { Popconfirm } from \"./components/Popconfirm\";\nexport type { PopconfirmProps } from \"./components/Popconfirm\";\nexport { Popover } from \"./components/Popover\";\nexport type { PopoverProps } from \"./components/Popover\";\nexport { PriceText } from \"./components/PriceText\";\nexport { Progress } from \"./components/Progress\";\nexport type {\n ProgressGapPlacement,\n ProgressGapPosition,\n ProgressGradient,\n ProgressPercentPosition,\n ProgressProps,\n ProgressSemanticSlot,\n ProgressSize,\n ProgressStatus,\n ProgressStrokeLinecap,\n ProgressSuccessProps,\n ProgressType,\n} from \"./components/Progress\";\nexport { ProgressBar } from \"./components/ProgressBar\";\nexport { ProgressButton } from \"./components/ProgressButton\";\nexport { Radio } from \"./components/Radio\";\nexport type {\n RadioChangeEvent,\n RadioChangeEventTarget,\n RadioGroupButtonStyle,\n RadioGroupOptionType,\n RadioGroupProps,\n RadioOptionType,\n RadioProps,\n RadioRef,\n RadioSize,\n RadioValue,\n} from \"./components/Radio\";\nexport { Rate } from \"./components/Rate\";\nexport type { RateProps } from \"./components/Rate\";\nexport { Result } from \"./components/Result\";\nexport type { ResultProps, ResultStatus } from \"./components/Result\";\nexport { SectionHeader } from \"./components/SectionHeader\";\nexport { SelectInput } from \"./components/SelectInput\";\nexport type { SelectInputOption, SelectInputProps } from \"./components/SelectInput\";\nexport { Segmented } from \"./components/Segmented\";\nexport type {\n SegmentedClassNames,\n SegmentedLabeledOption,\n SegmentedLegacyItem,\n SegmentedOption,\n SegmentedProps,\n SegmentedSemanticSlot,\n SegmentedSize,\n SegmentedStyles,\n SegmentedValue,\n} from \"./components/Segmented\";\nexport { SegmentedTabs } from \"./components/SegmentedTabs\";\nexport type {\n SegmentedTabAppearance,\n SegmentedTabIndicator,\n SegmentedTabItem,\n SegmentedTabsProps,\n SegmentedTabSize,\n SegmentedTabsType,\n} from \"./components/SegmentedTabs\";\nexport { Skeleton } from \"./components/Skeleton\";\nexport type {\n SkeletonButtonProps,\n SkeletonElementProps,\n SkeletonProps,\n SkeletonShape,\n SkeletonSize,\n} from \"./components/Skeleton\";\nexport { Slider } from \"./components/Slider\";\nexport type {\n SliderClassNames,\n SliderFormatter,\n SliderMarks,\n SliderProps,\n SliderRange,\n SliderRangeProps,\n SliderRef,\n SliderSingleProps,\n SliderSemanticSlot,\n SliderStyles,\n SliderTooltipProps,\n SliderValue,\n} from \"./components/Slider\";\nexport { Spin } from \"./components/Spin\";\nexport type { SpinProps, SpinSize } from \"./components/Spin\";\nexport { StatCard } from \"./components/StatCard\";\nexport { Statistic } from \"./components/Statistic\";\nexport type {\n CountdownProps,\n StatisticFormatConfig,\n StatisticFormatter,\n StatisticProps,\n StatisticRef,\n StatisticSemanticSlot,\n StatisticTimerProps,\n StatisticTimerType,\n StatisticValue,\n} from \"./components/Statistic\";\nexport { StatusItem } from \"./components/StatusItem\";\nexport { Steps } from \"./components/Steps\";\nexport type {\n ProgressDotRender,\n StepItem,\n StepsIconRender,\n StepsOrientation,\n StepsProps,\n StepsSize,\n StepsTitlePlacement,\n StepsType,\n StepsVariant,\n StepStatus,\n} from \"./components/Steps\";\nexport { Switch } from \"./components/Switch\";\nexport type {\n SwitchChangeEventHandler,\n SwitchClassNames,\n SwitchClickEventHandler,\n SwitchProps,\n SwitchSemanticSlot,\n SwitchSize,\n SwitchStatus,\n SwitchStyles,\n} from \"./components/Switch\";\nexport { Table } from \"./components/Table\";\nexport type {\n ColumnFilterItem,\n ColumnsType,\n FilterValue,\n RowSelectMethod,\n SortOrder,\n TableAction,\n TableChangeExtra,\n TableColumn,\n TableColumnGroupProps,\n TableColumnProps,\n TableFilterDropdownProps,\n TableLocale,\n TablePaginationConfig,\n TablePaginationProps,\n TableProps,\n TableRef,\n TableRowSelection,\n TableSelectionItem,\n TableSelectionPreset,\n TableSorterResult,\n TableSorterTooltipProps,\n TableSorterTooltipTarget,\n} from \"./components/Table\";\nexport { Tabs } from \"./components/Tabs\";\nexport type {\n AntdTabsType,\n CompatibilityProps as TabsCompatibilityProps,\n RcTabsRef,\n TabPaneProps,\n TabsExtensionType,\n TabsItem,\n TabsPosition,\n TabsProps,\n TabsType,\n} from \"./components/Tabs\";\nexport { Tag } from \"./components/Tag\";\nexport type {\n CheckableTagGroupProps,\n CheckableTagOption,\n CheckableTagProps,\n TagClosableConfig,\n TagColor,\n TagPresetColor,\n TagProps,\n TagVariant,\n} from \"./components/Tag\";\nexport { TagPill } from \"./components/TagPill\";\nexport { Tooltip } from \"./components/Tooltip\";\nexport type {\n TooltipAdjustOverflow,\n TooltipArrowOptions,\n TooltipPlacement,\n TooltipProps,\n TooltipRef,\n TooltipTrigger,\n} from \"./components/Tooltip\";\nexport { Link, Paragraph, Text, Title, Typography } from \"./components/Typography\";\nexport type {\n BaseTypographyProps,\n LinkProps,\n ParagraphProps,\n TextProps,\n TextVariant,\n TitleProps,\n TitleVariant,\n TypographyCopyConfig,\n TypographyEllipsisConfig,\n TypographyProps,\n TypographyType,\n} from \"./components/Typography\";\n"
|
|
92
|
+
],
|
|
93
|
+
"mappings": "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",
|
|
94
|
+
"debugId": "099AF37F32B03D8864756E2164756E21",
|
|
95
|
+
"names": []
|
|
96
|
+
}
|