@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,184 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "SelectInput",
|
|
3
|
+
"category": "Data Entry",
|
|
4
|
+
"description": "下拉输入框,结合下拉选择和文本输入",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"组合输入",
|
|
8
|
+
"带搜索的选择"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"分类选择",
|
|
12
|
+
"带输入的下拉",
|
|
13
|
+
"联想输入"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "normal"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"default": {
|
|
19
|
+
"meaning": "默认样式"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"states": [
|
|
23
|
+
"default",
|
|
24
|
+
"disabled",
|
|
25
|
+
"error"
|
|
26
|
+
],
|
|
27
|
+
"idealProps": {
|
|
28
|
+
"value": {
|
|
29
|
+
"type": "any",
|
|
30
|
+
"description": "受控值;multiple=true 时为数组,multiple=false(默认)时为单值;必须配合 onChange。**单值类型**:list 项 value 字段值(string / number 取决于 SelectOptionBase.value 实际类型)"
|
|
31
|
+
},
|
|
32
|
+
"defaultValue": {
|
|
33
|
+
"type": "any",
|
|
34
|
+
"description": "非受控默认值;类型规则同 value"
|
|
35
|
+
},
|
|
36
|
+
"onChange": {
|
|
37
|
+
"type": "(val, e) => void",
|
|
38
|
+
"description": "值变化回调。**实际签名**(协议 SI1):multiple=false → `(val: string | undefined, e: SyntheticEvent) => void`(清空时 val 为 undefined);multiple=true → `(val: string[], e) => void`。**val 是 list 项 value 字段值**(不是整个对象);业务 `(next: string) => void` 透传桥接:`onChange={(val) => onChange((val ?? '') as string)}` 显式过 undefined"
|
|
39
|
+
},
|
|
40
|
+
"list": {
|
|
41
|
+
"type": "SelectOptionBase[]",
|
|
42
|
+
"itemSchema": {
|
|
43
|
+
"label": { "type": "ReactNode", "required": true, "description": "选项显示文案" },
|
|
44
|
+
"value": { "type": "any", "required": true, "description": "选项值(onChange 回调的 val 是此字段值)" },
|
|
45
|
+
"children": { "type": "any[]", "description": "子选项" },
|
|
46
|
+
"disabled": { "type": "boolean", "description": "是否禁用" }
|
|
47
|
+
},
|
|
48
|
+
"description": "下拉选项数组;项 = `{ label: ReactNode, value: any, children?: any[], disabled?: boolean }`。空数组或不传时 showSelect 自动 false。**string[] 转换**(协议 SI5):`options.map(opt => ({label: opt, value: opt}))`"
|
|
49
|
+
},
|
|
50
|
+
"multiple": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"default": false,
|
|
53
|
+
"description": "多选模式;true 时 value 必须为数组"
|
|
54
|
+
},
|
|
55
|
+
"showSelect": {
|
|
56
|
+
"type": "boolean",
|
|
57
|
+
"description": "是否显示下拉浮层;未显式传时,有 list 自动 true,无 list 自动 false。显式 false 退化为纯输入框"
|
|
58
|
+
},
|
|
59
|
+
"showName": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"default": "label",
|
|
62
|
+
"description": "list 项中显示名字段名"
|
|
63
|
+
},
|
|
64
|
+
"showValue": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"default": "value",
|
|
67
|
+
"description": "list 项中选中值字段名"
|
|
68
|
+
},
|
|
69
|
+
"searchModel": {
|
|
70
|
+
"type": "'outside' | 'inside'",
|
|
71
|
+
"values": ["outside", "inside"],
|
|
72
|
+
"default": "inside",
|
|
73
|
+
"description": "搜索框位置(协议 SI3);outside=输入框永远显示在触发按钮位置(联想标签 / 主搜);inside=输入框在浮层展开后才显示(二级筛选)。**fetchSuggestions / 联想推荐 outside**"
|
|
74
|
+
},
|
|
75
|
+
"fetchSuggestions": {
|
|
76
|
+
"type": "(val: string, cb: (data: SelectOptionBase[]) => void) => void",
|
|
77
|
+
"description": "异步联想搜索;与 list 互斥。**搭配 searchModel='outside'**(协议 SI3 / SI4)"
|
|
78
|
+
},
|
|
79
|
+
"onEnterInput": {
|
|
80
|
+
"type": "(val: string) => void",
|
|
81
|
+
"description": "回车事件;val=当前输入框原始文本(非 list 项 value)。**输入新分类必传**(协议 SI4):用户输入下拉外文本时 onChange 不触发,只有 onEnterInput 能捕获"
|
|
82
|
+
},
|
|
83
|
+
"blurChangeValueBol": {
|
|
84
|
+
"type": "boolean",
|
|
85
|
+
"default": false,
|
|
86
|
+
"description": "失焦时是否将输入框文本写回 value;适合搜索式输入立即生效场景"
|
|
87
|
+
},
|
|
88
|
+
"labelMode": {
|
|
89
|
+
"type": "'outside' | 'inside'",
|
|
90
|
+
"values": ["outside", "inside"],
|
|
91
|
+
"default": "outside",
|
|
92
|
+
"description": "标题位置(注:此 prop 命名与 searchModel 不同语义)"
|
|
93
|
+
},
|
|
94
|
+
"overLine": {
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"default": false,
|
|
97
|
+
"description": "已选项是否换行;true=超出 chip 换行,false=单行 + 折叠 '+N'"
|
|
98
|
+
},
|
|
99
|
+
"disabled": {
|
|
100
|
+
"type": "boolean | any[]",
|
|
101
|
+
"description": "禁用;布尔禁全部,数组按 value 禁用部分选项"
|
|
102
|
+
},
|
|
103
|
+
"size": {
|
|
104
|
+
"type": "'small' | 'medium' | 'large'",
|
|
105
|
+
"values": ["small", "medium", "large"],
|
|
106
|
+
"default": "large",
|
|
107
|
+
"description": "尺寸"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"crossPropInteractions": [
|
|
111
|
+
"multiple + onChange 签名 = 两套 union(false 时 val 可 undefined / true 时 val: string[])",
|
|
112
|
+
"fetchSuggestions + searchModel = 推荐配 outside(协议 SI3)",
|
|
113
|
+
"showSelect=false → 强制 searchModel='outside'(纯输入框模式)",
|
|
114
|
+
"onEnterInput + outside = 输入新分类的标准组合(协议 SI4)",
|
|
115
|
+
"list 项 value + showValue = 决定 onChange val 实际类型"
|
|
116
|
+
],
|
|
117
|
+
"commonMisconceptions": [
|
|
118
|
+
"❌ onChange 单参直接透传 `onChange={onChange}` — 实际是双参 + val 可 undefined,TS 不符",
|
|
119
|
+
"❌ onChange val 是整个 SelectOptionBase 对象 — 实际是 value 字段值",
|
|
120
|
+
"❌ outside 模式下纯输入回车自动 onChange — 实际需要 onEnterInput 捕获",
|
|
121
|
+
"❌ fetchSuggestions 默认走 outside — 默认 inside,需显式 searchModel='outside'",
|
|
122
|
+
"❌ string[] 直接传 list — 必须 map 成 SelectOptionBase[] {label, value}"
|
|
123
|
+
],
|
|
124
|
+
"do": [
|
|
125
|
+
"在需要选择并输入的场景使用(比 Select 更自由,比 TextField 带下拉)",
|
|
126
|
+
"支持联想搜索:配合 fetchSuggestions + searchModel='outside' 实现外部输入即触发联想",
|
|
127
|
+
"输入新值回车捕获:配合 onEnterInput 处理用户输入了下拉列表外的文本场景",
|
|
128
|
+
"list 必须传 SelectOptionBase[]:string[] 数组先 map 成 `{label: opt, value: opt}` 形式"
|
|
129
|
+
],
|
|
130
|
+
"dont": [
|
|
131
|
+
"选项过多时不分页(应配合 fetchSuggestions 做异步分页)",
|
|
132
|
+
"忽略键盘操作(onEnterInput 是捕获回车新建条目的关键入口)",
|
|
133
|
+
"直接把 string[] 传给 list——必须 map 成 `[{label, value}]` 形式(协议 SI5)"
|
|
134
|
+
],
|
|
135
|
+
"events": {
|
|
136
|
+
"onChange": {
|
|
137
|
+
"signature": "(val: T | T[] | undefined, e: React.SyntheticEvent) => void",
|
|
138
|
+
"asyncSupported": false,
|
|
139
|
+
"examples": [
|
|
140
|
+
"单选时 val 为选中项 value 字段值(清空时 val 为 undefined,不是 '')",
|
|
141
|
+
"多选时 val 为已选项 value 字段值数组",
|
|
142
|
+
"受控桥接:onChange={(val) => setVal((val ?? '') as string)}"
|
|
143
|
+
],
|
|
144
|
+
"commonMistakes": [
|
|
145
|
+
"直接传 onChange={setValue} 时 TS 报签名不匹配——需要 (val, _e) => setValue(val ?? '')",
|
|
146
|
+
"期望输入框回车触发 onChange——outside 模式下用户输入未选中选项时不触发 onChange,只触发 onEnterInput",
|
|
147
|
+
"误以为 val 是整个 SelectOptionBase 对象——val 是 value 字段值(由 showValue 决定)"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
"onEnterInput": {
|
|
151
|
+
"signature": "(val: string) => void",
|
|
152
|
+
"asyncSupported": false,
|
|
153
|
+
"examples": [
|
|
154
|
+
"用户在输入框回车时触发,val 为输入框的原始字符串",
|
|
155
|
+
"新建标签场景:onEnterInput={(newTag) => setTags([...tags, newTag])}"
|
|
156
|
+
],
|
|
157
|
+
"commonMistakes": [
|
|
158
|
+
"与 onChange 混淆——onEnterInput 是捕获「选项外文本回车」,onChange 是选项选中",
|
|
159
|
+
"忘记传 onEnterInput 导致用户输入新值回车无任何响应"
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"typescriptPitfalls": [
|
|
164
|
+
{
|
|
165
|
+
"issue": "onChange 签名有第二参 e: SyntheticEvent,单参函数直接传报 TS 错误",
|
|
166
|
+
"wrong": "onChange={setVal} // setVal: (v: string) => void,缺少 e 参数",
|
|
167
|
+
"right": "onChange={(val, _e) => setVal(val ?? '')} // 显式声明两参,_e 忽略"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"issue": "list 传 string[] 直接报 TS 不兼容 SelectOptionBase[]",
|
|
171
|
+
"wrong": "list={['option1', 'option2']} // string 不满足 SelectOptionBase 接口",
|
|
172
|
+
"right": "list={['option1', 'option2'].map(s => ({ label: s, value: s }))} // 转换为 SelectOptionBase[]"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"issue": "SelectInput extends SelectProps(Single | Multiple 联合),在泛型 T 未能被推断时 onChange 的 val 参数可能隐式 any(TS7006),需要显式标注参数类型",
|
|
176
|
+
"wrong": "onChange={(val, _e) => setValue(val as string)} // TS7006: val 隐式 any(泛型推断失败时)",
|
|
177
|
+
"right": "// 单选模式:\nonChange={(val: string | undefined, _e: React.SyntheticEvent) => setValue(val)}\n// 多选模式:\nonChange={(val: string[], _e: React.SyntheticEvent) => setValues(val ?? [])}"
|
|
178
|
+
}
|
|
179
|
+
],
|
|
180
|
+
"mapping": {
|
|
181
|
+
"realComponent": "SelectInput",
|
|
182
|
+
"adapter": null
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Selector",
|
|
3
|
+
"category": "Data Entry",
|
|
4
|
+
"description": "选择器组件,支持分页、搜索、多选等功能",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"复杂选择",
|
|
8
|
+
"数据筛选"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"人员选择",
|
|
12
|
+
"组织选择",
|
|
13
|
+
"资源分配"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "normal"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"lr": {
|
|
19
|
+
"meaning": "左右布局"
|
|
20
|
+
},
|
|
21
|
+
"tb": {
|
|
22
|
+
"meaning": "上下布局"
|
|
23
|
+
},
|
|
24
|
+
"list": {
|
|
25
|
+
"meaning": "列表布局"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"states": [
|
|
29
|
+
"default",
|
|
30
|
+
"disabled",
|
|
31
|
+
"error"
|
|
32
|
+
],
|
|
33
|
+
"idealProps": {
|
|
34
|
+
"value": {
|
|
35
|
+
"type": "Record<string, any>[] | Record<string, any>",
|
|
36
|
+
"description": "受控值;radio 模式为单对象(初始无选可传 null),check 模式为对象数组;无 selectMode 时无效。**最小回显格式**(协议 S1):value 对象只需含 rowKey 字段即可匹配回显;外部 string[] keys 反查 = `items.filter(it => keys.includes(it[rowKey]))`"
|
|
37
|
+
},
|
|
38
|
+
"defaultValue": {
|
|
39
|
+
"type": "Record<string, any>[] | Record<string, any>",
|
|
40
|
+
"description": "非受控默认值;类型规则同 value"
|
|
41
|
+
},
|
|
42
|
+
"onChange": {
|
|
43
|
+
"type": "(val, node, rowData) => void",
|
|
44
|
+
"description": "值变化回调;**radio 模式 val 为 Record<string,any>**(单对象 / null),**check 模式 val 为 Record<string,any>[]**(数组 / null);node=出站处理后数据(若传 backDataFieldConfig 则字段映射)、rowData=原始;**出站 keys 提取**:`val.map(it => it[rowKey])`(协议 S1);onSelect 返回 true 时不触发"
|
|
45
|
+
},
|
|
46
|
+
"onSelect": {
|
|
47
|
+
"type": "(item, bol, isAllCheck) => boolean | Promise<boolean>",
|
|
48
|
+
"description": "勾选事件;返回 true 阻断 onChange(二次确认场景);先于 onChange 触发"
|
|
49
|
+
},
|
|
50
|
+
"layout": {
|
|
51
|
+
"type": "'lr' | 'tb' | 'list'",
|
|
52
|
+
"values": ["lr", "tb", "list"],
|
|
53
|
+
"default": "lr",
|
|
54
|
+
"description": "布局;lr=左右、tb=上下、list=纯列表(无已选区,适合内嵌)。**三种 layout 的 value/onChange 受控行为完全一致**(协议 S4),只有视觉差异"
|
|
55
|
+
},
|
|
56
|
+
"selectMode": {
|
|
57
|
+
"type": "'radio' | 'check'",
|
|
58
|
+
"values": ["radio", "check"],
|
|
59
|
+
"description": "选择模式;radio=单选;check=多选+全选;undefined=只读浏览"
|
|
60
|
+
},
|
|
61
|
+
"nodeMode": {
|
|
62
|
+
"type": "'leaf' | 'branch'",
|
|
63
|
+
"values": ["leaf", "branch"],
|
|
64
|
+
"default": "branch",
|
|
65
|
+
"description": "节点选择粒度;leaf=只选叶子;branch=分支/叶子皆可"
|
|
66
|
+
},
|
|
67
|
+
"rowKey": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"default": "'key'",
|
|
70
|
+
"description": "唯一标识字段(协议 S2);**影响 disabled/disabledChild 数组匹配 + value 对象匹配 + 缓存 + 出站 val.key**;data 用 id 时必须传 `rowKey='id'`"
|
|
71
|
+
},
|
|
72
|
+
"data": {
|
|
73
|
+
"type": "SelectorAnyJson[]",
|
|
74
|
+
"description": "本地数据源;与 url 互斥"
|
|
75
|
+
},
|
|
76
|
+
"url": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"description": "远程数据请求地址;搭配 method/params/paramsCallback 使用"
|
|
79
|
+
},
|
|
80
|
+
"pagination": {
|
|
81
|
+
"type": "boolean",
|
|
82
|
+
"default": false,
|
|
83
|
+
"description": "是否远程分页;仅 url 模式生效"
|
|
84
|
+
},
|
|
85
|
+
"search": {
|
|
86
|
+
"type": "boolean",
|
|
87
|
+
"default": false,
|
|
88
|
+
"description": "是否显示搜索框。**本地 data 模式内置关键词过滤无需 onSearch**(协议 S5);url 远程自动重发请求;自定义场景传 onSearch"
|
|
89
|
+
},
|
|
90
|
+
"searchTrigger": {
|
|
91
|
+
"type": "'onChange' | 'onEnter'",
|
|
92
|
+
"values": ["onChange", "onEnter"],
|
|
93
|
+
"default": "onChange",
|
|
94
|
+
"description": "搜索触发时机;onEnter 适合远程节流"
|
|
95
|
+
},
|
|
96
|
+
"fieldConfig": {
|
|
97
|
+
"type": "SelectorFieldConfigProps",
|
|
98
|
+
"description": "入站字段映射(mainTitle/subTitle/img/tag/info/children/parentId/key/type · 省略时自动应用默认值,详见 api.ts default 列)"
|
|
99
|
+
},
|
|
100
|
+
"backDataFieldConfig": {
|
|
101
|
+
"type": "SelectorFieldConfigProps",
|
|
102
|
+
"description": "出站字段映射;onChange 数据字段名转换;默认同 fieldConfig(出站字段名与入站一致)"
|
|
103
|
+
},
|
|
104
|
+
"disabled": {
|
|
105
|
+
"type": "string[] | boolean",
|
|
106
|
+
"default": false,
|
|
107
|
+
"description": "禁用;布尔禁全部,数组按 rowKey 禁用部分"
|
|
108
|
+
},
|
|
109
|
+
"isAllCheck": {
|
|
110
|
+
"type": "boolean",
|
|
111
|
+
"default": true,
|
|
112
|
+
"description": "复选模式下是否显示全选;仅 selectMode=check 生效"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"crossPropInteractions": [
|
|
116
|
+
"value + rowKey = 最小回显对象只需含 rowKey 字段(默认 'key')",
|
|
117
|
+
"selectMode + value 类型:radio→单对象/null,check→对象数组/null",
|
|
118
|
+
"layout='list' + value/onChange = 受控行为与 lr/tb 完全一致(协议 S4)",
|
|
119
|
+
"search + 本地 data = 内置过滤,无需 onSearch;+ url = 自动重发请求",
|
|
120
|
+
"rowKey + data + disabled[] = 三者用同一字段名匹配,改 rowKey 须全链路对齐"
|
|
121
|
+
],
|
|
122
|
+
"commonMisconceptions": [
|
|
123
|
+
"❌ value 必须传完整对象(label/subTitle 等)— 仅需 rowKey 字段即可回显",
|
|
124
|
+
"❌ 本地 data + search 必须传 onSearch — 组件内置过滤,本地场景省略 onSearch",
|
|
125
|
+
"❌ layout='list' 不支持受控 value/onChange — 三种 layout 行为一致",
|
|
126
|
+
"❌ radio 模式初始无选不能传 null — 可传 null 或省略 value prop",
|
|
127
|
+
"❌ data 用 id 字段不改 rowKey — 必须传 rowKey='id' 否则静默 fail"
|
|
128
|
+
],
|
|
129
|
+
"do": [
|
|
130
|
+
"支持服务端分页和搜索",
|
|
131
|
+
"提供面包屑导航",
|
|
132
|
+
"selectMode=check 多选场景显式传 value 数组 + onChange 接数组",
|
|
133
|
+
"data 本地数据源场景与 url 远程数据源场景二选一,不要同时传"
|
|
134
|
+
],
|
|
135
|
+
"dont": [
|
|
136
|
+
"数据量大时不分页",
|
|
137
|
+
"忽略禁用状态",
|
|
138
|
+
"selectMode 切换为 radio 时仍把 value 设为数组(类型不匹配)",
|
|
139
|
+
"onSelect 返回 true 阻断 onChange 后忘记自行更新 value(导致 UI 与 state 不同步)"
|
|
140
|
+
],
|
|
141
|
+
"events": {
|
|
142
|
+
"onChange": {
|
|
143
|
+
"signature": "(val: SelectorAnyJson[] | SelectorAnyJson | null, node: SelectorAnyJson, rowData: SelectorAnyJson) => void",
|
|
144
|
+
"asyncSupported": false,
|
|
145
|
+
"examples": [
|
|
146
|
+
"radio 模式:val 是单个 Record<string,any>,出站取 key 用 val[rowKey]",
|
|
147
|
+
"check 模式:val 是 Record<string,any>[],出站取 key 列表用 val.map(it => it[rowKey])",
|
|
148
|
+
"清空时 val 为 null——受控外部 string[] 兜底:setSelected(val ? val.map(it => it[rowKey]) : [])"
|
|
149
|
+
],
|
|
150
|
+
"commonMistakes": [
|
|
151
|
+
"误把 val 当 rowKey string[] 使用——onChange 返回对象/数组,取 key 需 val[rowKey] 或 map",
|
|
152
|
+
"忘记 rowKey 对齐——data 用 id 字段时传了 rowKey='id' 但 onChange 还用 val.key 取值(实际是 val.id)",
|
|
153
|
+
"radio 模式期望 val 是数组——radio 模式 val 始终是单对象(或 null),不是 [item]"
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
"onSelect": {
|
|
157
|
+
"signature": "(item: SelectorAnyJson | SelectorAnyJson[], bol: boolean, isAllCheck: boolean) => Promise<boolean | void> | (boolean | void)",
|
|
158
|
+
"asyncSupported": true,
|
|
159
|
+
"examples": [
|
|
160
|
+
"返回 true 阻断 onChange:二次确认场景在 onSelect 里弹 Dialog,确认后手动调用 onChange 逻辑",
|
|
161
|
+
"返回 void/false 不阻断,onChange 正常触发",
|
|
162
|
+
"全选时 item 是 SelectorAnyJson[](当前页所有项),isAllCheck=true"
|
|
163
|
+
],
|
|
164
|
+
"commonMistakes": [
|
|
165
|
+
"返回 true 阻断 onChange 后忘记自行更新 value——UI 与 state 不同步",
|
|
166
|
+
"误以为 onSelect 和 onChange 是同一回调——onSelect 先触发且返回值控制是否触发 onChange"
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"onSearch": {
|
|
170
|
+
"signature": "(val: string, reqParams: SearchFuncProps) => Promise<SearchReqDataProps> | SearchReqDataProps",
|
|
171
|
+
"asyncSupported": true,
|
|
172
|
+
"examples": [
|
|
173
|
+
"自定义搜索:return { data: { data: filteredList } }(不分页)",
|
|
174
|
+
"分页搜索:return { data: { data: { list: arr, total: 100 } } }(pagination=true)"
|
|
175
|
+
],
|
|
176
|
+
"commonMistakes": [
|
|
177
|
+
"本地 data 场景传了 onSearch——本地模式内置过滤无需 onSearch,传了会覆盖内置逻辑",
|
|
178
|
+
"返回格式错误:不分页应返回 data.data = SelectorAnyJson[],分页应返回 data.data = { list, total }"
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"typescriptPitfalls": [
|
|
183
|
+
{
|
|
184
|
+
"issue": "data 用非 key 字段作唯一 ID 时忘记传 rowKey,导致选中值匹配静默失败",
|
|
185
|
+
"wrong": "data={[{ id: '1', label: 'A' }]} value={[{ id: '1' }]} // 内部用 .key 匹配,id 字段被忽略",
|
|
186
|
+
"right": "data={[{ id: '1', label: 'A' }]} rowKey='id' value={[{ id: '1' }]} // rowKey 告知用 id 字段"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"issue": "radio 模式 value 传对象数组,check 模式 value 传单对象——类型反了",
|
|
190
|
+
"wrong": "selectMode='radio' value={[{ key: '1' }]} // radio 应为单对象",
|
|
191
|
+
"right": "selectMode='radio' value={{ key: '1' }} // 单对象;check 模式才用数组"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"issue": "disabled 数组传整个对象而非 rowKey 值列表,禁用匹配不生效",
|
|
195
|
+
"wrong": "disabled={[{ key: '1', label: 'A' }]} // src 内部 disabled.indexOf(item.key) 查 string/number",
|
|
196
|
+
"right": "disabled={['1', '2']} // 传 rowKey 值的 string[] 列表"
|
|
197
|
+
}
|
|
198
|
+
],
|
|
199
|
+
"mapping": {
|
|
200
|
+
"realComponent": "Selector",
|
|
201
|
+
"adapter": null
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "SelectorPicker",
|
|
3
|
+
"category": "Data Entry",
|
|
4
|
+
"description": "选择器弹出框,Selector 的弹出框封装",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"弹出选择",
|
|
8
|
+
"下拉选择器"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"表单选择",
|
|
12
|
+
"快速选择",
|
|
13
|
+
"弹出式选择"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "normal"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"default": {
|
|
19
|
+
"meaning": "默认样式"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"states": [
|
|
23
|
+
"default",
|
|
24
|
+
"disabled",
|
|
25
|
+
"error"
|
|
26
|
+
],
|
|
27
|
+
"idealProps": {
|
|
28
|
+
"value": {
|
|
29
|
+
"type": "Record<string, any>[] | Record<string, any>",
|
|
30
|
+
"description": "受控选中值;multiple=true 时为对象数组 Record<string,any>[],false 时为单对象 Record<string,any>;清空时 onChange 入参为 null。外部以 string[] key 列表受控时,挂入前用 useMemo data.filter 反查为对象数组(见 api.ts 顶部 C 协议)"
|
|
31
|
+
},
|
|
32
|
+
"defaultValue": {
|
|
33
|
+
"type": "Record<string, any>[] | Record<string, any>",
|
|
34
|
+
"description": "非受控默认值;类型规则同 value"
|
|
35
|
+
},
|
|
36
|
+
"onChange": {
|
|
37
|
+
"type": "(val: Record<string,any>[] | Record<string,any> | null, node: Record<string,any>, rowData: Record<string,any>) => void",
|
|
38
|
+
"description": "值变化回调;multiple 时 val 为数组,否则为单对象;清空时 val=null(回写外部 string[] 时需 ?? [] 兜底);node=节点处理后数据、rowData=原始数据"
|
|
39
|
+
},
|
|
40
|
+
"multiple": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"default": false,
|
|
43
|
+
"description": "是否多选;true 时 value/defaultValue 必须为数组,onChange 入参 val 也为数组"
|
|
44
|
+
},
|
|
45
|
+
"allowClear": {
|
|
46
|
+
"type": "boolean",
|
|
47
|
+
"default": false,
|
|
48
|
+
"description": "是否支持清除已选值;true 时悬停显示清除按钮,触发顺序:onClear() → onChange(null)"
|
|
49
|
+
},
|
|
50
|
+
"selectorProps": {
|
|
51
|
+
"type": "Omit<SelectorProps, 'layout' | 'disabled' | 'value' | 'defaultValue' | 'onChange' | 'selectMode'>",
|
|
52
|
+
"description": "透传给底层 Selector 的属性(data/url/fieldConfig/rowKey/breadcrumbsHead/searchOption/backDataFieldConfig 等);Omit 列出的字段已被 SelectorPicker 接管不可透传;常用子字段速查见 api.ts 顶部 E 协议"
|
|
53
|
+
},
|
|
54
|
+
"tagRender": {
|
|
55
|
+
"type": "(item: Record<string, any>) => React.ReactNode",
|
|
56
|
+
"description": "多选 tag 自定义渲染;入参为已选 list 项对象"
|
|
57
|
+
},
|
|
58
|
+
"size": {
|
|
59
|
+
"type": "'small' | 'medium' | 'large'",
|
|
60
|
+
"values": ["small", "medium", "large"],
|
|
61
|
+
"default": "large",
|
|
62
|
+
"description": "输入框尺寸"
|
|
63
|
+
},
|
|
64
|
+
"placeholder": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"default": "请选择",
|
|
67
|
+
"description": "未选中时占位文本"
|
|
68
|
+
},
|
|
69
|
+
"getPopupContainer": {
|
|
70
|
+
"type": "(triggerNode: HTMLElement) => HTMLElement",
|
|
71
|
+
"description": "浮层挂载容器;默认 body,Modal 内必传 trigger.parentNode 避免点击穿透"
|
|
72
|
+
},
|
|
73
|
+
"label": {
|
|
74
|
+
"type": "React.ReactNode",
|
|
75
|
+
"description": "标签文案;支持节点(可嵌图标 / Tooltip 触发器)"
|
|
76
|
+
},
|
|
77
|
+
"required": {
|
|
78
|
+
"type": "boolean",
|
|
79
|
+
"default": false,
|
|
80
|
+
"description": "是否必填;true 时 label 前渲染红色 *"
|
|
81
|
+
},
|
|
82
|
+
"disabled": {
|
|
83
|
+
"type": "boolean",
|
|
84
|
+
"default": false,
|
|
85
|
+
"description": "禁用整个选择器(无法点击展开浮层、无法清除)"
|
|
86
|
+
},
|
|
87
|
+
"error": {
|
|
88
|
+
"type": "boolean",
|
|
89
|
+
"default": false,
|
|
90
|
+
"description": "错误状态;输入框边框变红,搭配 helperText 显示错误信息"
|
|
91
|
+
},
|
|
92
|
+
"helperText": {
|
|
93
|
+
"type": "React.ReactNode",
|
|
94
|
+
"description": "辅助文本;error=true 时显示为错误信息,否则显示为常规说明"
|
|
95
|
+
},
|
|
96
|
+
"overLine": {
|
|
97
|
+
"type": "boolean",
|
|
98
|
+
"description": "多选时已选项是否换行;true 换行,false 单行折叠显示 +N"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"do": [
|
|
102
|
+
"配合 Selector 使用(SelectorPicker 是 Selector 的弹出框封装,所有候选数据走 selectorProps.data 透传给底层 Selector)",
|
|
103
|
+
"外部以 string[](key 列表)受控时,用 useMemo data.find 反查映射为 Record<string,any>[] 后挂入 value(详见 api.ts §C 反向映射模式)",
|
|
104
|
+
"二次封装业务组件时,JSX 内 **受控 prop 写在 {...pickerProps} spread 之后**,后写覆盖保护受控状态(详见 api.ts §D)",
|
|
105
|
+
"提供清空功能(allowClear=true + onClear 监听,onChange 入参 val=null 时回写外部 string[] 用 `?? []` 兜底)"
|
|
106
|
+
],
|
|
107
|
+
"dont": [
|
|
108
|
+
"传 `visible` / `open` / `show` 显隐控制 prop(本组件不存在;父层条件渲染 `{showPicker && <SelectorPicker ... />}` 控制 mount;见 api.ts §A)",
|
|
109
|
+
"selectorProps 透传 `layout` / `disabled` / `value` / `defaultValue` / `onChange` / `selectMode`(已被 SelectorPicker 接管,类型已 Omit,透传无效)",
|
|
110
|
+
"selectorProps 写错字段名:`list`(应为 `data`)/ `keys`(应为 `rowKey`)— 内部不消费会静默失败",
|
|
111
|
+
"二次封装时 `pickerProps?: any` **作为推荐签名**(❌ 不能阻止外部覆盖受控;✅ 推荐 `Omit<SelectorPickerProps, 'value'|'defaultValue'|'onChange'|'multiple'|'selectorProps'>`);**但若需求模板硬性要求 any 签名,见 interpretivePriority 兼容路径**",
|
|
112
|
+
"弹窗内容过于复杂",
|
|
113
|
+
"忽略 placeholder"
|
|
114
|
+
],
|
|
115
|
+
"interpretivePriority": {
|
|
116
|
+
"principle": "**需求模板接口 `pickerProps: any` 与本组件 §D 协议推荐 Omit<...> 冲突时,严格按需求接口签名(api.ts §D-bis 兼容路径)**",
|
|
117
|
+
"reason": "需求接口(requirements/*.json)是观察者制定的固定 spec · 优化 AI 无权改;§D 协议 Omit<...> 是组件库的安全推荐 · sub-agent 不应擅自改需求接口签名;但 anti-pattern any 接口在运行时仍需保护受控状态 → 通过 JSX spread 顺序(受控 prop 写在 spread 之后)实现",
|
|
118
|
+
"resolution": "1. 接口签名照搬需求 `pickerProps: any`(不改) ;2. JSX 写法严格遵 §D 协议(`{...pickerProps} value={...} onChange={...} multiple` — 受控 prop 后写覆盖) ;3. 类型安全靠运行时 spread 顺序,不靠类型层面阻断;详见 api.ts §D-bis 完整代码示例",
|
|
119
|
+
"dataSourceDecisionTree": "data 来源根据需求接口字段决定:(1)接口含 data prop → 直接 selectorProps={{data}} 透传;(2)接口不含 data 字段,只有 pickerProps → 候选数据从 pickerProps.selectorProps.data 透传(`selectorProps={{ ...(pickerProps?.selectorProps ?? {}) }}`),封装层不内置;(3)需求语义为内置固定数据(如部门选择) → 封装层 const data = [...] 然后 selectorProps={{data}};详见 api.ts §D-ter",
|
|
120
|
+
"antiPatterns": [
|
|
121
|
+
"❌ 看到需求接口 `pickerProps: any` 后,擅自改为 Omit<...> 违背需求 spec",
|
|
122
|
+
"❌ 接口写 any,JSX 把 spread 放在受控 prop 之后(`<SelectorPicker value={...} onChange={...} {...pickerProps} />` — 外部 pickerProps 覆盖受控状态)",
|
|
123
|
+
"❌ 二次封装时,封装层 hardcode 候选数据而不查需求接口字段(需求接口若含 data prop 应透传,不应硬编码)"
|
|
124
|
+
],
|
|
125
|
+
"correctPatterns": [
|
|
126
|
+
"✅ 接口签名 `pickerProps: any`(照搬需求) + JSX `<SelectorPicker {...pickerProps} value={...} onChange={...} multiple selectorProps={{ data }} />`(受控后写覆盖)",
|
|
127
|
+
"✅ 看需求接口:若有 data prop → `selectorProps={{ data }}`;若无 data 字段但有 pickerProps → `selectorProps={{ ...(pickerProps?.selectorProps ?? {}) }}`(透传外部数据);若需求要求'内置部门列表'业务语义 → 封装层 const data = [...] hardcode"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"events": {
|
|
131
|
+
"onChange": {
|
|
132
|
+
"signature": "(val: Record<string,any>[] | Record<string,any> | null, node: Record<string,any>, rowData: Record<string,any>) => void",
|
|
133
|
+
"asyncSupported": false,
|
|
134
|
+
"examples": [
|
|
135
|
+
"单选时 val 是单对象,多选时 val 是对象数组,清空时 val 是 null",
|
|
136
|
+
"受控外部 string[] 场景:onChange={(val) => setIds(val ? (Array.isArray(val) ? val : [val]).map(it => it[rowKey]) : [])}",
|
|
137
|
+
"清空时兜底:setIds((val ?? []) instanceof Array ? val.map(it => it.key) : [])"
|
|
138
|
+
],
|
|
139
|
+
"commonMistakes": [
|
|
140
|
+
"清空时期望 val 是 [] 而非 null——清空时 val=null,需 ?? [] 兜底",
|
|
141
|
+
"multiple=false 期望 val 是数组——单选 val 是单对象,需按模式分支处理",
|
|
142
|
+
"忽略第二三参 node/rowData——node 是内部处理后的数据,rowData 是原始数据,两者都是对象 Map(key=rowKey)"
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
"onClear": {
|
|
146
|
+
"signature": "() => void",
|
|
147
|
+
"asyncSupported": false,
|
|
148
|
+
"examples": [
|
|
149
|
+
"用户点击清除按钮时先触发 onClear,再触发 onChange(null, {}, {})",
|
|
150
|
+
"受控场景需同时监听 onClear 和 onChange 才能完整捕获清空"
|
|
151
|
+
],
|
|
152
|
+
"commonMistakes": [
|
|
153
|
+
"只监听 onClear 而不监听 onChange——受控 value 不会自动清空,需在 onChange 里同步 state",
|
|
154
|
+
"allowClear=false 时期望 onClear 触发——allowClear=false 不显示清除按钮,onClear 不会触发"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"typescriptPitfalls": [
|
|
159
|
+
{
|
|
160
|
+
"issue": "selectorProps 透传了已被 SelectorPicker 接管的字段(如 layout/disabled/value/onChange/selectMode),TypeScript 报 Omit 类型错误",
|
|
161
|
+
"wrong": "selectorProps={{ layout: 'lr', value: [...], onChange: handler }} // 这些字段已 Omit",
|
|
162
|
+
"right": "selectorProps={{ data: [...], rowKey: 'id', fieldConfig: { mainTitle: 'name' } }} // 只传未 Omit 的字段"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"issue": "multiple=true 时 value 传单对象而非数组,受控不生效",
|
|
166
|
+
"wrong": "multiple={true} value={{ key: '1' }} // multiple 时 value 必须是 Record<string,any>[]",
|
|
167
|
+
"right": "multiple={true} value={[{ key: '1' }]} // 数组包裹"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"issue": "selectorProps 传 data 字段名拼错(如 list/items),候选数据静默失败",
|
|
171
|
+
"wrong": "selectorProps={{ list: myData }} // Selector 内部读 data,不读 list",
|
|
172
|
+
"right": "selectorProps={{ data: myData }} // Selector prop 名是 data"
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"mapping": {
|
|
176
|
+
"realComponent": "SelectorPicker",
|
|
177
|
+
"adapter": null
|
|
178
|
+
}
|
|
179
|
+
}
|