@para-ui/core 5.0.0-beta.12 → 5.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +315 -0
- package/AlignBox/component.json +89 -0
- package/Anchor/component.json +130 -0
- package/Argv/component.json +216 -0
- package/AutoBox/component.json +133 -0
- package/AutoButton/component.json +109 -0
- package/AutoTips/component.json +121 -0
- package/Badge/component.json +92 -0
- package/Breadcrumbs/component.json +142 -0
- package/Button/component.json +168 -0
- package/ButtonGroup/component.json +132 -0
- package/Card/component.json +162 -0
- package/Carousel/component.json +142 -0
- package/Cascader/component.json +196 -0
- package/Checkbox/component.json +138 -0
- package/CheckboxGroup/component.json +152 -0
- package/CodeEditor/component.json +189 -0
- package/Collapse/component.json +166 -0
- package/CollapseBox/component.json +84 -0
- package/CollapseLayout/component.json +155 -0
- package/ColorPicker/component.json +142 -0
- package/ComboSelect/component.json +181 -0
- package/Container/component.json +111 -0
- package/ContentBox/component.json +81 -0
- package/CopyText/component.json +118 -0
- package/CycleSelector/component.json +98 -0
- package/DatePicker/component.json +192 -0
- package/Descriptions/component.json +142 -0
- package/Desktop/component.json +171 -0
- package/DragVerify/component.json +114 -0
- package/Drawer/component.json +200 -0
- package/Dropdown/component.json +147 -0
- package/DynamicMultiBox/component.json +278 -0
- package/Empty/component.json +123 -0
- package/FieldForm/component.json +196 -0
- package/Form/component.json +161 -0
- package/FormItem/component.json +171 -0
- package/FunctionModal/component.json +197 -0
- package/Help/component.json +118 -0
- package/HelperText/component.json +126 -0
- package/Image/component.json +165 -0
- package/InputCode/component.json +191 -0
- package/InputLang/component.json +205 -0
- package/InputNumber/component.json +162 -0
- package/Label/component.json +126 -0
- package/Loading/component.json +91 -0
- package/Menu/component.json +180 -0
- package/Message/component.json +246 -0
- package/Modal/component.json +277 -0
- package/MultiBox/component.json +216 -0
- package/Notification/component.json +184 -0
- package/OperateBtn/component.json +134 -0
- package/PageHeader/component.json +112 -0
- package/Pagination/component.json +181 -0
- package/PasswordRules/component.json +105 -0
- package/PopConfirm/component.json +227 -0
- package/PopMenu/component.json +131 -0
- package/Popover/component.json +165 -0
- package/Progress/component.json +161 -0
- package/Prompt/component.json +144 -0
- package/Querying/component.json +96 -0
- package/QuickReply/component.json +129 -0
- package/Radio/component.json +136 -0
- package/RadioGroup/component.json +149 -0
- package/RangeInput/component.json +198 -0
- package/Result/component.json +104 -0
- package/ScrollBar/component.json +115 -0
- package/Search/component.json +177 -0
- package/Select/component.json +244 -0
- package/SelectInput/component.json +184 -0
- package/Selector/component.json +203 -0
- package/SelectorPicker/component.json +179 -0
- package/SingleBox/component.json +151 -0
- package/Slider/component.json +181 -0
- package/SortBox/component.json +108 -0
- package/Status/component.json +104 -0
- package/Stepper/component.json +129 -0
- package/Switch/component.json +207 -0
- package/Table/component.json +547 -0
- package/Tabs/component.json +227 -0
- package/Tag/component.json +221 -0
- package/TextEditor/component.json +186 -0
- package/TextField/component.json +290 -0
- package/TimePicker/component.json +176 -0
- package/Timeline/component.json +110 -0
- package/Title/component.json +156 -0
- package/ToggleButton/component.json +153 -0
- package/Tooltip/component.json +176 -0
- package/Transfer/component.json +157 -0
- package/Tree/component.json +512 -0
- package/Upload/component.json +450 -0
- package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
- package/ai-workflows/02-rbac-operation-buttons.md +290 -0
- package/ai-workflows/03-complex-form-async-cascade.md +350 -0
- package/ai-workflows/04-array-field-form.md +281 -0
- package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
- package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
- package/ai-workflows/07-search-filter-table-trio.md +387 -0
- package/ai-workflows/08-table-advanced-features.md +365 -0
- package/ai-workflows/09-batch-operation-export-progress.md +367 -0
- package/ai-workflows/10-cross-component-state-coordination.md +412 -0
- package/codemods/modal-onCancel-to-onDismiss.js +69 -0
- package/es/AlignBox/component.json +89 -0
- package/es/AlignBox/index.css +1 -1
- package/es/AlignBox/index.d.ts +6 -2
- package/es/AlignBox/index.js +1 -1
- package/es/AlignBox/style/index.css +1 -1
- package/es/Anchor/anchorMenu/index.d.ts +2 -1
- package/es/Anchor/anchorMenu/index.js +36 -33
- package/es/Anchor/component.json +130 -0
- package/es/Anchor/index.js +50 -47
- package/es/Anchor/type.d.ts +8 -4
- package/es/Argv/component.json +216 -0
- package/es/Argv/index.d.ts +5 -6
- package/es/AutoBox/component.json +133 -0
- package/es/AutoBox/index.d.ts +3 -3
- package/es/AutoBox/index.js +1 -1
- package/es/AutoBox/protal.d.ts +2 -2
- package/es/AutoBox/protal.js +32 -29
- package/es/AutoButton/component.json +109 -0
- package/es/AutoButton/index.js +1 -1
- package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
- package/es/AutoTips/autoTipsMultiline/index.js +1 -1
- package/es/AutoTips/component.json +121 -0
- package/es/Badge/component.json +92 -0
- package/es/Breadcrumbs/component.json +142 -0
- package/es/Breadcrumbs/index.js +1 -1
- package/es/Button/SplitButton.d.ts +2 -2
- package/es/Button/component.json +168 -0
- package/es/Button/index.js +44 -44
- package/es/ButtonGroup/component.json +132 -0
- package/es/ButtonGroup/index.d.ts +1 -1
- package/es/Card/component.json +162 -0
- package/es/Card/index.d.ts +2 -2
- package/es/Card/index.js +2 -2
- package/es/Carousel/component.json +142 -0
- package/es/Carousel/index.d.ts +1 -1
- package/es/Cascader/Cascader.js +188 -180
- package/es/Cascader/component.json +196 -0
- package/es/Cascader/hooks/useEntities.js +7 -7
- package/es/Cascader/interface.d.ts +1 -0
- package/es/Cascader/utils/commonUtil.d.ts +1 -1
- package/es/Cascader/utils/commonUtil.js +16 -16
- package/es/Cascader/utils/treeUtil.d.ts +14 -5
- package/es/Cascader/utils/treeUtil.js +1 -1
- package/es/Checkbox/component.json +138 -0
- package/es/CheckboxGroup/component.json +152 -0
- package/es/CodeEditor/component.json +189 -0
- package/es/CodeEditor/index.d.ts +10 -9
- package/es/Collapse/component.json +166 -0
- package/es/Collapse/index.d.ts +1 -1
- package/es/Collapse/index.js +41 -33
- package/es/CollapseBox/component.json +84 -0
- package/es/CollapseLayout/component.json +155 -0
- package/es/ColorPicker/component.json +142 -0
- package/es/ComboSelect/component.json +181 -0
- package/es/ComboSelect/index.js +299 -287
- package/es/ComboSelect/interface.d.ts +6 -3
- package/es/ComboSelect/utils.d.ts +3 -3
- package/es/ComboSelect/utils.js +1 -1
- package/es/Container/component.json +111 -0
- package/es/ContentBox/component.json +81 -0
- package/es/CopyText/component.json +118 -0
- package/es/CycleSelector/component.json +98 -0
- package/es/CycleSelector/index.js +14 -13
- package/es/DatePicker/component.json +192 -0
- package/es/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
- package/es/DatePicker/generatePicker/generateRangePicker.js +73 -65
- package/es/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- package/es/DatePicker/generatePicker/index.d.ts +11 -4
- package/es/Descriptions/component.json +142 -0
- package/es/Descriptions/index.d.ts +1 -1
- package/es/Desktop/component.json +171 -0
- package/es/DragVerify/component.json +114 -0
- package/es/DragVerify/index.js +19 -19
- package/es/Drawer/component.json +200 -0
- package/es/Drawer/index.js +86 -86
- package/es/Drawer/interface.d.ts +1 -1
- package/es/Drawer/util.d.ts +1 -6
- package/es/Drawer/util.js +9 -6
- package/es/Dropdown/component.json +147 -0
- package/es/DynamicMultiBox/component.json +278 -0
- package/es/DynamicMultiBox/formItem.d.ts +1 -1
- package/es/DynamicMultiBox/rowForm.d.ts +2 -2
- package/es/Empty/component.json +123 -0
- package/es/Empty/index.css +1 -1
- package/es/Empty/index.d.ts +2 -2
- package/es/Empty/index.js +27 -26
- package/es/Empty/style/index.css +1 -1
- package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/es/FieldForm/Form.d.ts +2 -2
- package/es/FieldForm/FormList.d.ts +2 -2
- package/es/FieldForm/component.json +196 -0
- package/es/FieldForm/context.d.ts +5 -1
- package/es/FieldForm/context.js +2 -2
- package/es/FieldForm/hooks/useForm.d.ts +4 -3
- package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
- package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
- package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
- package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
- package/es/FieldForm/hooks/useItemRef.js +6 -6
- package/es/Form/component.json +161 -0
- package/es/Form/index.d.ts +52 -49
- package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
- package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
- package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
- package/es/FormItem/compoments/formFile/index.js +8 -8
- package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
- package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
- package/es/FormItem/component.json +171 -0
- package/es/FormItem/index.d.ts +5 -5
- package/es/FormItem/index.js +23 -23
- package/es/FormItem/itemType.js +1 -1
- package/es/FunctionModal/component.json +197 -0
- package/es/FunctionModal/dialog.d.ts +1 -1
- package/es/FunctionModal/modalContext.d.ts +4 -1
- package/es/Help/component.json +118 -0
- package/es/HelperText/component.json +126 -0
- package/es/Image/component.json +165 -0
- package/es/InputCode/component.json +191 -0
- package/es/InputCode/index.d.ts +2 -2
- package/es/InputLang/component.json +205 -0
- package/es/InputLang/index.js +1 -1
- package/es/InputNumber/component.json +162 -0
- package/es/Label/component.json +126 -0
- package/es/Label/index.d.ts +2 -2
- package/es/Loading/component.json +91 -0
- package/es/Menu/component.json +180 -0
- package/es/Message/component.json +246 -0
- package/es/Message/index.d.ts +2 -2
- package/es/Message/index.js +2 -2
- package/es/Modal/Confirm/index.d.ts +1 -1
- package/es/Modal/Confirm/index.js +81 -75
- package/es/Modal/component.json +277 -0
- package/es/Modal/index.d.ts +97 -6
- package/es/Modal/index.js +174 -122
- package/es/Modal/interface.d.ts +1 -0
- package/es/MultiBox/component.json +216 -0
- package/es/MultiBox/index.js +19 -14
- package/es/Notification/component.json +184 -0
- package/es/OperateBtn/component.json +134 -0
- package/es/OperateBtn/index.d.ts +3 -3
- package/es/PageHeader/component.json +112 -0
- package/es/Pagination/component.json +181 -0
- package/es/Pagination/index.js +15 -15
- package/es/PasswordRules/component.json +105 -0
- package/es/PasswordRules/index.d.ts +4 -4
- package/es/PopConfirm/component.json +227 -0
- package/es/PopConfirm/index.d.ts +1 -1
- package/es/PopConfirm/index.js +1 -1
- package/es/PopMenu/component.json +131 -0
- package/es/PopMenu/hooks.d.ts +1 -1
- package/es/PopMenu/index.js +8 -8
- package/es/Popover/component.json +165 -0
- package/es/Popover/index.js +1 -1
- package/es/Progress/component.json +161 -0
- package/es/Prompt/component.json +144 -0
- package/es/Querying/component.json +96 -0
- package/es/Querying/index.css +1 -1
- package/es/Querying/index.d.ts +2 -2
- package/es/Querying/index.js +20 -19
- package/es/Querying/style/index.css +1 -1
- package/es/QuickReply/component.json +129 -0
- package/es/QuickReply/index.d.ts +1 -1
- package/es/Radio/component.json +136 -0
- package/es/RadioGroup/component.json +149 -0
- package/es/RangeInput/component.json +198 -0
- package/es/RangeInput/index.js +1 -1
- package/es/Result/component.json +104 -0
- package/es/ScrollBar/component.json +115 -0
- package/es/Search/component.json +177 -0
- package/es/Search/index.d.ts +1 -1
- package/es/Select/component.json +244 -0
- package/es/Select/index.js +113 -113
- package/es/SelectInput/component.json +184 -0
- package/es/Selector/component.json +203 -0
- package/es/Selector/index.js +28 -27
- package/es/Selector/interface.d.ts +1 -1
- package/es/Selector/selectorMain/index.js +2 -2
- package/es/Selector/selectorNode/index.js +1 -1
- package/es/Selector/util.d.ts +2 -2
- package/es/SelectorPicker/component.json +179 -0
- package/es/SelectorPicker/index.d.ts +5 -5
- package/es/SelectorPicker/index.js +15 -15
- package/es/SingleBox/component.json +151 -0
- package/es/SingleBox/index.d.ts +2 -2
- package/es/Slider/component.json +181 -0
- package/es/SortBox/component.json +108 -0
- package/es/Status/component.json +104 -0
- package/es/Stepper/component.json +129 -0
- package/es/Stepper/index.d.ts +2 -2
- package/es/Switch/component.json +207 -0
- package/es/Switch/index.css +1 -1
- package/es/Switch/index.d.ts +3 -2
- package/es/Switch/index.js +60 -59
- package/es/Switch/style/index.css +1 -1
- package/es/Table/component.json +547 -0
- package/es/Table/index.d.ts +2 -2
- package/es/Table/index.js +414 -414
- package/es/Table/interface.d.ts +6 -0
- package/es/Tabs/component.json +227 -0
- package/es/Tag/component.json +221 -0
- package/es/Tag/index.css +1 -1
- package/es/Tag/index.d.ts +1 -1
- package/es/Tag/index.js +20 -20
- package/es/Tag/style/index.css +1 -1
- package/es/TextEditor/component.json +186 -0
- package/es/TextEditor/index.d.ts +5 -5
- package/es/TextField/component.json +290 -0
- package/es/TextField/index.d.ts +2 -2
- package/es/TimePicker/component.json +176 -0
- package/es/Timeline/component.json +110 -0
- package/es/Title/component.json +156 -0
- package/es/ToggleButton/component.json +153 -0
- package/es/Tooltip/component.json +176 -0
- package/es/Tooltip/index.js +74 -63
- package/es/Tooltip/interface.d.ts +14 -1
- package/es/Tooltip/utils.js +6 -6
- package/es/Transfer/component.json +157 -0
- package/es/Tree/component.json +512 -0
- package/es/Upload/component.json +450 -0
- package/es/Utils/type.d.ts +0 -2
- package/es/index.d.ts +2 -0
- package/es/index.js +1 -1
- package/es/locale/en_US.d.ts +361 -0
- package/es/locale/en_US.js +364 -0
- package/es/locale/index.d.ts +1 -723
- package/es/locale/index2.js +10 -0
- package/es/locale/zh_CN.d.ts +361 -0
- package/es/locale/zh_CN.js +364 -0
- package/lib/AlignBox/component.json +89 -0
- package/lib/AlignBox/index.css +1 -1
- package/lib/AlignBox/index.d.ts +6 -2
- package/lib/AlignBox/index.js +1 -1
- package/lib/AlignBox/style/index.css +1 -1
- package/lib/Anchor/anchorMenu/index.d.ts +2 -1
- package/lib/Anchor/anchorMenu/index.js +1 -1
- package/lib/Anchor/component.json +130 -0
- package/lib/Anchor/index.js +1 -1
- package/lib/Anchor/type.d.ts +8 -4
- package/lib/Argv/component.json +216 -0
- package/lib/Argv/index.d.ts +5 -6
- package/lib/AutoBox/component.json +133 -0
- package/lib/AutoBox/index.d.ts +3 -3
- package/lib/AutoBox/index.js +1 -1
- package/lib/AutoBox/protal.d.ts +2 -2
- package/lib/AutoBox/protal.js +1 -1
- package/lib/AutoButton/component.json +109 -0
- package/lib/AutoButton/index.js +1 -1
- package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
- package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
- package/lib/AutoTips/component.json +121 -0
- package/lib/Badge/component.json +92 -0
- package/lib/Breadcrumbs/component.json +142 -0
- package/lib/Breadcrumbs/index.js +1 -1
- package/lib/Button/SplitButton.d.ts +2 -2
- package/lib/Button/component.json +168 -0
- package/lib/Button/index.js +1 -1
- package/lib/ButtonGroup/component.json +132 -0
- package/lib/ButtonGroup/index.d.ts +1 -1
- package/lib/Card/component.json +162 -0
- package/lib/Card/index.d.ts +2 -2
- package/lib/Card/index.js +1 -1
- package/lib/Carousel/component.json +142 -0
- package/lib/Carousel/index.d.ts +1 -1
- package/lib/Cascader/Cascader.js +1 -1
- package/lib/Cascader/component.json +196 -0
- package/lib/Cascader/hooks/useEntities.js +1 -1
- package/lib/Cascader/interface.d.ts +1 -0
- package/lib/Cascader/utils/commonUtil.d.ts +1 -1
- package/lib/Cascader/utils/commonUtil.js +1 -1
- package/lib/Cascader/utils/treeUtil.d.ts +14 -5
- package/lib/Cascader/utils/treeUtil.js +1 -1
- package/lib/Checkbox/component.json +138 -0
- package/lib/CheckboxGroup/component.json +152 -0
- package/lib/CodeEditor/component.json +189 -0
- package/lib/CodeEditor/index.d.ts +10 -9
- package/lib/Collapse/component.json +166 -0
- package/lib/Collapse/index.d.ts +1 -1
- package/lib/Collapse/index.js +1 -1
- package/lib/CollapseBox/component.json +84 -0
- package/lib/CollapseLayout/component.json +155 -0
- package/lib/ColorPicker/component.json +142 -0
- package/lib/ComboSelect/component.json +181 -0
- package/lib/ComboSelect/index.js +1 -1
- package/lib/ComboSelect/interface.d.ts +6 -3
- package/lib/ComboSelect/utils.d.ts +3 -3
- package/lib/ComboSelect/utils.js +1 -1
- package/lib/Container/component.json +111 -0
- package/lib/ContentBox/component.json +81 -0
- package/lib/CopyText/component.json +118 -0
- package/lib/CycleSelector/component.json +98 -0
- package/lib/CycleSelector/index.js +1 -1
- package/lib/DatePicker/component.json +192 -0
- package/lib/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
- package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
- package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- package/lib/DatePicker/generatePicker/index.d.ts +11 -4
- package/lib/Descriptions/component.json +142 -0
- package/lib/Descriptions/index.d.ts +1 -1
- package/lib/Desktop/component.json +171 -0
- package/lib/DragVerify/component.json +114 -0
- package/lib/DragVerify/index.js +1 -1
- package/lib/Drawer/component.json +200 -0
- package/lib/Drawer/index.js +1 -1
- package/lib/Drawer/interface.d.ts +1 -1
- package/lib/Drawer/util.d.ts +1 -6
- package/lib/Drawer/util.js +1 -1
- package/lib/Dropdown/component.json +147 -0
- package/lib/DynamicMultiBox/component.json +278 -0
- package/lib/DynamicMultiBox/formItem.d.ts +1 -1
- package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
- package/lib/Empty/component.json +123 -0
- package/lib/Empty/index.css +1 -1
- package/lib/Empty/index.d.ts +2 -2
- package/lib/Empty/index.js +1 -1
- package/lib/Empty/style/index.css +1 -1
- package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/lib/FieldForm/Form.d.ts +2 -2
- package/lib/FieldForm/FormList.d.ts +2 -2
- package/lib/FieldForm/component.json +196 -0
- package/lib/FieldForm/context.d.ts +5 -1
- package/lib/FieldForm/context.js +1 -1
- package/lib/FieldForm/hooks/useForm.d.ts +4 -3
- package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
- package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
- package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
- package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
- package/lib/FieldForm/hooks/useItemRef.js +1 -1
- package/lib/Form/component.json +161 -0
- package/lib/Form/index.d.ts +52 -49
- package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
- package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
- package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
- package/lib/FormItem/compoments/formFile/index.js +1 -1
- package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
- package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
- package/lib/FormItem/component.json +171 -0
- package/lib/FormItem/index.d.ts +5 -5
- package/lib/FormItem/index.js +1 -1
- package/lib/FormItem/itemType.js +1 -1
- package/lib/FunctionModal/component.json +197 -0
- package/lib/FunctionModal/dialog.d.ts +1 -1
- package/lib/FunctionModal/modalContext.d.ts +4 -1
- package/lib/Help/component.json +118 -0
- package/lib/HelperText/component.json +126 -0
- package/lib/Image/component.json +165 -0
- package/lib/InputCode/component.json +191 -0
- package/lib/InputCode/index.d.ts +2 -2
- package/lib/InputLang/component.json +205 -0
- package/lib/InputLang/index.js +1 -1
- package/lib/InputNumber/component.json +162 -0
- package/lib/Label/component.json +126 -0
- package/lib/Label/index.d.ts +2 -2
- package/lib/Loading/component.json +91 -0
- package/lib/Menu/component.json +180 -0
- package/lib/Message/component.json +246 -0
- package/lib/Message/index.d.ts +2 -2
- package/lib/Message/index.js +1 -1
- package/lib/Modal/Confirm/index.d.ts +1 -1
- package/lib/Modal/Confirm/index.js +1 -1
- package/lib/Modal/component.json +277 -0
- package/lib/Modal/index.d.ts +97 -6
- package/lib/Modal/index.js +1 -1
- package/lib/Modal/interface.d.ts +1 -0
- package/lib/MultiBox/component.json +216 -0
- package/lib/MultiBox/index.js +1 -1
- package/lib/Notification/component.json +184 -0
- package/lib/OperateBtn/component.json +134 -0
- package/lib/OperateBtn/index.d.ts +3 -3
- package/lib/PageHeader/component.json +112 -0
- package/lib/Pagination/component.json +181 -0
- package/lib/Pagination/index.js +1 -1
- package/lib/PasswordRules/component.json +105 -0
- package/lib/PasswordRules/index.d.ts +4 -4
- package/lib/PopConfirm/component.json +227 -0
- package/lib/PopConfirm/index.d.ts +1 -1
- package/lib/PopConfirm/index.js +1 -1
- package/lib/PopMenu/component.json +131 -0
- package/lib/PopMenu/hooks.d.ts +1 -1
- package/lib/PopMenu/index.js +1 -1
- package/lib/Popover/component.json +165 -0
- package/lib/Popover/index.js +1 -1
- package/lib/Progress/component.json +161 -0
- package/lib/Prompt/component.json +144 -0
- package/lib/Querying/component.json +96 -0
- package/lib/Querying/index.css +1 -1
- package/lib/Querying/index.d.ts +2 -2
- package/lib/Querying/index.js +1 -1
- package/lib/Querying/style/index.css +1 -1
- package/lib/QuickReply/component.json +129 -0
- package/lib/QuickReply/index.d.ts +1 -1
- package/lib/Radio/component.json +136 -0
- package/lib/RadioGroup/component.json +149 -0
- package/lib/RangeInput/component.json +198 -0
- package/lib/RangeInput/index.js +1 -1
- package/lib/Result/component.json +104 -0
- package/lib/ScrollBar/component.json +115 -0
- package/lib/Search/component.json +177 -0
- package/lib/Search/index.d.ts +1 -1
- package/lib/Select/component.json +244 -0
- package/lib/Select/index.js +1 -1
- package/lib/SelectInput/component.json +184 -0
- package/lib/Selector/component.json +203 -0
- package/lib/Selector/index.js +1 -1
- package/lib/Selector/interface.d.ts +1 -1
- package/lib/Selector/selectorMain/index.js +1 -1
- package/lib/Selector/selectorNode/index.js +1 -1
- package/lib/Selector/util.d.ts +2 -2
- package/lib/SelectorPicker/component.json +179 -0
- package/lib/SelectorPicker/index.d.ts +5 -5
- package/lib/SelectorPicker/index.js +1 -1
- package/lib/SingleBox/component.json +151 -0
- package/lib/SingleBox/index.d.ts +2 -2
- package/lib/Slider/component.json +181 -0
- package/lib/SortBox/component.json +108 -0
- package/lib/Status/component.json +104 -0
- package/lib/Stepper/component.json +129 -0
- package/lib/Stepper/index.d.ts +2 -2
- package/lib/Switch/component.json +207 -0
- package/lib/Switch/index.css +1 -1
- package/lib/Switch/index.d.ts +3 -2
- package/lib/Switch/index.js +1 -1
- package/lib/Switch/style/index.css +1 -1
- package/lib/Table/component.json +547 -0
- package/lib/Table/index.d.ts +2 -2
- package/lib/Table/index.js +1 -1
- package/lib/Table/interface.d.ts +6 -0
- package/lib/Tabs/component.json +227 -0
- package/lib/Tag/component.json +221 -0
- package/lib/Tag/index.css +1 -1
- package/lib/Tag/index.d.ts +1 -1
- package/lib/Tag/index.js +1 -1
- package/lib/Tag/style/index.css +1 -1
- package/lib/TextEditor/component.json +186 -0
- package/lib/TextEditor/index.d.ts +5 -5
- package/lib/TextField/component.json +290 -0
- package/lib/TextField/index.d.ts +2 -2
- package/lib/TimePicker/component.json +176 -0
- package/lib/Timeline/component.json +110 -0
- package/lib/Title/component.json +156 -0
- package/lib/ToggleButton/component.json +153 -0
- package/lib/Tooltip/component.json +176 -0
- package/lib/Tooltip/index.js +1 -1
- package/lib/Tooltip/interface.d.ts +14 -1
- package/lib/Tooltip/utils.js +1 -1
- package/lib/Transfer/component.json +157 -0
- package/lib/Tree/component.json +512 -0
- package/lib/Upload/component.json +450 -0
- package/lib/Utils/type.d.ts +0 -2
- package/lib/index.d.ts +2 -0
- package/lib/index.js +1 -1
- package/lib/locale/en_US.d.ts +361 -0
- package/lib/locale/en_US.js +2 -0
- package/lib/locale/index.d.ts +1 -723
- package/lib/locale/index2.js +2 -0
- package/lib/locale/zh_CN.d.ts +361 -0
- package/lib/locale/zh_CN.js +2 -0
- package/package.json +10 -3
- /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
- /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
- /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
- /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "TextEditor",
|
|
3
|
+
"category": "Data Entry",
|
|
4
|
+
"description": "基于 wangEditor 的富文本编辑器,支持图片/视频上传与自定义工具栏",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"富文本编辑",
|
|
8
|
+
"内容创作"
|
|
9
|
+
],
|
|
10
|
+
"useCases": [
|
|
11
|
+
"文章编辑",
|
|
12
|
+
"邮件编辑",
|
|
13
|
+
"公告发布"
|
|
14
|
+
],
|
|
15
|
+
"riskLevel": "normal"
|
|
16
|
+
},
|
|
17
|
+
"variants": {
|
|
18
|
+
"default": {
|
|
19
|
+
"meaning": "默认样式"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"states": [
|
|
23
|
+
"default",
|
|
24
|
+
"disabled",
|
|
25
|
+
"readonly"
|
|
26
|
+
],
|
|
27
|
+
"idealProps": {
|
|
28
|
+
"server": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"required": true,
|
|
31
|
+
"description": "⚠️ 必传。文件上传服务地址(string 无问号);**即使不上传图片/视频也必须传占位 url(如 /api/noop)**;不传 TS 报错。占位场景安全:仅在用户主动插入图片/视频时才触发上传请求,纯文字编辑不会请求"
|
|
32
|
+
},
|
|
33
|
+
"value": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"description": "受控 HTML 字符串(配 onChange)"
|
|
36
|
+
},
|
|
37
|
+
"defaultValue": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "非受控初始 HTML 字符串(配 ref 拿值);**也可与 onChange 同时使用监听变化,不互斥**"
|
|
40
|
+
},
|
|
41
|
+
"onChange": {
|
|
42
|
+
"type": "function",
|
|
43
|
+
"description": "(value: string, text: string) => void 内容变化回调;受控/非受控均可用"
|
|
44
|
+
},
|
|
45
|
+
"toolbarKeys": {
|
|
46
|
+
"type": "array",
|
|
47
|
+
"description": "完整工具栏菜单白名单(覆盖默认;空数组进入预览模式)。常用 menuKey:bold/italic/underline/bulletedList/numberedList/insertLink/uploadImage;详见 api.ts toolbarKeys 列出的完整 key"
|
|
48
|
+
},
|
|
49
|
+
"excludeKeys": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"description": "从默认工具栏排除的菜单 key 数组"
|
|
52
|
+
},
|
|
53
|
+
"max": {
|
|
54
|
+
"type": "number",
|
|
55
|
+
"description": "纯文本最大字符数"
|
|
56
|
+
},
|
|
57
|
+
"label": {
|
|
58
|
+
"type": "ReactNode",
|
|
59
|
+
"description": "编辑器顶部标题"
|
|
60
|
+
},
|
|
61
|
+
"placeholder": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"default": "请输入内容",
|
|
64
|
+
"description": "空内容占位文案"
|
|
65
|
+
},
|
|
66
|
+
"required": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"default": "false",
|
|
69
|
+
"description": "UI 必填标记"
|
|
70
|
+
},
|
|
71
|
+
"readOnly": {
|
|
72
|
+
"type": "boolean",
|
|
73
|
+
"default": "false",
|
|
74
|
+
"description": "只读模式(展示语义)"
|
|
75
|
+
},
|
|
76
|
+
"disabled": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"default": "false",
|
|
79
|
+
"description": "禁用模式(权限语义;内部强制 readOnly)"
|
|
80
|
+
},
|
|
81
|
+
"uploadImage": {
|
|
82
|
+
"type": "object",
|
|
83
|
+
"description": "图片上传配置 Partial<UpLoadImgConfig>"
|
|
84
|
+
},
|
|
85
|
+
"in18": {
|
|
86
|
+
"type": "enum",
|
|
87
|
+
"values": [
|
|
88
|
+
"en",
|
|
89
|
+
"zh-CN"
|
|
90
|
+
],
|
|
91
|
+
"description": "国际化语言。**⚠️ src prop 名是 in18(历史 typo · 实际应为 i18n);写 i18n 不会切换语言也不报错**"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"do": [
|
|
95
|
+
"受控模式传 value + onChange 保持内容同步;非受控模式传 defaultValue + ref 拿值",
|
|
96
|
+
"server 必传:即使纯文字场景也要传占位 URL(如 /api/noop),否则 TS 报错",
|
|
97
|
+
"用 ref 调用命令式 API(getContent/getText/clearEditor/setContent)而非直接操控 DOM",
|
|
98
|
+
"toolbarKeys=[] 可切换到预览模式(只读展示,无工具栏),适合详情页展示富文本内容",
|
|
99
|
+
"in18 属性控制工具栏语言,注意 prop 名是 in18(历史 typo,不是 i18n)",
|
|
100
|
+
"需要限制字数时用 max 属性(对应 wangEditor maxLength,按纯文本字符数计算)"
|
|
101
|
+
],
|
|
102
|
+
"dont": [
|
|
103
|
+
"不要同时传 value + defaultValue(受控/非受控不能混用)",
|
|
104
|
+
"不要忘记 server 属性——即使不上传图片也必须传占位 URL,否则 TS 类型错误",
|
|
105
|
+
"不要把 onChange 回调中的 value 直接 dangerouslySetInnerHTML 展示——须经 XSS 过滤",
|
|
106
|
+
"不要在 onBlur/onFocus 中直接操作 editor 实例的 DOM,应通过 IDomEditor 提供的 API",
|
|
107
|
+
"不要在组件卸载后访问 ref.current(组件内部已在 useEffect cleanup 中 destroy editor)"
|
|
108
|
+
],
|
|
109
|
+
"events": {
|
|
110
|
+
"onChange": {
|
|
111
|
+
"signature": "(value: string, text: string) => void",
|
|
112
|
+
"asyncSupported": false,
|
|
113
|
+
"examples": [
|
|
114
|
+
"内容变化时触发:value 是 HTML 字符串(getHtml()),text 是纯文本(getText())",
|
|
115
|
+
"受控模式:onChange 中调用 setState 更新 value prop,实现受控回路",
|
|
116
|
+
"字数统计:用 text.length 而非 value.length(HTML 含标签字符会计入 value.length)"
|
|
117
|
+
],
|
|
118
|
+
"commonMistakes": [
|
|
119
|
+
"假设 value 参数是纯文本——value 实际是 HTML 字符串,纯文本用第二参 text",
|
|
120
|
+
"受控模式下不在 onChange 中更新 value prop——导致编辑器内容反复跳回",
|
|
121
|
+
"初始化时 defaultValue 设置后 onChange 也会触发——内部 valueRef 机制防抖,但需注意初始渲染的 HTML 等价性检查"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
"onBlur": {
|
|
125
|
+
"signature": "(editor: IDomEditor) => void",
|
|
126
|
+
"asyncSupported": false,
|
|
127
|
+
"examples": [
|
|
128
|
+
"失焦时触发:editor 是 wangEditor IDomEditor 实例,可通过 editor.getHtml() 获取最新内容",
|
|
129
|
+
"表单校验场景:在 onBlur 中调用父表单的校验方法",
|
|
130
|
+
"自动保存:onBlur 时发送草稿保存请求"
|
|
131
|
+
],
|
|
132
|
+
"commonMistakes": [
|
|
133
|
+
"假设 onBlur 时内容一定与 onChange 最后一次触发一致——如果内容没变 onChange 不触发,onBlur 仍会触发",
|
|
134
|
+
"在 onBlur 中直接调用 editor.destroy()——组件内部有自己的生命周期管理,外部不要手动销毁"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
"onFocus": {
|
|
138
|
+
"signature": "(editor: IDomEditor) => void",
|
|
139
|
+
"asyncSupported": false,
|
|
140
|
+
"examples": [
|
|
141
|
+
"聚焦时触发:editor 是 IDomEditor 实例",
|
|
142
|
+
"显示字数统计 UI:onFocus 时展示计数条"
|
|
143
|
+
],
|
|
144
|
+
"commonMistakes": [
|
|
145
|
+
"在 onFocus 中调用 editor.focus() 会造成递归触发——已经聚焦不要再次 focus"
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"onDestroyed": {
|
|
149
|
+
"signature": "(editor: IDomEditor) => void",
|
|
150
|
+
"asyncSupported": false,
|
|
151
|
+
"examples": [
|
|
152
|
+
"编辑器实例销毁时触发(组件卸载时内部调用 editor.destroy())",
|
|
153
|
+
"用于清理与 editor 实例关联的外部副作用(如自定义菜单注册)"
|
|
154
|
+
],
|
|
155
|
+
"commonMistakes": [
|
|
156
|
+
"在 onDestroyed 中访问 editor.getHtml()——销毁时内部 editor 状态可能已清空"
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"typescriptPitfalls": [
|
|
161
|
+
{
|
|
162
|
+
"issue": "prop 名是 in18 不是 i18n(历史拼写 typo)",
|
|
163
|
+
"wrong": "// 写 i18n 不报错但不生效\n<TextEditor i18n='en' server='/api/upload' />",
|
|
164
|
+
"right": "<TextEditor in18='en' server='/api/upload' /> // 注意是 in18,不是 i18n"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"issue": "server 属性是必填的,即使不上传图片也要传",
|
|
168
|
+
"wrong": "// 缺少 server 会导致 TS 类型错误 'Property server is missing'\n<TextEditor value={html} onChange={setHtml} />",
|
|
169
|
+
"right": "<TextEditor value={html} onChange={setHtml} server='/api/upload' />"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"issue": "useRef 拿 TextEditorRef 类型时需正确声明泛型",
|
|
173
|
+
"wrong": "const ref = useRef(null); ref.current.getContent(); // ref.current 为 null,TS 报错",
|
|
174
|
+
"right": "import { TextEditorRef } from '@para-ui/core'; const ref = useRef<TextEditorRef>(null); ref.current?.getContent();"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"issue": "onChange 第一参是 HTML 字符串不是纯文本",
|
|
178
|
+
"wrong": "onChange={(value) => setCount(value.length)} // value.length 包含 HTML 标签字符数",
|
|
179
|
+
"right": "onChange={(value, text) => setCount(text.length)} // 用第二参 text 获取纯文本长度"
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"mapping": {
|
|
183
|
+
"realComponent": "TextEditor",
|
|
184
|
+
"adapter": null
|
|
185
|
+
}
|
|
186
|
+
}
|
package/es/TextEditor/index.d.ts
CHANGED
|
@@ -34,19 +34,19 @@ export interface UpLoadImgConfig {
|
|
|
34
34
|
/** 5 * 1024(5kb) */
|
|
35
35
|
base64LimitSize: number;
|
|
36
36
|
/** 单个文件上传成功之后 */
|
|
37
|
-
onSuccess: (file: File, res:
|
|
37
|
+
onSuccess: (file: File, res: unknown) => void;
|
|
38
38
|
/** 单个文件上传失败 */
|
|
39
|
-
onFailed: (file: File, res:
|
|
39
|
+
onFailed: (file: File, res: unknown) => void;
|
|
40
40
|
/** 上传进度回调 */
|
|
41
41
|
onProgress: (progress: number) => void;
|
|
42
42
|
/** 上传之前触发 */
|
|
43
|
-
onBeforeUpload: (file: File) =>
|
|
43
|
+
onBeforeUpload: (file: File) => unknown;
|
|
44
44
|
/** 上传错误,或者触发 timeout 超时 */
|
|
45
|
-
onError: (file: File, err:
|
|
45
|
+
onError: (file: File, err: unknown, res: unknown) => void;
|
|
46
46
|
/** 用户自定义图片上传 */
|
|
47
47
|
customUpload: (file: File, insertFn: InsertFnType) => void;
|
|
48
48
|
/** 用户自定义图片插入 */
|
|
49
|
-
customInsert: (res:
|
|
49
|
+
customInsert: (res: unknown, insertFn: InsertFnType) => void;
|
|
50
50
|
}
|
|
51
51
|
export type UpLoadVideoConfig = Omit<UpLoadImgConfig, 'base64LimitSize'>;
|
|
52
52
|
export interface TextEditorProps extends HelperTextDetailProps {
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "TextField",
|
|
3
|
+
"category": "Form",
|
|
4
|
+
"description": "用于文本输入的表单组件",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"输入文本",
|
|
8
|
+
"搜索",
|
|
9
|
+
"密码输入",
|
|
10
|
+
"多行文本"
|
|
11
|
+
],
|
|
12
|
+
"useCases": [
|
|
13
|
+
"表单填写",
|
|
14
|
+
"搜索栏",
|
|
15
|
+
"评论区",
|
|
16
|
+
"信息录入"
|
|
17
|
+
],
|
|
18
|
+
"riskLevel": "normal"
|
|
19
|
+
},
|
|
20
|
+
"variants": {
|
|
21
|
+
"standard": {
|
|
22
|
+
"meaning": "标准输入框"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"states": [
|
|
26
|
+
"default",
|
|
27
|
+
"disabled",
|
|
28
|
+
"error",
|
|
29
|
+
"focus"
|
|
30
|
+
],
|
|
31
|
+
"idealProps": {
|
|
32
|
+
"value": {
|
|
33
|
+
"type": "string | number",
|
|
34
|
+
"description": "受控模式:输入框的值。与 onChange 配合使用"
|
|
35
|
+
},
|
|
36
|
+
"defaultValue": {
|
|
37
|
+
"type": "string | number",
|
|
38
|
+
"description": "非受控模式:初始值(不传 value 时生效)"
|
|
39
|
+
},
|
|
40
|
+
"onChange": {
|
|
41
|
+
"type": "function",
|
|
42
|
+
"signature": "(event: React.ChangeEvent<HTMLInputElement>) => void",
|
|
43
|
+
"description": "值变化回调。从 event.target.value 取新值"
|
|
44
|
+
},
|
|
45
|
+
"label": {
|
|
46
|
+
"type": "ReactNode",
|
|
47
|
+
"description": "输入框标题"
|
|
48
|
+
},
|
|
49
|
+
"placeholder": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "占位文本"
|
|
52
|
+
},
|
|
53
|
+
"disabled": {
|
|
54
|
+
"type": "boolean",
|
|
55
|
+
"default": false,
|
|
56
|
+
"description": "是否禁用"
|
|
57
|
+
},
|
|
58
|
+
"error": {
|
|
59
|
+
"type": "boolean",
|
|
60
|
+
"default": false,
|
|
61
|
+
"description": "是否显示错误状态"
|
|
62
|
+
},
|
|
63
|
+
"helperText": {
|
|
64
|
+
"type": "ReactNode",
|
|
65
|
+
"description": "辅助提示文本或错误信息(error=true 时显示红色)"
|
|
66
|
+
},
|
|
67
|
+
"type": {
|
|
68
|
+
"type": "enum",
|
|
69
|
+
"values": [
|
|
70
|
+
"text",
|
|
71
|
+
"password",
|
|
72
|
+
"number"
|
|
73
|
+
],
|
|
74
|
+
"default": "text",
|
|
75
|
+
"description": "输入框类型。password 类型内置显示/隐藏切换图标"
|
|
76
|
+
},
|
|
77
|
+
"multiline": {
|
|
78
|
+
"type": "boolean",
|
|
79
|
+
"default": false,
|
|
80
|
+
"description": "是否为多行文本域(textarea)"
|
|
81
|
+
},
|
|
82
|
+
"rows": {
|
|
83
|
+
"type": "number",
|
|
84
|
+
"default": 4,
|
|
85
|
+
"description": "多行文本域的行数(multiline=true 时生效)"
|
|
86
|
+
},
|
|
87
|
+
"size": {
|
|
88
|
+
"type": "enum",
|
|
89
|
+
"values": [
|
|
90
|
+
"small",
|
|
91
|
+
"medium",
|
|
92
|
+
"large"
|
|
93
|
+
],
|
|
94
|
+
"default": "large",
|
|
95
|
+
"description": "控件大小"
|
|
96
|
+
},
|
|
97
|
+
"allowClear": {
|
|
98
|
+
"type": "boolean",
|
|
99
|
+
"default": false,
|
|
100
|
+
"description": "是否显示清除按钮"
|
|
101
|
+
},
|
|
102
|
+
"limitLength": {
|
|
103
|
+
"type": "number",
|
|
104
|
+
"description": "最大字符长度限制(同步 api.ts 协议 A:**onBlur 失焦时**截断到 limitLength + 触发新 onChange,**输入阶段不阻断**;需实时阻断请用 onChange slice。同时在输入框右下渲染 current/limitLength 计数)"
|
|
105
|
+
},
|
|
106
|
+
"addonBefore": {
|
|
107
|
+
"type": "ReactNode",
|
|
108
|
+
"description": "前置内容(图标或文字)"
|
|
109
|
+
},
|
|
110
|
+
"addonAfter": {
|
|
111
|
+
"type": "ReactNode",
|
|
112
|
+
"description": "后置内容(图标或文字)"
|
|
113
|
+
},
|
|
114
|
+
"autoComplete": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"description": "浏览器自动填充控制。React 使用 camelCase 的 autoComplete(不是 autocomplete),对应 HTML autocomplete 属性。R5 §A1 升级:旧字段名 autocomplete 已废弃,必须使用 autoComplete。常用值:'off'=禁用自动填充;'on'=启用;'new-password'=禁用密码自动填充;'email'/'username' 等=按字段类型提示。❌ 错误:autocomplete='off'(旧写法,React 忽略);✅ 正确:autoComplete='off'"
|
|
117
|
+
},
|
|
118
|
+
"autoFocus": {
|
|
119
|
+
"type": "boolean",
|
|
120
|
+
"description": "自动获得焦点"
|
|
121
|
+
},
|
|
122
|
+
"name": {
|
|
123
|
+
"type": "string",
|
|
124
|
+
"description": "input name 属性,表单提交时使用"
|
|
125
|
+
},
|
|
126
|
+
"required": {
|
|
127
|
+
"type": "boolean",
|
|
128
|
+
"default": false,
|
|
129
|
+
"description": "是否必填(显示 * 标记)"
|
|
130
|
+
},
|
|
131
|
+
"labelMode": {
|
|
132
|
+
"type": "enum",
|
|
133
|
+
"values": ["outside", "inside"],
|
|
134
|
+
"default": "outside",
|
|
135
|
+
"description": "标题位置:outside(默认 · 标题在输入框上方)/ inside(标题作 floating label 嵌在输入框内,空态时与 placeholder 视觉位置重叠 · 聚焦或有值时上浮至框顶部 · 详见 api.ts 协议 H)"
|
|
136
|
+
},
|
|
137
|
+
"rightIcon": {
|
|
138
|
+
"type": "ReactNode",
|
|
139
|
+
"description": "输入框内部右侧图标。**与 onClickIcon 自动联动**(协议 F):点击此图标会触发 onClickIcon 回调,无需额外配置 showRightIcon=true"
|
|
140
|
+
},
|
|
141
|
+
"showRightIcon": {
|
|
142
|
+
"type": "boolean",
|
|
143
|
+
"default": true,
|
|
144
|
+
"description": "是否显示 rightIcon(默认 true · 仅在需要隐藏时传 false)"
|
|
145
|
+
},
|
|
146
|
+
"onClickIcon": {
|
|
147
|
+
"type": "function",
|
|
148
|
+
"signature": "(event: React.PointerEvent<HTMLSpanElement>) => void",
|
|
149
|
+
"description": "点击 rightIcon 区域回调。仅传 rightIcon 不传此 prop → 图标只装饰;两者配对使用语义清晰"
|
|
150
|
+
},
|
|
151
|
+
"onClear": {
|
|
152
|
+
"type": "function",
|
|
153
|
+
"signature": "() => void",
|
|
154
|
+
"description": "点击清空按钮回调(配合 allowClear=true 使用)。受控模式下 onClear 触发后**还会自动触发 onChange('')**;推荐 onClear 内显式 setKeyword('') 作为兜底"
|
|
155
|
+
},
|
|
156
|
+
"onEnter": {
|
|
157
|
+
"type": "function",
|
|
158
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
159
|
+
"description": "按下回车键回调(独立于 onKeydown · 仅在 keyCode 13 时触发,便于实现回车搜索)"
|
|
160
|
+
},
|
|
161
|
+
"fetchSuggestions": {
|
|
162
|
+
"type": "function",
|
|
163
|
+
"signature": "(val: string, cb: (data: any[]) => void) => void",
|
|
164
|
+
"description": "返回输入建议的方法(异步搜索 / 联想)。在 cb 回调中传入数据数组;数据元素可为对象(配 showSelectName 指定回填字段)或单值"
|
|
165
|
+
},
|
|
166
|
+
"renderSelectItem": {
|
|
167
|
+
"type": "function",
|
|
168
|
+
"signature": "(item: any) => ReactNode",
|
|
169
|
+
"description": "自定义下拉列表每项的渲染(例如显示 name + 部门组合)。**与 showSelectName 互不影响** — 此 prop 控制下拉显示,showSelectName 独立控制回填字段"
|
|
170
|
+
},
|
|
171
|
+
"showSelectName": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"default": "value",
|
|
174
|
+
"description": "选中下拉项后回填到输入框的字段名(默认取 item.value;若数据结构是 {name, ...} 则传 'name')。与 renderSelectItem 协同时:下拉显示由 renderSelectItem 自定义,回填字段由 showSelectName 独立控制"
|
|
175
|
+
},
|
|
176
|
+
"onSelect": {
|
|
177
|
+
"type": "function",
|
|
178
|
+
"signature": "(item: any) => void",
|
|
179
|
+
"description": "选择下拉项回调。item 类型即为 fetchSuggestions cb 传入的数据元素(业务自定义,需 cast)"
|
|
180
|
+
},
|
|
181
|
+
"hideErrorDom": {
|
|
182
|
+
"type": "boolean | null",
|
|
183
|
+
"default": false,
|
|
184
|
+
"description": "true=非错误态不渲染 helperText 占位行(节省垂直空间);false=都渲染(默认 · 保持表单各行高度一致);null=完全不渲染该 dom 节点"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"protocolSummary": {
|
|
188
|
+
"A_limitLength": "字符计数 + onBlur 失焦截断(**非实时阻断**),实时阻断改用 onChange slice",
|
|
189
|
+
"B_allowClear_addonAfter": "可共存 — allowClear 在框内右侧,addonAfter 在框外独立后缀盒,不重叠",
|
|
190
|
+
"C_rightSlot_order": "渲染顺序 allowClear → limitMemo → rightIcon(框内),addonAfter 在框外",
|
|
191
|
+
"D_multiline_eventType": "multiline=true 时 event.target 实际是 HTMLTextAreaElement(api 表声明 InputElement 是简化),业务 cast 即可 — 对 onChange/onKeyUp/onKeydown/onFocus/onBlur 五个事件一致适用",
|
|
192
|
+
"E_onClear_controlled": "受控 onClear 触发后会自动触发 onChange(''),推荐父层兜底 setState('')",
|
|
193
|
+
"F_rightIcon_onClickIcon": "传入 rightIcon 后点击自动触发 onClickIcon(无需 showRightIcon=true)",
|
|
194
|
+
"G_no_inputProps_passthrough": "**TextField 不支持 inputProps 透传** — 原生 HTML 属性(如 maxLength)需用组件显式 prop 或 onChange 控制",
|
|
195
|
+
"H_labelMode_inside": "inside 模式 = floating label:空态 label 在框中央 · 聚焦/有值时上浮至框顶 · 与 placeholder 空态视觉重叠"
|
|
196
|
+
},
|
|
197
|
+
"crossPropInteractions": [
|
|
198
|
+
"rightIcon + onClickIcon = 配对使用(自动联动)",
|
|
199
|
+
"allowClear + addonAfter = 完全可共存(框内 + 框外)",
|
|
200
|
+
"fetchSuggestions + renderSelectItem + showSelectName = 三件套协同(取数 + 自定义渲染 + 回填字段)",
|
|
201
|
+
"limitLength = 失焦截断 + 计数显示(实时阻断请用 onChange slice)",
|
|
202
|
+
"multiline=true + 所有 event = event.target 实际是 HTMLTextAreaElement(api 简化为 InputElement,需 cast 才能用 textarea 特性)"
|
|
203
|
+
],
|
|
204
|
+
"commonMisconceptions": [
|
|
205
|
+
"❌ inputProps={{ maxLength: N }} 透传 — 不支持,改用 onChange slice",
|
|
206
|
+
"❌ limitLength 会实时阻断键入 — 实际是 onBlur 截断",
|
|
207
|
+
"❌ allowClear 与 addonAfter 不能共存 — 完全可以共存",
|
|
208
|
+
"❌ rightIcon 需要 showRightIcon=true 才显示 — 默认即 true",
|
|
209
|
+
"❌ labelMode='inside' 时同时传 label 和 placeholder — 空态视觉重叠,推荐二选一"
|
|
210
|
+
],
|
|
211
|
+
"do": [
|
|
212
|
+
"使用 label 清晰描述输入内容",
|
|
213
|
+
"输入错误时提供 clear 的 helperText 提示",
|
|
214
|
+
"密码输入框应使用 type='password'",
|
|
215
|
+
"multiline=true 时 event.target 实际是 HTMLTextAreaElement,需要 cast:`(e.target as HTMLTextAreaElement).value`",
|
|
216
|
+
"受控模式下 onClear 触发后还会自动触发 onChange(''),推荐在 onClear 中显式 setState('') 兜底"
|
|
217
|
+
],
|
|
218
|
+
"dont": [
|
|
219
|
+
"在没有 label 的情况下仅依赖 placeholder",
|
|
220
|
+
"在单行输入框中输入过长内容(应切换 multiline)",
|
|
221
|
+
"不要用 inputProps={{ maxLength: N }} 透传 HTML 属性——TextField 不支持 inputProps 透传,实时字数限制用 onChange slice",
|
|
222
|
+
"不要期望 limitLength 实时阻断键入——limitLength 是 onBlur 失焦后截断,输入阶段不拦截"
|
|
223
|
+
],
|
|
224
|
+
"events": {
|
|
225
|
+
"onChange": {
|
|
226
|
+
"signature": "(event: React.ChangeEvent<HTMLInputElement>) => void",
|
|
227
|
+
"asyncSupported": false,
|
|
228
|
+
"examples": [
|
|
229
|
+
"受控模式:onChange={(e) => setValue(e.target.value)}——从 event.target.value 取新值",
|
|
230
|
+
"multiline=true 时 event.target 实际是 HTMLTextAreaElement,需 cast:`(e.target as HTMLTextAreaElement).value`",
|
|
231
|
+
"与 limitLength 配合实时截断:onChange={(e) => setValue(e.target.value.slice(0, MAX_LEN))}"
|
|
232
|
+
],
|
|
233
|
+
"commonMistakes": [
|
|
234
|
+
"假设 onChange 接收 value 字符串而非 React.ChangeEvent——与 antd Input 不同,这里签名是 event 对象,需 e.target.value 取值",
|
|
235
|
+
"multiline=true 时对 event.target 用 HTMLInputElement 方法(如 .selectionStart)——此时 event.target 是 HTMLTextAreaElement(src 实证:onChange 内部 cast 为 React.FocusEvent<HTMLInputElement>,但实际 target 是 textarea)",
|
|
236
|
+
"在 limitLength 场景只监听 onChange 而不处理 onBlur——limitLength 截断发生在 onBlur,onChange 阶段不截断",
|
|
237
|
+
"假设 onClear 点击后不触发 onChange——受控模式下点清空会先触发 onClear 再触发 onChange('')(src/TextField/index.tsx clickClean 函数实证)"
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
"onEnter": {
|
|
241
|
+
"signature": "(event: React.KeyboardEvent<HTMLInputElement>) => void",
|
|
242
|
+
"asyncSupported": false,
|
|
243
|
+
"examples": [
|
|
244
|
+
"按 Enter 键触发搜索:onEnter={(e) => handleSearch(e.currentTarget.value)}",
|
|
245
|
+
"回车提交表单:onEnter={() => formRef.current.check?.()}"
|
|
246
|
+
],
|
|
247
|
+
"commonMistakes": [
|
|
248
|
+
"与 onKeydown 混淆——onEnter 只在 keyCode===13 时触发,相当于 onKeydown 的 Enter 子集;如需监听所有键,用 onKeydown",
|
|
249
|
+
"multiline=true 时期望 onEnter 换行——onEnter 总是触发,需业务侧自行判断是否阻止换行(e.preventDefault())"
|
|
250
|
+
]
|
|
251
|
+
},
|
|
252
|
+
"onBlur": {
|
|
253
|
+
"signature": "(event: React.FocusEvent<HTMLInputElement>) => void",
|
|
254
|
+
"asyncSupported": false,
|
|
255
|
+
"examples": [
|
|
256
|
+
"失焦校验:onBlur={() => validate(value)}",
|
|
257
|
+
"limitLength 截断时机:onBlur 后组件自动截断并触发 onChange(src 实证 handValueLimit)"
|
|
258
|
+
],
|
|
259
|
+
"commonMistakes": [
|
|
260
|
+
"在 onBlur 里读 e.target.value 期望得到截断后的值——onBlur 触发时截断还没完成,截断结果通过后续 onChange 回来"
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
"typescriptPitfalls": [
|
|
265
|
+
{
|
|
266
|
+
"issue": "onChange 签名是 React.ChangeEvent<HTMLInputElement> 而非 (value: string),直接传 setter 会报类型错误",
|
|
267
|
+
"wrong": "onChange={setValue} // setValue: (v: string) => void,签名不匹配",
|
|
268
|
+
"right": "onChange={(e) => setValue(e.target.value)}"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"issue": "multiline=true 时 event.target 实际是 HTMLTextAreaElement,但 Props 声明为 HTMLInputElement",
|
|
272
|
+
"wrong": "onChange={(e) => { const len = e.target.selectionStart; }} // selectionStart 在 multiline 时类型检查通过,但 cast 可能出错",
|
|
273
|
+
"right": "onChange={(e) => { if (multiline) { const ta = e.target as unknown as HTMLTextAreaElement; } else { const inp = e.target as HTMLInputElement; } }}"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"issue": "onKeydown(小写 d)不是 onKeyDown(驼峰 D),React 标准事件名不同",
|
|
277
|
+
"wrong": "onKeyDown={handleKey} // React 标准 prop,TextField 不接受——组件封装的 prop 是 onKeydown",
|
|
278
|
+
"right": "onKeydown={handleKey} // src/TextField/index.tsx TextFieldProps 接口定义的 prop 名是 onKeydown(小写 d)"
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"issue": "autoComplete 必须驼峰(不是 autocomplete),否则 React 忽略",
|
|
282
|
+
"wrong": "autocomplete='off' // HTML 属性小写写法,React 会警告并忽略",
|
|
283
|
+
"right": "autoComplete='off' // src/TextField/index.tsx 实证:prop 名为 autoComplete(驼峰)"
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
"mapping": {
|
|
287
|
+
"realComponent": "TextField",
|
|
288
|
+
"adapter": null
|
|
289
|
+
}
|
|
290
|
+
}
|
package/es/TextField/index.d.ts
CHANGED
|
@@ -91,8 +91,8 @@ export interface TextFieldProps extends HelperTextDetailProps {
|
|
|
91
91
|
onSelect?: (item: Record<string, unknown>) => void;
|
|
92
92
|
/** name */
|
|
93
93
|
name?: string;
|
|
94
|
-
/** autocomplete */
|
|
95
|
-
|
|
94
|
+
/** 浏览器自动填充控制;React 要求 camelCase,对应 HTML autocomplete 属性 */
|
|
95
|
+
autoComplete?: string;
|
|
96
96
|
}
|
|
97
97
|
export declare const TextField: FunctionComponent<TextFieldProps>;
|
|
98
98
|
export default TextField;
|