@para-ui/core 5.0.0-beta.12 → 5.0.0-beta.13
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/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/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 +23 -22
- 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 +73 -68
- package/es/ComboSelect/interface.d.ts +2 -2
- 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.js +10 -10
- package/es/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- 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/component.json +277 -0
- package/es/Modal/index.d.ts +85 -5
- package/es/Modal/index.js +159 -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 +58 -53
- 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/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 +2 -2
- 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.js +1 -1
- package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- 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/component.json +277 -0
- package/lib/Modal/index.d.ts +85 -5
- 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 +9 -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,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "InputNumber",
|
|
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
|
+
"focus",
|
|
24
|
+
"blur",
|
|
25
|
+
"disabled",
|
|
26
|
+
"error"
|
|
27
|
+
],
|
|
28
|
+
"idealProps": {
|
|
29
|
+
"value": {
|
|
30
|
+
"type": "number | null | undefined",
|
|
31
|
+
"description": "受控值;clearable=true 时类型为 number | null,默认为 number | undefined"
|
|
32
|
+
},
|
|
33
|
+
"defaultValue": {
|
|
34
|
+
"type": "number | null | undefined",
|
|
35
|
+
"description": "非受控默认值;类型规则同 value"
|
|
36
|
+
},
|
|
37
|
+
"onChange": {
|
|
38
|
+
"type": "(value: number | null) => void",
|
|
39
|
+
"description": "值变化回调;clearable=true 时入参 number | null;默认时收敛为 number"
|
|
40
|
+
},
|
|
41
|
+
"clearable": {
|
|
42
|
+
"type": "boolean",
|
|
43
|
+
"default": false,
|
|
44
|
+
"description": "是否允许清空;true 时 onChange 入参 number | null;false(默认)时清空被拦截、失焦回填上一值。组件泛型 InputNumberProps<C extends boolean> 由该 prop 驱动"
|
|
45
|
+
},
|
|
46
|
+
"max": {
|
|
47
|
+
"type": "number",
|
|
48
|
+
"description": "最大值;超出后加按钮禁用,失焦回收"
|
|
49
|
+
},
|
|
50
|
+
"min": {
|
|
51
|
+
"type": "number",
|
|
52
|
+
"description": "最小值;低于后减按钮禁用,失焦回收"
|
|
53
|
+
},
|
|
54
|
+
"step": {
|
|
55
|
+
"type": "number",
|
|
56
|
+
"default": 1,
|
|
57
|
+
"description": "步进值"
|
|
58
|
+
},
|
|
59
|
+
"btnMode": {
|
|
60
|
+
"type": "'lr' | 'tb' | 'none'",
|
|
61
|
+
"values": ["lr", "tb", "none"],
|
|
62
|
+
"default": "tb",
|
|
63
|
+
"description": "按钮模式;lr=左右加减、tb=右侧上下加减、none=无按钮"
|
|
64
|
+
},
|
|
65
|
+
"formatter": {
|
|
66
|
+
"type": "(value: number | string, info: { userTyping: boolean; input: string }) => string",
|
|
67
|
+
"description": "数字 → 展示字符串;必须与 parser 配对"
|
|
68
|
+
},
|
|
69
|
+
"parser": {
|
|
70
|
+
"type": "(displayValue: string) => number",
|
|
71
|
+
"description": "展示字符串 → 数字;与 formatter 配对,返回值作为 onChange 入参"
|
|
72
|
+
},
|
|
73
|
+
"disabled": {
|
|
74
|
+
"type": "boolean",
|
|
75
|
+
"default": false,
|
|
76
|
+
"description": "是否禁用"
|
|
77
|
+
},
|
|
78
|
+
"size": {
|
|
79
|
+
"type": "'small' | 'medium' | 'large'",
|
|
80
|
+
"values": ["small", "medium", "large"],
|
|
81
|
+
"default": "large",
|
|
82
|
+
"description": "尺寸"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"do": [
|
|
86
|
+
"限制 min 和 max 以符合业务逻辑",
|
|
87
|
+
"需要小数精度时通过 formatter / parser 组合实现",
|
|
88
|
+
"受控模式必须同时传 value 和 onChange",
|
|
89
|
+
"需要清空场景显式传 clearable=true,并用 number | null 类型的 state"
|
|
90
|
+
],
|
|
91
|
+
"dont": [
|
|
92
|
+
"使用 Text Input 录入需要计算的数字",
|
|
93
|
+
"步进值 (step) 设置过大导致无法精确调节",
|
|
94
|
+
"clearable=false(默认)时把 state 初始化为 null —— 会触发类型错误",
|
|
95
|
+
"传 formatter 不传 parser(或反之)—— 二者必须配对"
|
|
96
|
+
],
|
|
97
|
+
"events": {
|
|
98
|
+
"onChange": {
|
|
99
|
+
"signature": "clearable=false: (value: number) => void | clearable=true: (value: number | null) => void",
|
|
100
|
+
"asyncSupported": false,
|
|
101
|
+
"examples": [
|
|
102
|
+
"clearable=false(默认): onChange={(val) => setState(val)} — val 是 number,清空被拦截,失焦时回填上一次有效值",
|
|
103
|
+
"clearable=true: onChange={(val) => setState(val)} — val 是 number | null,用户清空后 val=null 传出",
|
|
104
|
+
"加减按钮点击也触发 onChange,通过内部精度计算避免浮点误差(12位精度)"
|
|
105
|
+
],
|
|
106
|
+
"commonMistakes": [
|
|
107
|
+
"clearable=false 时把 state 类型声明为 number | null——ts 会报错 null 不符合 onChange 签名的 number 入参",
|
|
108
|
+
"期望 onChange 在 mount 时触发初始 defaultValue——组件不触发初始 onChange,只在用户交互时触发",
|
|
109
|
+
"使用受控 value 但不传 onChange——value 更新不回流到组件,显示值和 state 不同步"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
"onBlur": {
|
|
113
|
+
"signature": "(event: React.FocusEvent<HTMLInputElement>) => void",
|
|
114
|
+
"asyncSupported": false,
|
|
115
|
+
"examples": [
|
|
116
|
+
"onBlur={(e) => validate(e.target.value)} — 失焦时校验",
|
|
117
|
+
"clearable=false 时 onBlur 之后组件内部回填上一次有效值(如用户清空输入框)——在 onBlur 里读 e.target.value 可能是回填前的空串",
|
|
118
|
+
"onBlur={(e) => setError(Number(e.target.value) < min ? '低于最小值' : '')} — 配合 min/max 做自定义错误提示"
|
|
119
|
+
],
|
|
120
|
+
"commonMistakes": [
|
|
121
|
+
"在 onBlur 里读 e.target.value 作为最终值——clearable=false 失焦会触发回填,此时 value 可能已被重写,应用 onChange 最新值或 ref 维护",
|
|
122
|
+
"期望 onBlur 和 onChange 同时触发——清空后失焦只触发 onBlur(onChange 被拦截了),需在 onBlur 里独立处理",
|
|
123
|
+
"期望 onBlur 的 e.target 是最终显示值——回填逻辑发生在 onBlur handler 内部,timing 依赖 dom.value 写入"
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
"onEnter": {
|
|
127
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
128
|
+
"asyncSupported": false,
|
|
129
|
+
"examples": [
|
|
130
|
+
"onEnter={(e) => submitForm()} — 按回车提交表单",
|
|
131
|
+
"onEnter={(e) => { e.preventDefault(); nextFieldRef.current?.focus(); }} — 回车跳到下一字段",
|
|
132
|
+
"onEnter 和 onChange 独立触发——回车不会触发失焦,不会触发回填逻辑"
|
|
133
|
+
],
|
|
134
|
+
"commonMistakes": [
|
|
135
|
+
"在 onEnter 里读 e.target.value 期望是最终数字——回车时 rc-input-number 可能还没 commit 值,建议用受控 value 而非 target.value",
|
|
136
|
+
"期望 onEnter 代替 onBlur 触发校验——两者行为不同,回车不失焦,需独立监听",
|
|
137
|
+
"传 onKeyDown 期望捕获回车——底层用的是 onPressEnter(rc-input-number),应用 onEnter prop"
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"typescriptPitfalls": [
|
|
142
|
+
{
|
|
143
|
+
"issue": "InputNumber 是泛型组件 InputNumber<C extends boolean>,clearable 决定 onChange/value 类型,不传 clearable 时默认 false(number 类型)",
|
|
144
|
+
"wrong": "const [val, setVal] = useState<number | null>(null); <InputNumber value={val} onChange={setVal} /> // val 和 setVal 含 null,但 clearable 默认 false 不允许 null,TS 报错",
|
|
145
|
+
"right": "const [val, setVal] = useState<number | null>(null); <InputNumber<true> clearable value={val} onChange={setVal} /> // 显式泛型参数或 clearable=true 驱动类型"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"issue": "formatter 和 parser 必须成对使用,只传一个会导致显示和实际值不同步",
|
|
149
|
+
"wrong": "formatter={(val) => `${val}%`} // 没有 parser,用户看到 '50%' 但内部 onChange 收到 '50%' 字符串而非数字",
|
|
150
|
+
"right": "formatter={(val) => `${val}%`} parser={(val) => parseFloat(val.replace('%', '')) as any} // 成对,parser 把展示串转回数字"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"issue": "addonBefore/addonAfter 是 ReactNode,传字符串可能 TS 允许但布局与 ReactNode 写法不一致",
|
|
154
|
+
"wrong": "<InputNumber addonBefore='¥' /> // 字符串是合法 ReactNode,但建议显式包 span 控制样式",
|
|
155
|
+
"right": "<InputNumber addonBefore={<span>¥</span>} /> // 或直接字符串;字符串也 OK,仅风格建议"
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"mapping": {
|
|
159
|
+
"realComponent": "InputNumber",
|
|
160
|
+
"adapter": null
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Label",
|
|
3
|
+
"category": "Data Display",
|
|
4
|
+
"description": "表单标签,显示字段标题,支持必填红星、帮助提示(icon 或下划线两种样式)、自定义标题后缀",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"字段标题",
|
|
8
|
+
"表单标签"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"表单字段",
|
|
12
|
+
"配置项",
|
|
13
|
+
"详情展示"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "low"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"icon": {
|
|
19
|
+
"meaning": "tooltipType='icon' — label 后渲染问号图标,hover 显示 tooltip"
|
|
20
|
+
},
|
|
21
|
+
"line": {
|
|
22
|
+
"meaning": "tooltipType='line' — label 文字加下划线,hover 整个 label 显示 tooltip"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"states": [
|
|
26
|
+
"default",
|
|
27
|
+
"required"
|
|
28
|
+
],
|
|
29
|
+
"idealProps": {
|
|
30
|
+
"label": {
|
|
31
|
+
"type": "ReactNode",
|
|
32
|
+
"description": "标题文案;可传字符串或 ReactNode;不传时只渲染必填红星/tooltip 区域"
|
|
33
|
+
},
|
|
34
|
+
"required": {
|
|
35
|
+
"type": "boolean",
|
|
36
|
+
"default": false,
|
|
37
|
+
"description": "是否必填;true 时在 label 后渲染 `<span class='label-required'>*</span>` 红星"
|
|
38
|
+
},
|
|
39
|
+
"tooltip": {
|
|
40
|
+
"type": "ReactNode",
|
|
41
|
+
"description": "帮助提示内容;tooltipType='icon' 时渲染 Help 图标;tooltipType='line' 时整个 label 加下划线触发。**不传时不渲染 tooltip 区域**"
|
|
42
|
+
},
|
|
43
|
+
"tooltipType": {
|
|
44
|
+
"type": "enum",
|
|
45
|
+
"values": [
|
|
46
|
+
"icon",
|
|
47
|
+
"line"
|
|
48
|
+
],
|
|
49
|
+
"default": "icon",
|
|
50
|
+
"description": "提示类型:icon=问号图标(默认),line=label 文字下划线"
|
|
51
|
+
},
|
|
52
|
+
"tooltipIcon": {
|
|
53
|
+
"type": "ReactNode",
|
|
54
|
+
"description": "自定义 tooltip 触发图标(tooltipType='icon' 时生效);不传时使用 Help 组件默认问号图标"
|
|
55
|
+
},
|
|
56
|
+
"labelSign": {
|
|
57
|
+
"type": "ReactNode",
|
|
58
|
+
"description": "标题旁的次级标记,渲染在必填红星之后(如 '(可选)' '(Beta)' 等短文本)"
|
|
59
|
+
},
|
|
60
|
+
"placement": {
|
|
61
|
+
"type": "enum",
|
|
62
|
+
"values": ["top", "top-start", "top-end", "bottom", "bottom-start", "bottom-end", "left", "left-start", "left-end", "right", "right-start", "right-end"],
|
|
63
|
+
"default": "top-start",
|
|
64
|
+
"description": "tooltip 弹出方向(透传给底层 Help 组件)"
|
|
65
|
+
},
|
|
66
|
+
"arrow": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"default": true,
|
|
69
|
+
"description": "tooltip 箭头"
|
|
70
|
+
},
|
|
71
|
+
"onClick": {
|
|
72
|
+
"type": "(e: React.MouseEvent<HTMLLabelElement>) => void",
|
|
73
|
+
"description": "点击 label 元素时触发"
|
|
74
|
+
},
|
|
75
|
+
"className": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "label 容器类名"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"do": [
|
|
81
|
+
"为每个表单字段提供清晰的 Label,文案简洁(< 10 字)",
|
|
82
|
+
"必填字段传 required={true} 显示红星",
|
|
83
|
+
"需要字段说明时用 tooltip prop + 选择合适的 tooltipType(icon 更常用,line 适合较长 label)"
|
|
84
|
+
],
|
|
85
|
+
"dont": [
|
|
86
|
+
"Label 过长(> 15 字)——会撑宽表单布局,截断或换行",
|
|
87
|
+
"忽略 Label 的可访问性——for/htmlFor 关联逻辑由外层 FormItem 管理,Label 本身不自动关联"
|
|
88
|
+
],
|
|
89
|
+
"events": {
|
|
90
|
+
"onClick": {
|
|
91
|
+
"signature": "(e: React.MouseEvent<HTMLLabelElement>) => void",
|
|
92
|
+
"asyncSupported": false,
|
|
93
|
+
"examples": [
|
|
94
|
+
"onClick={(e) => console.log('clicked', e.currentTarget.textContent)} — 点击 label 时触发",
|
|
95
|
+
"通常不需要监听 label click——表单字段聚焦由 <label for> 或 FormItem 关联处理",
|
|
96
|
+
"自定义行为:onClick={(e) => { e.preventDefault(); openHelperModal(); }} — 阻止默认并打开详细说明"
|
|
97
|
+
],
|
|
98
|
+
"commonMistakes": [
|
|
99
|
+
"期望 onClick 触发对应输入框聚焦——Label 组件的 <label> 没有 htmlFor 属性,聚焦关联由外层 FormItem 控制",
|
|
100
|
+
"传 onClick 期望阻止 tooltip 弹出——onClick 和 tooltip(hover)是独立行为,onClick 不影响 Tooltip 的 hover 逻辑",
|
|
101
|
+
"期望 label text 点击和 tooltipIcon 点击都触发同一 onClick——tooltipIcon 的点击事件由 Help 组件内部处理(hover),不冒泡到 Label onClick"
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"typescriptPitfalls": [
|
|
106
|
+
{
|
|
107
|
+
"issue": "tooltip 类型是 ReactNode,但底层 Help 组件要求 NonNullable<ReactNode>,直接传可选字段可能报 TS2322",
|
|
108
|
+
"wrong": "const tip: ReactNode | undefined = getTooltip(); <Label tooltip={tip} /> // 若 tip 推断含 undefined 分支,Help 内部 title 报 TS2322",
|
|
109
|
+
"right": "const tip = getTooltip(); <Label tooltip={tip ?? ''} /> // 用空字符串兜底(空字符串不显示 Tooltip 弹层)"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"issue": "LabelProps 通过 extends LabelTooltipProps 继承了 [name: string]: any 索引签名,导致所有额外 prop 被 TS 接受但无效",
|
|
113
|
+
"wrong": "<Label label='姓名' onFocus={handler} /> // TS 不报错(索引签名兜底),但 onFocus 不会触发任何行为",
|
|
114
|
+
"right": "<Label label='姓名' onClick={handler} /> // 只用 LabelProps 实际声明的 onClick prop"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"issue": "labelSign 是 ReactNode,不会被 required 的 * 替换——两者独立渲染",
|
|
118
|
+
"wrong": "// 期望 required=true 时 labelSign 文本替换红星\n<Label required label='邮箱' labelSign='(必填)' /> // 实际渲染:邮箱 * (必填)——两者都显示",
|
|
119
|
+
"right": "// 只传 required 控制红星;labelSign 是额外后缀,不替换\n<Label required label='邮箱' /> // 只显示 邮箱 *"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"mapping": {
|
|
123
|
+
"realComponent": "Label",
|
|
124
|
+
"adapter": null
|
|
125
|
+
}
|
|
126
|
+
}
|
package/es/Label/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface LabelTooltipProps {
|
|
|
16
16
|
placement?: 'bottom-end' | 'bottom-start' | 'bottom' | 'left-end' | 'left-start' | 'left' | 'right-end' | 'right-start' | 'right' | 'top-end' | 'top-start' | 'top';
|
|
17
17
|
/** 提示箭头 */
|
|
18
18
|
arrow?: boolean;
|
|
19
|
-
[name: string]:
|
|
19
|
+
[name: string]: unknown;
|
|
20
20
|
}
|
|
21
21
|
export interface LabelProps extends LabelTooltipProps {
|
|
22
22
|
/** 是否必填 */
|
|
@@ -26,7 +26,7 @@ export interface LabelProps extends LabelTooltipProps {
|
|
|
26
26
|
/** 标题提示,可用来自定义 */
|
|
27
27
|
labelSign?: ReactNode;
|
|
28
28
|
onClick?: (e: React.MouseEvent<HTMLLabelElement>) => void;
|
|
29
|
-
[name: string]:
|
|
29
|
+
[name: string]: unknown;
|
|
30
30
|
}
|
|
31
31
|
declare const Label: FunctionComponent<LabelProps>;
|
|
32
32
|
export default Label;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Loading",
|
|
3
|
+
"category": "Feedback",
|
|
4
|
+
"description": "局部加载遮罩——挂载到父容器内自动覆盖,**不接受 visible / spinning / show 等显隐控制 prop**(由父组件条件渲染决定)",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"展示加载中",
|
|
8
|
+
"覆盖父容器",
|
|
9
|
+
"占位"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"数据列表加载",
|
|
13
|
+
"表单提交等待",
|
|
14
|
+
"图片加载中"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "low"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"default": {
|
|
20
|
+
"meaning": "默认局部加载遮罩"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"states": [
|
|
24
|
+
"default"
|
|
25
|
+
],
|
|
26
|
+
"idealProps": {
|
|
27
|
+
"opacity": {
|
|
28
|
+
"type": "number",
|
|
29
|
+
"default": 0.7,
|
|
30
|
+
"description": "遮罩半透明度(0–1),值越小遮罩越淡"
|
|
31
|
+
},
|
|
32
|
+
"className": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"description": "外层类名(DEFECT-001 已实现,src/Loading/index.tsx:13);可用于额外样式覆盖(如 pointer-events 拦截、自定义 z-index)"
|
|
35
|
+
},
|
|
36
|
+
"style": {
|
|
37
|
+
"type": "React.CSSProperties",
|
|
38
|
+
"description": "外层内联样式(DEFECT-001 已实现)"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"do": [
|
|
42
|
+
"用条件渲染控制是否显示:`{isLoading && <Loading />}`,组件本身不接受显隐 prop",
|
|
43
|
+
"Loading 会**在父容器 inline `style.position` 为空时**自动设为 relative(DEFECT-002,src/Loading/index.tsx:23-29 useEffect 实证);**若父元素已有任何非空 inline position(含 static),useEffect 不会改写**——建议父容器仍显式声明 `position: relative` 避免边界情况",
|
|
44
|
+
"调整 opacity 控制遮罩透明度(默认 0.7)",
|
|
45
|
+
"**需要『拦截父容器内部点击』时**,请额外给 Loading 传 className + CSS pointer-events: auto——src/Loading/index.scss 默认未设置 pointer-events,仅视觉上覆盖白色背景 + z-index:100,**不会主动屏蔽下方元素的点击**。需阻止表单交互场景请在父容器上配合 disabled/pointer-events:none 处理",
|
|
46
|
+
"图片占位场景:**必须同时处理 onLoad 和 onError 两个事件**,否则加载失败时遮罩永留(DEFECT-006:src/Loading 自身不感知图片加载状态,业务侧 isLoading 必须双事件回调清零)"
|
|
47
|
+
],
|
|
48
|
+
"dont": [
|
|
49
|
+
"传 visible / spinning / show / loading 等 prop 试图控制——这些 prop 不存在",
|
|
50
|
+
"试图给 Loading 传 children 来包裹内容——它是兄弟节点定位的纯遮罩,不是 wrap-style",
|
|
51
|
+
"试图传 tip / size / indicator 等 antd 风格 prop——也不存在",
|
|
52
|
+
"假设 Loading 自动拦截下方元素点击/键盘——src 未设 pointer-events,仅视觉遮罩;交互拦截需调用方自行处理"
|
|
53
|
+
],
|
|
54
|
+
"events": {
|
|
55
|
+
"noEvents": {
|
|
56
|
+
"signature": "Loading 是纯展示组件,无事件 prop",
|
|
57
|
+
"asyncSupported": false,
|
|
58
|
+
"examples": [
|
|
59
|
+
"Loading 无自身事件——显隐完全由父组件条件渲染控制: {isLoading && <Loading />}",
|
|
60
|
+
"需要『加载完成』回调:在父组件的 fetch().finally(() => setIsLoading(false)) 里处理,不在 Loading 组件内",
|
|
61
|
+
"需要点击遮罩取消:父组件套一层 onClick div,Loading 用 className 覆盖同区域: <div onClick={cancel} style={{position:'relative'}}><Loading /></div>"
|
|
62
|
+
],
|
|
63
|
+
"commonMistakes": [
|
|
64
|
+
"给 Loading 传 onLoaded/onComplete 期望加载完成回调——Loading 组件无任何事件 prop,所有状态由父组件管理",
|
|
65
|
+
"传 visible={isLoading} 期望控制显隐——prop 不存在,使用条件渲染代替",
|
|
66
|
+
"传 onClick 期望点击遮罩关闭——onClick 会通过 [name: string]: any 索引被接受但不触发任何行为"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"typescriptPitfalls": [
|
|
71
|
+
{
|
|
72
|
+
"issue": "Loading 的 LoadingProps 只有 className / style / opacity 三个 prop,传其他 prop 会触发 TS 多余属性检查",
|
|
73
|
+
"wrong": "<Loading visible={isLoading} /> // TS2322: 'visible' does not exist in type LoadingProps",
|
|
74
|
+
"right": "{isLoading && <Loading />} // 用条件渲染而不是 prop 控制显隐"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"issue": "opacity 类型是 number(0-1),传字符串会触发 TS2322",
|
|
78
|
+
"wrong": "<Loading opacity='0.5' /> // TS2322: string not assignable to number",
|
|
79
|
+
"right": "<Loading opacity={0.5} /> // 数字字面量"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"issue": "父容器 position 为 static 时 Loading 定位可能溢出——useEffect 只在 inline style.position 为空时设为 relative,不修改 CSS 类",
|
|
83
|
+
"wrong": "// 父容器通过 CSS 类设置了 position: static(不是 inline style),Loading useEffect 读 inline style 为空,强设 relative\n<div className='static-positioned'><Loading /></div> // 结果 inline style 被设为 relative,可能覆盖意图",
|
|
84
|
+
"right": "<div style={{position: 'relative'}}><Loading /></div> // 显式 inline style position: relative 最保险"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"mapping": {
|
|
88
|
+
"realComponent": "Loading",
|
|
89
|
+
"adapter": null
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Menu",
|
|
3
|
+
"category": "Navigation",
|
|
4
|
+
"description": "为页面和功能提供导航的菜单列表",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"页面导航",
|
|
8
|
+
"功能索引",
|
|
9
|
+
"模块切换"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"侧边栏导航",
|
|
13
|
+
"顶部菜单",
|
|
14
|
+
"系统功能入口"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "normal"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"vertical": {
|
|
20
|
+
"meaning": "垂直菜单(侧边)"
|
|
21
|
+
},
|
|
22
|
+
"horizontal": {
|
|
23
|
+
"meaning": "水平菜单(顶部)"
|
|
24
|
+
},
|
|
25
|
+
"inline": {
|
|
26
|
+
"meaning": "内嵌菜单"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"states": [
|
|
30
|
+
"expanded",
|
|
31
|
+
"collapsed",
|
|
32
|
+
"selected"
|
|
33
|
+
],
|
|
34
|
+
"idealProps": {
|
|
35
|
+
"menuListProps": {
|
|
36
|
+
"type": "MenuListProps",
|
|
37
|
+
"description": "**菜单列表核心配置(src/Menu/index.tsx:19,71-82 实证,src/Menu/interface.ts:67-90 MenuListProps 定义)**。⚠️ **菜单数据源通过此 prop 的 `list` 字段传入,而非顶层 `list` prop**(顶层无 list prop)。MenuListProps 主要字段:`list: MenuChildrenProps[]`(菜单项数组)、`jumpIcon: ReactNode`(菜单分享图标)、`onClickJump: (item) => void`(分享点击回调)、`size`/`color`/`expansion`/`selectMenu`/`onClickMenu`/`shrinkOthers`(由 Menu 顶层 prop 自动下透,一般不需要在此重复传)",
|
|
38
|
+
"objectShape": {
|
|
39
|
+
"list": { "type": "MenuChildrenProps[]", "description": "菜单项数组(MenuChildrenProps 核心字段见下方 subComponents)" },
|
|
40
|
+
"jumpIcon": { "type": "ReactNode", "description": "菜单项右侧分享/跳转图标" },
|
|
41
|
+
"onClickJump": { "type": "(item: MenuChildrenProps) => void", "description": "点击分享图标回调" }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"selectMenu": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "当前选中的菜单 key/path(src/Menu/index.tsx:21,77 实证:向下透传给 VerticalMenuList,与 MenuChildrenProps 的 path 字段比对高亮)"
|
|
47
|
+
},
|
|
48
|
+
"expansion": {
|
|
49
|
+
"type": "boolean",
|
|
50
|
+
"default": true,
|
|
51
|
+
"description": "是否展开菜单(src/Menu/index.tsx:20,31-33 实证:受控,变化后同步到内部 expansionCom state)"
|
|
52
|
+
},
|
|
53
|
+
"color": {
|
|
54
|
+
"type": "enum",
|
|
55
|
+
"values": ["deep", "light"],
|
|
56
|
+
"default": "deep",
|
|
57
|
+
"description": "菜单主题色(src/Menu/interface.ts:12 ColorType 实证:'deep'=深色主题,'light'=浅色主题;透传 CSS 类 paraui-v4-vertical-menu-{color})"
|
|
58
|
+
},
|
|
59
|
+
"size": {
|
|
60
|
+
"type": "enum",
|
|
61
|
+
"values": ["small", "large"],
|
|
62
|
+
"default": "large",
|
|
63
|
+
"description": "菜单尺寸(src/Menu/index.tsx:17,50 实证:控制 CSS 类 paraui-v4-vertical-menu-{size})"
|
|
64
|
+
},
|
|
65
|
+
"onClickMenu": {
|
|
66
|
+
"type": "function",
|
|
67
|
+
"signature": "(item: MenuChildrenProps | false) => void",
|
|
68
|
+
"description": "点击菜单项回调(src/Menu/interface.ts:173-174 MenuProps 实证:参数为点击的 MenuChildrenProps 对象或 false;false 表示点击了非叶子节点的折叠操作)"
|
|
69
|
+
},
|
|
70
|
+
"shrinkOthers": {
|
|
71
|
+
"type": "boolean",
|
|
72
|
+
"default": true,
|
|
73
|
+
"description": "展开一个菜单时自动收起其他展开的同级菜单(src/Menu/index.tsx:26,78 实证,透传给 VerticalMenuList)"
|
|
74
|
+
},
|
|
75
|
+
"logoProps": {
|
|
76
|
+
"type": "LogoProps",
|
|
77
|
+
"objectShape": {
|
|
78
|
+
"expansion": { "type": "boolean", "description": "Logo 展开/收起状态(由 Menu 自动传入,一般不手动传)" },
|
|
79
|
+
"render": { "type": "ReactNode", "description": "自定义 Logo 内容区域" },
|
|
80
|
+
"className": { "type": "string", "description": "Logo 区域自定义 class" }
|
|
81
|
+
},
|
|
82
|
+
"description": "Logo 区域配置(src/Menu/interface.ts:15-22 LogoProps 实证,src/Menu/index.tsx:18,57-66 实证:logoProps 存在时渲染 Logo 子组件)"
|
|
83
|
+
},
|
|
84
|
+
"footerExpansionProps": {
|
|
85
|
+
"type": "FooterExpansionProps",
|
|
86
|
+
"description": "底部展开/收起按钮区域配置(src/Menu/index.tsx:27,87-94 实证,src/Menu/interface.ts:127-145 FooterExpansionProps 定义)。主要字段:`expandIcon: ReactNode`(展开图标)、`shrinkIcon: ReactNode`(收起图标)、`render: ReactNode`(完全自定义底部内容替换默认按钮)、`version: ReactNode`(版本号显示)、`className: string`(底部区域 class)",
|
|
87
|
+
"objectShape": {
|
|
88
|
+
"expandIcon": { "type": "ReactNode", "description": "展开状态图标" },
|
|
89
|
+
"shrinkIcon": { "type": "ReactNode", "description": "收起状态图标" },
|
|
90
|
+
"render": { "type": "ReactNode", "description": "完全自定义底部内容" },
|
|
91
|
+
"version": { "type": "ReactNode", "description": "版本号展示" },
|
|
92
|
+
"className": { "type": "string", "description": "底部区域自定义 class" }
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"showExpansion": {
|
|
96
|
+
"type": "boolean",
|
|
97
|
+
"default": true,
|
|
98
|
+
"description": "是否显示底部展开/收起按钮(src/Menu/index.tsx:28,87 实证:false 时 FooterExpansion 不渲染)"
|
|
99
|
+
},
|
|
100
|
+
"onClickExpansion": {
|
|
101
|
+
"type": "function",
|
|
102
|
+
"signature": "(expansion: boolean) => void",
|
|
103
|
+
"description": "点击底部展开/收起按钮回调(src/Menu/index.tsx:22,39-41 实证:参数为点击后新的展开状态 boolean)"
|
|
104
|
+
},
|
|
105
|
+
"className": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"description": "自定义类名(src/Menu/index.tsx:24,49 实证,追加到根容器 div)"
|
|
108
|
+
},
|
|
109
|
+
"style": {
|
|
110
|
+
"type": "React.CSSProperties",
|
|
111
|
+
"description": "自定义样式(src/Menu/index.tsx:25,100 实证,透传到根容器 div)"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"do": [
|
|
115
|
+
"保持菜单层级不要过深(建议不超过 3 级)",
|
|
116
|
+
"配置 shrinkOthers 以提升用户查找效率",
|
|
117
|
+
"使用 icon 辅助识别菜单项",
|
|
118
|
+
"**菜单数据通过 menuListProps.list 传入**(不是顶层 list prop):`<Menu menuListProps={{ list: menuData }} />`,menuData 是 MenuChildrenProps[] 数组",
|
|
119
|
+
"MenuChildrenProps 核心字段(src/Menu/interface.ts:25-63):`label: ReactNode`(菜单名),`path: string`(路径,与 selectMenu 比对高亮),`icon: ReactNode`(图标),`children: MenuChildrenProps[]`(子菜单),`type: 'redirect'|'router'|'iframe'|'snack'|'snackPage'`(菜单类型),`href: string`(a 标签地址),`badge: ReactNode`(标记)"
|
|
120
|
+
],
|
|
121
|
+
"dont": [
|
|
122
|
+
"在菜单项中放置非导航类的复杂交互组件",
|
|
123
|
+
"过度使用动态生成的菜单导致性能问题",
|
|
124
|
+
"把菜单数据传给顶层 list prop——Menu 没有顶层 list prop,数据必须通过 menuListProps.list 传入"
|
|
125
|
+
],
|
|
126
|
+
"events": {
|
|
127
|
+
"onClickMenu": {
|
|
128
|
+
"signature": "(item: MenuChildrenProps | false) => void",
|
|
129
|
+
"asyncSupported": false,
|
|
130
|
+
"examples": [
|
|
131
|
+
"点击叶子菜单项时 item 是该菜单项的 MenuChildrenProps 对象,包含 label/path/type 等字段",
|
|
132
|
+
"点击非叶子节点(有 children 的菜单项)展开/收起时,item 可能为 false",
|
|
133
|
+
"用 path 字段实现路由跳转:onClickMenu={(item) => item && item.path && navigate(item.path)}"
|
|
134
|
+
],
|
|
135
|
+
"commonMistakes": [
|
|
136
|
+
"假设参数是字符串 key 或 path——实际是整个 MenuChildrenProps 对象或 false,需要取 item.path 或 item.label",
|
|
137
|
+
"不处理 item 为 false 的情况——点击有子菜单的父节点时 item 是 false,直接访问 item.path 会报错",
|
|
138
|
+
"假设 onClickMenu 只在叶子节点触发——父节点展开/收起时也会触发(item=false)"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
"onClickExpansion": {
|
|
142
|
+
"signature": "(expansion: boolean) => void",
|
|
143
|
+
"asyncSupported": false,
|
|
144
|
+
"examples": [
|
|
145
|
+
"点击底部展开/收起按钮时触发:expansion 是点击后新的展开状态",
|
|
146
|
+
"与 expansion prop 配合实现受控:onClickExpansion={(v) => setExpanded(v)}"
|
|
147
|
+
],
|
|
148
|
+
"commonMistakes": [
|
|
149
|
+
"假设参数是事件对象 → 实际只有 boolean 一个参数(新的展开状态)",
|
|
150
|
+
"只传 expansion 不传 onClickExpansion → 底部按钮点击无响应(受控模式下 expansion 不更新)"
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"typescriptPitfalls": [
|
|
155
|
+
{
|
|
156
|
+
"issue": "onClickMenu 参数类型是 MenuChildrenProps | false,必须判空后才能访问其属性",
|
|
157
|
+
"wrong": "onClickMenu={(item) => navigate(item.path)} // item 可能是 false,直接访问 item.path 运行时报错",
|
|
158
|
+
"right": "onClickMenu={(item) => { if (item && item.path) navigate(item.path); }}"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"issue": "菜单数据通过 menuListProps.list 传入,顶层没有 list prop",
|
|
162
|
+
"wrong": "<Menu list={menuData} /> // TS 报错:list 不在 MenuProps 中",
|
|
163
|
+
"right": "<Menu menuListProps={{ list: menuData }} /> // menuData 是 MenuChildrenProps[] 类型"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"issue": "MenuChildrenProps 的 [name: string]: unknown 索引签名允许任意字段,但核心字段类型有约束",
|
|
167
|
+
"wrong": "const item: MenuChildrenProps = { label: '首页', type: 'page' } // 'page' 不在 MenuListTypeType 枚举中",
|
|
168
|
+
"right": "const item: MenuChildrenProps = { label: '首页', type: 'router', path: '/home' } // type: 'redirect'|'router'|'iframe'|'snack'|'snackPage'"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"issue": "color prop 只有 'deep' 和 'light' 两个有效值(ColorType),传其他字符串 TS 报错",
|
|
172
|
+
"wrong": "color='dark' // TS2322: Type '\"dark\"' is not assignable to type 'ColorType'",
|
|
173
|
+
"right": "color='deep' // 合法值: 'deep'(深色主题) | 'light'(浅色主题)"
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"mapping": {
|
|
177
|
+
"realComponent": "Menu",
|
|
178
|
+
"adapter": null
|
|
179
|
+
}
|
|
180
|
+
}
|