@para-ui/core 5.0.0-beta.11 → 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 +52 -49
- package/es/Anchor/type.d.ts +8 -4
- package/es/Argv/component.json +216 -0
- package/es/Argv/dataGenerator/index.js +1 -1
- package/es/Argv/index.d.ts +5 -6
- package/es/Argv/index.js +1 -1
- 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 +33 -30
- 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/AutoTips/index.js +1 -1
- 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 +1 -1
- package/es/Cascader/OptionList/Column.js +1 -1
- package/es/Cascader/OptionList/index.js +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/CheckboxGroup/index.js +1 -1
- package/es/CodeEditor/component.json +189 -0
- package/es/CodeEditor/index.d.ts +11 -10
- package/es/CodeEditor/index.js +19 -19
- 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 +115 -109
- 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 +11 -11
- package/es/DatePicker/generatePicker/generateSinglePicker.js +2 -2
- package/es/Descriptions/component.json +142 -0
- package/es/Descriptions/index.d.ts +1 -1
- package/es/Desktop/component.json +171 -0
- package/es/Desktop/index.js +1 -1
- 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/Dropdown/index.js +1 -1
- package/es/DynamicMultiBox/component.json +278 -0
- package/es/DynamicMultiBox/formItem.d.ts +1 -1
- package/es/DynamicMultiBox/index.js +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/ItemHolder.js +1 -1
- package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/es/FieldForm/FieldFormItem/StatusProvider.js +1 -1
- package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/es/FieldForm/Form.d.ts +2 -2
- package/es/FieldForm/Form.js +1 -1
- package/es/FieldForm/FormItemInput.js +1 -1
- package/es/FieldForm/FormItemLabel.js +1 -1
- 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/Form/index.js +1 -1
- 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/GlobalContext/confirmLocale.js +1 -1
- package/es/GlobalContext/index.js +1 -1
- package/es/Help/component.json +118 -0
- package/es/HelperText/component.json +126 -0
- package/es/Image/PreviewGroup.js +1 -1
- package/es/Image/component.json +165 -0
- package/es/Image/index.js +1 -1
- 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 +2 -2
- 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/Menu/verticalMenuList.js +1 -1
- 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 +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/PageHeader/horizontalMeun.js +1 -1
- package/es/PageHeader/horizontalMeunRight.js +1 -1
- package/es/Pagination/component.json +181 -0
- package/es/Pagination/index.js +15 -15
- package/es/ParauiProvider/index.js +1 -1
- 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/QuickReplyCode/index.js +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 +20 -20
- 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 +114 -114
- package/es/SelectInput/component.json +184 -0
- package/es/Selector/component.json +203 -0
- package/es/Selector/index.js +56 -50
- package/es/Selector/interface.d.ts +2 -2
- package/es/Selector/selectorData/index.js +1 -1
- package/es/Selector/selectorMain/index.js +3 -3
- package/es/Selector/selectorNode/index.js +1 -1
- package/es/Selector/util.d.ts +3 -3
- package/es/Selector/util.js +6 -12
- 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 +385 -382
- package/es/Table/interface.d.ts +30 -0
- package/es/Table/tableHead.js +1 -1
- package/es/Table/util.d.ts +1 -1
- package/es/Table/util.js +3 -12
- 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/TextEditor/index.js +1 -1
- package/es/TextField/component.json +290 -0
- package/es/TextField/index.d.ts +2 -2
- package/es/TextField/index.js +1 -1
- 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/ToggleButton/index.js +1 -1
- 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/OperateBar/index.js +1 -1
- package/es/Tree/Tree.js +3 -3
- package/es/Tree/component.json +512 -0
- package/es/Tree/interface.d.ts +1 -1
- package/es/Upload/component.json +450 -0
- package/es/Upload/util.js +1 -1
- package/es/Utils/snack-kit-shims.d.ts +18 -0
- package/es/Utils/snack-kit-shims.js +19 -0
- package/es/Utils/type.d.ts +0 -2
- package/es/_virtual/index.js +5 -3
- package/es/_virtual/index2.js +2 -5
- 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/es/node_modules/classnames/index.js +1 -1
- 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/dataGenerator/index.js +1 -1
- package/lib/Argv/index.d.ts +5 -6
- package/lib/Argv/index.js +1 -1
- 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/AutoTips/index.js +1 -1
- 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/OptionList/Column.js +1 -1
- package/lib/Cascader/OptionList/index.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/CheckboxGroup/index.js +1 -1
- package/lib/CodeEditor/component.json +189 -0
- package/lib/CodeEditor/index.d.ts +11 -10
- package/lib/CodeEditor/index.js +1 -1
- 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/Desktop/index.js +1 -1
- 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/Dropdown/index.js +1 -1
- package/lib/DynamicMultiBox/component.json +278 -0
- package/lib/DynamicMultiBox/formItem.d.ts +1 -1
- package/lib/DynamicMultiBox/index.js +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/ItemHolder.js +1 -1
- package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/lib/FieldForm/FieldFormItem/StatusProvider.js +1 -1
- package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/lib/FieldForm/Form.d.ts +2 -2
- package/lib/FieldForm/Form.js +1 -1
- package/lib/FieldForm/FormItemInput.js +1 -1
- package/lib/FieldForm/FormItemLabel.js +1 -1
- 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/Form/index.js +1 -1
- 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/GlobalContext/confirmLocale.js +1 -1
- package/lib/GlobalContext/index.js +1 -1
- package/lib/Help/component.json +118 -0
- package/lib/HelperText/component.json +126 -0
- package/lib/Image/PreviewGroup.js +1 -1
- package/lib/Image/component.json +165 -0
- package/lib/Image/index.js +1 -1
- 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/Menu/verticalMenuList.js +1 -1
- 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 +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/PageHeader/horizontalMeun.js +1 -1
- package/lib/PageHeader/horizontalMeunRight.js +1 -1
- package/lib/Pagination/component.json +181 -0
- package/lib/Pagination/index.js +1 -1
- package/lib/ParauiProvider/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/QuickReplyCode/index.js +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 +2 -2
- package/lib/Selector/selectorData/index.js +1 -1
- package/lib/Selector/selectorMain/index.js +1 -1
- package/lib/Selector/selectorNode/index.js +1 -1
- package/lib/Selector/util.d.ts +3 -3
- package/lib/Selector/util.js +1 -1
- 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 +30 -0
- package/lib/Table/tableHead.js +1 -1
- package/lib/Table/util.d.ts +1 -1
- package/lib/Table/util.js +1 -1
- 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/TextEditor/index.js +1 -1
- package/lib/TextField/component.json +290 -0
- package/lib/TextField/index.d.ts +2 -2
- package/lib/TextField/index.js +1 -1
- 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/ToggleButton/index.js +1 -1
- 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/OperateBar/index.js +2 -2
- package/lib/Tree/Tree.js +1 -1
- package/lib/Tree/component.json +512 -0
- package/lib/Tree/interface.d.ts +1 -1
- package/lib/Upload/component.json +450 -0
- package/lib/Upload/util.js +1 -1
- package/lib/Utils/snack-kit-shims.d.ts +18 -0
- package/lib/Utils/snack-kit-shims.js +2 -0
- package/lib/Utils/type.d.ts +0 -2
- package/lib/_virtual/index.js +1 -1
- package/lib/_virtual/index2.js +1 -1
- 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/lib/node_modules/classnames/index.js +1 -1
- package/package.json +11 -4
- package/es/_virtual/index3.js +0 -5
- package/es/_virtual/index4.js +0 -5
- package/es/node_modules/@para-snack/core/dist/index.js +0 -5231
- package/lib/_virtual/index3.js +0 -2
- package/lib/_virtual/index4.js +0 -2
- package/lib/node_modules/@para-snack/core/dist/index.js +0 -20
- /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": "Notification",
|
|
3
|
+
"category": "Feedback",
|
|
4
|
+
"description": "全局通知提醒框,通过命令式 API(Notification.open / .success / .info / .warning / .error)触发,支持角落定位、标题 + 内容 + 操作按钮、可关闭回调、key 管理",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"系统通知",
|
|
8
|
+
"重要提醒",
|
|
9
|
+
"复杂反馈"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"系统升级通知",
|
|
13
|
+
"后台任务完成提醒",
|
|
14
|
+
"带操作按钮的系统消息"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "normal"
|
|
17
|
+
},
|
|
18
|
+
"protocolSummary": "**命令式 API,不是 React 组件**。调用方式:\n```\nNotification.success({ message: '标题', description: '内容', duration: 3 })\nNotification.info({ message: '提示', description: '详情' })\nNotification.warning({ message: '警告', description: '说明' })\nNotification.error({ message: '错误', description: '信息' })\nNotification.open({ message: '标题', description: '内容', type: 'success' }) // open 是 success/info/warning/error 的底层\nNotification.close('my-key') // 关闭指定 key 的通知\nNotification.destroy() // 关闭所有通知\nNotification.config({ placement, top, maxCount, duration }) // 全局配置\n```\n**duration 单位是秒**(与 Message.duration 毫秒不同!)。默认 5 秒自动关闭;传 null 不自动关闭。",
|
|
19
|
+
"variants": {
|
|
20
|
+
"success": { "meaning": "成功(绿色 ✓ 图标)" },
|
|
21
|
+
"info": { "meaning": "普通信息(蓝色 i 图标)" },
|
|
22
|
+
"warning": { "meaning": "警告(黄色 ! 图标)" },
|
|
23
|
+
"error": { "meaning": "错误(红色 × 图标)" }
|
|
24
|
+
},
|
|
25
|
+
"states": [
|
|
26
|
+
"opening",
|
|
27
|
+
"closing"
|
|
28
|
+
],
|
|
29
|
+
"idealProps": {
|
|
30
|
+
"message": {
|
|
31
|
+
"type": "ReactNode",
|
|
32
|
+
"description": "通知标题(必填),通知卡片上方的粗体文字"
|
|
33
|
+
},
|
|
34
|
+
"description": {
|
|
35
|
+
"type": "ReactNode",
|
|
36
|
+
"description": "通知正文内容;与 message 同时出现时,message 作为标题,description 作为正文"
|
|
37
|
+
},
|
|
38
|
+
"duration": {
|
|
39
|
+
"type": "number | null",
|
|
40
|
+
"default": 5,
|
|
41
|
+
"description": "**自动关闭延时,单位秒**(注意:与 Message 组件的毫秒单位不同!);传 null 不自动关闭(需用户点击关闭按钮或调用 Notification.close(key))"
|
|
42
|
+
},
|
|
43
|
+
"placement": {
|
|
44
|
+
"type": "enum",
|
|
45
|
+
"values": ["topLeft", "topRight", "bottomLeft", "bottomRight"],
|
|
46
|
+
"default": "topRight",
|
|
47
|
+
"description": "弹出位置,4 个角落,topRight 最常用"
|
|
48
|
+
},
|
|
49
|
+
"key": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "通知唯一标志;传了 key 才能用 Notification.close(key) 程序性关闭;同一 key 再次 open 会更新已有通知"
|
|
52
|
+
},
|
|
53
|
+
"onClose": {
|
|
54
|
+
"type": "() => void",
|
|
55
|
+
"description": "关闭时触发(自动关闭 + 用户手动关闭都触发)"
|
|
56
|
+
},
|
|
57
|
+
"onClick": {
|
|
58
|
+
"type": "() => void",
|
|
59
|
+
"description": "点击通知内容区域(非关闭按钮)时触发"
|
|
60
|
+
},
|
|
61
|
+
"btn": {
|
|
62
|
+
"type": "ReactNode",
|
|
63
|
+
"description": "通知卡片底部自定义操作区域(如 '立即更新' 按钮)"
|
|
64
|
+
},
|
|
65
|
+
"icon": {
|
|
66
|
+
"type": "ReactNode",
|
|
67
|
+
"description": "自定义图标,覆盖 type 默认图标"
|
|
68
|
+
},
|
|
69
|
+
"top": {
|
|
70
|
+
"type": "number",
|
|
71
|
+
"default": 20,
|
|
72
|
+
"description": "topLeft/topRight 时距顶部距离(px)"
|
|
73
|
+
},
|
|
74
|
+
"bottom": {
|
|
75
|
+
"type": "number",
|
|
76
|
+
"default": 20,
|
|
77
|
+
"description": "bottomLeft/bottomRight 时距底部距离(px)"
|
|
78
|
+
},
|
|
79
|
+
"getContainer": {
|
|
80
|
+
"type": "() => HTMLElement",
|
|
81
|
+
"description": "渲染容器,默认 document.body"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"commonPatterns": {
|
|
85
|
+
"basic": "Notification.success({ message: '操作成功', description: '数据已保存', duration: 3 })",
|
|
86
|
+
"persistent": "Notification.warning({ message: '需要确认', description: '请及时处理', duration: null, key: 'warn-1' });\n// 处理完成后:\nNotification.close('warn-1');",
|
|
87
|
+
"withButton": "Notification.info({\n message: '发现新版本',\n description: 'v2.0.0 已发布',\n duration: null,\n key: 'update',\n btn: <Button onClick={() => { window.open(releaseUrl); Notification.close('update'); }}>立即更新</Button>\n});",
|
|
88
|
+
"globalConfig": "Notification.config({ placement: 'topRight', top: 60, maxCount: 5, duration: 3 });"
|
|
89
|
+
},
|
|
90
|
+
"commandApi": {
|
|
91
|
+
"Notification.open": {
|
|
92
|
+
"signature": "(args: ArgsProps) => void",
|
|
93
|
+
"description": "打开通知,所有 ideaProps 字段均为 ArgsProps 的字段"
|
|
94
|
+
},
|
|
95
|
+
"Notification.success": {
|
|
96
|
+
"signature": "(args: ArgsProps) => void",
|
|
97
|
+
"description": "等价于 Notification.open({...args, type: 'success'})"
|
|
98
|
+
},
|
|
99
|
+
"Notification.info": {
|
|
100
|
+
"signature": "(args: ArgsProps) => void"
|
|
101
|
+
},
|
|
102
|
+
"Notification.warning": {
|
|
103
|
+
"signature": "(args: ArgsProps) => void",
|
|
104
|
+
"description": "Notification.warn 是 Notification.warning 的别名"
|
|
105
|
+
},
|
|
106
|
+
"Notification.error": {
|
|
107
|
+
"signature": "(args: ArgsProps) => void"
|
|
108
|
+
},
|
|
109
|
+
"Notification.close": {
|
|
110
|
+
"signature": "(key: string) => void",
|
|
111
|
+
"description": "关闭指定 key 的通知,遍历所有 placement 实例"
|
|
112
|
+
},
|
|
113
|
+
"Notification.destroy": {
|
|
114
|
+
"signature": "() => void",
|
|
115
|
+
"description": "销毁所有通知实例(包括已显示的和正在动画的)"
|
|
116
|
+
},
|
|
117
|
+
"Notification.config": {
|
|
118
|
+
"signature": "(options: ConfigProps) => void",
|
|
119
|
+
"description": "全局配置,应用入口调用一次"
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"do": [
|
|
123
|
+
"用于比 Message 更重要的、需要用户关注的全局通知(如系统升级、任务完成)",
|
|
124
|
+
"**duration 单位是秒**(默认 5),不是毫秒——与 Message 组件不同",
|
|
125
|
+
"需要程序性关闭时传 key 字段并用 Notification.close(key)",
|
|
126
|
+
"App 入口调用 Notification.config 设置全局 placement / maxCount / duration"
|
|
127
|
+
],
|
|
128
|
+
"dont": [
|
|
129
|
+
"频繁使用 Notification 打断用户操作——轻提示用 Message,重要操作确认用 FunctionModal",
|
|
130
|
+
"堆叠过多——配合 maxCount 限制同时显示数量",
|
|
131
|
+
"把 duration 写成毫秒——duration 是秒,写 3000 会导致通知 3000 秒后才关闭"
|
|
132
|
+
],
|
|
133
|
+
"events": {
|
|
134
|
+
"onClose": {
|
|
135
|
+
"signature": "() => void",
|
|
136
|
+
"asyncSupported": false,
|
|
137
|
+
"examples": [
|
|
138
|
+
"Notification.info({ message: '提示', onClose: () => console.log('已关闭') }) — 自动关闭和手动关闭都触发",
|
|
139
|
+
"持久通知 + 关闭回调:Notification.warning({ message: '警告', duration: null, key: 'w1', onClose: () => markAsRead() })",
|
|
140
|
+
"配合 key 程序关闭:Notification.close('w1') 也会触发 onClose"
|
|
141
|
+
],
|
|
142
|
+
"commonMistakes": [
|
|
143
|
+
"期望 onClose 签名是 (e) => void——实际无参 () => void",
|
|
144
|
+
"传了 onClose 但没有显式关闭路径——duration=null 时通知不自动关闭,onClose 永不触发(除非用户点 × 或程序调用 close)",
|
|
145
|
+
"在 onClose 里再次调 Notification.open 期望实现替换效果——会新开一条通知,建议用 key 复用已有实例"
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"onClick": {
|
|
149
|
+
"signature": "() => void",
|
|
150
|
+
"asyncSupported": false,
|
|
151
|
+
"examples": [
|
|
152
|
+
"Notification.info({ message: '新消息', onClick: () => router.push('/messages') }) — 点击跳转",
|
|
153
|
+
"onClick 不关闭通知——需在 onClick 里手动调 Notification.close(key) 或让 duration 到期",
|
|
154
|
+
"onClick 和 btn 的 onClick 独立——通知区域点击 + 底部按钮点击是两个独立事件"
|
|
155
|
+
],
|
|
156
|
+
"commonMistakes": [
|
|
157
|
+
"期望点击通知后自动关闭——onClick 不触发关闭,需在 onClick 里手动 Notification.close(args.key)",
|
|
158
|
+
"在 btn 里写关闭逻辑而不传 key——没有 key 就无法调 Notification.close,需预先生成 key",
|
|
159
|
+
"期望 onClick 阻止通知关闭——点击关闭按钮(×)触发的是关闭逻辑,不能被 onClick 拦截"
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"typescriptPitfalls": [
|
|
164
|
+
{
|
|
165
|
+
"issue": "duration 单位是秒,不是毫秒——与 Message 不一致是常见陷阱",
|
|
166
|
+
"wrong": "Notification.success({ message: '成功', duration: 3000 }) // 3000 秒后才关闭!不是 3 秒",
|
|
167
|
+
"right": "Notification.success({ message: '成功', duration: 3 }) // 3 秒后自动关闭"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"issue": "Notification 是命令式 API,default export 是 api 对象,不是 React 组件,不能写 JSX",
|
|
171
|
+
"wrong": "import Notification from '@para-ui/core/Notification'; return <Notification message='提示' />; // JSX 类型错误",
|
|
172
|
+
"right": "import Notification from '@para-ui/core/Notification'; Notification.info({ message: '提示' }); // 命令式调用"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"issue": "message 类型是 ReactNode,但 ArgsProps 中 message 是必填字段,不传会导致 TS 报错",
|
|
176
|
+
"wrong": "Notification.open({ description: '内容' }) // TS2345: Property 'message' is missing",
|
|
177
|
+
"right": "Notification.open({ message: '标题', description: '内容' }) // message 必填"
|
|
178
|
+
}
|
|
179
|
+
],
|
|
180
|
+
"mapping": {
|
|
181
|
+
"realComponent": "Notification",
|
|
182
|
+
"adapter": null
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "OperateBtn",
|
|
3
|
+
"category": "General",
|
|
4
|
+
"description": "表格列操作按钮组,将多个行操作收纳为图标按钮 + 更多浮层,常配合 Table 使用",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"行操作",
|
|
8
|
+
"批量操作",
|
|
9
|
+
"操作收纳"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"表格操作列",
|
|
13
|
+
"卡片操作区",
|
|
14
|
+
"工具栏"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "normal"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"default": {
|
|
20
|
+
"meaning": "默认样式"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"states": [
|
|
24
|
+
"default",
|
|
25
|
+
"loading"
|
|
26
|
+
],
|
|
27
|
+
"idealProps": {
|
|
28
|
+
"list": {
|
|
29
|
+
"type": "OperateBtnListProps[]",
|
|
30
|
+
"itemSchema": {
|
|
31
|
+
"key": { "type": "string", "description": "唯一标识(与组件 key prop 配合,用于 loadingMapping 索引)" },
|
|
32
|
+
"label": { "type": "ReactNode", "description": "按钮显示文案" },
|
|
33
|
+
"icon": { "type": "ReactNode", "description": "按钮图标(外显按钮展示区域,显示 icon 而非 label)" },
|
|
34
|
+
"disabled": { "type": "boolean", "description": "是否禁用" },
|
|
35
|
+
"danger": { "type": "boolean", "description": "是否为危险按钮(红色)" },
|
|
36
|
+
"toolTipTitle": { "type": "ReactNode", "description": "hover tooltip 文案;外显按钮默认取 toolTipTitle ?? label 作 tooltip" },
|
|
37
|
+
"popConfirmProps": { "type": "PopConfirmProps", "description": "点击弹出气泡确认框的配置" },
|
|
38
|
+
"onClick": { "type": "(item: OperateBtnListProps, e: any) => void | Promise<boolean|any>", "description": "单项点击事件(优先级高于组件级 onClick);Promise resolve(false) 关闭 loading" }
|
|
39
|
+
},
|
|
40
|
+
"description": "按钮列表配置(每项含 label/icon/key/disabled/danger/toolTipTitle/popConfirmProps/onClick)"
|
|
41
|
+
},
|
|
42
|
+
"showNum": {
|
|
43
|
+
"type": "number",
|
|
44
|
+
"default": 3,
|
|
45
|
+
"description": "前 N 个按钮外显,超出折叠到更多浮层;⚠️ 仅 list.length > showNum + 1 才出现更多按钮(差值严格大于 1),若 list.length === showNum+1 最后一个也外显不进更多"
|
|
46
|
+
},
|
|
47
|
+
"key": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"default": "key",
|
|
50
|
+
"description": "指定 list 项中作为 loadingMapping 索引的字段名(不是 React key,是 list 项对象里用于 loadingMapping 映射的字段路径名)"
|
|
51
|
+
},
|
|
52
|
+
"size": {
|
|
53
|
+
"type": "enum",
|
|
54
|
+
"values": ["small", "medium", "large"],
|
|
55
|
+
"default": "small",
|
|
56
|
+
"description": "按钮大小;表格行内推荐 small"
|
|
57
|
+
},
|
|
58
|
+
"placement": {
|
|
59
|
+
"type": "Placement",
|
|
60
|
+
"default": "bottom-end",
|
|
61
|
+
"description": "外显按钮 Tooltip 及更多浮层的定位方向(src/OperateBtn/index.tsx:88 interface 实证,默认 bottom-end)"
|
|
62
|
+
},
|
|
63
|
+
"clickCloseMore": {
|
|
64
|
+
"type": "boolean",
|
|
65
|
+
"default": true,
|
|
66
|
+
"description": "点击 list 项后是否自动关闭更多浮层"
|
|
67
|
+
},
|
|
68
|
+
"onClick": {
|
|
69
|
+
"type": "(item: OperateBtnListProps, e: any) => void | Promise<boolean | any>",
|
|
70
|
+
"description": "组件级点击事件;list 项自带 item.onClick 时对本项失效(item.onClick 优先级更高);非受控 loading 下 Promise resolve(false) 表示失败、保持按钮 loading;resolve(true/undefined) 关闭 loading"
|
|
71
|
+
},
|
|
72
|
+
"loadingMapping": {
|
|
73
|
+
"type": "{[name: string]: boolean}",
|
|
74
|
+
"description": "受控 loading 映射;键 = item[key] 字段值;传入后 onClick 返回值不再控制 loading,由外部控制"
|
|
75
|
+
},
|
|
76
|
+
"popoverClassName": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"description": "更多浮层的自定义 className(src/OperateBtn/index.tsx:73 interface 实证)"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"do": [
|
|
82
|
+
"表格行内操作首选 OperateBtn,将编辑/删除/查看等图标按钮组合为一组,超出 showNum 自动收纳到更多",
|
|
83
|
+
"危险操作(删除等)配合 list[i].popConfirmProps 弹二次确认,避免误操作",
|
|
84
|
+
"提供 loading 状态反馈:短请求用内置非受控 loading(onClick 返回 Promise),长请求或多处联动用 loadingMapping 受控",
|
|
85
|
+
"list 每项必须有 icon 或 toolTipTitle 其中之一,外显按钮以图标展示,tooltip 才能给用户提示操作语义"
|
|
86
|
+
],
|
|
87
|
+
"dont": [
|
|
88
|
+
"不要在 loadingMapping 键中使用数组下标——键应匹配 item[key] 字段(默认 item.key),而非 list 索引",
|
|
89
|
+
"危险操作不加 popConfirmProps 确认直接删除",
|
|
90
|
+
"操作按钮超过 5 个不分组——超出部分应通过 showNum 折叠,或拆分为多个操作区"
|
|
91
|
+
],
|
|
92
|
+
"events": {
|
|
93
|
+
"onClick": {
|
|
94
|
+
"signature": "(item: OperateBtnListProps, e: any) => void | Promise<boolean | any>",
|
|
95
|
+
"asyncSupported": true,
|
|
96
|
+
"examples": [
|
|
97
|
+
"基本同步点击:onClick={(item, e) => { handleAction(item); }}",
|
|
98
|
+
"异步操作自动 loading:onClick={async (item, e) => { await deleteRow(item.id); return true; }} // resolve(true) 关闭 loading",
|
|
99
|
+
"配合 key prop 做受控 loading:loadingMapping={{ [row.id]: isDeleting }} // 外部控制 loading 状态"
|
|
100
|
+
],
|
|
101
|
+
"commonMistakes": [
|
|
102
|
+
"item.onClick 与组件级 onClick 混用——item.onClick 存在时组件级 onClick 对该项失效,二选一即可",
|
|
103
|
+
"期望 Promise resolve(false) 关闭 loading——resolve(false) 是失败语义,loading 保持;resolve(true/undefined) 才关闭",
|
|
104
|
+
"同时传 loadingMapping 又在 onClick 里 return Promise——传 loadingMapping 后 Promise 返回值不影响 loading,由外部 state 控制"
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"typescriptPitfalls": [
|
|
109
|
+
{
|
|
110
|
+
"issue": "OperateBtnListProps 的 key 字段与 React 的 key 属性同名但语义不同",
|
|
111
|
+
"wrong": "// 期望 React key:\nlist={[{ key: 'edit', label: '编辑', icon: <Edit /> }]} // OperateBtn 的 key prop 用于 loadingMapping 索引,不是 React reconcile key",
|
|
112
|
+
"right": "// loadingMapping 键要和 list 项里的 key 字段值对应:\nlist={[{ key: 'edit', label: '编辑', icon: <Edit /> }]}\nloadingMapping={{ edit: isLoading }}"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"issue": "OperateBtnProps.key 是字符串(字段路径名),不是数组下标",
|
|
116
|
+
"wrong": "<OperateBtn key='id' list={list} loadingMapping={{ 0: true }} /> // 用数组下标做 mapping 键",
|
|
117
|
+
"right": "<OperateBtn key='id' list={list} loadingMapping={{ [list[0].id]: true }} /> // 键应是 item[keyProp] 的值"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"issue": "list 每项的 onClick 签名是 (item, e),不是单参数 (e)",
|
|
121
|
+
"wrong": "list={[{ icon: <Edit />, onClick: (e) => e.stopPropagation() }]} // 签名不匹配",
|
|
122
|
+
"right": "list={[{ icon: <Edit />, onClick: (item, e) => { e.stopPropagation(); handleEdit(item); } }]}"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"issue": "@para-ui/icons 中不存在 View 和 Share 图标,使用会导致 TS2307 模块找不到",
|
|
126
|
+
"wrong": "import View from '@para-ui/icons/View'; // TS2307: 找不到模块\nimport Share from '@para-ui/icons/Share'; // TS2307: 找不到模块",
|
|
127
|
+
"right": "import PreviewOpen from '@para-ui/icons/PreviewOpen'; // 查看/预览\nimport More from '@para-ui/icons/More'; // 更多操作\n// 可用图标:Edit, Delete, Copy, More, PreviewOpen, PreviewClose 等"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"mapping": {
|
|
131
|
+
"realComponent": "OperateBtn",
|
|
132
|
+
"adapter": null
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "PageHeader",
|
|
3
|
+
"category": "Navigation",
|
|
4
|
+
"description": "页头(应用级顶部导航条):左侧 logo/标题 + 中间横向菜单 + 右侧用户/语言/帮助/按钮区",
|
|
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
|
+
"leftRender": {
|
|
28
|
+
"type": "ReactNode",
|
|
29
|
+
"description": "左侧自定义内容(放 logo / 应用标题 / 返回按钮等);**支持纯文本 / 单行 JSX / 多行复合 JSX**(标题+副标题、返回按钮+标题、面包屑+标题、标题+状态彩标);**注意:不是 title / subTitle / backIcon / breadcrumb / onBack prop**(这些 Ant Design PageHeader 命名本组件均不存在,需要时全部组合进 leftRender ReactNode);典型场景见 docs/view/pageHeader/codeString.ts 注释 7a/7b/7c/7d"
|
|
30
|
+
},
|
|
31
|
+
"menuListProps": {
|
|
32
|
+
"type": "MenuListProps",
|
|
33
|
+
"description": "横向菜单配置对象;MenuListProps = { list?: MenuChildrenProps[]; selectMenu?: string; onClickMenu?: (item: MenuChildrenProps | false) => void; className?: string; moreCustomize?: ReactNode };src/PageHeader/interface.ts:38"
|
|
34
|
+
},
|
|
35
|
+
"footerProps": {
|
|
36
|
+
"type": "FooterProps",
|
|
37
|
+
"description": "**右侧功能区聚合对象**(放语言切换 / 用户菜单 / 帮助 / 按钮列表 / 自助跳转 / 自定义);FooterProps = { backSelfcareProps?: BackSelfcareProps; languageProps?: LanguageProps; btnListProps?: BtnListProps; userProps?: UserProps; helpProps?: HelpProps; render?: ReactNode; className?: string };**所有右侧功能都在这个对象里嵌套配置,不是顶层独立 prop**;**helpProps 结构同 BackSelfcareProps**(label/icon/render/onClick/className);**render 是「替换」语义**,传入后整个右侧被替换,其他 5 widget 字段都不渲染(无追加模式);src/PageHeader/interface.ts:162"
|
|
38
|
+
},
|
|
39
|
+
"selectMenu": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "当前选中菜单(匹配 menuListProps.list[].path);顶层 selectMenu 会下传到 MenuListProps.selectMenu;src/PageHeader/index.tsx:14"
|
|
42
|
+
},
|
|
43
|
+
"onClickMenu": {
|
|
44
|
+
"type": "(item: MenuChildrenProps | false) => void",
|
|
45
|
+
"description": "菜单点击回调;**回参 item 是 MenuChildrenProps 对象或 false**(false 表示选中态被清空);MenuChildrenProps = { label?, type?, path?, icon?, children?, ... },典型用法 `item.path` 取菜单路径"
|
|
46
|
+
},
|
|
47
|
+
"className": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "外层容器样式 class"
|
|
50
|
+
},
|
|
51
|
+
"style": {
|
|
52
|
+
"type": "React.CSSProperties",
|
|
53
|
+
"description": "外层容器内联样式"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"do": [
|
|
57
|
+
"logo / 应用名放 leftRender",
|
|
58
|
+
"横向菜单走 menuListProps.list(树形结构通过 children 嵌套)",
|
|
59
|
+
"右侧功能(语言 / 用户 / 帮助 / 按钮)统一在 footerProps 对象里嵌套配置",
|
|
60
|
+
"selectMenu 受控 — 父维护 string 匹配 list[].path"
|
|
61
|
+
],
|
|
62
|
+
"dont": [
|
|
63
|
+
"把 title / subTitle / extra / onBack / backIcon / breadcrumb / footer 当作顶层 prop 传(全部 Ant Design 命名,**本组件均不存在**)",
|
|
64
|
+
"把右侧功能字段(languageProps / userProps / btnListProps / helpProps / backSelfcareProps)拆到顶层(必须嵌套在 footerProps 对象里)",
|
|
65
|
+
"在 menuListProps.list[].type 上随意填值(仅支持 'redirect' | 'router' | 'iframe' | 'snack' | 'snackPage' 五种)",
|
|
66
|
+
"传 footerProps.render 同时配其他 widget 字段(render 是**替换语义**,会覆盖整个右侧,languageProps/userProps 等都不渲染;无追加模式)",
|
|
67
|
+
"期望 PageHeader 顶层有 bottomRender / footerRender / statsRender / extraBottom 下方内容区(**本组件不支持下方扩展插槽**;如需统计条/标签栏在 PageHeader 外层 div 包装)",
|
|
68
|
+
"把「标题 + 副标题」/「返回按钮 + 标题」/「面包屑 + 标题」拆成多个顶层 prop(本组件这类复合内容**全部塞进 leftRender ReactNode**;见 docs/view/pageHeader/codeString.ts 注释 7a/7b/7c)"
|
|
69
|
+
],
|
|
70
|
+
"events": {
|
|
71
|
+
"onClickMenu": {
|
|
72
|
+
"signature": "(item: MenuChildrenProps | false) => void",
|
|
73
|
+
"asyncSupported": false,
|
|
74
|
+
"examples": [
|
|
75
|
+
"获取路由路径:onClickMenu={(item) => { if (item) navigate(item.path); }}",
|
|
76
|
+
"清空选中:onClickMenu={(item) => { if (!item) setSelectMenu(''); else setSelectMenu(item.path); }}",
|
|
77
|
+
"嵌套子菜单点击:回参 item.children 可能有子项,item.path 是当前点击项的路径,非父级路径"
|
|
78
|
+
],
|
|
79
|
+
"commonMistakes": [
|
|
80
|
+
"假设 item 永远是对象——回参可能是 false(表示选中态被清空),使用前需判断 if (item)",
|
|
81
|
+
"直接用 item.label 作路由——应用 item.path;item.label 是显示文案",
|
|
82
|
+
"不更新 selectMenu 导致菜单高亮不同步——onClickMenu 触发后需 setState(item.path) 回写 selectMenu"
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"typescriptPitfalls": [
|
|
87
|
+
{
|
|
88
|
+
"issue": "footerProps 内字段不能拆到 PageHeader 顶层,TS 会报未知 prop",
|
|
89
|
+
"wrong": "<PageHeader userProps={{ label: '张三' }} languageProps={{ ... }} /> // 这些不是顶层 prop",
|
|
90
|
+
"right": "<PageHeader footerProps={{ userProps: { label: '张三' }, languageProps: { ... } }} />"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"issue": "MenuChildrenProps.type 是菜单行为类型,有严格枚举,传错值 TS 不会报错但菜单不响应",
|
|
94
|
+
"wrong": "list={[{ label: '首页', type: 'link', path: '/home' }]} // 'link' 不在联合类型",
|
|
95
|
+
"right": "list={[{ label: '首页', type: 'router', path: '/home' }]} // 合法值: 'redirect' | 'router' | 'iframe' | 'snack' | 'snackPage'"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"issue": "onClickMenu 回参是 MenuChildrenProps | false,直接访问属性前需判空",
|
|
99
|
+
"wrong": "onClickMenu={(item) => navigate(item.path)} // item 可能是 false,访问 .path 会 TypeError",
|
|
100
|
+
"right": "onClickMenu={(item) => { if (item && item.path) navigate(item.path); }}"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"issue": "不要从 @para-ui/core 导入 MenuChildrenProps 用于 onClickMenu 类型标注——PageHeader/interface.ts 和 Menu/interface.ts 各有一个同名 MenuChildrenProps,两者互不兼容,强行标注会导致 TS2322",
|
|
104
|
+
"wrong": "import { PageHeader, MenuChildrenProps } from '@para-ui/core';\nonClickMenu={(item: MenuChildrenProps | false) => ...} // MenuChildrenProps 来自 Menu 不来自 PageHeader,类型冲突",
|
|
105
|
+
"right": "import { PageHeader } from '@para-ui/core';\n// 不标注类型,让 TS 推断,或使用 Parameters<typeof PageHeader>[0]['onClickMenu']\nonClickMenu={(item) => { if (item && item.path) navigate(item.path); }}"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"mapping": {
|
|
109
|
+
"realComponent": "PageHeader",
|
|
110
|
+
"adapter": null
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Pagination",
|
|
3
|
+
"category": "Navigation",
|
|
4
|
+
"description": "分页组件,支持 simple / complex 双模式及自定义布局组合",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"展示数据",
|
|
8
|
+
"分批加载",
|
|
9
|
+
"导航"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"数据列表",
|
|
13
|
+
"搜索结果",
|
|
14
|
+
"评论区"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "low"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"simple": {
|
|
20
|
+
"meaning": "简单模式(仅翻页按钮/数字页码)"
|
|
21
|
+
},
|
|
22
|
+
"complex": {
|
|
23
|
+
"meaning": "复杂模式(含总数 + 每页行数 + 页码 + 跳转)"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"states": [
|
|
27
|
+
"default",
|
|
28
|
+
"disabled"
|
|
29
|
+
],
|
|
30
|
+
"idealProps": {
|
|
31
|
+
"total": {
|
|
32
|
+
"type": "number",
|
|
33
|
+
"default": 0,
|
|
34
|
+
"description": "数据总数"
|
|
35
|
+
},
|
|
36
|
+
"page": {
|
|
37
|
+
"type": "number",
|
|
38
|
+
"default": 1,
|
|
39
|
+
"description": "当前页码(受控)"
|
|
40
|
+
},
|
|
41
|
+
"rowsPerPage": {
|
|
42
|
+
"type": "number[]",
|
|
43
|
+
"default": [10, 20, 50, 100],
|
|
44
|
+
"description": "每页行数候选项列表(下拉选项)"
|
|
45
|
+
},
|
|
46
|
+
"currentRowsPerPage": {
|
|
47
|
+
"type": "number",
|
|
48
|
+
"default": 10,
|
|
49
|
+
"description": "当前选中的每页行数"
|
|
50
|
+
},
|
|
51
|
+
"type": {
|
|
52
|
+
"type": "enum",
|
|
53
|
+
"values": [
|
|
54
|
+
"simple",
|
|
55
|
+
"complex",
|
|
56
|
+
"PaginationLayout[]"
|
|
57
|
+
],
|
|
58
|
+
"default": "simple",
|
|
59
|
+
"description": "分页类型;**'simple'** = 仅翻页按钮/数字(sizes/pageRow/jumper 均不显示);**'complex'** = 完整布局(总数+每页行数+页码+跳转,支持 autoType 响应式收叠);**PaginationLayout[]** = 自定义组合,合法值 'sizes'|'pageRow'|'pager'|'jumper'"
|
|
60
|
+
},
|
|
61
|
+
"pagerType": {
|
|
62
|
+
"type": "enum",
|
|
63
|
+
"values": [
|
|
64
|
+
"btn",
|
|
65
|
+
"num"
|
|
66
|
+
],
|
|
67
|
+
"default": "num",
|
|
68
|
+
"description": "页码显示模式 btn=上下页按钮 / num=数字页码列表"
|
|
69
|
+
},
|
|
70
|
+
"flippingArrow": {
|
|
71
|
+
"type": "PaginationFlippingArrow[]",
|
|
72
|
+
"values": [
|
|
73
|
+
"prev",
|
|
74
|
+
"next"
|
|
75
|
+
],
|
|
76
|
+
"default": ["prev", "next"],
|
|
77
|
+
"description": "方向键 layout;传空数组隐藏全部箭头"
|
|
78
|
+
},
|
|
79
|
+
"autoType": {
|
|
80
|
+
"type": "boolean",
|
|
81
|
+
"default": true,
|
|
82
|
+
"description": "type=complex 自适应模式(响应宽度自动收叠)"
|
|
83
|
+
},
|
|
84
|
+
"resizeLine": {
|
|
85
|
+
"type": "string | number",
|
|
86
|
+
"description": "type=complex 时重新计算换行(传值变化触发自适应)"
|
|
87
|
+
},
|
|
88
|
+
"pageMaxLimit": {
|
|
89
|
+
"type": "boolean",
|
|
90
|
+
"default": true,
|
|
91
|
+
"description": "当前页超过总页数时自动回落到最大页"
|
|
92
|
+
},
|
|
93
|
+
"skipFunc": {
|
|
94
|
+
"type": "function",
|
|
95
|
+
"signature": "(num?: number, skipValue?: number) => void",
|
|
96
|
+
"description": "回车跳页回调;num 是校正后目标页(已 clamp 到 1~totalPage),skipValue 是输入框原始值(未校正)"
|
|
97
|
+
},
|
|
98
|
+
"changePage": {
|
|
99
|
+
"type": "function",
|
|
100
|
+
"signature": "(num?: number) => void",
|
|
101
|
+
"description": "页码改变回调(点击页码 / prev / next / 回车跳转时均触发);num 是目标页码"
|
|
102
|
+
},
|
|
103
|
+
"changeRowsPerPage": {
|
|
104
|
+
"type": "function",
|
|
105
|
+
"signature": "(num: number) => void",
|
|
106
|
+
"description": "每页行数改变回调;num 是新选中行数(非下标,是实际数值)"
|
|
107
|
+
},
|
|
108
|
+
"getPopupContainer": {
|
|
109
|
+
"type": "function",
|
|
110
|
+
"description": "rowsPerPage 下拉的渲染父节点 (triggerNode) => HTMLElement"
|
|
111
|
+
},
|
|
112
|
+
"className": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"description": "自定义类名(src/Pagination/index.tsx:33 interface 实证,追加到根容器 div)"
|
|
115
|
+
},
|
|
116
|
+
"style": {
|
|
117
|
+
"type": "React.CSSProperties",
|
|
118
|
+
"description": "自定义样式(src/Pagination/index.tsx:35 interface 实证,透传到根容器 div)"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"do": [
|
|
122
|
+
"Table 独立分页时:changePage 里更新父组件 page state 并重新请求数据,将最新 page 回传给 Pagination 维持受控",
|
|
123
|
+
"展示总记录数 + 每页行数切换:使用 type='complex',changeRowsPerPage 里同时重置 page=1 再发请求",
|
|
124
|
+
"在数据量较大时使用服务端分页——本地分页仅适合 <200 条",
|
|
125
|
+
"保持每页数量适中(10-50)"
|
|
126
|
+
],
|
|
127
|
+
"dont": [
|
|
128
|
+
"在极少量数据(<20)时使用 Pagination",
|
|
129
|
+
"隐藏当前页码标识",
|
|
130
|
+
"changePage/changeRowsPerPage 里不更新父组件 page state——Pagination 是受控组件,不回写 page prop 会导致翻页后页码回弹"
|
|
131
|
+
],
|
|
132
|
+
"events": {
|
|
133
|
+
"changePage": {
|
|
134
|
+
"signature": "(num?: number) => void",
|
|
135
|
+
"asyncSupported": false,
|
|
136
|
+
"examples": [
|
|
137
|
+
"受控翻页:changePage={(num) => { setPage(num ?? 1); fetchData(num ?? 1, currentRowsPerPage); }}",
|
|
138
|
+
"配合 Table:changePage={(num) => { tableRef.current.reload({ page: num }); }}",
|
|
139
|
+
"防止 undefined:changePage={(num) => setPage(num ?? 1)} // num 在正常翻页时有值,极端情况下可能 undefined"
|
|
140
|
+
],
|
|
141
|
+
"commonMistakes": [
|
|
142
|
+
"收到 changePage 后不更新 page prop——Pagination 是受控组件,不回写会导致页码状态不一致",
|
|
143
|
+
"期望 changePage 在组件内部状态已更新后触发——组件内部先 setPageCom(num) 再触发 changePage,父组件需自行维护独立的 page state",
|
|
144
|
+
"changeRowsPerPage 里忘记重置 page=1——切换每页条数后通常应回到第一页"
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
"changeRowsPerPage": {
|
|
148
|
+
"signature": "(num: number) => void",
|
|
149
|
+
"asyncSupported": false,
|
|
150
|
+
"examples": [
|
|
151
|
+
"切换每页行数并重置页码:changeRowsPerPage={(num) => { setCurrentRowsPerPage(num); setPage(1); fetchData(1, num); }}",
|
|
152
|
+
"受控写法:currentRowsPerPage={currentRowsPerPage} changeRowsPerPage={(num) => setCurrentRowsPerPage(num)}"
|
|
153
|
+
],
|
|
154
|
+
"commonMistakes": [
|
|
155
|
+
"忘记同步更新 currentRowsPerPage prop——不回写 prop 导致下拉显示旧值",
|
|
156
|
+
"假设 num 是下标而非实际行数值——num 是 rowsPerPage 数组里选中的那个数字本身"
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"typescriptPitfalls": [
|
|
161
|
+
{
|
|
162
|
+
"issue": "type prop 接受 PaginationLayout[] 数组,但内部枚举是 'sizes'|'pageRow'|'pager'|'jumper',不是 'complex'|'simple'",
|
|
163
|
+
"wrong": "type={['simple', 'pager']} // 'simple' 不在 PaginationLayout 联合类型",
|
|
164
|
+
"right": "type={['pager', 'jumper']} // 自定义布局组合只能用 PaginationLayout 枚举值"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"issue": "changeRowsPerPage 回参 num 是 number,不是可选 number | undefined",
|
|
168
|
+
"wrong": "(num?: number) => setCurrentRowsPerPage(num ?? 10) // 多余的 ?? 语法噪音",
|
|
169
|
+
"right": "(num: number) => setCurrentRowsPerPage(num) // num 保证有值"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"issue": "skipFunc 与 changePage 在回车跳页时都会触发,不要做重复请求",
|
|
173
|
+
"wrong": "skipFunc={(num) => fetchData(num)} changePage={(num) => fetchData(num)} // 回车时两个都触发,重复请求",
|
|
174
|
+
"right": "// 只需 changePage 处理翻页逻辑;skipFunc 是可选补充,跳页专用(例如记录跳转日志)"
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
"mapping": {
|
|
178
|
+
"realComponent": "Pagination",
|
|
179
|
+
"adapter": null
|
|
180
|
+
}
|
|
181
|
+
}
|