@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,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Empty",
|
|
3
|
+
"category": "Data Display",
|
|
4
|
+
"description": "空状态时的展示占位符,用于无数据、无搜索结果、无权限等场景,支持自定义图片、描述文案、刷新按钮及整体替换",
|
|
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
|
+
"visible"
|
|
25
|
+
],
|
|
26
|
+
"idealProps": {
|
|
27
|
+
"size": {
|
|
28
|
+
"type": "enum",
|
|
29
|
+
"values": [
|
|
30
|
+
"small",
|
|
31
|
+
"medium",
|
|
32
|
+
"large"
|
|
33
|
+
],
|
|
34
|
+
"default": "large",
|
|
35
|
+
"description": "尺寸。三档统一为 small / medium / large(2026-05-08 跨组件命名 epic §3.1 选项 B 实施,medium 为新增视觉档,默认 large 不变,既有 small/large 调用零回归)"
|
|
36
|
+
},
|
|
37
|
+
"image": {
|
|
38
|
+
"type": "ReactNode | string",
|
|
39
|
+
"description": "自定义图片节点。传字符串时渲染为 <img src={image}>,传 ReactNode 时直接渲染。**不传时按 size 自动选内置图:small=SmallNull, medium/large=LargeNull**"
|
|
40
|
+
},
|
|
41
|
+
"description": {
|
|
42
|
+
"type": "ReactNode | string",
|
|
43
|
+
"description": "自定义描述内容;不传时显示国际化默认文案(zh_CN='暂无内容')"
|
|
44
|
+
},
|
|
45
|
+
"imageStyle": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"objectShape": {
|
|
48
|
+
"height": { "type": "string | number", "description": "图片高度" },
|
|
49
|
+
"width": { "type": "string | number", "description": "图片宽度" }
|
|
50
|
+
},
|
|
51
|
+
"completeExample": "{ height: 60 }",
|
|
52
|
+
"description": "图片区域内联样式(React.CSSProperties 子集)"
|
|
53
|
+
},
|
|
54
|
+
"showRefresh": {
|
|
55
|
+
"type": "boolean",
|
|
56
|
+
"default": false,
|
|
57
|
+
"description": "是否显示刷新按钮;配合 onRefresh 使用"
|
|
58
|
+
},
|
|
59
|
+
"onRefresh": {
|
|
60
|
+
"type": "(event: React.MouseEvent) => void",
|
|
61
|
+
"description": "点击刷新按钮回调;仅 showRefresh=true 时展示触发"
|
|
62
|
+
},
|
|
63
|
+
"customEmpty": {
|
|
64
|
+
"type": "ReactNode",
|
|
65
|
+
"description": "**完整替换**整个空状态内容(包括图片 + 描述),传入后 image / description / showRefresh 全部不渲染(src/Empty/index.tsx 90 行 if(customEmpty) 分支实证)"
|
|
66
|
+
},
|
|
67
|
+
"className": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"description": "外层容器自定义类名"
|
|
70
|
+
},
|
|
71
|
+
"style": {
|
|
72
|
+
"type": "React.CSSProperties",
|
|
73
|
+
"description": "外层容器 style"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"do": [
|
|
77
|
+
"在无数据时提供 Empty 状态",
|
|
78
|
+
"提供引导操作:配合 showRefresh + onRefresh 增加刷新入口",
|
|
79
|
+
"需要完整自定义布局时使用 customEmpty 整体替换",
|
|
80
|
+
"size 默认 large,需要紧凑展示(如表格内嵌)时用 small"
|
|
81
|
+
],
|
|
82
|
+
"dont": [
|
|
83
|
+
"在 Loading 时显示 Empty——应先消除 Loading 遮罩再渲染 Empty",
|
|
84
|
+
"同时传 customEmpty 和 description/image——customEmpty 会覆盖后者,造成困惑"
|
|
85
|
+
],
|
|
86
|
+
"events": {
|
|
87
|
+
"onRefresh": {
|
|
88
|
+
"signature": "(event: React.MouseEvent) => void",
|
|
89
|
+
"asyncSupported": false,
|
|
90
|
+
"examples": [
|
|
91
|
+
"showRefresh={true} onRefresh={() => fetchData()} — 点击刷新文字触发重新请求",
|
|
92
|
+
"onRefresh={(e) => { e.stopPropagation(); reload(); }} — 阻止冒泡后重载",
|
|
93
|
+
"配合 loading state:onRefresh={() => { setLoading(true); fetch().finally(() => setLoading(false)); }}"
|
|
94
|
+
],
|
|
95
|
+
"commonMistakes": [
|
|
96
|
+
"不传 showRefresh={true} 只传 onRefresh — 刷新按钮不会渲染,回调永不触发",
|
|
97
|
+
"期望点击图片触发 onRefresh — 只有文字区域的刷新链接触发,图片无点击事件",
|
|
98
|
+
"异步刷新后没有给用户反馈(Loading 状态)— 应结合父组件 loading 状态"
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"typescriptPitfalls": [
|
|
103
|
+
{
|
|
104
|
+
"issue": "image prop 类型是 ReactNode | string,传 null 会触发 TS2322",
|
|
105
|
+
"wrong": "const img: React.ReactNode | null = getImg(); <Empty image={img} /> // 可能 null,TS 报错",
|
|
106
|
+
"right": "const img = getImg(); <Empty image={img ?? undefined} /> // 用 undefined 替代 null"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"issue": "description 类型是 ReactNode,不支持 false/null 显式传递",
|
|
110
|
+
"wrong": "<Empty description={null} /> // 期望显示默认文案,但 null 在 ReactNode 中合法,结果不渲染描述区域",
|
|
111
|
+
"right": "<Empty /> // 不传 description 时自动用国际化默认文案('暂无内容')"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"issue": "customEmpty 传入后 image/description/showRefresh 均不生效——源码 if(customEmpty) 分支直接 return customEmpty",
|
|
115
|
+
"wrong": "<Empty customEmpty={<CustomUI />} description='还有数据哦' /> // description 被 customEmpty 覆盖",
|
|
116
|
+
"right": "// 要自定义描述同时用 customEmpty:把描述塞进 customEmpty 里\n<Empty customEmpty={<><CustomUI /><p>还有数据哦</p></>} />"
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"mapping": {
|
|
120
|
+
"realComponent": "Empty",
|
|
121
|
+
"adapter": null
|
|
122
|
+
}
|
|
123
|
+
}
|
package/lib/Empty/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.paraui-v4-empty{display:inline-flex;flex-direction:column;align-items:center}.paraui-v4-empty>.empty-image{line-height:0
|
|
1
|
+
@charset "UTF-8";.paraui-v4-empty{display:inline-flex;flex-direction:column;align-items:center}.paraui-v4-empty>.empty-image{overflow:hidden;line-height:0}.paraui-v4-empty>.empty-image img{width:100%}.paraui-v4-empty .empty-image-large{width:334px;height:238px}.paraui-v4-empty .empty-image-medium{width:220px;height:180px}.paraui-v4-empty .empty-image-small{width:120px;height:120px}.paraui-v4-empty>.empty-description{font-size:14px;font-weight:400;line-height:17px;color:#5c6573}.paraui-v4-empty>.empty-description>.empty-description-refresh{display:inline-block}.paraui-v4-empty>.empty-description>.empty-description-refresh span{color:#2e65e6;cursor:pointer}.paraui-v4-empty>.empty-description>.empty-description-refresh span:hover{color:#5783eb}.paraui-v4-empty.paraui-v4-empty-large>.empty-description{margin-top:20px}.paraui-v4-empty.paraui-v4-empty-medium>.empty-description{margin-top:15px;font-size:14px}.paraui-v4-empty.paraui-v4-empty-small>.empty-description{margin-top:10px;font-size:14px}
|
package/lib/Empty/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface EmptyProps {
|
|
|
5
5
|
/** style */
|
|
6
6
|
style?: React.CSSProperties;
|
|
7
7
|
/** 尺寸 */
|
|
8
|
-
size?: '
|
|
8
|
+
size?: 'small' | 'medium' | 'large';
|
|
9
9
|
/** 图片样式 */
|
|
10
10
|
imageStyle?: React.CSSProperties;
|
|
11
11
|
/** 图片 */
|
|
@@ -18,7 +18,7 @@ export interface EmptyProps {
|
|
|
18
18
|
onRefresh?: (event: React.MouseEvent) => void;
|
|
19
19
|
/** 自定义空节点 */
|
|
20
20
|
customEmpty?: React.ReactNode;
|
|
21
|
-
[name: string]:
|
|
21
|
+
[name: string]: unknown;
|
|
22
22
|
}
|
|
23
23
|
declare const Empty: FC<EmptyProps>;
|
|
24
24
|
export default Empty;
|
package/lib/Empty/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const e=require("../_virtual/jsx-runtime.js"),R=require("clsx"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const e=require("../_virtual/jsx-runtime.js"),R=require("clsx"),l=require("./images/index.js"),h=require("../GlobalContext/useFormatMessage.js"),N=require("./lang/index.js"),q=require("../Hooks/useGlobalProps.js"),u=require("../GlobalContext/constant.js");;/* empty css */const $={large:e.jsxRuntimeExports.jsx(l.LargeNull,{}),medium:e.jsxRuntimeExports.jsx(l.LargeNull,{}),small:e.jsxRuntimeExports.jsx(l.SmallNull,{})},v=o=>{const{className:x,style:c,size:t="large",imageStyle:p,image:i=$[t],description:m,showRefresh:d=!1,onRefresh:j,customEmpty:a}=q.default(o,"Empty"),r=h.default("Empty",N.default),g=E=>{j?.(E)},s=typeof m<"u"?m:r({id:"noData"}),f=typeof s=="string"?s:"empty";let n=null;const y=d?e.jsxRuntimeExports.jsxs("span",{className:"empty-description-refresh",children:[r({id:"click"}),e.jsxRuntimeExports.jsx("span",{onClick:g,children:r({id:"refresh"})})]}):null;return typeof i=="string"?n=e.jsxRuntimeExports.jsx("img",{src:i,alt:f}):n=i,e.jsxRuntimeExports.jsx("div",{className:R(`${u.$prefixCls}-empty`,x,`${u.$prefixCls}-empty-${t}`),style:c,children:a||e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsx("div",{className:`empty-image ${o?.image?"":`empty-image-${t}`}`,style:p,children:n}),s&&e.jsxRuntimeExports.jsxs("div",{className:"empty-description",children:[e.jsxRuntimeExports.jsx(e.jsxRuntimeExports.Fragment,{children:s}),y]})]})})};exports.default=v;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.paraui-v4-empty{display:inline-flex;flex-direction:column;align-items:center}.paraui-v4-empty>.empty-image{line-height:0
|
|
1
|
+
.paraui-v4-empty{display:inline-flex;flex-direction:column;align-items:center}.paraui-v4-empty>.empty-image{overflow:hidden;line-height:0}.paraui-v4-empty>.empty-image img{width:100%}.paraui-v4-empty .empty-image-large{width:334px;height:238px}.paraui-v4-empty .empty-image-medium{width:220px;height:180px}.paraui-v4-empty .empty-image-small{width:120px;height:120px}.paraui-v4-empty>.empty-description{font-size:14px;font-weight:400;line-height:17px;color:#5c6573}.paraui-v4-empty>.empty-description>.empty-description-refresh{display:inline-block}.paraui-v4-empty>.empty-description>.empty-description-refresh span{color:#2e65e6;cursor:pointer}.paraui-v4-empty>.empty-description>.empty-description-refresh span:hover{color:#5783eb}.paraui-v4-empty.paraui-v4-empty-large>.empty-description{margin-top:20px}.paraui-v4-empty.paraui-v4-empty-medium>.empty-description{margin-top:15px;font-size:14px}.paraui-v4-empty.paraui-v4-empty-small>.empty-description{margin-top:10px;font-size:14px}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../../_virtual/jsx-runtime.js"),n=require("react"),F=require("../../_virtual/
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../../_virtual/jsx-runtime.js"),n=require("react"),F=require("../../_virtual/index.js"),H=require("rc-util/lib/Dom/isVisible"),N=require("rc-util/lib/hooks/useLayoutEffect"),h=require("../context.js"),O=require("../FormItemLabel.js"),T=require("../FormItemInput.js"),V=require("./StatusProvider.js");function W(a){const{className:p,style:b,helperText:o,errors:c,warnings:d,status:e,hidden:j,children:y,fieldId:r,required:q,onSubItemMetaChange:S,layout:m,hideLabel:v,hideError:E,noSpacing:I,label:R,labelProps:C,labelAlign:L,colon:M,labelWidth:P,labelWrap:_}=a,{prefixCls:i,layout:x}=n.useContext(h.FormContext),l=n.useMemo(()=>m??x,[m,x]),s=n.useRef(null),f=!!(o!=null||c.length||d.length),$=!!s.current&&H(s.current),[w,g]=n.useState(null);N(()=>{if(f&&s.current){const u=getComputedStyle(s.current);g(parseInt(u.marginBottom,10))}},[f,$]);const B=u=>{u||g(null)};return t.jsxRuntimeExports.jsx(V.default,{...a,prefixCls:i,children:t.jsxRuntimeExports.jsxs("div",{className:F.default(p,`${i}-item`,{[`${i}-item__${r}`]:r,"is-success":e==="success","is-warning":e==="warning","is-error":e==="error","is-validating":e==="validating","is-hidden":j,[`is-${l}`]:l}),style:b,children:[t.jsxRuntimeExports.jsx(O.default,{fieldId:r,label:R,labelWidth:P,labelWrap:_,labelAlign:L,colon:M,labelProps:{required:q,...C},hideLabel:v,layout:l}),t.jsxRuntimeExports.jsx(T.default,{fieldId:r,errors:c,warnings:d,status:e,helperText:o,marginBottom:w,onErrorVisibleChanged:B,hideError:E,noSpacing:I,children:t.jsxRuntimeExports.jsx(h.NoStyleItemContext.Provider,{value:S,children:y})})]})})}exports.default=W;
|
|
2
2
|
//# sourceMappingURL=ItemHolder.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
interface MemoInputProps {
|
|
3
3
|
control: object;
|
|
4
|
-
update:
|
|
4
|
+
update: unknown;
|
|
5
5
|
children: React.ReactNode;
|
|
6
|
-
childProps:
|
|
6
|
+
childProps: unknown[];
|
|
7
7
|
}
|
|
8
8
|
declare const _default: React.MemoExoticComponent<({ children }: MemoInputProps) => JSX.Element>;
|
|
9
9
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("../../_virtual/jsx-runtime.js"),l=require("react"),j=require("../../node_modules/@para-ui/icons/Loading/index.js"),C=require("../../node_modules/@para-ui/icons/CheckCircleF/index.js"),g=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),k=require("../../node_modules/@para-ui/icons/WarningCircleF/index.js"),v=require("../../_virtual/
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("../../_virtual/jsx-runtime.js"),l=require("react"),j=require("../../node_modules/@para-ui/icons/Loading/index.js"),C=require("../../node_modules/@para-ui/icons/CheckCircleF/index.js"),g=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),k=require("../../node_modules/@para-ui/icons/WarningCircleF/index.js"),v=require("../../_virtual/index.js"),x=require("../context.js"),$=require("../util.js"),S={success:C.CheckCircleF,warning:k.WarningCircleF,error:g.CloseCircleF,validating:j.Loading};function R({children:I,errors:r,warnings:s,hasFeedback:e,validateStatus:p,prefixCls:u,meta:f,noStyle:c}){const t=$.getStatus(r,s,f,null,!!e,p),{isFormItemInput:i,status:a,hasFeedback:q,feedbackIcon:F}=l.useContext(x.FormItemInputContext),b=l.useMemo(()=>{let d;if(e){const m=t&&S[t];d=m?o.jsxRuntimeExports.jsx("span",{className:v.default(`${u}-feedback-icon`,`${u}-feedback-icon-${t}`),children:o.jsxRuntimeExports.jsx(m,{})}):null}const n={status:t||"",errors:r,warnings:s,hasFeedback:!!e,feedbackIcon:d,isFormItemInput:!0};return c&&(n.status=(t??a)||"",n.isFormItemInput=i,n.hasFeedback=!!(e??q),n.feedbackIcon=e!==void 0?n.feedbackIcon:F),n},[t,e,c,i,a]);return o.jsxRuntimeExports.jsx(x.FormItemInputContext.Provider,{value:b,children:I})}exports.default=R;
|
|
2
2
|
//# sourceMappingURL=StatusProvider.js.map
|
|
@@ -6,9 +6,9 @@ import { FormItemInputProps } from '../FormItemInput';
|
|
|
6
6
|
import { FormItemLabelProps } from '../FormItemLabel';
|
|
7
7
|
import { ReportMetaChange } from '../context';
|
|
8
8
|
import { default as useFormItemStatus } from '../hooks/useFormItemStatus';
|
|
9
|
-
type RenderChildren<Values =
|
|
10
|
-
type RcFieldProps<Values =
|
|
11
|
-
type ChildrenType<Values =
|
|
9
|
+
type RenderChildren<Values = unknown> = (form: FormInstance<Values>) => ReactNode;
|
|
10
|
+
type RcFieldProps<Values = unknown> = Omit<FieldProps<Values>, 'children'>;
|
|
11
|
+
type ChildrenType<Values = unknown> = RenderChildren<Values> | ReactNode;
|
|
12
12
|
declare const ValidateStatuses: readonly ["success", "warning", "error", "validating", ""];
|
|
13
13
|
export type ValidateStatus = (typeof ValidateStatuses)[number];
|
|
14
14
|
export type FeedbackIcons = (itemStatus: {
|
|
@@ -18,7 +18,7 @@ export type FeedbackIcons = (itemStatus: {
|
|
|
18
18
|
}) => {
|
|
19
19
|
[key in ValidateStatus]?: ReactNode;
|
|
20
20
|
};
|
|
21
|
-
export interface FormItemProps<Values =
|
|
21
|
+
export interface FormItemProps<Values = unknown> extends FormItemLabelProps, FormItemInputProps, RcFieldProps<Values> {
|
|
22
22
|
noStyle?: boolean;
|
|
23
23
|
style?: CSSProperties;
|
|
24
24
|
className?: string;
|
|
@@ -28,7 +28,7 @@ export interface FormItemProps<Values = any> extends FormItemLabelProps, FormIte
|
|
|
28
28
|
validateStatus?: ValidateStatus;
|
|
29
29
|
required?: boolean;
|
|
30
30
|
hidden?: boolean;
|
|
31
|
-
initialValue?:
|
|
31
|
+
initialValue?: unknown;
|
|
32
32
|
messageVariables?: Record<string, string>;
|
|
33
33
|
layout?: FormItemLayout;
|
|
34
34
|
hideError?: boolean;
|
|
@@ -45,7 +45,7 @@ export interface ItemHolderProps extends FormItemProps {
|
|
|
45
45
|
isRequired?: boolean;
|
|
46
46
|
onSubItemMetaChange: ReportMetaChange;
|
|
47
47
|
}
|
|
48
|
-
declare function InternalFormItem<Values =
|
|
48
|
+
declare function InternalFormItem<Values = unknown>(props: FormItemProps<Values>): ReactElement;
|
|
49
49
|
type InternalFormItemType = typeof InternalFormItem;
|
|
50
50
|
type CompoundedComponent = InternalFormItemType & {
|
|
51
51
|
useStatus: typeof useFormItemStatus;
|
package/lib/FieldForm/Form.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type RequiredMark = boolean | 'optional' | ((labelNode: ReactNode, info:
|
|
|
10
10
|
}) => ReactNode);
|
|
11
11
|
export type FormLayout = 'horizontal' | 'vertical';
|
|
12
12
|
export type FormItemLayout = 'horizontal' | 'vertical';
|
|
13
|
-
export interface FormProps<Values =
|
|
13
|
+
export interface FormProps<Values = unknown> extends Omit<RcFormProps<Values>, 'form'> {
|
|
14
14
|
colon?: boolean;
|
|
15
15
|
name?: string;
|
|
16
16
|
layout?: FormLayout;
|
|
@@ -23,6 +23,6 @@ export interface FormProps<Values = any> extends Omit<RcFormProps<Values>, 'form
|
|
|
23
23
|
requiredMark?: RequiredMark;
|
|
24
24
|
size?: 'small' | 'medium' | 'large';
|
|
25
25
|
}
|
|
26
|
-
declare const FieldForm: (<Values =
|
|
26
|
+
declare const FieldForm: (<Values = unknown>(props: PropsWithChildren<FormProps<Values>> & RefAttributes<FormRef<Values>>) => ReactElement) & Pick<FC, "displayName">;
|
|
27
27
|
export { useForm, useWatch, type FormInstance };
|
|
28
28
|
export default FieldForm;
|
package/lib/FieldForm/Form.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("../_virtual/jsx-runtime.js"),e=require("react"),A=require("../_virtual/
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("../_virtual/jsx-runtime.js"),e=require("react"),A=require("../_virtual/index.js"),v=require("rc-field-form"),w=require("../GlobalContext/constant.js"),R=require("./hooks/useForm.js"),p=require("./context.js"),z=require("./lang/index.js"),O=require("../GlobalContext/index.js"),u=`${w.$prefixCls}-field-form`,V=(W,q)=>{const{className:E,disabled:c,form:M,colon:m,labelAlign:d,labelWidth:n,labelWrap:g,layout:f="vertical",onFinishFailed:j,name:r,style:y,size:x,..._}=W,[l,C]=e.useState(0),{language:b}=e.useContext(O.default),L=e.useMemo(()=>z.defaultValidateMessages[b||"zh"],[b]),[s]=R.default(M),{__INTERNAL__:h}=s;h.name=r;const o=e.useRef(null);e.useImperativeHandle(q,()=>({...s,nativeElement:o.current?.nativeElement}));const I=t=>{j?.(t)},P=t=>{if(!t)return;const $=t.querySelectorAll(`.${u}-item`);let a=0;$?.forEach(N=>{const F=N.querySelector("label");if(F){const T=F.offsetWidth;a=Math.max(a,T)}}),C(a)};e.useEffect(()=>{const t=setTimeout(()=>{P(o.current?.nativeElement)},0);return()=>clearTimeout(t)},[]);const S=e.useMemo(()=>({name:r,labelAlign:d,labelWrap:n?g:!1,labelWidth:n||l,labelMaxWidth:l,layout:f,colon:m,itemRef:h.itemRef,form:s,prefixCls:u,disabled:c,size:x}),[r,d,f,m,s,c,l,n,x]);return i.jsxRuntimeExports.jsx(p.FormProvider,{validateMessages:L,children:i.jsxRuntimeExports.jsx(p.FormContext.Provider,{value:S,children:i.jsxRuntimeExports.jsx(v,{id:r,..._,name:r,onFinishFailed:I,form:s,ref:o,className:A.default(E,u),style:{...y}})})})},G=e.forwardRef(V);Object.defineProperty(exports,"useWatch",{enumerable:!0,get:()=>v.useWatch});exports.useForm=R.default;exports.default=G;
|
|
2
2
|
//# sourceMappingURL=Form.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../_virtual/jsx-runtime.js"),h=require("react"),m=require("../_virtual/
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../_virtual/jsx-runtime.js"),h=require("react"),m=require("../_virtual/index.js"),p=require("./ErrorList.js"),j=require("./context.js"),g=x=>{const{fieldId:l,children:a,errors:r,warnings:s,status:t,helperText:i,marginBottom:o,onErrorVisibleChanged:c,hideError:u,noSpacing:d=!1}=x,{prefixCls:n}=h.useContext(j.FormContext);return e.jsxRuntimeExports.jsxs("div",{className:m.default(`${n}-content`,{[`${n}-content__${l}`]:l,"has-spacing":!d,"has-helper-text":!u&&!!(r.length||s.length||i&&(t==="error"||t==="warning"))}),children:[e.jsxRuntimeExports.jsx("div",{className:`${n}-control-input`,children:e.jsxRuntimeExports.jsx("div",{className:`${n}-control-input-content`,children:a})}),e.jsxRuntimeExports.jsx("div",{className:`${n}-helper-text`,children:!u&&(o!==null||r.length||s.length||i&&(t==="error"||t==="warning"))?e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsx(p.default,{errors:r,warnings:s,helperText:i,helpStatus:t,onVisibleChanged:c}),!!o&&e.jsxRuntimeExports.jsx("div",{style:{width:0,height:o}})]}):null})]})};exports.default=g;
|
|
2
2
|
//# sourceMappingURL=FormItemInput.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("../_virtual/jsx-runtime.js"),n=require("react"),_=require("../_virtual/
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("../_virtual/jsx-runtime.js"),n=require("react"),_=require("../_virtual/index.js"),E=require("../GlobalContext/index.js"),y=require("./context.js"),M=require("../Label/index.js"),S=({fieldId:u,label:t,labelProps:d,hideLabel:p,colon:c,layout:r,labelAlign:b,labelWidth:a,labelWrap:g})=>{const{prefixCls:s,colon:m,labelWidth:f,labelAlign:h,labelWrap:C}=n.useContext(y.FormContext),$=b||h,{language:j,locale:L}=n.useContext(E.default),o=n.useRef(null),R=e=>typeof e=="number"?`${e}px`:typeof e=="string"?e.endsWith("px")?e:`${e}px`:e,q=n.useMemo(()=>{const e=a||f||0;return e&&r==="horizontal"?R(e):"auto"},[a,f,r]),W=n.useMemo(()=>{let e=t;return(c===!0||m!==!1&&c!==!1)&&r==="horizontal"&&typeof t=="string"&&t.trim()&&(e=t.replace(/[:|:]\s*$/,"")),i.jsxRuntimeExports.jsx(i.jsxRuntimeExports.Fragment,{children:e})},[j,L,t,c,m,r]);return n.useLayoutEffect(()=>{if(o.current){const l=o.current.querySelector(`.${s}-label-comp`)?.clientHeight;if(l&&l>32){const x=(l-32)/2;o.current.style.marginTop=`-${x}px`,o.current.classList.add("is-multiline")}}},[]),p||!t?null:i.jsxRuntimeExports.jsx("div",{ref:o,className:_.default(`${s}-label`,{[`${s}-label__${u}`]:u,"is-left":$==="left"&&r==="horizontal","is-wrap":g??C??!1}),style:{width:q},children:i.jsxRuntimeExports.jsx(M.default,{className:`${s}-label-comp`,label:W,...d})})};exports.default=S;
|
|
2
2
|
//# sourceMappingURL=FormItemLabel.js.map
|
|
@@ -3,7 +3,7 @@ import { StoreValue, ValidatorRule } from 'rc-field-form/lib/interface';
|
|
|
3
3
|
export interface FormListFieldData {
|
|
4
4
|
name: number;
|
|
5
5
|
key: number;
|
|
6
|
-
error?:
|
|
6
|
+
error?: unknown;
|
|
7
7
|
}
|
|
8
8
|
export interface FormListOperation {
|
|
9
9
|
add: (defaultValue?: StoreValue, insertIndex?: number) => void;
|
|
@@ -13,7 +13,7 @@ export interface FormListOperation {
|
|
|
13
13
|
export interface FormListProps {
|
|
14
14
|
name: string | number | (string | number)[];
|
|
15
15
|
rules?: ValidatorRule[];
|
|
16
|
-
initialValue?:
|
|
16
|
+
initialValue?: unknown[];
|
|
17
17
|
children: (fields: FormListFieldData[], operation: FormListOperation, meta: {
|
|
18
18
|
errors: ReactNode[];
|
|
19
19
|
warnings: ReactNode[];
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "FieldForm",
|
|
3
|
+
"category": "Data Entry",
|
|
4
|
+
"description": "表单组件,提供完整的表单解决方案(基于 rc-field-form;内部 cloneElement 注入 value/onChange/error 到 Item.children)",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"表单管理",
|
|
8
|
+
"数据录入"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"用户注册",
|
|
12
|
+
"数据编辑",
|
|
13
|
+
"配置页面"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "normal"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"horizontal": {
|
|
19
|
+
"meaning": "水平布局"
|
|
20
|
+
},
|
|
21
|
+
"vertical": {
|
|
22
|
+
"meaning": "垂直布局"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"states": [
|
|
26
|
+
"default",
|
|
27
|
+
"disabled",
|
|
28
|
+
"validating",
|
|
29
|
+
"error"
|
|
30
|
+
],
|
|
31
|
+
"idealProps": {
|
|
32
|
+
"form": {
|
|
33
|
+
"type": "FormInstance",
|
|
34
|
+
"description": "由 useForm() 创建的表单实例:`const [form] = FieldForm.useForm();` 仅在父组件需外部调用 submit/resetFields/setFieldsValue 时需要;**类型别名注意**:`FormInstance`(api.ts) ≡ `FieldFormInstance`(src/FieldForm 导出)两个名字指同一类型,推荐用 `FieldFormInstance`(更精确不与其他库混淆)"
|
|
35
|
+
},
|
|
36
|
+
"initialValues": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"objectShape": {
|
|
39
|
+
"[fieldName: string]": { "type": "any", "description": "字段名 → 初始值,例:{ username: '张三', age: 25 }" }
|
|
40
|
+
},
|
|
41
|
+
"completeExample": "{ username: '张三', email: 'zs@example.com' }",
|
|
42
|
+
"description": "表单初始默认值(仅 mount 时灌入;**后续动态变化需用 form.setFieldsValue,不能修改 initialValues prop**);典型用法 `<FieldForm initialValues={{ name: '张三', age: 25 }}>`"
|
|
43
|
+
},
|
|
44
|
+
"onFinish": {
|
|
45
|
+
"type": "(values: any) => void",
|
|
46
|
+
"description": "校验通过后触发:values 是表单全部字段的扁平对象(包含 FieldForm.Item.name 收集的所有字段);**触发时机**:点击 `<Button type=\"submit\">` 或调用 `form.submit()` 后,内部跑校验通过 → onFinish"
|
|
47
|
+
},
|
|
48
|
+
"onFinishFailed": {
|
|
49
|
+
"type": "({ values, errorFields, outOfDate }) => void",
|
|
50
|
+
"description": "校验失败后触发;errorFields 是失败字段数组"
|
|
51
|
+
},
|
|
52
|
+
"layout": {
|
|
53
|
+
"type": "enum",
|
|
54
|
+
"values": [
|
|
55
|
+
"horizontal",
|
|
56
|
+
"vertical"
|
|
57
|
+
],
|
|
58
|
+
"default": "vertical",
|
|
59
|
+
"description": "vertical=label 在字段上方(默认,省略即生效);horizontal=label 在左侧"
|
|
60
|
+
},
|
|
61
|
+
"children": {
|
|
62
|
+
"type": "ReactNode",
|
|
63
|
+
"description": "FieldForm 接收任意 ReactNode(包括 FieldForm.Item / Button type=submit / 自定义包装);**但每个 Item 的 child 必须是支持 value/onChange/error/disabled 的自定义组件**(TextField / Select / Checkbox / Switch / DatePicker / InputNumber 等);**不可用原生 input/textarea/select/button — 会触发 React non-boolean-attribute warning**(因 cloneElement 注入 error={false} 给原生 DOM 元素时,React 视 error 为 DOM attr → 报错);见 childrenContract.FormItem"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"childrenContract": {
|
|
67
|
+
"FormItem": {
|
|
68
|
+
"rule": "FieldForm.Item 的 children 必须是支持 value/onChange/error/disabled prop 的自定义组件",
|
|
69
|
+
"recommended": [
|
|
70
|
+
"TextField",
|
|
71
|
+
"Select",
|
|
72
|
+
"Switch",
|
|
73
|
+
"Checkbox",
|
|
74
|
+
"InputNumber",
|
|
75
|
+
"DatePicker",
|
|
76
|
+
"TextEditor",
|
|
77
|
+
"RangeInput",
|
|
78
|
+
"RadioGroup",
|
|
79
|
+
"CheckboxGroup",
|
|
80
|
+
"Slider"
|
|
81
|
+
],
|
|
82
|
+
"forbidden": [
|
|
83
|
+
"原生 <input>",
|
|
84
|
+
"原生 <textarea>",
|
|
85
|
+
"原生 <select>",
|
|
86
|
+
"包一层 <div>"
|
|
87
|
+
],
|
|
88
|
+
"reason": "Item 用 cloneElement 注入 value/onChange/error/disabled/size 等 prop;原生 DOM 元素不消费 error: boolean,React 会报 non-boolean attribute warning(运行时 console error,demo 验证 fail)"
|
|
89
|
+
},
|
|
90
|
+
"submit": {
|
|
91
|
+
"rule": "提交用 <Button type=\"submit\"> 或 form.submit()",
|
|
92
|
+
"trigger": "<Button>(来自 @para-ui/core/Button)渲染为 <button type='submit'>,会触发 form 的 submit 事件 → 跑校验 → onFinish/onFinishFailed",
|
|
93
|
+
"wrapper": "提交按钮通常用 FieldForm.Item(不带 name)包裹做布局,如 `<FieldForm.Item><Button type='submit'>提交</Button></FieldForm.Item>`;Item 不带 name 时不会注入 value/onChange/error(纯布局容器),不会触发 non-boolean-attribute warning;**也可不包 Item 直接放 Button**(看布局需求)"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"interpretivePriority": {
|
|
97
|
+
"principle": "**当需求描述中的'范围约束'(如 '仅使用 FieldForm 本身' / '不引入其他组件')与 childrenContract 冲突时,优先服从 childrenContract**",
|
|
98
|
+
"reason": "childrenContract 决定 runtime 是否报 React warning;需求'仅使用 FieldForm 本身'通常指**目标包装组件**(如 EditDataForm / SearchHorizontalForm)的**实现层 import 限制**(不在该包装组件内部 import 其他组件),**不限制 Demo 入口层或 children 子组件**;若字面理解为'整个文件只能 import FieldForm',会导致 Item.children 只能用原生 <input> → 触发 non-boolean warning → 运行时 fail",
|
|
99
|
+
"resolution": "标准解读:'仅使用 FieldForm 本身' = '目标包装组件(EditDataForm 等)的实现 import 列表只有 FieldForm';**Demo 渲染入口 (`const Demo: FC = () => ...`) 可自由 import TextField / Button / Select 等推荐子组件作为 children 传入包装组件**;**包装组件接收 children: ReactNode 直接透传给 FieldForm 即可,不需要内部 import 字段组件**",
|
|
100
|
+
"antiPatterns": [
|
|
101
|
+
"❌ 整个 demo 文件只 import FieldForm,FieldForm.Item.children 用原生 <input>",
|
|
102
|
+
"❌ 整个 demo 文件只 import FieldForm,提交按钮用原生 <button type='submit'>",
|
|
103
|
+
"❌ 把'仅使用 FieldForm 本身'解读为'禁止 import TextField/Button'"
|
|
104
|
+
],
|
|
105
|
+
"correctPatterns": [
|
|
106
|
+
"✅ 包装组件 (EditDataForm) 实现层只 import FieldForm,接收 children: ReactNode",
|
|
107
|
+
"✅ Demo 渲染入口 import TextField + Button,构造 <FieldForm.Item><TextField/></FieldForm.Item> 作为 children 传入",
|
|
108
|
+
"✅ 提交按钮:Demo 入口 import Button,<FieldForm.Item><Button type='submit'>提交</Button></FieldForm.Item>"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
"commonMisconceptions": {
|
|
112
|
+
"M1": {
|
|
113
|
+
"wrong": "FieldForm.Item.children 用原生 <input>",
|
|
114
|
+
"result": "React 报 `Received 'false' for a non-boolean attribute 'error'` warning → ai-test runtime fail",
|
|
115
|
+
"fix": "改用 TextField (或其他 recommended 组件)"
|
|
116
|
+
},
|
|
117
|
+
"M2": {
|
|
118
|
+
"wrong": "提交按钮用原生 `<button type='submit'>` 包在 FieldForm.Item 内",
|
|
119
|
+
"result": "Item cloneElement 注入 error={false} 到原生 button → React warning → ai-test fail",
|
|
120
|
+
"fix": "改用 `<Button type='submit'>` 或不包 FieldForm.Item 直接放原生 button(Item 在不包裹时不注入 error)"
|
|
121
|
+
},
|
|
122
|
+
"M3": {
|
|
123
|
+
"wrong": "需求 '仅使用 FieldForm 本身' 被解读为整个 demo 文件只 import FieldForm",
|
|
124
|
+
"result": "Item children 退化为原生 <input> → M1 warning",
|
|
125
|
+
"fix": "见 interpretivePriority.resolution(包装组件实现层 vs Demo 入口层的区分)"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"completeExample": "// R23 议题修补:R22 4/5 fail 根因 sub-agent 误解'仅使用 FieldForm 本身'\n// 标准完整示例(initialValues + useForm + onFinish + Item + TextField + Button submit):\n\nimport React, { FC } from 'react';\nimport FieldForm from '@para-ui/core/FieldForm';\nimport type { FieldFormInstance } from '@para-ui/core/FieldForm';\nimport TextField from '@para-ui/core/TextField';\nimport Button from '@para-ui/core/Button';\n\n// === 1. 目标包装组件(实现层只 import FieldForm + 类型) ===\ninterface EditDataFormProps {\n initialData?: Record<string, any>;\n children: React.ReactNode;\n onSubmitSuccess: (values: any) => void;\n}\nconst EditDataForm: FC<EditDataFormProps> = ({ initialData, children, onSubmitSuccess }) => {\n const [form] = FieldForm.useForm();\n return (\n <FieldForm\n form={form}\n initialValues={initialData}\n onFinish={onSubmitSuccess}\n layout='vertical'\n >\n {children}\n </FieldForm>\n );\n};\n\n// === 2. Demo 渲染入口(可自由 import TextField + Button 作为 children) ===\nconst Demo: FC = () => (\n <EditDataForm\n initialData={{ username: '张三', email: 'zs@example.com' }}\n onSubmitSuccess={(values) => console.log('submitted', values)}\n >\n <FieldForm.Item name='username' label='用户名' rules={[{ required: true }]}>\n <TextField placeholder='请输入用户名' />\n </FieldForm.Item>\n <FieldForm.Item name='email' label='邮箱' rules={[{ required: true, type: 'email' }]}>\n <TextField placeholder='请输入邮箱' />\n </FieldForm.Item>\n <FieldForm.Item>\n <Button type='submit'>保存修改</Button>\n </FieldForm.Item>\n </EditDataForm>\n);\nexport default Demo;",
|
|
129
|
+
"do": [
|
|
130
|
+
"**Demo 入口层**必须 import TextField / Button 等推荐组件给 Item.children(即使需求说'仅使用 FieldForm 本身',这是包装组件实现层约束,不是 Demo 入口约束)",
|
|
131
|
+
"使用 useForm() 管理表单实例;父组件需要外部调用 submit/resetFields/setFieldsValue 时通过 form prop 传入",
|
|
132
|
+
"完整 demo 模板见 completeExample(initialValues + onFinish + FieldForm.Item + TextField + Button)",
|
|
133
|
+
"提供完整的校验规则(rules: [{ required: true }, { type: 'email' }, { pattern: /.../ }])"
|
|
134
|
+
],
|
|
135
|
+
"dont": [
|
|
136
|
+
"FieldForm.Item.children 用原生 <input> / <textarea> / <select> / <button>(触发 non-boolean-attribute warning,见 childrenContract.FormItem.reason)",
|
|
137
|
+
"把'仅使用 FieldForm 本身'解读为'整个文件不能 import TextField/Button'(见 interpretivePriority.resolution)",
|
|
138
|
+
"字段过多不分组",
|
|
139
|
+
"忽略异步校验",
|
|
140
|
+
"在 mount 后修改 initialValues prop(应用 form.setFieldsValue;initialValues 仅 mount 时灌入)"
|
|
141
|
+
],
|
|
142
|
+
"events": {
|
|
143
|
+
"onFinish": {
|
|
144
|
+
"signature": "(values: any) => void",
|
|
145
|
+
"asyncSupported": false,
|
|
146
|
+
"examples": [
|
|
147
|
+
"校验全部通过后触发:values 是全部 FieldForm.Item.name 收集到的字段扁平对象",
|
|
148
|
+
"点击 <Button type='submit'> 或调用 form.submit() 后跑校验,通过才触发 onFinish",
|
|
149
|
+
"values 结构与 initialValues 形状一致,key = 每个 Item 的 name 字段值"
|
|
150
|
+
],
|
|
151
|
+
"commonMistakes": [
|
|
152
|
+
"假设 onFinish 会在校验失败时也触发——只有全部通过才触发,失败时触发 onFinishFailed",
|
|
153
|
+
"假设 onFinish 签名是 (e: FormEvent) => void——实际只有 (values: any) 一个参数",
|
|
154
|
+
"假设 submit 时直接拿到 event.preventDefault()——FieldForm 内部已处理,不需要手动 preventDefault"
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
"onFinishFailed": {
|
|
158
|
+
"signature": "({ values, errorFields, outOfDate }: ValidateErrorEntity) => void",
|
|
159
|
+
"asyncSupported": false,
|
|
160
|
+
"examples": [
|
|
161
|
+
"校验失败时触发:errorFields 是 { name: NamePath; errors: string[] }[] 数组",
|
|
162
|
+
"values 包含当前所有字段值(含未通过校验的字段)"
|
|
163
|
+
],
|
|
164
|
+
"commonMistakes": [
|
|
165
|
+
"假设参数是 (errors: string[]) 而不是对象——实际是 { values, errorFields, outOfDate } 解构对象",
|
|
166
|
+
"假设只有 onFinish 就够了——校验失败场景必须处理 onFinishFailed 才能给用户提示"
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"typescriptPitfalls": [
|
|
171
|
+
{
|
|
172
|
+
"issue": "FieldFormInstance 与 FormInstance 是同一类型的两个别名,推荐用 FieldFormInstance 避免与其他库冲突",
|
|
173
|
+
"wrong": "import type { FormInstance } from 'rc-field-form'; // 直接用 rc-field-form 的类型",
|
|
174
|
+
"right": "import type { FieldFormInstance } from '@para-ui/core/FieldForm'; const [form] = FieldForm.useForm<FieldFormInstance>();"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"issue": "FieldForm.Item 的 children 必须是自定义组件(支持 value/onChange/error prop),不能是原生 DOM 元素",
|
|
178
|
+
"wrong": "<FieldForm.Item name='age'><input type='number' /></FieldForm.Item> // error prop 会被注入到原生 input,React 报 non-boolean warning",
|
|
179
|
+
"right": "<FieldForm.Item name='age'><InputNumber /></FieldForm.Item> // 使用支持 error: boolean 的自定义组件"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"issue": "initialValues 仅在 mount 时生效,mount 后动态修改 initialValues prop 不会刷新表单",
|
|
183
|
+
"wrong": "// 动态修改 initialValues 期望刷新表单\n<FieldForm initialValues={dynamicData} /> // 后续 dynamicData 变化不会更新表单",
|
|
184
|
+
"right": "// 需要动态回填时用 form.setFieldsValue(newData)\nconst [form] = FieldForm.useForm();\nuseEffect(() => { form.setFieldsValue(dynamicData); }, [dynamicData]);"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"issue": "rules 中的 validator 函数签名必须返回 Promise(rc-field-form 约定),不是同步返回",
|
|
188
|
+
"wrong": "rules={[{ validator: (_, val) => val > 0 ? true : false }]} // 同步返回 boolean 不被识别",
|
|
189
|
+
"right": "rules={[{ validator: (_, val) => val > 0 ? Promise.resolve() : Promise.reject('必须大于 0') }]}"
|
|
190
|
+
}
|
|
191
|
+
],
|
|
192
|
+
"mapping": {
|
|
193
|
+
"realComponent": "FieldForm",
|
|
194
|
+
"adapter": null
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -20,7 +20,11 @@ export interface FormContextProps {
|
|
|
20
20
|
size?: 'small' | 'medium' | 'large';
|
|
21
21
|
}
|
|
22
22
|
export declare const FormContext: React.Context<FormContextProps>;
|
|
23
|
-
|
|
23
|
+
/** rc-field-form 在销毁字段时会传入带 destroy 标记的 meta(官方 Meta 类型未声明此字段) */
|
|
24
|
+
export type MetaWithDestroy = Meta & {
|
|
25
|
+
destroy?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type ReportMetaChange = (meta: MetaWithDestroy, uniqueKeys: Key[]) => void;
|
|
24
28
|
export declare const NoStyleItemContext: React.Context<ReportMetaChange | null>;
|
|
25
29
|
export interface FormItemStatusContextProps {
|
|
26
30
|
isFormItemInput?: boolean;
|
package/lib/FieldForm/context.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../_virtual/jsx-runtime.js"),t=require("react"),n=require("rc-field-form"),i=require("rc-util/lib/omit"),c=e=>{const o=i(e,["prefixCls"]);return r.jsxRuntimeExports.jsx(n.FormProvider,{...o})},m=t.createContext({labelAlign:"left",layout:"vertical",itemRef:(()=>{}
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../_virtual/jsx-runtime.js"),t=require("react"),n=require("rc-field-form"),i=require("rc-util/lib/omit"),c=e=>{const o=i(e,["prefixCls"]);return r.jsxRuntimeExports.jsx(n.FormProvider,{...o})},m=t.createContext({labelAlign:"left",layout:"vertical",itemRef:()=>()=>{}}),s=t.createContext(null),l=t.createContext({});exports.FormContext=m;exports.FormItemInputContext=l;exports.FormProvider=c;exports.NoStyleItemContext=s;
|
|
2
2
|
//# sourceMappingURL=context.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
1
2
|
import { FormInstance as RcFormInstance } from 'rc-field-form';
|
|
2
3
|
import { NamePath } from '../interface';
|
|
3
|
-
export interface FormInstance<Values =
|
|
4
|
-
getFieldInstance: (name: NamePath) =>
|
|
4
|
+
export interface FormInstance<Values = unknown> extends RcFormInstance<Values> {
|
|
5
|
+
getFieldInstance: (name: NamePath) => ReactElement | undefined;
|
|
5
6
|
}
|
|
6
|
-
export default function useForm<Values =
|
|
7
|
+
export default function useForm<Values = unknown>(form?: FormInstance<Values>): [FormInstance<Values>];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { FormInstance } from './useForm';
|
|
2
|
-
export default function useFormInstance<Value =
|
|
2
|
+
export default function useFormInstance<Value = unknown>(): FormInstance<Value>;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { ValidateStatus } from '../FieldFormItem';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { FormItemInputContext } from '../context';
|
|
4
|
+
interface UseFormItemStatus {
|
|
5
|
+
(): {
|
|
6
|
+
status?: ValidateStatus;
|
|
7
|
+
errors: ReactNode[];
|
|
8
|
+
warnings: ReactNode[];
|
|
9
|
+
};
|
|
10
|
+
Context: typeof FormItemInputContext;
|
|
11
|
+
}
|
|
8
12
|
declare const useFormItemStatus: UseFormItemStatus;
|
|
9
13
|
export default useFormItemStatus;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("react"),t=require("../context.js"),e=()=>{const{status:o,errors:r=[],warnings:n=[]}=u.useContext(t.FormItemInputContext);return{status:o,errors:r,warnings:n}};e.Context=t.FormItemInputContext;exports.default=e;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("react"),t=require("../context.js"),e=(()=>{const{status:o,errors:r=[],warnings:n=[]}=u.useContext(t.FormItemInputContext);return{status:o,errors:r,warnings:n}});e.Context=t.FormItemInputContext;exports.default=e;
|
|
2
2
|
//# sourceMappingURL=useFormItemStatus.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { InternalNamePath } from '../interface';
|
|
3
|
-
export default function useItemRef(): (name: InternalNamePath, children:
|
|
3
|
+
export default function useItemRef(): (name: InternalNamePath, children: React.ReactNode) => React.Ref<unknown> | undefined;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("react"),i=require("rc-util/lib/ref"),s=require("../context.js");function R(){const{itemRef:u}=c.useContext(s.FormContext),e=c.useRef({});function f(n,t){const r=t&&typeof t=="object"&&t.ref,o=n.join("_");return(e.current.name!==o||e.current.originRef!==r)&&(e.current.name=o,e.current.originRef=r,e.current.ref=i.composeRef(u(n),r)),e.current.ref}return f}exports.default=R;
|
|
2
2
|
//# sourceMappingURL=useItemRef.js.map
|