@para-ui/core 5.0.0-beta.12 → 5.0.0-beta.14
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/AGENTS.md +315 -0
- package/AlignBox/component.json +89 -0
- package/Anchor/component.json +130 -0
- package/Argv/component.json +216 -0
- package/AutoBox/component.json +133 -0
- package/AutoButton/component.json +109 -0
- package/AutoTips/component.json +121 -0
- package/Badge/component.json +92 -0
- package/Breadcrumbs/component.json +142 -0
- package/Button/component.json +168 -0
- package/ButtonGroup/component.json +132 -0
- package/Card/component.json +162 -0
- package/Carousel/component.json +142 -0
- package/Cascader/component.json +196 -0
- package/Checkbox/component.json +138 -0
- package/CheckboxGroup/component.json +152 -0
- package/CodeEditor/component.json +189 -0
- package/Collapse/component.json +166 -0
- package/CollapseBox/component.json +84 -0
- package/CollapseLayout/component.json +155 -0
- package/ColorPicker/component.json +142 -0
- package/ComboSelect/component.json +181 -0
- package/Container/component.json +111 -0
- package/ContentBox/component.json +81 -0
- package/CopyText/component.json +118 -0
- package/CycleSelector/component.json +98 -0
- package/DatePicker/component.json +192 -0
- package/Descriptions/component.json +142 -0
- package/Desktop/component.json +171 -0
- package/DragVerify/component.json +114 -0
- package/Drawer/component.json +200 -0
- package/Dropdown/component.json +147 -0
- package/DynamicMultiBox/component.json +278 -0
- package/Empty/component.json +123 -0
- package/FieldForm/component.json +196 -0
- package/Form/component.json +161 -0
- package/FormItem/component.json +171 -0
- package/FunctionModal/component.json +197 -0
- package/Help/component.json +118 -0
- package/HelperText/component.json +126 -0
- package/Image/component.json +165 -0
- package/InputCode/component.json +191 -0
- package/InputLang/component.json +205 -0
- package/InputNumber/component.json +162 -0
- package/Label/component.json +126 -0
- package/Loading/component.json +91 -0
- package/Menu/component.json +180 -0
- package/Message/component.json +246 -0
- package/Modal/component.json +277 -0
- package/MultiBox/component.json +216 -0
- package/Notification/component.json +184 -0
- package/OperateBtn/component.json +134 -0
- package/PageHeader/component.json +112 -0
- package/Pagination/component.json +181 -0
- package/PasswordRules/component.json +105 -0
- package/PopConfirm/component.json +227 -0
- package/PopMenu/component.json +131 -0
- package/Popover/component.json +165 -0
- package/Progress/component.json +161 -0
- package/Prompt/component.json +144 -0
- package/Querying/component.json +96 -0
- package/QuickReply/component.json +129 -0
- package/Radio/component.json +136 -0
- package/RadioGroup/component.json +149 -0
- package/RangeInput/component.json +198 -0
- package/Result/component.json +104 -0
- package/ScrollBar/component.json +115 -0
- package/Search/component.json +177 -0
- package/Select/component.json +244 -0
- package/SelectInput/component.json +184 -0
- package/Selector/component.json +203 -0
- package/SelectorPicker/component.json +179 -0
- package/SingleBox/component.json +151 -0
- package/Slider/component.json +181 -0
- package/SortBox/component.json +108 -0
- package/Status/component.json +104 -0
- package/Stepper/component.json +129 -0
- package/Switch/component.json +207 -0
- package/Table/component.json +547 -0
- package/Tabs/component.json +227 -0
- package/Tag/component.json +221 -0
- package/TextEditor/component.json +186 -0
- package/TextField/component.json +290 -0
- package/TimePicker/component.json +176 -0
- package/Timeline/component.json +110 -0
- package/Title/component.json +156 -0
- package/ToggleButton/component.json +153 -0
- package/Tooltip/component.json +176 -0
- package/Transfer/component.json +157 -0
- package/Tree/component.json +512 -0
- package/Upload/component.json +450 -0
- package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
- package/ai-workflows/02-rbac-operation-buttons.md +290 -0
- package/ai-workflows/03-complex-form-async-cascade.md +350 -0
- package/ai-workflows/04-array-field-form.md +281 -0
- package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
- package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
- package/ai-workflows/07-search-filter-table-trio.md +387 -0
- package/ai-workflows/08-table-advanced-features.md +365 -0
- package/ai-workflows/09-batch-operation-export-progress.md +367 -0
- package/ai-workflows/10-cross-component-state-coordination.md +412 -0
- package/codemods/modal-onCancel-to-onDismiss.js +69 -0
- package/es/AlignBox/component.json +89 -0
- package/es/AlignBox/index.css +1 -1
- package/es/AlignBox/index.d.ts +6 -2
- package/es/AlignBox/index.js +1 -1
- package/es/AlignBox/style/index.css +1 -1
- package/es/Anchor/anchorMenu/index.d.ts +2 -1
- package/es/Anchor/anchorMenu/index.js +36 -33
- package/es/Anchor/component.json +130 -0
- package/es/Anchor/index.js +50 -47
- package/es/Anchor/type.d.ts +8 -4
- package/es/Argv/component.json +216 -0
- package/es/Argv/index.d.ts +5 -6
- package/es/AutoBox/component.json +133 -0
- package/es/AutoBox/index.d.ts +3 -3
- package/es/AutoBox/index.js +1 -1
- package/es/AutoBox/protal.d.ts +2 -2
- package/es/AutoBox/protal.js +32 -29
- package/es/AutoButton/component.json +109 -0
- package/es/AutoButton/index.js +1 -1
- package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
- package/es/AutoTips/autoTipsMultiline/index.js +1 -1
- package/es/AutoTips/component.json +121 -0
- package/es/Badge/component.json +92 -0
- package/es/Breadcrumbs/component.json +142 -0
- package/es/Breadcrumbs/index.js +1 -1
- package/es/Button/SplitButton.d.ts +2 -2
- package/es/Button/component.json +168 -0
- package/es/Button/index.js +44 -44
- package/es/ButtonGroup/component.json +132 -0
- package/es/ButtonGroup/index.d.ts +1 -1
- package/es/Card/component.json +162 -0
- package/es/Card/index.d.ts +2 -2
- package/es/Card/index.js +2 -2
- package/es/Carousel/component.json +142 -0
- package/es/Carousel/index.d.ts +1 -1
- package/es/Cascader/Cascader.js +188 -180
- package/es/Cascader/component.json +196 -0
- package/es/Cascader/hooks/useEntities.js +7 -7
- package/es/Cascader/interface.d.ts +1 -0
- package/es/Cascader/utils/commonUtil.d.ts +1 -1
- package/es/Cascader/utils/commonUtil.js +16 -16
- package/es/Cascader/utils/treeUtil.d.ts +14 -5
- package/es/Cascader/utils/treeUtil.js +1 -1
- package/es/Checkbox/component.json +138 -0
- package/es/CheckboxGroup/component.json +152 -0
- package/es/CodeEditor/component.json +189 -0
- package/es/CodeEditor/index.d.ts +10 -9
- package/es/Collapse/component.json +166 -0
- package/es/Collapse/index.d.ts +1 -1
- package/es/Collapse/index.js +41 -33
- package/es/CollapseBox/component.json +84 -0
- package/es/CollapseLayout/component.json +155 -0
- package/es/ColorPicker/component.json +142 -0
- package/es/ComboSelect/component.json +181 -0
- package/es/ComboSelect/index.js +299 -287
- package/es/ComboSelect/interface.d.ts +6 -3
- package/es/ComboSelect/utils.d.ts +3 -3
- package/es/ComboSelect/utils.js +1 -1
- package/es/Container/component.json +111 -0
- package/es/ContentBox/component.json +81 -0
- package/es/CopyText/component.json +118 -0
- package/es/CycleSelector/component.json +98 -0
- package/es/CycleSelector/index.js +14 -13
- package/es/DatePicker/component.json +192 -0
- package/es/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
- package/es/DatePicker/generatePicker/generateRangePicker.js +73 -65
- package/es/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- package/es/DatePicker/generatePicker/index.d.ts +11 -4
- package/es/Descriptions/component.json +142 -0
- package/es/Descriptions/index.d.ts +1 -1
- package/es/Desktop/component.json +171 -0
- package/es/DragVerify/component.json +114 -0
- package/es/DragVerify/index.js +19 -19
- package/es/Drawer/component.json +200 -0
- package/es/Drawer/index.js +86 -86
- package/es/Drawer/interface.d.ts +1 -1
- package/es/Drawer/util.d.ts +1 -6
- package/es/Drawer/util.js +9 -6
- package/es/Dropdown/component.json +147 -0
- package/es/DynamicMultiBox/component.json +278 -0
- package/es/DynamicMultiBox/formItem.d.ts +1 -1
- package/es/DynamicMultiBox/rowForm.d.ts +2 -2
- package/es/Empty/component.json +123 -0
- package/es/Empty/index.css +1 -1
- package/es/Empty/index.d.ts +2 -2
- package/es/Empty/index.js +27 -26
- package/es/Empty/style/index.css +1 -1
- package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/es/FieldForm/Form.d.ts +2 -2
- package/es/FieldForm/FormList.d.ts +2 -2
- package/es/FieldForm/component.json +196 -0
- package/es/FieldForm/context.d.ts +5 -1
- package/es/FieldForm/context.js +2 -2
- package/es/FieldForm/hooks/useForm.d.ts +4 -3
- package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
- package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
- package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
- package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
- package/es/FieldForm/hooks/useItemRef.js +6 -6
- package/es/Form/component.json +161 -0
- package/es/Form/index.d.ts +52 -49
- package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
- package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
- package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
- package/es/FormItem/compoments/formFile/index.js +8 -8
- package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
- package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
- package/es/FormItem/component.json +171 -0
- package/es/FormItem/index.d.ts +5 -5
- package/es/FormItem/index.js +23 -23
- package/es/FormItem/itemType.js +1 -1
- package/es/FunctionModal/component.json +197 -0
- package/es/FunctionModal/dialog.d.ts +1 -1
- package/es/FunctionModal/modalContext.d.ts +4 -1
- package/es/Help/component.json +118 -0
- package/es/HelperText/component.json +126 -0
- package/es/Image/component.json +165 -0
- package/es/InputCode/component.json +191 -0
- package/es/InputCode/index.d.ts +2 -2
- package/es/InputLang/component.json +205 -0
- package/es/InputLang/index.js +1 -1
- package/es/InputNumber/component.json +162 -0
- package/es/Label/component.json +126 -0
- package/es/Label/index.d.ts +2 -2
- package/es/Loading/component.json +91 -0
- package/es/Menu/component.json +180 -0
- package/es/Message/component.json +246 -0
- package/es/Message/index.d.ts +2 -2
- package/es/Message/index.js +2 -2
- package/es/Modal/Confirm/index.d.ts +1 -1
- package/es/Modal/Confirm/index.js +81 -75
- package/es/Modal/component.json +277 -0
- package/es/Modal/index.d.ts +97 -6
- package/es/Modal/index.js +174 -122
- package/es/Modal/interface.d.ts +1 -0
- package/es/MultiBox/component.json +216 -0
- package/es/MultiBox/index.js +19 -14
- package/es/Notification/component.json +184 -0
- package/es/OperateBtn/component.json +134 -0
- package/es/OperateBtn/index.d.ts +3 -3
- package/es/PageHeader/component.json +112 -0
- package/es/Pagination/component.json +181 -0
- package/es/Pagination/index.js +15 -15
- package/es/PasswordRules/component.json +105 -0
- package/es/PasswordRules/index.d.ts +4 -4
- package/es/PopConfirm/component.json +227 -0
- package/es/PopConfirm/index.d.ts +1 -1
- package/es/PopConfirm/index.js +1 -1
- package/es/PopMenu/component.json +131 -0
- package/es/PopMenu/hooks.d.ts +1 -1
- package/es/PopMenu/index.js +8 -8
- package/es/Popover/component.json +165 -0
- package/es/Popover/index.js +1 -1
- package/es/Progress/component.json +161 -0
- package/es/Prompt/component.json +144 -0
- package/es/Querying/component.json +96 -0
- package/es/Querying/index.css +1 -1
- package/es/Querying/index.d.ts +2 -2
- package/es/Querying/index.js +20 -19
- package/es/Querying/style/index.css +1 -1
- package/es/QuickReply/component.json +129 -0
- package/es/QuickReply/index.d.ts +1 -1
- package/es/Radio/component.json +136 -0
- package/es/RadioGroup/component.json +149 -0
- package/es/RangeInput/component.json +198 -0
- package/es/RangeInput/index.js +1 -1
- package/es/Result/component.json +104 -0
- package/es/ScrollBar/component.json +115 -0
- package/es/Search/component.json +177 -0
- package/es/Search/index.d.ts +1 -1
- package/es/Select/component.json +244 -0
- package/es/Select/index.js +113 -113
- package/es/SelectInput/component.json +184 -0
- package/es/Selector/component.json +203 -0
- package/es/Selector/index.js +28 -27
- package/es/Selector/interface.d.ts +1 -1
- package/es/Selector/selectorMain/index.js +2 -2
- package/es/Selector/selectorNode/index.js +1 -1
- package/es/Selector/util.d.ts +2 -2
- package/es/SelectorPicker/component.json +179 -0
- package/es/SelectorPicker/index.d.ts +5 -5
- package/es/SelectorPicker/index.js +15 -15
- package/es/SingleBox/component.json +151 -0
- package/es/SingleBox/index.d.ts +2 -2
- package/es/Slider/component.json +181 -0
- package/es/SortBox/component.json +108 -0
- package/es/Status/component.json +104 -0
- package/es/Stepper/component.json +129 -0
- package/es/Stepper/index.d.ts +2 -2
- package/es/Switch/component.json +207 -0
- package/es/Switch/index.css +1 -1
- package/es/Switch/index.d.ts +3 -2
- package/es/Switch/index.js +60 -59
- package/es/Switch/style/index.css +1 -1
- package/es/Table/component.json +547 -0
- package/es/Table/index.d.ts +2 -2
- package/es/Table/index.js +414 -414
- package/es/Table/interface.d.ts +6 -0
- package/es/Tabs/component.json +227 -0
- package/es/Tag/component.json +221 -0
- package/es/Tag/index.css +1 -1
- package/es/Tag/index.d.ts +1 -1
- package/es/Tag/index.js +20 -20
- package/es/Tag/style/index.css +1 -1
- package/es/TextEditor/component.json +186 -0
- package/es/TextEditor/index.d.ts +5 -5
- package/es/TextField/component.json +290 -0
- package/es/TextField/index.d.ts +2 -2
- package/es/TimePicker/component.json +176 -0
- package/es/Timeline/component.json +110 -0
- package/es/Title/component.json +156 -0
- package/es/ToggleButton/component.json +153 -0
- package/es/Tooltip/component.json +176 -0
- package/es/Tooltip/index.js +74 -63
- package/es/Tooltip/interface.d.ts +14 -1
- package/es/Tooltip/utils.js +6 -6
- package/es/Transfer/component.json +157 -0
- package/es/Tree/component.json +512 -0
- package/es/Upload/component.json +450 -0
- package/es/Utils/type.d.ts +0 -2
- package/es/index.d.ts +2 -0
- package/es/index.js +1 -1
- package/es/locale/en_US.d.ts +361 -0
- package/es/locale/en_US.js +364 -0
- package/es/locale/index.d.ts +1 -723
- package/es/locale/index2.js +10 -0
- package/es/locale/zh_CN.d.ts +361 -0
- package/es/locale/zh_CN.js +364 -0
- package/lib/AlignBox/component.json +89 -0
- package/lib/AlignBox/index.css +1 -1
- package/lib/AlignBox/index.d.ts +6 -2
- package/lib/AlignBox/index.js +1 -1
- package/lib/AlignBox/style/index.css +1 -1
- package/lib/Anchor/anchorMenu/index.d.ts +2 -1
- package/lib/Anchor/anchorMenu/index.js +1 -1
- package/lib/Anchor/component.json +130 -0
- package/lib/Anchor/index.js +1 -1
- package/lib/Anchor/type.d.ts +8 -4
- package/lib/Argv/component.json +216 -0
- package/lib/Argv/index.d.ts +5 -6
- package/lib/AutoBox/component.json +133 -0
- package/lib/AutoBox/index.d.ts +3 -3
- package/lib/AutoBox/index.js +1 -1
- package/lib/AutoBox/protal.d.ts +2 -2
- package/lib/AutoBox/protal.js +1 -1
- package/lib/AutoButton/component.json +109 -0
- package/lib/AutoButton/index.js +1 -1
- package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
- package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
- package/lib/AutoTips/component.json +121 -0
- package/lib/Badge/component.json +92 -0
- package/lib/Breadcrumbs/component.json +142 -0
- package/lib/Breadcrumbs/index.js +1 -1
- package/lib/Button/SplitButton.d.ts +2 -2
- package/lib/Button/component.json +168 -0
- package/lib/Button/index.js +1 -1
- package/lib/ButtonGroup/component.json +132 -0
- package/lib/ButtonGroup/index.d.ts +1 -1
- package/lib/Card/component.json +162 -0
- package/lib/Card/index.d.ts +2 -2
- package/lib/Card/index.js +1 -1
- package/lib/Carousel/component.json +142 -0
- package/lib/Carousel/index.d.ts +1 -1
- package/lib/Cascader/Cascader.js +1 -1
- package/lib/Cascader/component.json +196 -0
- package/lib/Cascader/hooks/useEntities.js +1 -1
- package/lib/Cascader/interface.d.ts +1 -0
- package/lib/Cascader/utils/commonUtil.d.ts +1 -1
- package/lib/Cascader/utils/commonUtil.js +1 -1
- package/lib/Cascader/utils/treeUtil.d.ts +14 -5
- package/lib/Cascader/utils/treeUtil.js +1 -1
- package/lib/Checkbox/component.json +138 -0
- package/lib/CheckboxGroup/component.json +152 -0
- package/lib/CodeEditor/component.json +189 -0
- package/lib/CodeEditor/index.d.ts +10 -9
- package/lib/Collapse/component.json +166 -0
- package/lib/Collapse/index.d.ts +1 -1
- package/lib/Collapse/index.js +1 -1
- package/lib/CollapseBox/component.json +84 -0
- package/lib/CollapseLayout/component.json +155 -0
- package/lib/ColorPicker/component.json +142 -0
- package/lib/ComboSelect/component.json +181 -0
- package/lib/ComboSelect/index.js +1 -1
- package/lib/ComboSelect/interface.d.ts +6 -3
- package/lib/ComboSelect/utils.d.ts +3 -3
- package/lib/ComboSelect/utils.js +1 -1
- package/lib/Container/component.json +111 -0
- package/lib/ContentBox/component.json +81 -0
- package/lib/CopyText/component.json +118 -0
- package/lib/CycleSelector/component.json +98 -0
- package/lib/CycleSelector/index.js +1 -1
- package/lib/DatePicker/component.json +192 -0
- package/lib/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
- package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
- package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- package/lib/DatePicker/generatePicker/index.d.ts +11 -4
- package/lib/Descriptions/component.json +142 -0
- package/lib/Descriptions/index.d.ts +1 -1
- package/lib/Desktop/component.json +171 -0
- package/lib/DragVerify/component.json +114 -0
- package/lib/DragVerify/index.js +1 -1
- package/lib/Drawer/component.json +200 -0
- package/lib/Drawer/index.js +1 -1
- package/lib/Drawer/interface.d.ts +1 -1
- package/lib/Drawer/util.d.ts +1 -6
- package/lib/Drawer/util.js +1 -1
- package/lib/Dropdown/component.json +147 -0
- package/lib/DynamicMultiBox/component.json +278 -0
- package/lib/DynamicMultiBox/formItem.d.ts +1 -1
- package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
- package/lib/Empty/component.json +123 -0
- package/lib/Empty/index.css +1 -1
- package/lib/Empty/index.d.ts +2 -2
- package/lib/Empty/index.js +1 -1
- package/lib/Empty/style/index.css +1 -1
- package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/lib/FieldForm/Form.d.ts +2 -2
- package/lib/FieldForm/FormList.d.ts +2 -2
- package/lib/FieldForm/component.json +196 -0
- package/lib/FieldForm/context.d.ts +5 -1
- package/lib/FieldForm/context.js +1 -1
- package/lib/FieldForm/hooks/useForm.d.ts +4 -3
- package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
- package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
- package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
- package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
- package/lib/FieldForm/hooks/useItemRef.js +1 -1
- package/lib/Form/component.json +161 -0
- package/lib/Form/index.d.ts +52 -49
- package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
- package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
- package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
- package/lib/FormItem/compoments/formFile/index.js +1 -1
- package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
- package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
- package/lib/FormItem/component.json +171 -0
- package/lib/FormItem/index.d.ts +5 -5
- package/lib/FormItem/index.js +1 -1
- package/lib/FormItem/itemType.js +1 -1
- package/lib/FunctionModal/component.json +197 -0
- package/lib/FunctionModal/dialog.d.ts +1 -1
- package/lib/FunctionModal/modalContext.d.ts +4 -1
- package/lib/Help/component.json +118 -0
- package/lib/HelperText/component.json +126 -0
- package/lib/Image/component.json +165 -0
- package/lib/InputCode/component.json +191 -0
- package/lib/InputCode/index.d.ts +2 -2
- package/lib/InputLang/component.json +205 -0
- package/lib/InputLang/index.js +1 -1
- package/lib/InputNumber/component.json +162 -0
- package/lib/Label/component.json +126 -0
- package/lib/Label/index.d.ts +2 -2
- package/lib/Loading/component.json +91 -0
- package/lib/Menu/component.json +180 -0
- package/lib/Message/component.json +246 -0
- package/lib/Message/index.d.ts +2 -2
- package/lib/Message/index.js +1 -1
- package/lib/Modal/Confirm/index.d.ts +1 -1
- package/lib/Modal/Confirm/index.js +1 -1
- package/lib/Modal/component.json +277 -0
- package/lib/Modal/index.d.ts +97 -6
- package/lib/Modal/index.js +1 -1
- package/lib/Modal/interface.d.ts +1 -0
- package/lib/MultiBox/component.json +216 -0
- package/lib/MultiBox/index.js +1 -1
- package/lib/Notification/component.json +184 -0
- package/lib/OperateBtn/component.json +134 -0
- package/lib/OperateBtn/index.d.ts +3 -3
- package/lib/PageHeader/component.json +112 -0
- package/lib/Pagination/component.json +181 -0
- package/lib/Pagination/index.js +1 -1
- package/lib/PasswordRules/component.json +105 -0
- package/lib/PasswordRules/index.d.ts +4 -4
- package/lib/PopConfirm/component.json +227 -0
- package/lib/PopConfirm/index.d.ts +1 -1
- package/lib/PopConfirm/index.js +1 -1
- package/lib/PopMenu/component.json +131 -0
- package/lib/PopMenu/hooks.d.ts +1 -1
- package/lib/PopMenu/index.js +1 -1
- package/lib/Popover/component.json +165 -0
- package/lib/Popover/index.js +1 -1
- package/lib/Progress/component.json +161 -0
- package/lib/Prompt/component.json +144 -0
- package/lib/Querying/component.json +96 -0
- package/lib/Querying/index.css +1 -1
- package/lib/Querying/index.d.ts +2 -2
- package/lib/Querying/index.js +1 -1
- package/lib/Querying/style/index.css +1 -1
- package/lib/QuickReply/component.json +129 -0
- package/lib/QuickReply/index.d.ts +1 -1
- package/lib/Radio/component.json +136 -0
- package/lib/RadioGroup/component.json +149 -0
- package/lib/RangeInput/component.json +198 -0
- package/lib/RangeInput/index.js +1 -1
- package/lib/Result/component.json +104 -0
- package/lib/ScrollBar/component.json +115 -0
- package/lib/Search/component.json +177 -0
- package/lib/Search/index.d.ts +1 -1
- package/lib/Select/component.json +244 -0
- package/lib/Select/index.js +1 -1
- package/lib/SelectInput/component.json +184 -0
- package/lib/Selector/component.json +203 -0
- package/lib/Selector/index.js +1 -1
- package/lib/Selector/interface.d.ts +1 -1
- package/lib/Selector/selectorMain/index.js +1 -1
- package/lib/Selector/selectorNode/index.js +1 -1
- package/lib/Selector/util.d.ts +2 -2
- package/lib/SelectorPicker/component.json +179 -0
- package/lib/SelectorPicker/index.d.ts +5 -5
- package/lib/SelectorPicker/index.js +1 -1
- package/lib/SingleBox/component.json +151 -0
- package/lib/SingleBox/index.d.ts +2 -2
- package/lib/Slider/component.json +181 -0
- package/lib/SortBox/component.json +108 -0
- package/lib/Status/component.json +104 -0
- package/lib/Stepper/component.json +129 -0
- package/lib/Stepper/index.d.ts +2 -2
- package/lib/Switch/component.json +207 -0
- package/lib/Switch/index.css +1 -1
- package/lib/Switch/index.d.ts +3 -2
- package/lib/Switch/index.js +1 -1
- package/lib/Switch/style/index.css +1 -1
- package/lib/Table/component.json +547 -0
- package/lib/Table/index.d.ts +2 -2
- package/lib/Table/index.js +1 -1
- package/lib/Table/interface.d.ts +6 -0
- package/lib/Tabs/component.json +227 -0
- package/lib/Tag/component.json +221 -0
- package/lib/Tag/index.css +1 -1
- package/lib/Tag/index.d.ts +1 -1
- package/lib/Tag/index.js +1 -1
- package/lib/Tag/style/index.css +1 -1
- package/lib/TextEditor/component.json +186 -0
- package/lib/TextEditor/index.d.ts +5 -5
- package/lib/TextField/component.json +290 -0
- package/lib/TextField/index.d.ts +2 -2
- package/lib/TimePicker/component.json +176 -0
- package/lib/Timeline/component.json +110 -0
- package/lib/Title/component.json +156 -0
- package/lib/ToggleButton/component.json +153 -0
- package/lib/Tooltip/component.json +176 -0
- package/lib/Tooltip/index.js +1 -1
- package/lib/Tooltip/interface.d.ts +14 -1
- package/lib/Tooltip/utils.js +1 -1
- package/lib/Transfer/component.json +157 -0
- package/lib/Tree/component.json +512 -0
- package/lib/Upload/component.json +450 -0
- package/lib/Utils/type.d.ts +0 -2
- package/lib/index.d.ts +2 -0
- package/lib/index.js +1 -1
- package/lib/locale/en_US.d.ts +361 -0
- package/lib/locale/en_US.js +2 -0
- package/lib/locale/index.d.ts +1 -723
- package/lib/locale/index2.js +2 -0
- package/lib/locale/zh_CN.d.ts +361 -0
- package/lib/locale/zh_CN.js +2 -0
- package/package.json +10 -3
- /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
- /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
- /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
- /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ScrollBar",
|
|
3
|
+
"category": "Layout",
|
|
4
|
+
"description": "滚动条美化:既支持全局 CSS 主题(默认场景),也提供 stand-alone 自驱动组件(虚拟列表/Canvas 等高级场景)",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"美化原生滚动条",
|
|
8
|
+
"自驱动滚动指示器"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"固定高度内容溢出滚动(模式 A)",
|
|
12
|
+
"横向画廊(模式 A)",
|
|
13
|
+
"侧边栏/抽屉内容(模式 A)",
|
|
14
|
+
"虚拟列表/Canvas 自定义滚动(模式 B)"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "low"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"themedNative": {
|
|
20
|
+
"meaning": "模式 A:全局 className 主题 + native overflow(99% 场景推荐);使用 className `paraui-v4-scrollbar-{small|medium|large}{-deep}?` + native overflow:auto,不需要 import 任何组件"
|
|
21
|
+
},
|
|
22
|
+
"selfDriven": {
|
|
23
|
+
"meaning": "模式 B:<ScrollBar> stand-alone 组件,业务侧自驱动 scroll state(虚拟列表/Canvas 高级场景);组件本身不接受 children"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"states": [
|
|
27
|
+
"default",
|
|
28
|
+
"scrolling"
|
|
29
|
+
],
|
|
30
|
+
"idealProps": {
|
|
31
|
+
"type": {
|
|
32
|
+
"type": "'horizontal' | 'vertical'",
|
|
33
|
+
"values": ["horizontal", "vertical"],
|
|
34
|
+
"default": "'vertical'",
|
|
35
|
+
"description": "(模式 B)滚动条方向"
|
|
36
|
+
},
|
|
37
|
+
"size": {
|
|
38
|
+
"type": "'small' | 'medium' | 'large'",
|
|
39
|
+
"values": ["small", "medium", "large"],
|
|
40
|
+
"default": "'large'",
|
|
41
|
+
"description": "(模式 B)滚动条粗细;small/medium 同款细(4px),large 粗(8px)"
|
|
42
|
+
},
|
|
43
|
+
"color": {
|
|
44
|
+
"type": "'deep' | 'light'",
|
|
45
|
+
"values": ["deep", "light"],
|
|
46
|
+
"default": "'light'",
|
|
47
|
+
"description": "(模式 B)配色;light 浅背景,deep 深背景"
|
|
48
|
+
},
|
|
49
|
+
"scrollTotalLength": {
|
|
50
|
+
"type": "number",
|
|
51
|
+
"description": "(模式 B)内容总滚动距离(px);= contentTotalSize - visualWindowSize;业务侧从 scrollHeight - clientHeight 计算并传入"
|
|
52
|
+
},
|
|
53
|
+
"scrollLength": {
|
|
54
|
+
"type": "number",
|
|
55
|
+
"description": "(模式 B)当前滚动距离(px);业务侧从 native scrollTop/scrollLeft 同步进来;变化时组件移动滑块位置"
|
|
56
|
+
},
|
|
57
|
+
"onScroll": {
|
|
58
|
+
"type": "function",
|
|
59
|
+
"signature": "(val: number) => void",
|
|
60
|
+
"description": "(模式 B)用户拖拽滚动条时回调;val = 用户操作后业务侧应同步到 native 元素的 scrollTop/scrollLeft 值"
|
|
61
|
+
},
|
|
62
|
+
"themedClassName": {
|
|
63
|
+
"type": "string (literal)",
|
|
64
|
+
"description": "(模式 A)在 native overflow 容器上加 className,从下面选一个:'paraui-v4-scrollbar-small' / 'paraui-v4-scrollbar-medium' / 'paraui-v4-scrollbar-large' / '*-deep' 深色变体;src/Styles/scrollbar.scss 实现 ::-webkit-scrollbar-* 美化"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"do": [
|
|
68
|
+
"默认场景(限高容器 + 子内容溢出)用模式 A:className 主题 + native overflow:auto",
|
|
69
|
+
"横向滚动用 overflowX:auto + className 'paraui-v4-scrollbar-small' 等主题",
|
|
70
|
+
"虚拟列表 / Canvas 等业务侧已有 scroll state 的场景用模式 B:<ScrollBar /> 组件 + scrollTotalLength + scrollLength",
|
|
71
|
+
"深色背景上的滚动条用 *-deep 变体(浅色背景上保持默认或显式 light)"
|
|
72
|
+
],
|
|
73
|
+
"dont": [
|
|
74
|
+
"**不要给 <ScrollBar> 组件传 children**(它不是 scroll 容器,是 visual indicator)",
|
|
75
|
+
"不要在普通业务场景重复实现 scrollTotalLength/scrollLength 计算 — 用模式 A className 即可",
|
|
76
|
+
"不要嵌套两层 ScrollBar 容器(双滚动条体验差)",
|
|
77
|
+
"不要忘了模式 B 必须搭配 native overflow:hidden 的容器才能视觉上接管滚动"
|
|
78
|
+
],
|
|
79
|
+
"events": {
|
|
80
|
+
"onScroll": {
|
|
81
|
+
"signature": "(val: number) => void",
|
|
82
|
+
"asyncSupported": false,
|
|
83
|
+
"examples": [
|
|
84
|
+
"用户拖拽滚动条时触发,val = 应同步到 native 元素的 scrollTop/scrollLeft 值",
|
|
85
|
+
"onScroll={(val) => { nativeRef.current.scrollTop = val; setScrollLength(val); }}",
|
|
86
|
+
"双向绑定:业务侧同时监听 native onScroll 更新 scrollLength prop,ScrollBar.onScroll 更新 native scrollTop"
|
|
87
|
+
],
|
|
88
|
+
"commonMistakes": [
|
|
89
|
+
"只传 onScroll 未更新 native 元素的 scrollTop——val 是期望值,需业务侧手动同步到 DOM",
|
|
90
|
+
"onScroll 和 scrollLength 没有形成闭环——用户拖 scrollbar 时 onScroll 触发更新 scrollTop;native 滚动时 onScroll 不触发,需监听 native onScroll 更新 scrollLength"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"typescriptPitfalls": [
|
|
95
|
+
{
|
|
96
|
+
"issue": "ScrollBar 组件的 Props interface 名是 Props(不是 ScrollBarProps),外部无法直接 import 类型",
|
|
97
|
+
"wrong": "import { ScrollBarProps } from '@para-ui/core/ScrollBar' // 类型未导出",
|
|
98
|
+
"right": "// 直接使用 JSX 不需要类型引用;如需类型可自行 declare 或用 React.ComponentProps<typeof ScrollBar>"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"issue": "scrollTotalLength 传错含义——应是「可滚动距离」不是「内容总高度」",
|
|
102
|
+
"wrong": "scrollTotalLength={contentHeight} // 期望传内容总高度——实际应传 scrollHeight - clientHeight",
|
|
103
|
+
"right": "scrollTotalLength={scrollHeight - clientHeight} // = contentTotalSize - visualWindowSize"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"issue": "模式 A(className 主题)不需要 import ScrollBar 组件,直接加 className 即可",
|
|
107
|
+
"wrong": "import ScrollBar from '@para-ui/core/ScrollBar'; <ScrollBar>...</ScrollBar> // ScrollBar 不接受 children",
|
|
108
|
+
"right": "<div className='paraui-v4-scrollbar-small' style={{overflowY: 'auto'}}>...</div> // 模式 A 不 import 组件"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"mapping": {
|
|
112
|
+
"realComponent": "ScrollBar",
|
|
113
|
+
"adapter": null
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Search",
|
|
3
|
+
"category": "Data Entry",
|
|
4
|
+
"description": "搜索框组件,支持受控/非受控模式、清空按钮、回车和点击按钮触发搜索",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"搜索",
|
|
8
|
+
"过滤"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"列表搜索",
|
|
12
|
+
"全局搜索",
|
|
13
|
+
"筛选"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "low"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"default": {
|
|
19
|
+
"meaning": "默认样式"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"states": [
|
|
23
|
+
"default",
|
|
24
|
+
"focused"
|
|
25
|
+
],
|
|
26
|
+
"idealProps": {
|
|
27
|
+
"value": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "受控输入值(src/Search/index.tsx:26 实证)。与 `defaultValue` 互斥——传 value 后为受控模式,内部 state 不自动更新,需配合 onChange 手动同步"
|
|
30
|
+
},
|
|
31
|
+
"defaultValue": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "非受控初始值(src/Search/index.tsx:24 实证)。组件 mount 时一次性设置,之后内部管理输入 state。与 value 互斥——不要同时传"
|
|
34
|
+
},
|
|
35
|
+
"placeholder": {
|
|
36
|
+
"type": "string | ReactNode",
|
|
37
|
+
"description": "输入框占位文案(src/Search/index.tsx:22 实证,类型 ReactNode,实际用 string 即可)。默认空字符串"
|
|
38
|
+
},
|
|
39
|
+
"allowClear": {
|
|
40
|
+
"type": "boolean",
|
|
41
|
+
"default": true,
|
|
42
|
+
"description": "是否显示清空按钮(src/Search/index.tsx:28 实证,默认 true)。清空时触发 `onClear` 回调"
|
|
43
|
+
},
|
|
44
|
+
"onChange": {
|
|
45
|
+
"type": "function",
|
|
46
|
+
"signature": "(val: string, event: React.ChangeEvent<HTMLInputElement> | null) => void",
|
|
47
|
+
"description": "输入值变化回调(src/Search/index.tsx:30 实证签名,两参:val 字符串值 + event 原生事件)。⚠️ **第一参是 string 值,不是 event**——区别于原生 input onChange。当点击搜索按钮且未传 onClickBtn 时也会触发 onChange(event 此时为 null)"
|
|
48
|
+
},
|
|
49
|
+
"onClickBtn": {
|
|
50
|
+
"type": "function",
|
|
51
|
+
"signature": "(val: string) => void",
|
|
52
|
+
"description": "点击右侧搜索按钮的回调(src/Search/index.tsx:40 实证签名)。参数 val 为当前输入框的值。⚠️ **若不传 onClickBtn,点击按钮会 fallback 触发 onChange**(src:99-104)。`onClickRightIcon` 是其已废弃别名"
|
|
53
|
+
},
|
|
54
|
+
"onEnter": {
|
|
55
|
+
"type": "function",
|
|
56
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
57
|
+
"description": "回车键按下的回调(src/Search/index.tsx:46 实证签名)。通常与 onClickBtn 配合覆盖「按钮触发搜索」和「回车触发搜索」两种路径"
|
|
58
|
+
},
|
|
59
|
+
"onClear": {
|
|
60
|
+
"type": "function",
|
|
61
|
+
"signature": "() => void",
|
|
62
|
+
"description": "点击清空按钮的回调(src/Search/index.tsx:44 实证签名,无参)。清空后输入框值变为空字符串;allowClear=true 时清空按钮才可见"
|
|
63
|
+
},
|
|
64
|
+
"onFocus": {
|
|
65
|
+
"type": "function",
|
|
66
|
+
"signature": "(event: React.FocusEvent<HTMLInputElement>) => void",
|
|
67
|
+
"description": "输入框获得焦点的回调(src/Search/index.tsx:34 实证签名)"
|
|
68
|
+
},
|
|
69
|
+
"onBlur": {
|
|
70
|
+
"type": "function",
|
|
71
|
+
"signature": "(event: React.FocusEvent<HTMLInputElement>) => void",
|
|
72
|
+
"description": "输入框失去焦点的回调(src/Search/index.tsx:32 实证签名)"
|
|
73
|
+
},
|
|
74
|
+
"size": {
|
|
75
|
+
"type": "enum",
|
|
76
|
+
"values": [
|
|
77
|
+
"small",
|
|
78
|
+
"medium",
|
|
79
|
+
"large"
|
|
80
|
+
],
|
|
81
|
+
"default": "large",
|
|
82
|
+
"description": "控件大小(src/Search/index.tsx:18 实证,默认 large)"
|
|
83
|
+
},
|
|
84
|
+
"radius": {
|
|
85
|
+
"type": "boolean",
|
|
86
|
+
"default": false,
|
|
87
|
+
"description": "是否使用圆角样式(src/Search/index.tsx:20 实证)"
|
|
88
|
+
},
|
|
89
|
+
"onClickRightIcon": {
|
|
90
|
+
"type": "function",
|
|
91
|
+
"signature": "(val: string) => void",
|
|
92
|
+
"description": "⚠️ **已废弃,请使用 `onClickBtn`**(src/Search/index.tsx:41 注释实证)。点击输入框右侧图标的回调,与 onClickBtn 同时触发"
|
|
93
|
+
},
|
|
94
|
+
"onKeydown": {
|
|
95
|
+
"type": "function",
|
|
96
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
97
|
+
"description": "键盘按下事件回调(src/Search/index.tsx:36 实证)。⚠️ **注意拼写:onKeydown(非 onKeyDown)**,prop 名首字母 d 小写"
|
|
98
|
+
},
|
|
99
|
+
"onKeyUp": {
|
|
100
|
+
"type": "function",
|
|
101
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
102
|
+
"description": "键盘抬起事件回调(src/Search/index.tsx:38 实证)"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"do": [
|
|
106
|
+
"支持回车搜索:同时传 onEnter 和 onClickBtn 覆盖「回车触发」和「点击按钮触发」两条路径",
|
|
107
|
+
"提供清空按钮:allowClear 默认 true,清空时只触发 onClear,不触发 onChange",
|
|
108
|
+
"受控模式:传 value + onChange 实现受控;onChange 第一参是 string 值(不是 event)",
|
|
109
|
+
"非受控模式:只传 defaultValue,内部管理输入 state;不要同时传 value 和 defaultValue"
|
|
110
|
+
],
|
|
111
|
+
"dont": [
|
|
112
|
+
"不要把 onChange 的第一参当 event 使用——Search.onChange 签名是 (val: string, event) 而非 antd Input.onChange 的 (event) 签名",
|
|
113
|
+
"不要忽略 onClickBtn 为空时点击搜索按钮的 fallback 行为——未传 onClickBtn 时点击会触发 onChange(event 为 null)",
|
|
114
|
+
"搜索时不给反馈(网络搜索场景应配合 loading 状态)"
|
|
115
|
+
],
|
|
116
|
+
"events": {
|
|
117
|
+
"onChange": {
|
|
118
|
+
"signature": "(val: string, event: React.ChangeEvent<HTMLInputElement> | null) => void",
|
|
119
|
+
"asyncSupported": false,
|
|
120
|
+
"examples": [
|
|
121
|
+
"用户实时输入时触发,val 是当前输入框字符串值",
|
|
122
|
+
"点击右侧搜索按钮且未传 onClickBtn 时也触发,此时 event 为 null",
|
|
123
|
+
"受控用法:const [keyword, setKeyword] = useState(''); <Search value={keyword} onChange={(val) => setKeyword(val)} />"
|
|
124
|
+
],
|
|
125
|
+
"commonMistakes": [
|
|
126
|
+
"误按 antd Input 习惯写 onChange={(e) => setValue(e.target.value)} — 第一参是 string 不是 event",
|
|
127
|
+
"期望清空按钮触发 onChange — 清空只触发 onClear,需同时监听 onClear 来清空外部 state",
|
|
128
|
+
"忘记 onClickBtn 未传时 onChange event 参数可能为 null — 应做 null 判断再访问 event.target"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"onClickBtn": {
|
|
132
|
+
"signature": "(val: string) => void",
|
|
133
|
+
"asyncSupported": false,
|
|
134
|
+
"examples": [
|
|
135
|
+
"用户点击右侧搜索图标时触发,val 为当前输入框的值",
|
|
136
|
+
"通常与 onEnter 一起传:点击和回车都调用同一个 search 函数"
|
|
137
|
+
],
|
|
138
|
+
"commonMistakes": [
|
|
139
|
+
"不传 onClickBtn 时点击按钮 fallback 触发 onChange(event=null)— 若只需按钮触发必须显式传 onClickBtn",
|
|
140
|
+
"与 onClickRightIcon 混淆 — onClickRightIcon 是 onClickBtn 的已废弃别名,二者同时触发"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
"onEnter": {
|
|
144
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
145
|
+
"asyncSupported": false,
|
|
146
|
+
"examples": [
|
|
147
|
+
"用户在输入框按回车键触发,event 是 KeyboardEvent",
|
|
148
|
+
"取当前值:event.currentTarget.value 或从外部 state 直接读 keyword"
|
|
149
|
+
],
|
|
150
|
+
"commonMistakes": [
|
|
151
|
+
"与 onClickBtn 语义重复时未合并为同一个函数 — 可在父组件定义 handleSearch 同时传给两个 prop",
|
|
152
|
+
"假设 onEnter 触发时 onChange 也会触发 — 回车不会触发 onChange,需在 onEnter 里单独处理搜索逻辑"
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"typescriptPitfalls": [
|
|
157
|
+
{
|
|
158
|
+
"issue": "onChange 签名与原生 input onChange 不同,第一参是 string 值而非 event",
|
|
159
|
+
"wrong": "onChange={(e) => setVal(e.target.value)} // TS 报 string 没有 .target 属性",
|
|
160
|
+
"right": "onChange={(val) => setVal(val)} // val: string 直接使用"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"issue": "onKeydown prop 名小写 d,不是 onKeyDown(驼峰 D)",
|
|
164
|
+
"wrong": "<Search onKeyDown={handler} /> // prop 名不存在,静默无效",
|
|
165
|
+
"right": "<Search onKeydown={handler} /> // src/Search/index.tsx:36 interface 实证 onKeydown 小写 d"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"issue": "onClickRightIcon 已废弃,运行时与 onClickBtn 同时触发造成双重执行",
|
|
169
|
+
"wrong": "<Search onClickRightIcon={handleSearch} /> // 废弃 API,src 注释明确不建议使用",
|
|
170
|
+
"right": "<Search onClickBtn={handleSearch} /> // 推荐替代 prop"
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"mapping": {
|
|
174
|
+
"realComponent": "Search",
|
|
175
|
+
"adapter": null
|
|
176
|
+
}
|
|
177
|
+
}
|
package/lib/Search/index.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export interface SearchProps {
|
|
|
33
33
|
onClear?: () => void;
|
|
34
34
|
/** 回车事件 */
|
|
35
35
|
onEnter?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
36
|
-
[name: string]:
|
|
36
|
+
[name: string]: unknown;
|
|
37
37
|
}
|
|
38
38
|
export declare const Search: FunctionComponent<SearchProps>;
|
|
39
39
|
export default Search;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Select",
|
|
3
|
+
"category": "Form",
|
|
4
|
+
"description": "下拉选择器,支持单选、多选、搜索和树形数据",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"选择选项",
|
|
8
|
+
"搜素选择",
|
|
9
|
+
"多选"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"表单选择",
|
|
13
|
+
"数据筛选",
|
|
14
|
+
"标签输入"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "normal"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"default": {
|
|
20
|
+
"meaning": "标准选择器"
|
|
21
|
+
},
|
|
22
|
+
"multiple": {
|
|
23
|
+
"meaning": "多选选择器"
|
|
24
|
+
},
|
|
25
|
+
"search": {
|
|
26
|
+
"meaning": "带搜索的选择器"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"states": [
|
|
30
|
+
"default",
|
|
31
|
+
"disabled",
|
|
32
|
+
"error",
|
|
33
|
+
"open",
|
|
34
|
+
"loading"
|
|
35
|
+
],
|
|
36
|
+
"idealProps": {
|
|
37
|
+
"value": {
|
|
38
|
+
"type": "T | T[] | undefined",
|
|
39
|
+
"description": "当前选中的值(受控)。**Select 是泛型组件 `Select<T extends SelectOptionValue, Item extends SelectOptionBase>`**——传 `<Select<'zh-CN'|'en-US'>>` 收紧 value 类型避免 as 强转(DEFECT-003);single=undefined 表示无选中、multiple=[] 表示空选"
|
|
40
|
+
},
|
|
41
|
+
"defaultValue": {
|
|
42
|
+
"type": "T | T[]",
|
|
43
|
+
"description": "默认值(非受控);同时传 value + defaultValue 时以 value 为准"
|
|
44
|
+
},
|
|
45
|
+
"onChange": {
|
|
46
|
+
"type": "(val: T | T[] | undefined, e: React.SyntheticEvent) => void",
|
|
47
|
+
"description": "选中值变化回调。**签名 `(val: T | T[] | undefined, e: React.SyntheticEvent) => void`**(DEFECT-001:src/Select/index.tsx:151/168/240 实证 — 带 e、带泛型 T、明确清空时 val=undefined 而非 '' 或 null)。**multiple=false 时** val 为 `T | undefined`(单选清空 → undefined);**multiple=true 时** val 为 `T[]`(空数组 [] 表已清空)。第二参数 e 是合成事件,业务侧不需要可省略。**泛型用法见 docs/view/select/api.ts 顶部 \"泛型签名\" 注释段**"
|
|
48
|
+
},
|
|
49
|
+
"list": {
|
|
50
|
+
"type": "Item[]",
|
|
51
|
+
"description": "数据源。`Item extends SelectOptionBase`,即 `{ label?: ReactNode; value?: string|number|boolean; disabled?: boolean; children?: SelectOptionBase[] }`。**自定义字段名时(如 cityName/cityCode),interface 必须 extends SelectOptionBase 或加 `label?/value?` 可选字段,否则 TypeScript 报不兼容错误。** 推荐:`interface MyOption extends SelectOptionBase { cityName: string; cityCode: string }` 配合 `showName='cityName' showValue='cityCode'`"
|
|
52
|
+
},
|
|
53
|
+
"renderContent": {
|
|
54
|
+
"type": "function",
|
|
55
|
+
"signature": "(item: Item, type: boolean | 'more') => ReactNode",
|
|
56
|
+
"description": "自定义选项 / 选中态渲染(DEFECT-002)。**第二参数 type 三态**:`type === false` → 渲染选中态(在选择框中回显);`type === true` → 渲染下拉浮层中的每一项;`type === 'more'` → 渲染下拉浮层底部的『更多』占位项。historic 命名 isSelect 实际语义按 type 三态对应"
|
|
57
|
+
},
|
|
58
|
+
"placeholder": {
|
|
59
|
+
"type": "ReactNode",
|
|
60
|
+
"description": "选择框默认文字"
|
|
61
|
+
},
|
|
62
|
+
"disabled": {
|
|
63
|
+
"type": "boolean | any[]",
|
|
64
|
+
"default": false,
|
|
65
|
+
"description": "禁用控制。boolean=整体禁用;any[]=**禁用部分选项的 value 列表**(src 实证 `disabled.indexOf(val)`,传 value 数组而非 option 对象数组或索引)"
|
|
66
|
+
},
|
|
67
|
+
"allowClear": {
|
|
68
|
+
"type": "boolean",
|
|
69
|
+
"default": false,
|
|
70
|
+
"description": "支持清除"
|
|
71
|
+
},
|
|
72
|
+
"search": {
|
|
73
|
+
"type": "boolean",
|
|
74
|
+
"default": false,
|
|
75
|
+
"description": "是否使能搜索(不传 fetchSuggestions 时按 showName 字段做客户端 includes 子串匹配)"
|
|
76
|
+
},
|
|
77
|
+
"multiple": {
|
|
78
|
+
"type": "boolean",
|
|
79
|
+
"default": false,
|
|
80
|
+
"description": "是否多选"
|
|
81
|
+
},
|
|
82
|
+
"size": {
|
|
83
|
+
"type": "enum",
|
|
84
|
+
"values": [
|
|
85
|
+
"small",
|
|
86
|
+
"medium",
|
|
87
|
+
"large"
|
|
88
|
+
],
|
|
89
|
+
"default": "large"
|
|
90
|
+
},
|
|
91
|
+
"label": {
|
|
92
|
+
"type": "ReactNode",
|
|
93
|
+
"description": "标签文本"
|
|
94
|
+
},
|
|
95
|
+
"labelMode": {
|
|
96
|
+
"type": "enum",
|
|
97
|
+
"values": [
|
|
98
|
+
"outside",
|
|
99
|
+
"inside"
|
|
100
|
+
],
|
|
101
|
+
"default": "outside"
|
|
102
|
+
},
|
|
103
|
+
"showName": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"default": "label",
|
|
106
|
+
"required": false,
|
|
107
|
+
"description": "数据源的显示字段名,默认 'label'。⚠️ AI 常见错误:数据源字段名不是 label 时忘记传此 prop,导致下拉无文字或显示 undefined。正确做法:数据格式为 { name, id } 时传 showName='name'"
|
|
108
|
+
},
|
|
109
|
+
"showValue": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"default": "value",
|
|
112
|
+
"required": false,
|
|
113
|
+
"description": "数据源的取值字段名,默认 'value'。⚠️ AI 常见错误:数据源字段名不是 value 时忘记传此 prop,导致 onChange 返回 undefined 或选中异常。正确做法:数据格式为 { name, id } 时传 showValue='id'"
|
|
114
|
+
},
|
|
115
|
+
"childrenName": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"default": "children",
|
|
118
|
+
"required": false,
|
|
119
|
+
"description": "数据源的子级字段名,默认 'children',树形 Select 时使用。数据格式为 { name, id, subItems } 时传 childrenName='subItems'"
|
|
120
|
+
},
|
|
121
|
+
"fetchSuggestions": {
|
|
122
|
+
"type": "(inputValue: string, callback: (suggestions: any[]) => void) => void",
|
|
123
|
+
"required": false,
|
|
124
|
+
"description": "异步搜索回调,search=true 时生效。用户输入时触发,通过 callback 返回建议列表。⚠️ 传了 fetchSuggestions 则客户端 includes 过滤失效,建议列表完全由 callback 控制"
|
|
125
|
+
},
|
|
126
|
+
"searchModel": {
|
|
127
|
+
"type": "enum",
|
|
128
|
+
"values": ["outside", "inside"],
|
|
129
|
+
"default": "inside",
|
|
130
|
+
"required": false,
|
|
131
|
+
"description": "搜索框位置,outside=浮层外(触发框变搜索框)/ inside=浮层内(下拉顶部搜索框,默认)"
|
|
132
|
+
},
|
|
133
|
+
"onClear": {
|
|
134
|
+
"type": "() => void",
|
|
135
|
+
"required": false,
|
|
136
|
+
"description": "点击清空按钮时触发,allowClear=true 时有效"
|
|
137
|
+
},
|
|
138
|
+
"onEnterInput": {
|
|
139
|
+
"type": "(val: string) => void",
|
|
140
|
+
"required": false,
|
|
141
|
+
"description": "搜索框回车事件,val 为当前搜索框输入值"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"commonMisconceptions": [
|
|
145
|
+
"AI 常见错误:数据源字段名不是 label/value 时,忘记传 showName/showValue,导致下拉无数据或显示异常。正确做法:数据格式为 { name, id } 时,应传 showName='name' showValue='id'",
|
|
146
|
+
"AI 常见错误:自定义 interface(如 { cityName, cityCode })直接传给 list,TypeScript 报 '不满足 SelectOptionBase'——正确做法:interface MyOption extends SelectOptionBase { cityName: string; cityCode: string },或在 interface 里加 label?/value? 可选字段",
|
|
147
|
+
"AI 常见错误:onChange 单选清空时误以为 val 为 '' 或 null——实际为 undefined(DEFECT-001)",
|
|
148
|
+
"AI 常见错误:按 renderContent 参数名 isSelect 字面理解——实际按 type 三态(false=选中回显/true=下拉项/'more'=占位)(DEFECT-002)"
|
|
149
|
+
],
|
|
150
|
+
"do": [
|
|
151
|
+
"选项过多时应当使用 search 开启搜索功能",
|
|
152
|
+
"使用 list 属性传入其数据源以优化性能",
|
|
153
|
+
"**显式收紧 value 泛型**:`<Select<'zh-CN'|'en-US'> value={lang} ... />`,避免 as 强转(DEFECT-003)",
|
|
154
|
+
"renderContent 用 type 取值区分三态:`type === false` 选中态、`type === true` 下拉项、`type === 'more'` 占位项",
|
|
155
|
+
"disabled 数组传 value 列表(不是 option 对象、不是索引)"
|
|
156
|
+
],
|
|
157
|
+
"dont": [
|
|
158
|
+
"选项少于 5 个时建议优先使用 Radio.Group",
|
|
159
|
+
"直接在 options 中渲染过于复杂的 DOM 结构",
|
|
160
|
+
"不要假设 onChange 单选清空时 val 为 \\'\\\\'\\\\' 或 null——实际为 undefined(DEFECT-001)",
|
|
161
|
+
"不要按 renderContent 参数名 isSelect 字面理解——实际按 type 三态(DEFECT-002)"
|
|
162
|
+
],
|
|
163
|
+
"events": {
|
|
164
|
+
"onChange": {
|
|
165
|
+
"signature": "(val: T | T[] | undefined, e: React.SyntheticEvent) => void",
|
|
166
|
+
"asyncSupported": false,
|
|
167
|
+
"examples": [
|
|
168
|
+
"单选时接收选中项 value(清空时 val 为 undefined,不是 '' 或 null)",
|
|
169
|
+
"多选时接收当前已选项的 value 数组(清空时 val 为 [])",
|
|
170
|
+
"结合泛型收紧类型:<Select<number> onChange={(val) => setId(val)} />(val 推断为 number | undefined)"
|
|
171
|
+
],
|
|
172
|
+
"commonMistakes": [
|
|
173
|
+
"假设单选清空时 val 为 ''——实际为 undefined(src/Select/index.tsx:151 `onChange?: (val: T | undefined, e: React.SyntheticEvent) => void`)",
|
|
174
|
+
"忽略第二参数 e(SyntheticEvent),直接写 onChange={handleChange} 时 TypeScript 报签名不匹配——应写 (val, _e) => handle(val)",
|
|
175
|
+
"多选模式下假设 val 不会是数组——multiple=true 时 val 始终是 T[],即使只选了一项也是 [item]",
|
|
176
|
+
"假设 onChange 只在点击选项时触发——清空按钮(allowClear=true)也触发 onChange,此时 val 为 undefined 或 []"
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
"onEnter": {
|
|
180
|
+
"signature": "(val: T | T[]) => void",
|
|
181
|
+
"asyncSupported": false,
|
|
182
|
+
"examples": [
|
|
183
|
+
"单选模式:用户在选中项后按回车,val 为当前选中的单值",
|
|
184
|
+
"多选模式:val 为当前已选的 T[] 数组"
|
|
185
|
+
],
|
|
186
|
+
"commonMistakes": [
|
|
187
|
+
"与 onEnterInput 混淆——onEnter 是选中回车(在选项上回车),onEnterInput 是搜索框输入回车(val 为搜索字符串)",
|
|
188
|
+
"假设 onEnter 一定触发——仅在 search=true 或 input=true 模式下且搜索框/输入框有焦点时有效"
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
"onClear": {
|
|
192
|
+
"signature": "() => void",
|
|
193
|
+
"asyncSupported": false,
|
|
194
|
+
"examples": [
|
|
195
|
+
"用户点击清空图标时触发(需 allowClear=true),此时 onChange 也会同时触发"
|
|
196
|
+
],
|
|
197
|
+
"commonMistakes": [
|
|
198
|
+
"只监听 onClear 而不监听 onChange——受控模式下还需在 onChange 中同步清空 state",
|
|
199
|
+
"allowClear=false 时期望 onClear 触发——不会触发,清空按钮不显示"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"onEnterInput": {
|
|
203
|
+
"signature": "(val: string) => void",
|
|
204
|
+
"asyncSupported": false,
|
|
205
|
+
"examples": [
|
|
206
|
+
"搜索框回车时触发,val 为当前输入的字符串——适合实现「按回车新建标签」场景"
|
|
207
|
+
],
|
|
208
|
+
"commonMistakes": [
|
|
209
|
+
"与 onEnter 混淆——onEnterInput 是搜索输入框回车,onEnter 是选项选中回车"
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"typescriptPitfalls": [
|
|
214
|
+
{
|
|
215
|
+
"issue": "onChange 签名带第二参数 e: React.SyntheticEvent,直接传函数时签名不匹配",
|
|
216
|
+
"wrong": "onChange={setLang} // setLang: (val: string) => void,少了 e 参数",
|
|
217
|
+
"right": "onChange={(val, _e) => setLang(val ?? '')} // 显式声明,保持签名兼容"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"issue": "自定义数据结构未 extends SelectOptionBase,直接传给 list 报类型错误",
|
|
221
|
+
"wrong": "interface CityOpt { cityName: string; cityCode: string } // 无 label/value,不兼容 SelectOptionBase",
|
|
222
|
+
"right": "interface CityOpt extends SelectOptionBase { cityName: string; cityCode: string } // 配合 showName='cityName' showValue='cityCode'"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"issue": "disabled 传对象数组而非 value 列表,运行时选项不禁用",
|
|
226
|
+
"wrong": "disabled={[{ label: 'A', value: 'a' }]} // 传了整个 option 对象,indexOf 永远匹配不到",
|
|
227
|
+
"right": "disabled={['a', 'b']} // 传禁用项的 value(取值字段)列表(src 实证 disabled.indexOf(val))"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"issue": "多选模式 value 传单值而非数组,受控不生效",
|
|
231
|
+
"wrong": "<Select multiple value={'a'} /> // multiple=true 时 value 应为 T[]",
|
|
232
|
+
"right": "<Select multiple value={['a']} /> // 多选 value 始终是数组"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"issue": "renderContent 用 isSelect 命名的第二参数字面理解为 boolean,忽略 'more' 态",
|
|
236
|
+
"wrong": "renderContent={(item, isSelect) => isSelect ? <Selected /> : <Option />} // 漏掉 isSelect==='more' 分支",
|
|
237
|
+
"right": "renderContent={(item, type) => type === false ? <Selected /> : type === 'more' ? <MoreTag /> : <Option />}"
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
"mapping": {
|
|
241
|
+
"realComponent": "Select",
|
|
242
|
+
"adapter": null
|
|
243
|
+
}
|
|
244
|
+
}
|
package/lib/Select/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const o=require("../_virtual/jsx-runtime.js"),c=require("react"),wt=require("../Empty/index.js"),$t=require("../Label/index.js"),bt=require("../Dropdown/index.js"),oe=require("@snack-kit/lib"),kt=require("../GlobalContext/index.js"),Qe=require("../node_modules/@para-ui/icons/Close/index.js"),Nt=require("../node_modules/@para-ui/icons/CloseCircleF/index.js"),Mt=require("../node_modules/@para-ui/icons/Down/index.js"),Dt=require("../node_modules/@para-ui/icons/Check/index.js"),qt=require("../GlobalContext/useFormatMessage.js"),Tt=require("./lang/index.js"),pe=require("../AutoTips/index.js"),Lt=require("../Loading/index.js"),Ot=require("../Popover/index.js"),Pt=require("../Search/index.js"),Ft=require("../Tooltip/index.js"),It=require("../HelperText/index.js"),Vt=require("../Hooks/useGlobalProps.js"),h=require("../GlobalContext/constant.js");;/* empty css */const g=(D,f)=>D[f],zt=(D,f,N)=>{D[f]=N},_t=(D,f,N)=>{const C=document.createElement("span");C.id="referenceSpan";const R={width:0,height:0};R.width=C.offsetWidth,R.height=C.offsetHeight,C.style.visibility="hidden",C.style.fontSize=D,C.style.fontFamily=f,C.style.display="inline-block";const z=document.getElementById("referenceSpan");return z&&document.body.removeChild(z),document.body.appendChild(C),typeof C.textContent<"u"?C.textContent=N:C.innerText=N,R.width=parseFloat(window.getComputedStyle(C).width)-R.width,R.height=parseFloat(window.getComputedStyle(C).height)-R.height,document.body.removeChild(C),R},Xe=(D,f)=>{const N=c.useRef(!1);c.useEffect(()=>{N.current?D():N.current=!0},f)};function Ht(D){const f=D,{className:N,style:C,showSelect:R=!0,allowClear:z=!1,emptyProps:ne,size:_="large",labelMode:J="outside",labelTooltip:W,placeholder:le="",searchPlaceholder:Ee,label:H="",input:O=!1,disabled:m=!1,disabledTooltip:ye,multiple:p=!1,required:B=!1,labelSign:P,error:Se=!1,hideErrorDom:Ye,helperText:Ze="",list:re,showName:b="label",showValue:k="value",childrenName:Q="children",value:$,onChange:v,overLine:Re=!1,search:F=!1,searchModel:E="inside",selectPopoverClassName:we,morePopoverClassName:$e,fetchSuggestions:be,searchInputProps:j,onEnter:K,onEnterInput:ke,onClear:de,getPopupContainer:et,renderContent:w,selectCheckIcon:me=!0,blurChangeValueBol:ie=!1}=Vt.default(f,"Select"),fe=(e=[])=>{const s=[];for(let t=0,l=e.length;t<l;t++){const n=e[t];if(typeof n=="object"&&n!==null)s.push(n);else{const u={[b]:n,[k]:n};s.push(u)}}return s},tt=()=>{let e=[];return f.defaultValue!==void 0&&(p?e=oe.DeepClone(f.defaultValue||[]):e=f.defaultValue===""?[]:[f.defaultValue]),$!==void 0&&(p?e=oe.DeepClone($||[]):e=$===""?[]:[$]),e},Ne=()=>{const e=fe(re),s={};for(let t=0,l=e.length;t<l;t++){const n=e[t],u=g(n,Q);if(u&&u.length>0){const a=u;for(let S=0,x=a.length;S<x;S++){const T=a[S],L=String(g(T,k));s[L]=T}}else{const a=String(g(n,k));s[a]=n}}return s},A=c.useRef(null),[Me]=c.useState(`${h.$prefixCls}-select-${oe.UUID()}`),[X]=c.useState(`select-popover-${oe.UUID()}`),[I,Y]=c.useState(!1),[Z,xe]=c.useState(!1),[r,M]=c.useState(tt()),[U,st]=c.useState([]),[y,ot]=c.useState(Ne()),[q,he]=c.useState(null),[ve,De]=c.useState(!1),[d,G]=c.useState(""),[V,qe]=c.useState(!1),[ee,ce]=c.useState(!1),[je,nt]=c.useState(!1),te=c.useRef(null),[i]=c.useState({valueCom:[],listCom:[],searchModel:"inside",openMore:!1}),{language:Te,locale:Le}=c.useContext(kt.default),Oe=qt.default("Select",Tt.default);i.valueCom=[...r],i.listCom=U,i.searchModel=E,i.openMore=ve,c.useEffect(()=>()=>{clearTimeout(i.searchTimer),clearTimeout(i.timer),clearTimeout(i.scrollTimer),clearTimeout(i.dropDownTimer)},[]),Xe(()=>{if($===void 0){M([]);return}M(p?oe.DeepClone($||[]):$===""?[]:[$])},[$,p]),c.useEffect(()=>{ae()},[r,$]),c.useEffect(()=>{if(E==="outside"&&p)return qe(!0);qe(Re)},[Re,E,p,O]),Xe(()=>{ot(Ne())},[re]),c.useEffect(()=>(!V&&p?window.addEventListener("resize",ae):window.removeEventListener("resize",ae),()=>{window.removeEventListener("resize",ae)}),[V,p]),c.useEffect(()=>{r&&r.length>0?xe(!0):(xe(!1),E==="outside"&&xe(d!==""))},[F,d,E,r,O]),c.useEffect(()=>{if(I)if(ce(!0),be)be(d,e=>{const s=fe(e);Fe(s,!0),ce(!1)});else{const e=fe(re);Fe(e),ce(!1)}},[F,d,re,I]),c.useEffect(()=>(I?(clearTimeout(i.openTimer),i.openTimer=setTimeout(()=>{Ie(),window.addEventListener("keydown",Ce)})):(G(""),window.removeEventListener("keydown",Ce)),()=>{clearTimeout(i.openTimer),window.removeEventListener("keydown",Ce)}),[I]),c.useEffect(()=>{m!==!0&&p&&E==="outside"&&ft(d)},[d,p,m,E,O]);const Pe=e=>{if(e===null||e===0)return;e===void 0&&(e=i.valueCom.length);const s=document.querySelector(`.${Me} > .select-content > .check-select-content`);if(s)if(s.scrollHeight>s.clientHeight){const t=Number(e)-1;he(t),Pe(t)}else i.valueCom.length<=e&&_e()},ae=()=>{if(i.valueCom.length===0)return he(null);clearTimeout(i.timer),i.timer=setTimeout(()=>{he(i.valueCom.length),Pe()},50)},Fe=(e,s)=>{const t=[],l=[...e];for(let n=0,u=l.length;n<u;n++){const a={...l[n]},S=g(a,Q);if(S&&S.length>0){const x=S,T=[];for(let L=0,se=x.length;L<se;L++){const ge=x[L];(s||ze(ge))&&T.push(ge)}T.length>0&&(zt(a,Q,T),t.push(a))}else(s||ze(a))&&t.push(a)}st(t),ce(!1),nt(t.length===0)},Ie=()=>{const e=te&&te.current;i.searchModel!=="inside"&&e&&e.focus({preventScroll:!0})},Ve=(e,s)=>{let t=e;const l=t&&(t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector);if(!l)return null;for(;t&&!l.call(t,s);)t=t.parentElement;return t},ze=e=>{let s=!0;if(d.trim()==="")return s;const t=g(e,b);return t&&(typeof t=="number"||typeof t=="string")?t.toString().toLowerCase().indexOf(d.trim().toLowerCase())===-1&&(s=!1):s=!1,s},lt=()=>{m!==!0&&Y(!0)},rt=()=>{Y(!1)},it=e=>{De(!0),Y(!1),e.stopPropagation()},_e=()=>{i.openMore&&De(!1)},ue=(e,s)=>t=>{const l=g(e,k);if(!(typeof m=="object"&&m.indexOf(l)!==-1))if(p){const n=i.valueCom.indexOf(l);n!==-1?i.valueCom.splice(n,1):i.valueCom.push(l),f.value===void 0&&M([...i.valueCom]),v&&v([...i.valueCom],t),s&&K&&K([...i.valueCom]),Ie()}else f.value===void 0&&M([l]),v&&v(l,t),s&&K&&K(l),rt(),G("")},He=(e,s)=>t=>{e||(e={[k]:s,children:[]}),ue(e)(t),t.stopPropagation()},ct=()=>{let e=`${h.$prefixCls}-select`;return p&&!V&&(e+=` ${Me}`),N&&(e+=` ${N}`),_&&(e+=` ${h.$prefixCls}-select-${_}`),Se&&(e+=` ${h.$prefixCls}-select-error`),m===!0&&(e+=` ${h.$prefixCls}-select-disabled`),I&&(e+=` ${h.$prefixCls}-select-open`),p&&(e+=` ${h.$prefixCls}-select-multiple`),V&&(e+=` ${h.$prefixCls}-select-over-line`),R&&(e+=` ${h.$prefixCls}-select-show-select`),r.length>0&&(e+=` ${h.$prefixCls}-select-value`),z&&(e+=` ${h.$prefixCls}-select-allow-clear`),e},at=()=>{let e=`${h.$prefixCls}-select-popover ${h.$prefixCls}-scrollbar-small`;return _&&(e+=` ${h.$prefixCls}-select-popover-${_}`),p?e+=` ${h.$prefixCls}-select-popover-multiple`:e+=` ${h.$prefixCls}-select-popover-radio`,we&&(e+=` ${we}`),R||(e+=` ${h.$prefixCls}-select-popover-hide`),e},ut=()=>{let e=`${h.$prefixCls}-select-more-popover ${h.$prefixCls}-scrollbar-small`;return _&&(e+=` ${h.$prefixCls}-select-more-popover-${_}`),$e&&(e+=` ${$e}`),e},pt=e=>{G(e.target.value),j&&j.onChange&&j.onChange(e)},dt=(e,s)=>{G(e),s&&j?.onChange&&j.onChange(s)},Be=e=>{if(e.keyCode===13){ke&&ke(d);const s=document.querySelector(`.${X} .select-popover-list`);if(s){const t=s.querySelector(".select-popover-list-item-hover");if(s.querySelector(".select-popover-list-item-keydown")||t)return}if(f.input&&d.trim()!==""){if(p){const t=[...r,d];f.value===void 0&&M(t),v&&v(t,e)}else f.value===void 0&&M([d]),v&&v(d,e);G("")}}j&&j.onKeyDown&&j.onKeyDown(e)},mt=e=>{if(f.input&&ie&&d.trim()!==""){if(p){const s=[...r,d];f.value===void 0&&M(s),v&&v(s,e)}else f.value===void 0&&M([d]),v&&v(d,e);G("")}i.inputOpen=!1,j&&j.onBlur?.(e)},ft=e=>{const s=te&&te.current;if(!s)return null;const t=window.getComputedStyle(s),l=t.fontFamily,n=t.fontSize;let a=_t(n,l,e).width;a<10&&(a=10),s.style.width=`${a}px`},Ke=e=>{const{selectDom:s,keyCode:t,currentKeydownDom:l}=e;let n=null,u="nextElementSibling",a=".select-popover-list > div",S=".select-popover-list-item";if(t===38&&(u="previousElementSibling",a=".select-popover-list > div:last-child",S=".select-popover-list-item:last-child"),!l)n=s.querySelector(a);else if(n=l[u],n){if(n.className.indexOf("select-popover-list-group-label")!==-1){const x=l.parentElement;x&&(n=x[u],n||(n=s.querySelector(a)))}}else{const x=l.parentElement;x&&x.className&&x.className.indexOf("select-popover-list-group")!==-1?(n=x[u],n||(n=s.querySelector(a))):n=s.querySelector(a)}if(n)if(n.className.indexOf("select-popover-list-group")!==-1){const x=n.querySelector(S);x&&(x.classList.add("select-popover-list-item-keydown"),Ae(x,s))}else n.classList.add("select-popover-list-item-keydown"),Ae(n,s)},Ae=(e,s)=>{clearTimeout(i.scrollTimer);const t=s.clientHeight,n=e.offsetTop+e.clientHeight-t;i.scroll=!0,n>0?s.scrollTop=n:s.scrollTop=0,i.scrollTimer=setTimeout(()=>{i.scroll=!1},100)},Ce=e=>{const s=document.querySelector(`.${X} .select-popover-list`);if(!s)return;const t=s.querySelector(".select-popover-list-item-select"),l=s.querySelector(".select-popover-list-item-hover"),n=s.querySelector(".select-popover-list-item-keydown");let u=t;if(l&&(u=l),e.keyCode===13){const a=n||l;if(a){const S=a.dataset.val;ue(y[S],!0)({target:n})}else K&&$!==void 0&&K($)}n&&(u=n,n.classList.remove("select-popover-list-item-keydown")),e.keyCode===40&&Ke({selectDom:s,keyCode:e.keyCode,currentKeydownDom:u}),e.keyCode===38&&Ke({selectDom:s,keyCode:e.keyCode,currentKeydownDom:u})},Ue=e=>{if(i.scroll)return;const s=Ve(e.target,".select-popover-list-item");if(!s)return;s.classList.add("select-popover-list-item-hover");const t=document.querySelector(`.${X}`);if(!t)return;const l=t.querySelector(".select-popover-list-item-keydown");l&&l.classList.remove("select-popover-list-item-keydown")},Ge=e=>{const s=Ve(e.target,".select-popover-list-item");s&&s.classList.remove("select-popover-list-item-hover")},xt=c.useMemo(()=>{const e=!!(H||B||P),s=()=>{let t="select-label";return W&&W.className&&(t+=` ${W.className}`),t};return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:J==="outside"&&e&&o.jsxRuntimeExports.jsx($t.default,{label:H,required:B,labelSign:P,...W,className:s()})})},[J,H,P,B,W]),ht=c.useMemo(()=>{const e=()=>J==="outside"?le:o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[H||le,B&&o.jsxRuntimeExports.jsx("span",{className:"select-required",children:"*"}),P&&o.jsxRuntimeExports.jsx("span",{children:P})]});return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:!Z&&o.jsxRuntimeExports.jsx("span",{className:"select-label-placeholder",children:e()})})},[Z,J,le,H,P,B]),Je=e=>{if(m===!0)return null;const s=`${e}-search-outside`;return E==="outside"?o.jsxRuntimeExports.jsx("input",{...j,onClick:t=>{i.inputOpen=!0,j&&j.onClick?.(t)},onBlur:mt,className:s,value:d,onChange:pt,onKeyDown:Be,ref:te}):null},vt=c.useMemo(()=>{const e=()=>{if(d!==""&&(E==="outside"||O))return null;const s=String(r[0]),t=y[s]&&g(y[s],b)||r[0],l=w&&w(y[s],!1);return V?l||t:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:l||t})};return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:!p&&o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[o.jsxRuntimeExports.jsx("div",{className:"radio-select-content",children:e()}),Je("radio")]})})},[p,Z,V,y,r,b,F,E,d,m,O,j,w,ie]),jt=c.useMemo(()=>{const e=s=>{const t=String(r[s]),l=y[t]&&g(y[t],b)||r[s];return w&&w(y[t],!1)||l};return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:p&&o.jsxRuntimeExports.jsxs("div",{className:"check-select-content",children:[r&&r.map((s,t)=>{if(q!==null&&q<=t)return null;let l=!0;(m===!0||typeof m=="object"&&m.indexOf(r[t])!==-1)&&(l=!1);let n="check-select-content-item check-select-content-item-select";return l||(n+=" check-select-content-item-noclose"),o.jsxRuntimeExports.jsxs("div",{className:n,children:[o.jsxRuntimeExports.jsx("span",{children:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:e(t)})}),l&&o.jsxRuntimeExports.jsx(Qe.Close,{onClick:He(y[String(r[t])],r[t])})]},t)}),(()=>{if(q!==null&&r.length>q)return o.jsxRuntimeExports.jsx("div",{className:"check-select-content-item check-select-content-item-more",onClick:it,children:o.jsxRuntimeExports.jsxs("span",{children:["+",r.length-q]})})})(),Je("check")]})})},[p,Z,r,q,y,m,v,d,F,E,O,j,w,ie]),Ct=e=>{e.stopPropagation();const s=[];let t;if(p&&(t=[],m instanceof Array))for(let l=0,n=r.length;l<n;l++){const u=r[l];m.indexOf(u)!==-1&&(t.push(u),s.push(u))}f.value===void 0&&M(s),v&&v(t,e),Y(!1),de&&de()},gt=()=>{if(r.length>0&&m!==!0&&z)return o.jsxRuntimeExports.jsx("span",{className:"clean-up-icon",onClick:Ct,children:o.jsxRuntimeExports.jsx(Nt.CloseCircleF,{})})},Et=()=>{const e=s=>{const t=String(r[s]),l=y[t]&&g(y[t],b)||r[s];return w&&w(y[t],"more")||l};return o.jsxRuntimeExports.jsxs("div",{className:"select-more",children:[o.jsxRuntimeExports.jsx("div",{className:"select-more-title",children:o.jsxRuntimeExports.jsx("span",{children:Oe({id:"more"})})}),o.jsxRuntimeExports.jsx("div",{className:"select-more-content",children:r&&r.map((s,t)=>{if(q!==null&&q>t)return null;let l=!0;return(m===!0||typeof m=="object"&&m.indexOf(r[t])!==-1)&&(l=!1),o.jsxRuntimeExports.jsxs("div",{className:"select-more-content-item",children:[o.jsxRuntimeExports.jsx("span",{children:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:e(t)})}),l&&o.jsxRuntimeExports.jsx(Qe.Close,{onClick:He(y[String(r[t])],r[t])})]},t)})})]})},We=c.useMemo(()=>o.jsxRuntimeExports.jsx(Ot.Popover,{placement:"bottom-end",visible:ve,content:Et(),onVisibleChange:_e,overlayClassName:ut(),children:o.jsxRuntimeExports.jsxs("div",{className:"select-content",onClick:lt,ref:A,children:[ht,o.jsxRuntimeExports.jsxs("span",{className:"select-svg",children:[o.jsxRuntimeExports.jsx(Mt.Down,{}),gt()]}),vt,jt]})}),[A,Z,J,le,H,P,B,V,y,r,b,p,q,m,v,d,E,O,R,j,z,de,ve,w,ie]),yt=c.useMemo(()=>{const e=()=>{let t="select-popover-list";return ee&&(t+=" select-popover-list-loading"),t},s=t=>{const l=g(t,b)||g(t,k),n=w&&w(t,!0);return o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[o.jsxRuntimeExports.jsx("span",{className:"select-popover-list-item-label",children:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:n||l})}),p&&me&&o.jsxRuntimeExports.jsx("span",{className:"select-popover-list-item-svg",children:o.jsxRuntimeExports.jsx(Dt.Check,{})})]})};return o.jsxRuntimeExports.jsxs("div",{className:e(),style:{outline:"1px solid transparent"},children:[U&&U.length>0?o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:U.map((t,l)=>{const n=g(t,Q);if(n&&n.length>0){const S=n;return o.jsxRuntimeExports.jsxs("div",{className:"select-popover-list-group",children:[o.jsxRuntimeExports.jsx("span",{className:"select-popover-list-group-label",children:g(t,b)||g(t,k)}),S.map((x,T)=>{const L=g(x,k);let se="select-popover-list-item";return r.indexOf(L)!==-1&&(se+=" select-popover-list-item-select"),typeof m=="object"&&m.indexOf(L)!==-1&&(se+=" select-popover-list-item-disabled"),o.jsxRuntimeExports.jsx("div",{onClick:ue(x),className:se,onMouseEnter:Ue,onMouseLeave:Ge,"data-val":L,children:s(x)},T)})]},l)}const u=g(t,k);let a="select-popover-list-item";return r.indexOf(u)!==-1&&(a+=" select-popover-list-item-select"),typeof m=="object"&&m.indexOf(u)!==-1&&(a+=" select-popover-list-item-disabled"),o.jsxRuntimeExports.jsx("div",{onClick:ue(t),className:a,onMouseEnter:Ue,onMouseLeave:Ge,"data-val":u,children:s(t)},l)})}):!ee&&je&&o.jsxRuntimeExports.jsx("div",{className:"select-nodata",children:o.jsxRuntimeExports.jsx(wt.default,{...ne,size:ne?.size||"small"})}),ee&&o.jsxRuntimeExports.jsx(Lt.Loading,{})]})},[U,b,k,r,v,p,ee,Te,Le,ne,je,w,me]),St=c.useMemo(()=>{if(!R)return"";const e=()=>{let s=`select-popover-content ${X}`;return F&&E==="inside"&&(s+=" select-popover-content-search"),s};return o.jsxRuntimeExports.jsxs("div",{style:{width:`${A&&A.current?A.current.offsetWidth:0}px`},className:e(),children:[F&&E==="inside"&&o.jsxRuntimeExports.jsx(Pt.Search,{placeholder:Ee||Oe({id:"searchPlaceholder"}),onKeydown:Be,value:d,onChange:dt,className:"select-popover-search"}),yt]})},[I,A,U,Q,k,b,r,d,F,X,E,p,Ee,R,ee,j,Te,Le,ne,je,w,me]),Rt=()=>o.jsxRuntimeExports.jsx(bt.Dropdown,{visible:I,placement:"bottomLeft",trigger:["click"],overlay:o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:St}),overlayClassName:at(),getPopupContainer:et,onVisibleChange:e=>{e||(clearTimeout(i.dropDownTimer),i.dropDownTimer=setTimeout(()=>{i.inputOpen||Y(!1)},0))},children:ye?o.jsxRuntimeExports.jsx(Ft.Tooltip,{disabled:!0,...ye,children:We}):We});return o.jsxRuntimeExports.jsxs("div",{className:ct(),style:C,children:[xt,Rt(),o.jsxRuntimeExports.jsx(It.default,{className:"select-error-text",error:Se,helperText:Ze,hideErrorDom:Ye})]})}exports.default=Ht;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const o=require("../_virtual/jsx-runtime.js"),c=require("react"),wt=require("../Empty/index.js"),$t=require("../Label/index.js"),bt=require("../Dropdown/index.js"),oe=require("@snack-kit/lib"),kt=require("../GlobalContext/index.js"),Qe=require("../node_modules/@para-ui/icons/Close/index.js"),Nt=require("../node_modules/@para-ui/icons/CloseCircleF/index.js"),Mt=require("../node_modules/@para-ui/icons/Down/index.js"),Dt=require("../node_modules/@para-ui/icons/Check/index.js"),qt=require("../GlobalContext/useFormatMessage.js"),Tt=require("./lang/index.js"),pe=require("../AutoTips/index.js"),Lt=require("../Loading/index.js"),Ot=require("../Popover/index.js"),Pt=require("../Search/index.js"),Ft=require("../Tooltip/index.js"),It=require("../HelperText/index.js"),Vt=require("../Hooks/useGlobalProps.js"),h=require("../GlobalContext/constant.js");;/* empty css */const E=(D,f)=>D[f],zt=(D,f,N)=>{D[f]=N},_t=(D,f,N)=>{const g=document.createElement("span");g.id="referenceSpan";const R={width:0,height:0};R.width=g.offsetWidth,R.height=g.offsetHeight,g.style.visibility="hidden",g.style.fontSize=D,g.style.fontFamily=f,g.style.display="inline-block";const z=document.getElementById("referenceSpan");return z&&document.body.removeChild(z),document.body.appendChild(g),typeof g.textContent<"u"?g.textContent=N:g.innerText=N,R.width=parseFloat(window.getComputedStyle(g).width)-R.width,R.height=parseFloat(window.getComputedStyle(g).height)-R.height,document.body.removeChild(g),R},Xe=(D,f)=>{const N=c.useRef(!1);c.useEffect(()=>{N.current?D():N.current=!0},f)};function Ht(D){const f=D,{className:N,style:g,showSelect:R=!0,allowClear:z=!1,emptyProps:ne,size:_="large",labelMode:J="outside",labelTooltip:W,placeholder:le="",searchPlaceholder:Ee,label:H="",input:O=!1,disabled:m=!1,disabledTooltip:ye,multiple:p=!1,required:B=!1,labelSign:P,error:Se=!1,hideErrorDom:Ye,helperText:Ze="",list:re,showName:b="label",showValue:k="value",childrenName:Q="children",value:$,onChange:j,overLine:Re=!1,search:F=!1,searchModel:y="inside",selectPopoverClassName:we,morePopoverClassName:$e,fetchSuggestions:be,searchInputProps:C,onEnter:K,onEnterInput:ke,onClear:de,getPopupContainer:et,renderContent:w,selectCheckIcon:me=!0,blurChangeValueBol:ie=!1}=Vt.default(f,"Select"),fe=(e=[])=>{const s=[];for(let t=0,l=e.length;t<l;t++){const n=e[t];if(typeof n=="object"&&n!==null)s.push(n);else{const u={[b]:n,[k]:n};s.push(u)}}return s},tt=()=>{let e=[];return f.defaultValue!==void 0&&(p?e=oe.DeepClone(f.defaultValue||[]):e=f.defaultValue===""?[]:[f.defaultValue]),$!==void 0&&(p?e=oe.DeepClone($||[]):e=$===""?[]:[$]),e},Ne=()=>{const e=fe(re),s={};for(let t=0,l=e.length;t<l;t++){const n=e[t],u=E(n,Q);if(u&&u.length>0){const a=u;for(let S=0,x=a.length;S<x;S++){const T=a[S],L=String(E(T,k));s[L]=T}}else{const a=String(E(n,k));s[a]=n}}return s},A=c.useRef(null),[Me]=c.useState(`${h.$prefixCls}-select-${oe.UUID()}`),[X]=c.useState(`select-popover-${oe.UUID()}`),[I,Y]=c.useState(!1),[Z,xe]=c.useState(!1),[r,M]=c.useState(tt()),[U,st]=c.useState([]),[v,ot]=c.useState(Ne()),[q,he]=c.useState(null),[ve,De]=c.useState(!1),[d,G]=c.useState(""),[V,qe]=c.useState(!1),[ee,ce]=c.useState(!1),[je,nt]=c.useState(!1),te=c.useRef(null),[i]=c.useState({valueCom:[],listCom:[],searchModel:"inside",openMore:!1}),{language:Te,locale:Le}=c.useContext(kt.default),Oe=qt.default("Select",Tt.default);i.valueCom=[...r],i.listCom=U,i.searchModel=y,i.openMore=ve,c.useEffect(()=>()=>{clearTimeout(i.searchTimer),clearTimeout(i.timer),clearTimeout(i.scrollTimer),clearTimeout(i.dropDownTimer)},[]),Xe(()=>{if($===void 0){M([]);return}M(p?oe.DeepClone($||[]):$===""?[]:[$])},[$,p]),c.useEffect(()=>{ae()},[r,$]),c.useEffect(()=>{if(y==="outside"&&p)return qe(!0);qe(Re)},[Re,y,p,O]),Xe(()=>{ot(Ne())},[re]),c.useEffect(()=>(!V&&p?window.addEventListener("resize",ae):window.removeEventListener("resize",ae),()=>{window.removeEventListener("resize",ae)}),[V,p]),c.useEffect(()=>{r&&r.length>0?xe(!0):(xe(!1),y==="outside"&&xe(d!==""))},[F,d,y,r,O]),c.useEffect(()=>{if(I)if(ce(!0),be)be(d,e=>{const s=fe(e);Fe(s,!0),ce(!1)});else{const e=fe(re);Fe(e),ce(!1)}},[F,d,re,I]),c.useEffect(()=>(I?(clearTimeout(i.openTimer),i.openTimer=setTimeout(()=>{Ie(),window.addEventListener("keydown",Ce)})):(G(""),window.removeEventListener("keydown",Ce)),()=>{clearTimeout(i.openTimer),window.removeEventListener("keydown",Ce)}),[I]),c.useEffect(()=>{m!==!0&&p&&y==="outside"&&ft(d)},[d,p,m,y,O]);const Pe=e=>{if(e===null||e===0)return;e===void 0&&(e=i.valueCom.length);const s=document.querySelector(`.${Me} > .select-content > .check-select-content`);if(s)if(s.scrollHeight>s.clientHeight){const t=Number(e)-1;he(t),Pe(t)}else i.valueCom.length<=e&&_e()},ae=()=>{if(i.valueCom.length===0)return he(null);clearTimeout(i.timer),i.timer=setTimeout(()=>{he(i.valueCom.length),Pe()},50)},Fe=(e,s)=>{const t=[],l=[...e];for(let n=0,u=l.length;n<u;n++){const a={...l[n]},S=E(a,Q);if(S&&S.length>0){const x=S,T=[];for(let L=0,se=x.length;L<se;L++){const ge=x[L];(s||ze(ge))&&T.push(ge)}T.length>0&&(zt(a,Q,T),t.push(a))}else(s||ze(a))&&t.push(a)}st(t),ce(!1),nt(t.length===0)},Ie=()=>{const e=te&&te.current;i.searchModel!=="inside"&&e&&e.focus({preventScroll:!0})},Ve=(e,s)=>{let t=e;const l=t&&(t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector);if(!l)return null;for(;t&&!l.call(t,s);)t=t.parentElement;return t},ze=e=>{let s=!0;if(d.trim()==="")return s;const t=E(e,b);return t&&(typeof t=="number"||typeof t=="string")?t.toString().toLowerCase().indexOf(d.trim().toLowerCase())===-1&&(s=!1):s=!1,s},lt=()=>{m!==!0&&Y(!0)},rt=()=>{Y(!1)},it=e=>{De(!0),Y(!1),e.stopPropagation()},_e=()=>{i.openMore&&De(!1)},ue=(e,s)=>t=>{const l=E(e,k);if(!(typeof m=="object"&&m.indexOf(l)!==-1))if(p){const n=i.valueCom.indexOf(l);n!==-1?i.valueCom.splice(n,1):i.valueCom.push(l),f.value===void 0&&M([...i.valueCom]),j&&j([...i.valueCom],t),s&&K&&K([...i.valueCom]),Ie()}else f.value===void 0&&M([l]),j&&j(l,t),s&&K&&K(l),rt(),G("")},He=(e,s)=>t=>{e||(e={[k]:s,children:[]}),ue(e)(t),t.stopPropagation()},ct=()=>{let e=`${h.$prefixCls}-select`;return p&&!V&&(e+=` ${Me}`),N&&(e+=` ${N}`),_&&(e+=` ${h.$prefixCls}-select-${_}`),Se&&(e+=` ${h.$prefixCls}-select-error`),m===!0&&(e+=` ${h.$prefixCls}-select-disabled`),I&&(e+=` ${h.$prefixCls}-select-open`),p&&(e+=` ${h.$prefixCls}-select-multiple`),V&&(e+=` ${h.$prefixCls}-select-over-line`),R&&(e+=` ${h.$prefixCls}-select-show-select`),r.length>0&&(e+=` ${h.$prefixCls}-select-value`),z&&(e+=` ${h.$prefixCls}-select-allow-clear`),e},at=()=>{let e=`${h.$prefixCls}-select-popover ${h.$prefixCls}-scrollbar-small`;return _&&(e+=` ${h.$prefixCls}-select-popover-${_}`),p?e+=` ${h.$prefixCls}-select-popover-multiple`:e+=` ${h.$prefixCls}-select-popover-radio`,we&&(e+=` ${we}`),R||(e+=` ${h.$prefixCls}-select-popover-hide`),e},ut=()=>{let e=`${h.$prefixCls}-select-more-popover ${h.$prefixCls}-scrollbar-small`;return _&&(e+=` ${h.$prefixCls}-select-more-popover-${_}`),$e&&(e+=` ${$e}`),e},pt=e=>{G(e.target.value),C&&C.onChange&&C.onChange(e)},dt=(e,s)=>{G(e),s&&C?.onChange&&C.onChange(s)},Be=e=>{if(e.keyCode===13){ke&&ke(d);const s=document.querySelector(`.${X} .select-popover-list`);if(s){const t=s.querySelector(".select-popover-list-item-hover");if(s.querySelector(".select-popover-list-item-keydown")||t)return}if(f.input&&d.trim()!==""){if(p){const t=[...r,d];f.value===void 0&&M(t),j&&j(t,e)}else f.value===void 0&&M([d]),j&&j(d,e);G("")}}C&&C.onKeyDown&&C.onKeyDown(e)},mt=e=>{if(f.input&&ie&&d.trim()!==""){if(p){const s=[...r,d];f.value===void 0&&M(s),j&&j(s,e)}else f.value===void 0&&M([d]),j&&j(d,e);G("")}i.inputOpen=!1,C&&C.onBlur?.(e)},ft=e=>{const s=te&&te.current;if(!s)return null;const t=window.getComputedStyle(s),l=t.fontFamily,n=t.fontSize;let a=_t(n,l,e).width;a<10&&(a=10),s.style.width=`${a}px`},Ke=e=>{const{selectDom:s,keyCode:t,currentKeydownDom:l}=e;let n=null,u="nextElementSibling",a=".select-popover-list > div",S=".select-popover-list-item";if(t===38&&(u="previousElementSibling",a=".select-popover-list > div:last-child",S=".select-popover-list-item:last-child"),!l)n=s.querySelector(a);else if(n=l[u],n){if(n.className.indexOf("select-popover-list-group-label")!==-1){const x=l.parentElement;x&&(n=x[u],n||(n=s.querySelector(a)))}}else{const x=l.parentElement;x&&x.className&&x.className.indexOf("select-popover-list-group")!==-1?(n=x[u],n||(n=s.querySelector(a))):n=s.querySelector(a)}if(n)if(n.className.indexOf("select-popover-list-group")!==-1){const x=n.querySelector(S);x&&(x.classList.add("select-popover-list-item-keydown"),Ae(x,s))}else n.classList.add("select-popover-list-item-keydown"),Ae(n,s)},Ae=(e,s)=>{clearTimeout(i.scrollTimer);const t=s.clientHeight,n=e.offsetTop+e.clientHeight-t;i.scroll=!0,n>0?s.scrollTop=n:s.scrollTop=0,i.scrollTimer=setTimeout(()=>{i.scroll=!1},100)},Ce=e=>{const s=document.querySelector(`.${X} .select-popover-list`);if(!s)return;const t=s.querySelector(".select-popover-list-item-select"),l=s.querySelector(".select-popover-list-item-hover"),n=s.querySelector(".select-popover-list-item-keydown");let u=t;if(l&&(u=l),e.keyCode===13){const a=n||l;if(a){const S=a.dataset.val;ue(v[S],!0)({target:n})}else K&&$!==void 0&&K($)}n&&(u=n,n.classList.remove("select-popover-list-item-keydown")),e.keyCode===40&&Ke({selectDom:s,keyCode:e.keyCode,currentKeydownDom:u}),e.keyCode===38&&Ke({selectDom:s,keyCode:e.keyCode,currentKeydownDom:u})},Ue=e=>{if(i.scroll)return;const s=Ve(e.target,".select-popover-list-item");if(!s)return;s.classList.add("select-popover-list-item-hover");const t=document.querySelector(`.${X}`);if(!t)return;const l=t.querySelector(".select-popover-list-item-keydown");l&&l.classList.remove("select-popover-list-item-keydown")},Ge=e=>{const s=Ve(e.target,".select-popover-list-item");s&&s.classList.remove("select-popover-list-item-hover")},xt=c.useMemo(()=>{const e=!!(H||B||P),s=()=>{let t="select-label";return W&&W.className&&(t+=` ${W.className}`),t};return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:J==="outside"&&e&&o.jsxRuntimeExports.jsx($t.default,{label:H,required:B,labelSign:P,...W,className:s()})})},[J,H,P,B,W]),ht=c.useMemo(()=>{const e=()=>J==="outside"?le:o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[H||le,B&&o.jsxRuntimeExports.jsx("span",{className:"select-required",children:"*"}),P&&o.jsxRuntimeExports.jsx("span",{children:P})]});return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:!Z&&o.jsxRuntimeExports.jsx("span",{className:"select-label-placeholder",children:e()})})},[Z,J,le,H,P,B]),Je=e=>{if(m===!0)return null;const s=`${e}-search-outside`;return y==="outside"?o.jsxRuntimeExports.jsx("input",{...C,onClick:t=>{i.inputOpen=!0,C&&C.onClick?.(t)},onBlur:mt,className:s,value:d,onChange:pt,onKeyDown:Be,ref:te}):null},vt=c.useMemo(()=>{const e=()=>{if(d!==""&&(y==="outside"||O))return null;const s=String(r[0]),t=v[s]&&E(v[s],b)||r[0],l=v[s]!==void 0&&w&&w(v[s],!1);return V?l||t:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:l||t})};return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:!p&&o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[o.jsxRuntimeExports.jsx("div",{className:"radio-select-content",children:e()}),Je("radio")]})})},[p,Z,V,v,r,b,F,y,d,m,O,C,w,ie]),jt=c.useMemo(()=>{const e=s=>{const t=String(r[s]),l=v[t]&&E(v[t],b)||r[s];return v[t]!==void 0&&w&&w(v[t],!1)||l};return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:p&&o.jsxRuntimeExports.jsxs("div",{className:"check-select-content",children:[r&&r.map((s,t)=>{if(q!==null&&q<=t)return null;let l=!0;(m===!0||typeof m=="object"&&m.indexOf(r[t])!==-1)&&(l=!1);let n="check-select-content-item check-select-content-item-select";return l||(n+=" check-select-content-item-noclose"),o.jsxRuntimeExports.jsxs("div",{className:n,children:[o.jsxRuntimeExports.jsx("span",{children:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:e(t)})}),l&&o.jsxRuntimeExports.jsx(Qe.Close,{onClick:He(v[String(r[t])],r[t])})]},t)}),(()=>{if(q!==null&&r.length>q)return o.jsxRuntimeExports.jsx("div",{className:"check-select-content-item check-select-content-item-more",onClick:it,children:o.jsxRuntimeExports.jsxs("span",{children:["+",r.length-q]})})})(),Je("check")]})})},[p,Z,r,q,v,m,j,d,F,y,O,C,w,ie]),Ct=e=>{e.stopPropagation();const s=[];let t;if(p&&(t=[],m instanceof Array))for(let l=0,n=r.length;l<n;l++){const u=r[l];m.indexOf(u)!==-1&&(t.push(u),s.push(u))}f.value===void 0&&M(s),j&&j(t,e),Y(!1),de&&de()},gt=()=>{if(r.length>0&&m!==!0&&z)return o.jsxRuntimeExports.jsx("span",{className:"clean-up-icon",onClick:Ct,children:o.jsxRuntimeExports.jsx(Nt.CloseCircleF,{})})},Et=()=>{const e=s=>{const t=String(r[s]),l=v[t]&&E(v[t],b)||r[s];return v[t]!==void 0&&w&&w(v[t],"more")||l};return o.jsxRuntimeExports.jsxs("div",{className:"select-more",children:[o.jsxRuntimeExports.jsx("div",{className:"select-more-title",children:o.jsxRuntimeExports.jsx("span",{children:Oe({id:"more"})})}),o.jsxRuntimeExports.jsx("div",{className:"select-more-content",children:r&&r.map((s,t)=>{if(q!==null&&q>t)return null;let l=!0;return(m===!0||typeof m=="object"&&m.indexOf(r[t])!==-1)&&(l=!1),o.jsxRuntimeExports.jsxs("div",{className:"select-more-content-item",children:[o.jsxRuntimeExports.jsx("span",{children:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:e(t)})}),l&&o.jsxRuntimeExports.jsx(Qe.Close,{onClick:He(v[String(r[t])],r[t])})]},t)})})]})},We=c.useMemo(()=>o.jsxRuntimeExports.jsx(Ot.Popover,{placement:"bottom-end",visible:ve,content:Et(),onVisibleChange:_e,overlayClassName:ut(),children:o.jsxRuntimeExports.jsxs("div",{className:"select-content",onClick:lt,ref:A,children:[ht,o.jsxRuntimeExports.jsxs("span",{className:"select-svg",children:[o.jsxRuntimeExports.jsx(Mt.Down,{}),gt()]}),vt,jt]})}),[A,Z,J,le,H,P,B,V,v,r,b,p,q,m,j,d,y,O,R,C,z,de,ve,w,ie]),yt=c.useMemo(()=>{const e=()=>{let t="select-popover-list";return ee&&(t+=" select-popover-list-loading"),t},s=t=>{const l=E(t,b)||E(t,k),n=w&&w(t,!0);return o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[o.jsxRuntimeExports.jsx("span",{className:"select-popover-list-item-label",children:o.jsxRuntimeExports.jsx(pe.default,{placement:"top-start",children:n||l})}),p&&me&&o.jsxRuntimeExports.jsx("span",{className:"select-popover-list-item-svg",children:o.jsxRuntimeExports.jsx(Dt.Check,{})})]})};return o.jsxRuntimeExports.jsxs("div",{className:e(),style:{outline:"1px solid transparent"},children:[U&&U.length>0?o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:U.map((t,l)=>{const n=E(t,Q);if(n&&n.length>0){const S=n;return o.jsxRuntimeExports.jsxs("div",{className:"select-popover-list-group",children:[o.jsxRuntimeExports.jsx("span",{className:"select-popover-list-group-label",children:E(t,b)||E(t,k)}),S.map((x,T)=>{const L=E(x,k);let se="select-popover-list-item";return r.indexOf(L)!==-1&&(se+=" select-popover-list-item-select"),typeof m=="object"&&m.indexOf(L)!==-1&&(se+=" select-popover-list-item-disabled"),o.jsxRuntimeExports.jsx("div",{onClick:ue(x),className:se,onMouseEnter:Ue,onMouseLeave:Ge,"data-val":L,children:s(x)},T)})]},l)}const u=E(t,k);let a="select-popover-list-item";return r.indexOf(u)!==-1&&(a+=" select-popover-list-item-select"),typeof m=="object"&&m.indexOf(u)!==-1&&(a+=" select-popover-list-item-disabled"),o.jsxRuntimeExports.jsx("div",{onClick:ue(t),className:a,onMouseEnter:Ue,onMouseLeave:Ge,"data-val":u,children:s(t)},l)})}):!ee&&je&&o.jsxRuntimeExports.jsx("div",{className:"select-nodata",children:o.jsxRuntimeExports.jsx(wt.default,{...ne,size:ne?.size||"small"})}),ee&&o.jsxRuntimeExports.jsx(Lt.Loading,{})]})},[U,b,k,r,j,p,ee,Te,Le,ne,je,w,me]),St=c.useMemo(()=>{if(!R)return"";const e=()=>{let s=`select-popover-content ${X}`;return F&&y==="inside"&&(s+=" select-popover-content-search"),s};return o.jsxRuntimeExports.jsxs("div",{style:{width:`${A&&A.current?A.current.offsetWidth:0}px`},className:e(),children:[F&&y==="inside"&&o.jsxRuntimeExports.jsx(Pt.Search,{placeholder:Ee||Oe({id:"searchPlaceholder"}),onKeydown:Be,value:d,onChange:dt,className:"select-popover-search"}),yt]})},[I,A,U,Q,k,b,r,d,F,X,y,p,Ee,R,ee,C,Te,Le,ne,je,w,me]),Rt=()=>o.jsxRuntimeExports.jsx(bt.Dropdown,{visible:I,placement:"bottomLeft",trigger:["click"],overlay:o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:St}),overlayClassName:at(),getPopupContainer:et,onVisibleChange:e=>{e||(clearTimeout(i.dropDownTimer),i.dropDownTimer=setTimeout(()=>{i.inputOpen||Y(!1)},0))},children:ye?o.jsxRuntimeExports.jsx(Ft.Tooltip,{disabled:!0,...ye,children:We}):We});return o.jsxRuntimeExports.jsxs("div",{className:ct(),style:g,children:[xt,Rt(),o.jsxRuntimeExports.jsx(It.default,{className:"select-error-text",error:Se,helperText:Ze,hideErrorDom:Ye})]})}exports.default=Ht;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|