@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,227 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Tabs",
|
|
3
|
+
"category": "Navigation",
|
|
4
|
+
"description": "选项卡切换组件。**所有 mode 都渲染 data[].content**(src/Tabs/index.tsx:220 把 content 渲染到 TabPane 内部)——不存在『line/track 只渲染 tab 头』的差异,请放心把面板体放进 data[].content。",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"内容切换",
|
|
8
|
+
"视图分组",
|
|
9
|
+
"平级导航"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"详情页多维度展示",
|
|
13
|
+
"配置面板",
|
|
14
|
+
"同级功能切换"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "normal"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"line": {
|
|
20
|
+
"meaning": "线条型 (默认) — 底部下划线指示当前激活"
|
|
21
|
+
},
|
|
22
|
+
"card": {
|
|
23
|
+
"meaning": "卡片型 — tab 头本身像独立卡片"
|
|
24
|
+
},
|
|
25
|
+
"editable-card": {
|
|
26
|
+
"meaning": "可编辑卡片型 — 自带新增 + 关闭按钮,与 editable=true 配套"
|
|
27
|
+
},
|
|
28
|
+
"track": {
|
|
29
|
+
"meaning": "轨道滑块型 — segmented control 风格"
|
|
30
|
+
},
|
|
31
|
+
"card-container": {
|
|
32
|
+
"meaning": "页签容器 — 整个面板被卡片包裹"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"states": [
|
|
36
|
+
"active",
|
|
37
|
+
"disabled"
|
|
38
|
+
],
|
|
39
|
+
"idealProps": {
|
|
40
|
+
"data": {
|
|
41
|
+
"type": "TabProps<K>[]",
|
|
42
|
+
"itemSchema": {
|
|
43
|
+
"label": { "type": "ReactNode", "required": true, "description": "tab 头文案" },
|
|
44
|
+
"content": { "type": "ReactNode", "description": "面板内容,所有 mode 都渲染" },
|
|
45
|
+
"value": { "type": "K extends React.Key", "required": true, "description": "唯一标识,与 Tabs value/onChange 对应" },
|
|
46
|
+
"disabled": { "type": "boolean", "description": "是否禁用该 tab" },
|
|
47
|
+
"closable": { "type": "boolean", "description": "是否显示关闭按钮(editable 模式)" },
|
|
48
|
+
"disabledTooltip": { "type": "TooltipProps", "description": "hover 禁用 tab 时显示的 tooltip 配置" },
|
|
49
|
+
"showHelp": { "type": "boolean", "description": "是否显示帮助图标" },
|
|
50
|
+
"helpProps": { "type": "HelpProps", "description": "帮助图标配置" }
|
|
51
|
+
},
|
|
52
|
+
"description": "标签页配置数组。**每项 TabProps 完整字段**:label(tab 头文案)/ content(**面板内容,所有 mode 都渲染**)/ value(唯一 key,类型 K)/ disabled / closable / disabledTooltip(TooltipProps,hover 禁用 tab 时显示)/ showHelp / helpProps。content 不要外部用 `{activeKey === 'x' && <Body />}` 二次条件渲染——直接放在 data[].content 里"
|
|
53
|
+
},
|
|
54
|
+
"value": {
|
|
55
|
+
"type": "K extends React.Key",
|
|
56
|
+
"description": "当前激活的 tab value(受控)。Tabs 是泛型组件 `Tabs<K>`:默认 K = string,需传 string value 时业务端可写 `<Tabs<string>>`;data[].value 与 value 同类型"
|
|
57
|
+
},
|
|
58
|
+
"mode": {
|
|
59
|
+
"type": "enum",
|
|
60
|
+
"values": [
|
|
61
|
+
"line",
|
|
62
|
+
"card",
|
|
63
|
+
"editable-card",
|
|
64
|
+
"track",
|
|
65
|
+
"card-container"
|
|
66
|
+
],
|
|
67
|
+
"default": "line",
|
|
68
|
+
"description": "外观模式 5 种取值(src/Tabs/index.tsx:19 TabsType);`type` prop 是 mode 的别名(src 优先 type ?? mode),二选一传"
|
|
69
|
+
},
|
|
70
|
+
"type": {
|
|
71
|
+
"type": "enum",
|
|
72
|
+
"values": [
|
|
73
|
+
"line",
|
|
74
|
+
"card",
|
|
75
|
+
"editable-card",
|
|
76
|
+
"track",
|
|
77
|
+
"card-container"
|
|
78
|
+
],
|
|
79
|
+
"description": "mode 的别名;与 mode 二选一即可"
|
|
80
|
+
},
|
|
81
|
+
"size": {
|
|
82
|
+
"type": "'small' | 'medium' | 'large'",
|
|
83
|
+
"values": ["small", "medium", "large"],
|
|
84
|
+
"description": "尺寸"
|
|
85
|
+
},
|
|
86
|
+
"onChange": {
|
|
87
|
+
"type": "function",
|
|
88
|
+
"signature": "(activeKey: K, item?: TabProps<K>) => void",
|
|
89
|
+
"description": "切换面板的回调。**真实 2 参(activeKey + item)**——首参名 activeKey 不是 value;不带 event 第三参(区别于 antd)。K 默认 string;通过 Tabs<K> 收紧"
|
|
90
|
+
},
|
|
91
|
+
"onEdit": {
|
|
92
|
+
"type": "function",
|
|
93
|
+
"signature": "(item: TabProps<K>, event?: React.MouseEvent | React.KeyboardEvent | string | React.Key, action?: 'add' | 'remove') => void",
|
|
94
|
+
"description": "新增/删除面板的回调(3 参:item / event / action)。配合 editable / showAdd / closable"
|
|
95
|
+
},
|
|
96
|
+
"onAdd": {
|
|
97
|
+
"type": "function",
|
|
98
|
+
"signature": "(event?: React.MouseEvent) => void",
|
|
99
|
+
"description": "新增按钮回调;showAdd 为 true 或 editable 模式下生效"
|
|
100
|
+
},
|
|
101
|
+
"centered": {
|
|
102
|
+
"type": "boolean",
|
|
103
|
+
"default": false,
|
|
104
|
+
"description": "标签居中展示"
|
|
105
|
+
},
|
|
106
|
+
"tabPosition": {
|
|
107
|
+
"type": "'top' | 'right' | 'bottom' | 'left'",
|
|
108
|
+
"values": ["top", "right", "bottom", "left"],
|
|
109
|
+
"default": "'top'",
|
|
110
|
+
"description": "页签位置"
|
|
111
|
+
},
|
|
112
|
+
"editable": {
|
|
113
|
+
"type": "boolean",
|
|
114
|
+
"default": false,
|
|
115
|
+
"description": "可编辑标签(关闭 + 新增);通常与 mode='editable-card' 搭配"
|
|
116
|
+
},
|
|
117
|
+
"showAdd": {
|
|
118
|
+
"type": "boolean",
|
|
119
|
+
"default": false,
|
|
120
|
+
"description": "显示新增按钮"
|
|
121
|
+
},
|
|
122
|
+
"hideAdd": {
|
|
123
|
+
"type": "boolean",
|
|
124
|
+
"default": false,
|
|
125
|
+
"description": "在 editable 模式下隐藏新增按钮"
|
|
126
|
+
},
|
|
127
|
+
"addIcon": {
|
|
128
|
+
"type": "ReactNode",
|
|
129
|
+
"description": "自定义新增按钮图标(替换默认 + 图标);showAdd 或 editable 时生效"
|
|
130
|
+
},
|
|
131
|
+
"radio": {
|
|
132
|
+
"type": "boolean",
|
|
133
|
+
"default": false,
|
|
134
|
+
"description": "在每个 tab 头前加 radio 单选框(与 onRadioChange 配套)"
|
|
135
|
+
},
|
|
136
|
+
"showPopConfirm": {
|
|
137
|
+
"type": "boolean",
|
|
138
|
+
"default": false,
|
|
139
|
+
"description": "切换/删除 tab 前弹出确认框(src/Tabs/index.tsx:56 实证)。⚠️ **`editable=true` 或 `mode='editable-card'` 时有效**(两者满足其一即可触发可编辑态,src:133 `inType === 'editable-card' || editable` 实证)。配合 `popConfirmProps` 自定义确认框内容"
|
|
140
|
+
},
|
|
141
|
+
"popConfirmProps": {
|
|
142
|
+
"type": "PopConfirmProps",
|
|
143
|
+
"description": "控制切换确认弹窗的内容(src/Tabs/index.tsx:58 实证,类型 PopConfirmProps)。在 `showPopConfirm=true` 时生效,可配置 title / description / okText / cancelText 等 PopConfirm 支持的所有属性"
|
|
144
|
+
},
|
|
145
|
+
"onRadioChange": {
|
|
146
|
+
"type": "function",
|
|
147
|
+
"signature": "(radioValue: K) => void",
|
|
148
|
+
"description": "radio 单选框模式下切换选中项的回调(src/Tabs/index.tsx:72 实证签名)。⚠️ **需配合 `mode='card-container'` + `radio=true`**——Radio 组件仅在 card-container 模式下渲染(src:178 实证),其他 mode 下设置 radio=true 无效。K 类型与 Tabs<K> 泛型一致(默认 string)。**与 `onChange` 区分**:onChange 是 tab 切换回调,onRadioChange 是独立的 radio 选中回调"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"do": [
|
|
152
|
+
"把面板内容放在 data[].content——所有 mode 都会渲染 content,不要外部条件渲染",
|
|
153
|
+
"卡片型外观请直接传 mode='card'(不要退而求其次选 mode='card-container'——后者是『整个面板卡片包裹』,不是『tab 头卡片』)",
|
|
154
|
+
"可编辑标签使用 mode='editable-card' + editable={true};自定义新增图标用 addIcon prop",
|
|
155
|
+
"禁用 tab 的 hover 提示用 TabProps.disabledTooltip(不要给 label 包 <span title>)",
|
|
156
|
+
"受控用 value + onChange;onChange 第一参数是 activeKey,第二参数是 item,无 event 参数"
|
|
157
|
+
],
|
|
158
|
+
"dont": [
|
|
159
|
+
"在 TabPane 中渲染过重的非首屏内容(应利用懒加载机制)",
|
|
160
|
+
"频繁切换 Tabs mode 导致布局抖动",
|
|
161
|
+
"不要假设『mode='line' 不渲染 content』——所有 mode 都渲染(src 实证)",
|
|
162
|
+
"不要按 antd 习惯传 onChange={(value, tabData, event) => ...}——本组件 2 参 (activeKey, item)",
|
|
163
|
+
"不要按 antd 习惯传 columns/items prop——本组件用 data;不要传 children TabPane——本组件用 data[].content"
|
|
164
|
+
],
|
|
165
|
+
"events": {
|
|
166
|
+
"onChange": {
|
|
167
|
+
"signature": "(activeKey: K, item?: TabProps<K>) => void",
|
|
168
|
+
"asyncSupported": false,
|
|
169
|
+
"examples": [
|
|
170
|
+
"切换 tab:onChange={(key) => setActiveTab(key)}",
|
|
171
|
+
"利用第二参取 tab 数据:onChange={(key, item) => setTitle(item?.label)}",
|
|
172
|
+
"K 泛型约束:<Tabs<'home'|'profile'> onChange={(key) => ...} />,key 类型被收紧"
|
|
173
|
+
],
|
|
174
|
+
"commonMistakes": [
|
|
175
|
+
"按 antd 习惯传 onChange={(value, tabData, event) => ...}——本组件仅 2 参 (activeKey, item),无 event 第三参",
|
|
176
|
+
"误以为首参名是 value——首参名是 activeKey(来自 rc-tabs 层),不是 value",
|
|
177
|
+
"忘记第二参 item 是可选的(data 为空或切换到非 data 渲染的 key 时 item 可能 undefined)"
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
"onEdit": {
|
|
181
|
+
"signature": "(item: TabProps<K>, event?: React.MouseEvent | React.KeyboardEvent | string | React.Key, action?: 'add' | 'remove') => void",
|
|
182
|
+
"asyncSupported": false,
|
|
183
|
+
"examples": [
|
|
184
|
+
"新增:action='add', item 是空对象 {}",
|
|
185
|
+
"删除:action='remove', item 是被关闭的 TabProps<K> 项(包含 value/label 等字段)",
|
|
186
|
+
"删除实现:onEdit={(item, _, action) => action === 'remove' && setTabs(tabs.filter(t => t.value !== item.value))}"
|
|
187
|
+
],
|
|
188
|
+
"commonMistakes": [
|
|
189
|
+
"新增分支期望 item.value 有值——add 时 item 是空对象 {},新 key 需业务侧生成",
|
|
190
|
+
"onEdit 在 editable=false + mode!='editable-card' 时传了但不触发——需满足 editable=true 或 mode='editable-card'"
|
|
191
|
+
]
|
|
192
|
+
},
|
|
193
|
+
"onRadioChange": {
|
|
194
|
+
"signature": "(radioValue: K) => void",
|
|
195
|
+
"asyncSupported": false,
|
|
196
|
+
"examples": [
|
|
197
|
+
"card-container 模式 + radio=true 时,每个 tab 头前有 Radio,点击 radio 触发此回调",
|
|
198
|
+
"onRadioChange={(val) => setSelected(val)}"
|
|
199
|
+
],
|
|
200
|
+
"commonMistakes": [
|
|
201
|
+
"不是 card-container + radio=true 模式时传了 onRadioChange——Radio 不渲染,回调永不触发",
|
|
202
|
+
"与 onChange 混淆——onChange 是 tab 激活切换,onRadioChange 是独立的 radio 选中"
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"typescriptPitfalls": [
|
|
207
|
+
{
|
|
208
|
+
"issue": "onChange 首参名是 activeKey 不是 value,直接解构 value 时 TS 不报错但语义不清",
|
|
209
|
+
"wrong": "onChange={(value) => setTab(value)} // 运行正确但命名误导",
|
|
210
|
+
"right": "onChange={(activeKey) => setTab(activeKey)} // 参数名与签名一致"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"issue": "data 是 TabProps<K>[] 而不是 RcTabsProps.items,两者不可直接互用",
|
|
214
|
+
"wrong": "// 从 antd 迁移时直接传 items={tabs}——para-ui Tabs 用 data prop 不是 items",
|
|
215
|
+
"right": "data={tabs} // TabProps 数组:[{ value: 'home', label: '首页', content: <Home /> }]"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"issue": "tabPosition prop 在 Omit<RcTabsProps, 'onChange'> 中保留,但 SCSS 可能不支持所有方向",
|
|
219
|
+
"wrong": "// 传 tabPosition='left' 期望左侧竖排 tab——需确认当前主题 SCSS 是否实现了 left 方向",
|
|
220
|
+
"right": "// 水平 top 位置已完整实现;非 top 方向使用前需自测 SCSS 效果"
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"mapping": {
|
|
224
|
+
"realComponent": "Tabs",
|
|
225
|
+
"adapter": null
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Tag",
|
|
3
|
+
"category": "Data Display",
|
|
4
|
+
"description": "进行标记和分类的小标签,支持 4 种预设色 + 自定义色、描边/实色、closable 可关闭、editable 内置编辑模式、visible 显隐控制",
|
|
5
|
+
"semantic": {
|
|
6
|
+
"intent": [
|
|
7
|
+
"分类",
|
|
8
|
+
"标记",
|
|
9
|
+
"选择"
|
|
10
|
+
],
|
|
11
|
+
"useCases": [
|
|
12
|
+
"文章标签",
|
|
13
|
+
"状态展示",
|
|
14
|
+
"筛选条件"
|
|
15
|
+
],
|
|
16
|
+
"riskLevel": "low"
|
|
17
|
+
},
|
|
18
|
+
"variants": {
|
|
19
|
+
"normal": {
|
|
20
|
+
"meaning": "普通标签"
|
|
21
|
+
},
|
|
22
|
+
"outline": {
|
|
23
|
+
"meaning": "描边标签"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"states": [
|
|
27
|
+
"default",
|
|
28
|
+
"closable",
|
|
29
|
+
"visible",
|
|
30
|
+
"editable"
|
|
31
|
+
],
|
|
32
|
+
"idealProps": {
|
|
33
|
+
"children": {
|
|
34
|
+
"type": "ReactNode",
|
|
35
|
+
"description": "**标签文案**(src 通过 PropsWithChildren 接收,与 props 分开)。直接作为 children 传入:`<Tag>已激活</Tag>`。**editable 模式下**:当 children 是 string 时会作为内嵌 input 的初始值(src/Tag/index.tsx:118-122 实证)"
|
|
36
|
+
},
|
|
37
|
+
"color": {
|
|
38
|
+
"type": "'blue' | 'green' | 'yellow' | 'red' | string",
|
|
39
|
+
"description": "标签颜色。**预设色(4 个)**:blue / green / yellow / red——会命中专门 CSS 类生成完整配色方案。**非预设值**(如 'gray' / hex / rgb())走 tinycolor 解析,渲染为带 0.1 alpha 的对应色背景 + 原色文字(无 hover/active 等专门 CSS)。**状态色推荐语义**(业界常见映射):green=success/激活、yellow=warning/待处理、red=error/危险、blue=info/默认;灰色场景建议传 hex '#808080' 或 '#999'。需求方若需要灰色等常用色,可以提议加入预设清单(src 改 PresetColors + 加专门样式)",
|
|
40
|
+
"_presetNote": "DEFECT 反查:src/Tag/index.tsx:67 PresetColors = ['blue','green','yellow','red'];非预设走 tinycolor 通用渲染但视觉效果有差异——不是 bug 是设计取舍"
|
|
41
|
+
},
|
|
42
|
+
"type": {
|
|
43
|
+
"type": "enum",
|
|
44
|
+
"values": [
|
|
45
|
+
"normal",
|
|
46
|
+
"outline"
|
|
47
|
+
],
|
|
48
|
+
"default": "normal",
|
|
49
|
+
"description": "标签类型——normal 实色填充,outline 描边版(color 仍生效,但作为边框色 + 文字色,背景透明)"
|
|
50
|
+
},
|
|
51
|
+
"size": {
|
|
52
|
+
"type": "enum",
|
|
53
|
+
"values": [
|
|
54
|
+
"small",
|
|
55
|
+
"medium",
|
|
56
|
+
"large"
|
|
57
|
+
],
|
|
58
|
+
"default": "small",
|
|
59
|
+
"description": "标签大小。三档统一为 small / medium / large(2026-05-08 跨组件命名 epic §3.1 选项 B 实施,medium 为新增视觉档,默认 small 不变,既有 small/large 调用零回归)"
|
|
60
|
+
},
|
|
61
|
+
"closable": {
|
|
62
|
+
"type": "boolean",
|
|
63
|
+
"default": false,
|
|
64
|
+
"description": "是否可关闭——开启后右侧自动渲染 ✕ 图标;自定义关闭图标传 closeIcon prop。**半受控行为**(src/Tag/index.tsx:175-178 实证):未传 visible prop 时点击 ✕ 自动 setVisible(false) 内部隐藏;传了 visible 后由父组件控制(点击 ✕ 仅触发 onClose 不自动隐藏)"
|
|
65
|
+
},
|
|
66
|
+
"onClose": {
|
|
67
|
+
"type": "function",
|
|
68
|
+
"signature": "(event: React.MouseEvent) => void",
|
|
69
|
+
"description": "关闭按钮点击回调(**完整签名带 React MouseEvent 参数**,src/Tag/index.tsx:36 实证)。**事件**:内部已 stopPropagation;如需阻止默认隐藏(visible 未受控场景),调用 event.preventDefault() 即可——src 检查 e.defaultPrevented 后跳过 setVisible(false)"
|
|
70
|
+
},
|
|
71
|
+
"closeIcon": {
|
|
72
|
+
"type": "ReactNode",
|
|
73
|
+
"description": "自定义关闭图标节点(替代默认 CloseIcon),仅在 closable=true 时渲染"
|
|
74
|
+
},
|
|
75
|
+
"visible": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"default": true,
|
|
78
|
+
"description": "是否显示标签。**受控**:传入后 Tag 显隐完全跟随 visible(onClose 后不会自动隐藏,由父组件 setState 控制)。**非受控**:不传时 onClose 后 src 内部 setVisible(false) 自动隐藏。如需完全不挂载 DOM,在父组件做条件渲染 `{isShown && <Tag />}` 而非依赖 visible prop(visible=false 时 DOM 仍渲染只是 CSS 隐藏)"
|
|
79
|
+
},
|
|
80
|
+
"icon": {
|
|
81
|
+
"type": "ReactNode",
|
|
82
|
+
"description": "**前置图标**(src/Tag/index.tsx:231-254 实证 icon 渲染在文案左侧;与 closeIcon 在右侧不同)。editable=true 时此 prop 被忽略(前缀位置改渲染 EditIcon)"
|
|
83
|
+
},
|
|
84
|
+
"editable": {
|
|
85
|
+
"type": "boolean",
|
|
86
|
+
"default": false,
|
|
87
|
+
"description": "**Tag 内置可编辑模式**——传 editable={true} 后,Tag 在前缀位置自动渲染编辑图标(EditIcon),点击图标会切换为内嵌 input;按 Enter 或失焦提交。**回调通过 tagChange prop 触发**:`tagChange?: (value: string) => void`。**初值来源**:children 为 string 时作为 input 初始值;不是 string 时初值为空字符串。无需手写原生 input。editable 模式下 children 仅作为编辑态进入时的 initialValue;父组件后续更新 children **不会刷新已激活 input**;父组件需通过 tagChange 回调维护 state"
|
|
88
|
+
},
|
|
89
|
+
"tagChange": {
|
|
90
|
+
"type": "function",
|
|
91
|
+
"signature": "(value: string) => void",
|
|
92
|
+
"description": "**editable=true 模式下 input 值变化的回调**(src/Tag/index.tsx:259 实证:每次 onChange 触发 = 实时键入回调,**不是 onBlur/Enter 才触发**)。提交动作仅控制是否退出编辑态,与 tagChange 触发频率无关"
|
|
93
|
+
},
|
|
94
|
+
"editInputClassName": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"description": "editable 模式下内嵌 input 的类名"
|
|
97
|
+
},
|
|
98
|
+
"editInputWidth": {
|
|
99
|
+
"type": "number",
|
|
100
|
+
"description": "editable 模式下内嵌 input 的宽度(默认根据内容自适应)"
|
|
101
|
+
},
|
|
102
|
+
"maxWidth": {
|
|
103
|
+
"type": "number | string",
|
|
104
|
+
"description": "标签最大宽度。超出时配合 AutoTips 显示 tooltip(不截断)"
|
|
105
|
+
},
|
|
106
|
+
"tipMaxWidth": {
|
|
107
|
+
"type": "number | string",
|
|
108
|
+
"description": "AutoTips tooltip 的最大宽度(src/Tag/index.tsx:56,310 实证:透传给 AutoTips 的 tipMaxWidth prop,控制文案截断时 tooltip 浮层宽度)"
|
|
109
|
+
},
|
|
110
|
+
"onEdit": {
|
|
111
|
+
"type": "function",
|
|
112
|
+
"signature": "(event: React.MouseEvent) => void",
|
|
113
|
+
"description": "编辑图标点击回调(src/Tag/index.tsx:38,198 实证:editable=true 时点击前缀 EditIcon 触发,可通过 event.preventDefault() 阻止切换为 input 编辑状态)"
|
|
114
|
+
},
|
|
115
|
+
"getWidth": {
|
|
116
|
+
"type": "function",
|
|
117
|
+
"signature": "(width: number) => void",
|
|
118
|
+
"description": "获取标签宽度回调(src/Tag/index.tsx:40,115 实证:挂载及 inputVisible 变化后通过 useEffect 将 tagRef 的 offsetWidth 传出)"
|
|
119
|
+
},
|
|
120
|
+
"marginBottom": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"description": "标签下边距(src/Tag/index.tsx:58,136 实证:inline style 直接透传,用于 TagGroup 等批量排列场景控制行间距)"
|
|
123
|
+
},
|
|
124
|
+
"marginRight": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "标签右边距(src/Tag/index.tsx:60,137 实证:inline style 直接透传,用于 TagGroup 等批量排列场景控制列间距)"
|
|
127
|
+
},
|
|
128
|
+
"className": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"description": "自定义类名(src/Tag/index.tsx:48 interface 声明,透传到根 span 元素)"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"do": [
|
|
134
|
+
"使用颜色区分不同类型的标签——状态徽章推荐:green=激活/成功、yellow=警告/待处理、red=错误/危险、blue=信息/默认、灰色用 hex '#808080'",
|
|
135
|
+
"使用 closable 实现标签的删除交互(visible 受控时父组件 setState 移除;非受控时 src 内部自动隐藏)",
|
|
136
|
+
"需要可编辑标签时直接传 editable={true} + tagChange 回调——Tag 内置 EditIcon + input 渲染逻辑,**不需要在 children 内手写原生 <input>**;children 为 string 时作为 input 初始值",
|
|
137
|
+
"**跨组件引用 Tag 表达状态色**:在 Table render / Form 选项渲染等场景,用 `<Tag color='green'>已激活</Tag>` 而非 inline style 兜底——预设 4 色已覆盖大多数状态语义"
|
|
138
|
+
],
|
|
139
|
+
"dont": [
|
|
140
|
+
"在 Tag 中放置过长的文本",
|
|
141
|
+
"滥用 Tag 作为按钮使用",
|
|
142
|
+
"**不要在 editable 模式同时传 icon**——editable=true 时前缀位置改渲染 EditIcon,icon prop 被忽略;如需图标 + 编辑混用,需自实现",
|
|
143
|
+
"不要假设非预设色(hex / rgb / 'gray')有完整 hover/active CSS——非预设走 tinycolor 0.1 alpha 渲染,无专门样式"
|
|
144
|
+
],
|
|
145
|
+
"events": {
|
|
146
|
+
"onClose": {
|
|
147
|
+
"signature": "(event: React.MouseEvent) => void",
|
|
148
|
+
"asyncSupported": false,
|
|
149
|
+
"examples": [
|
|
150
|
+
"受控关闭:onClose={(e) => setVisible(false)}",
|
|
151
|
+
"阻止默认隐藏(非受控场景):onClose={(e) => { e.preventDefault(); /* 自定义逻辑 */ }}",
|
|
152
|
+
"受控模式父组件删除标签:onClose={() => setTags(prev => prev.filter(t => t.id !== id))}"
|
|
153
|
+
],
|
|
154
|
+
"commonMistakes": [
|
|
155
|
+
"不传 visible prop 时期望 onClose 后标签仍显示——未传 visible 时 Tag 内部自动 setVisible(false);要阻止需调 e.preventDefault()",
|
|
156
|
+
"假设 onClose 只在显式关闭时触发——Tag 本体 stopPropagation,但父元素 onClick 不受影响",
|
|
157
|
+
"忘记在受控模式(传了 visible)中通过 onClose 更新父 state——Tag 不会自动隐藏,需父组件响应 onClose 更新 visible"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"onEdit": {
|
|
161
|
+
"signature": "(event: React.MouseEvent) => void",
|
|
162
|
+
"asyncSupported": false,
|
|
163
|
+
"examples": [
|
|
164
|
+
"监听编辑图标点击:onEdit={(e) => console.log('edit clicked')}",
|
|
165
|
+
"阻止进入内置编辑态:onEdit={(e) => { e.preventDefault(); openCustomEditModal(); }}"
|
|
166
|
+
],
|
|
167
|
+
"commonMistakes": [
|
|
168
|
+
"期望 onEdit 是编辑完成后的回调——onEdit 是点击编辑图标时触发;编辑完成回调是 tagChange",
|
|
169
|
+
"同时传 onEdit 和 editable 却期望自定义完全替代内置 input——onEdit 调 e.preventDefault() 才能阻止切换 input"
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
"tagChange": {
|
|
173
|
+
"signature": "(value: string) => void",
|
|
174
|
+
"asyncSupported": false,
|
|
175
|
+
"examples": [
|
|
176
|
+
"实时同步编辑值:tagChange={(v) => setTagValue(v)}",
|
|
177
|
+
"受控:在 tagChange 中更新父组件 state,children 随之变化(editable 模式下 children 是初始值)"
|
|
178
|
+
],
|
|
179
|
+
"commonMistakes": [
|
|
180
|
+
"假设 tagChange 是 onBlur/Enter 确认后触发——实际是实时 onChange(每次键入都触发)",
|
|
181
|
+
"不传 tagChange 期望 Tag 自己保存编辑值——编辑完成后父组件 children 不更新则下次进入编辑态仍是旧初始值"
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
"getWidth": {
|
|
185
|
+
"signature": "(width: number) => void",
|
|
186
|
+
"asyncSupported": false,
|
|
187
|
+
"examples": [
|
|
188
|
+
"获取标签实际渲染宽度:getWidth={(w) => setTagWidth(w)}"
|
|
189
|
+
],
|
|
190
|
+
"commonMistakes": [
|
|
191
|
+
"期望 getWidth 实时响应容器宽度变化——实际只在挂载时和 inputVisible 变化时触发(不是 ResizeObserver)"
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"typescriptPitfalls": [
|
|
196
|
+
{
|
|
197
|
+
"issue": "TagProps extends React.HTMLAttributes<HTMLSpanElement>,onClick 等原生事件直接透传,不需要单独声明",
|
|
198
|
+
"wrong": "// 以为 Tag 没有 onClick,外层包一个 div:<div onClick={handleClick}><Tag>文本</Tag></div>",
|
|
199
|
+
"right": "<Tag onClick={handleClick}>文本</Tag> // HTMLAttributes 的所有事件都可直接传"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"issue": "editable 模式下 children 只作为编辑态初始值,不是受控值——父组件更新 children 不刷新已激活 input",
|
|
203
|
+
"wrong": "// 期望 children 变化实时反映到编辑 input 中\n<Tag editable tagChange={setVal}>{controlledValue}</Tag> // editInputVisible 激活后 children 更新不生效",
|
|
204
|
+
"right": "// 用 key 或在 tagChange 回调中维护 state:\nconst [val, setVal] = useState(initialValue);\n<Tag editable tagChange={setVal}>{val}</Tag> // 父组件维护 val,但注意切换编辑时仍取最新 children 作初始值"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"issue": "非预设色(hex/rgb/'gray' 等)走 tinycolor 渲染,TS 不报错但无完整 hover/active CSS",
|
|
208
|
+
"wrong": "color='gray' // TS 接受(string 类型),但没有专门 CSS,只有 tinycolor 0.1 alpha 背景",
|
|
209
|
+
"right": "// 预设色(有完整 CSS):color='blue' | 'green' | 'yellow' | 'red'\n// 非预设色自定义(通用渲染):color='#808080' // 接受但无专门 hover/active 样式"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"issue": "closable 半受控行为:未传 visible 时 onClose 自动隐藏;传了 visible 则需父组件主动响应 onClose",
|
|
213
|
+
"wrong": "// 传了 visible 但不响应 onClose:\n<Tag closable visible={isVisible} onClose={() => {}}>文本</Tag> // 点关闭后 Tag 不隐藏",
|
|
214
|
+
"right": "// 受控:onClose 更新父组件 state\n<Tag closable visible={isVisible} onClose={() => setIsVisible(false)}>文本</Tag>"
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"mapping": {
|
|
218
|
+
"realComponent": "Tag",
|
|
219
|
+
"adapter": null
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -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
|
+
}
|