@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,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/DataDisplayPrimitives.tsx", "../../src/utils/cn.ts", "../../src/components/Button.tsx", "../../src/ConfigProvider.tsx", "../../src/utils/slots.ts", "../../src/components/Grid.tsx", "../../src/components/Icon.tsx", "../../src/components/Steps.tsx", "../../src/components/Progress.tsx", "../../src/components/Form.tsx", "../../src/components/form/statusContext.ts", "../../src/components/LayoutPrimitives.tsx", "../../src/components/List.tsx", "../../src/components/Empty.tsx", "../../src/components/Pagination.tsx", "../../src/components/DataEntryPrimitives.tsx", "../../src/components/Input.tsx", "../../src/components/Spin.tsx", "../../src/components/Table.tsx", "../../src/components/table/columnState.tsx", "../../src/components/Checkbox.tsx", "../../src/components/Tooltip.tsx", "../../src/components/table/selection.tsx", "../../src/components/table/types.ts", "../../src/components/table/pagination.tsx", "../../src/pro/index.tsx"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"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",
|
|
6
|
+
"type ClassValue = string | false | null | undefined;\n\nexport function cn(...values: readonly ClassValue[]) {\n return values.filter(Boolean).join(\" \");\n}\n",
|
|
7
|
+
"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",
|
|
8
|
+
"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",
|
|
9
|
+
"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",
|
|
10
|
+
"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",
|
|
11
|
+
"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",
|
|
12
|
+
"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",
|
|
13
|
+
"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",
|
|
14
|
+
"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",
|
|
15
|
+
"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",
|
|
16
|
+
"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",
|
|
17
|
+
"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",
|
|
18
|
+
"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",
|
|
19
|
+
"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",
|
|
20
|
+
"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",
|
|
21
|
+
"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",
|
|
22
|
+
"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",
|
|
23
|
+
"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",
|
|
24
|
+
"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",
|
|
25
|
+
"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",
|
|
26
|
+
"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",
|
|
27
|
+
"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",
|
|
28
|
+
"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",
|
|
29
|
+
"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",
|
|
30
|
+
"import type { ReactNode } from \"react\";\nimport { Descriptions, type DescriptionsProps } from \"../components/DataDisplayPrimitives\";\nimport { Form, type FormProps } from \"../components/Form\";\nimport { Layout, type LayoutProps } from \"../components/LayoutPrimitives\";\nimport { List, type ListProps } from \"../components/List\";\nimport { Table, type TableProps } from \"../components/Table\";\n\nexport interface ProLayoutProps extends Omit<LayoutProps, \"content\"> {\n readonly content?: ReactNode;\n readonly header?: ReactNode;\n readonly sider?: ReactNode;\n}\n\nexport function ProLayout({ children, content, header, sider, ...props }: ProLayoutProps) {\n return (\n <Layout hasSider={Boolean(sider)} {...props}>\n {sider ? <Layout.Sider>{sider}</Layout.Sider> : null}\n <Layout className=\"flex-1\">\n {header ? <Layout.Header>{header}</Layout.Header> : null}\n <Layout.Content>{content ?? children}</Layout.Content>\n </Layout>\n </Layout>\n );\n}\n\nexport function ProForm(props: FormProps) {\n return <Form {...props} />;\n}\n\nexport function ProTable<T>(props: TableProps<T>) {\n return <Table {...props} />;\n}\n\nexport function ProDescriptions(props: DescriptionsProps) {\n return <Descriptions {...props} />;\n}\n\nexport function ProList<T>(props: ListProps<T>) {\n return <List {...props} />;\n}\n\nexport function EditableProTable<T>(props: TableProps<T>) {\n return <Table {...props} />;\n}\n"
|
|
31
|
+
],
|
|
32
|
+
"mappings": "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",
|
|
33
|
+
"debugId": "9BF17D0401E3EEC664756E2164756E21",
|
|
34
|
+
"names": []
|
|
35
|
+
}
|