@para-ui/core 5.0.0-beta.11 → 5.0.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +315 -0
- package/AlignBox/component.json +89 -0
- package/Anchor/component.json +130 -0
- package/Argv/component.json +216 -0
- package/AutoBox/component.json +133 -0
- package/AutoButton/component.json +109 -0
- package/AutoTips/component.json +121 -0
- package/Badge/component.json +92 -0
- package/Breadcrumbs/component.json +142 -0
- package/Button/component.json +168 -0
- package/ButtonGroup/component.json +132 -0
- package/Card/component.json +162 -0
- package/Carousel/component.json +142 -0
- package/Cascader/component.json +196 -0
- package/Checkbox/component.json +138 -0
- package/CheckboxGroup/component.json +152 -0
- package/CodeEditor/component.json +189 -0
- package/Collapse/component.json +166 -0
- package/CollapseBox/component.json +84 -0
- package/CollapseLayout/component.json +155 -0
- package/ColorPicker/component.json +142 -0
- package/ComboSelect/component.json +181 -0
- package/Container/component.json +111 -0
- package/ContentBox/component.json +81 -0
- package/CopyText/component.json +118 -0
- package/CycleSelector/component.json +98 -0
- package/DatePicker/component.json +192 -0
- package/Descriptions/component.json +142 -0
- package/Desktop/component.json +171 -0
- package/DragVerify/component.json +114 -0
- package/Drawer/component.json +200 -0
- package/Dropdown/component.json +147 -0
- package/DynamicMultiBox/component.json +278 -0
- package/Empty/component.json +123 -0
- package/FieldForm/component.json +196 -0
- package/Form/component.json +161 -0
- package/FormItem/component.json +171 -0
- package/FunctionModal/component.json +197 -0
- package/Help/component.json +118 -0
- package/HelperText/component.json +126 -0
- package/Image/component.json +165 -0
- package/InputCode/component.json +191 -0
- package/InputLang/component.json +205 -0
- package/InputNumber/component.json +162 -0
- package/Label/component.json +126 -0
- package/Loading/component.json +91 -0
- package/Menu/component.json +180 -0
- package/Message/component.json +246 -0
- package/Modal/component.json +277 -0
- package/MultiBox/component.json +216 -0
- package/Notification/component.json +184 -0
- package/OperateBtn/component.json +134 -0
- package/PageHeader/component.json +112 -0
- package/Pagination/component.json +181 -0
- package/PasswordRules/component.json +105 -0
- package/PopConfirm/component.json +227 -0
- package/PopMenu/component.json +131 -0
- package/Popover/component.json +165 -0
- package/Progress/component.json +161 -0
- package/Prompt/component.json +144 -0
- package/Querying/component.json +96 -0
- package/QuickReply/component.json +129 -0
- package/Radio/component.json +136 -0
- package/RadioGroup/component.json +149 -0
- package/RangeInput/component.json +198 -0
- package/Result/component.json +104 -0
- package/ScrollBar/component.json +115 -0
- package/Search/component.json +177 -0
- package/Select/component.json +244 -0
- package/SelectInput/component.json +184 -0
- package/Selector/component.json +203 -0
- package/SelectorPicker/component.json +179 -0
- package/SingleBox/component.json +151 -0
- package/Slider/component.json +181 -0
- package/SortBox/component.json +108 -0
- package/Status/component.json +104 -0
- package/Stepper/component.json +129 -0
- package/Switch/component.json +207 -0
- package/Table/component.json +547 -0
- package/Tabs/component.json +227 -0
- package/Tag/component.json +221 -0
- package/TextEditor/component.json +186 -0
- package/TextField/component.json +290 -0
- package/TimePicker/component.json +176 -0
- package/Timeline/component.json +110 -0
- package/Title/component.json +156 -0
- package/ToggleButton/component.json +153 -0
- package/Tooltip/component.json +176 -0
- package/Transfer/component.json +157 -0
- package/Tree/component.json +512 -0
- package/Upload/component.json +450 -0
- package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
- package/ai-workflows/02-rbac-operation-buttons.md +290 -0
- package/ai-workflows/03-complex-form-async-cascade.md +350 -0
- package/ai-workflows/04-array-field-form.md +281 -0
- package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
- package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
- package/ai-workflows/07-search-filter-table-trio.md +387 -0
- package/ai-workflows/08-table-advanced-features.md +365 -0
- package/ai-workflows/09-batch-operation-export-progress.md +367 -0
- package/ai-workflows/10-cross-component-state-coordination.md +412 -0
- package/es/AlignBox/component.json +89 -0
- package/es/AlignBox/index.css +1 -1
- package/es/AlignBox/index.d.ts +6 -2
- package/es/AlignBox/index.js +1 -1
- package/es/AlignBox/style/index.css +1 -1
- package/es/Anchor/anchorMenu/index.d.ts +2 -1
- package/es/Anchor/anchorMenu/index.js +36 -33
- package/es/Anchor/component.json +130 -0
- package/es/Anchor/index.js +52 -49
- package/es/Anchor/type.d.ts +8 -4
- package/es/Argv/component.json +216 -0
- package/es/Argv/dataGenerator/index.js +1 -1
- package/es/Argv/index.d.ts +5 -6
- package/es/Argv/index.js +1 -1
- package/es/AutoBox/component.json +133 -0
- package/es/AutoBox/index.d.ts +3 -3
- package/es/AutoBox/index.js +1 -1
- package/es/AutoBox/protal.d.ts +2 -2
- package/es/AutoBox/protal.js +33 -30
- package/es/AutoButton/component.json +109 -0
- package/es/AutoButton/index.js +1 -1
- package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
- package/es/AutoTips/autoTipsMultiline/index.js +1 -1
- package/es/AutoTips/component.json +121 -0
- package/es/AutoTips/index.js +1 -1
- package/es/Badge/component.json +92 -0
- package/es/Breadcrumbs/component.json +142 -0
- package/es/Breadcrumbs/index.js +1 -1
- package/es/Button/SplitButton.d.ts +2 -2
- package/es/Button/component.json +168 -0
- package/es/Button/index.js +44 -44
- package/es/ButtonGroup/component.json +132 -0
- package/es/ButtonGroup/index.d.ts +1 -1
- package/es/Card/component.json +162 -0
- package/es/Card/index.d.ts +2 -2
- package/es/Card/index.js +2 -2
- package/es/Carousel/component.json +142 -0
- package/es/Carousel/index.d.ts +1 -1
- package/es/Cascader/Cascader.js +1 -1
- package/es/Cascader/OptionList/Column.js +1 -1
- package/es/Cascader/OptionList/index.js +1 -1
- package/es/Cascader/component.json +196 -0
- package/es/Cascader/hooks/useEntities.js +7 -7
- package/es/Cascader/interface.d.ts +1 -0
- package/es/Cascader/utils/commonUtil.d.ts +1 -1
- package/es/Cascader/utils/commonUtil.js +16 -16
- package/es/Cascader/utils/treeUtil.d.ts +14 -5
- package/es/Cascader/utils/treeUtil.js +1 -1
- package/es/Checkbox/component.json +138 -0
- package/es/CheckboxGroup/component.json +152 -0
- package/es/CheckboxGroup/index.js +1 -1
- package/es/CodeEditor/component.json +189 -0
- package/es/CodeEditor/index.d.ts +11 -10
- package/es/CodeEditor/index.js +19 -19
- package/es/Collapse/component.json +166 -0
- package/es/Collapse/index.d.ts +1 -1
- package/es/Collapse/index.js +23 -22
- package/es/CollapseBox/component.json +84 -0
- package/es/CollapseLayout/component.json +155 -0
- package/es/ColorPicker/component.json +142 -0
- package/es/ComboSelect/component.json +181 -0
- package/es/ComboSelect/index.js +115 -109
- package/es/ComboSelect/interface.d.ts +2 -2
- package/es/ComboSelect/utils.d.ts +3 -3
- package/es/ComboSelect/utils.js +1 -1
- package/es/Container/component.json +111 -0
- package/es/ContentBox/component.json +81 -0
- package/es/CopyText/component.json +118 -0
- package/es/CycleSelector/component.json +98 -0
- package/es/CycleSelector/index.js +14 -13
- package/es/DatePicker/component.json +192 -0
- package/es/DatePicker/generatePicker/generateRangePicker.js +11 -11
- package/es/DatePicker/generatePicker/generateSinglePicker.js +2 -2
- package/es/Descriptions/component.json +142 -0
- package/es/Descriptions/index.d.ts +1 -1
- package/es/Desktop/component.json +171 -0
- package/es/Desktop/index.js +1 -1
- package/es/DragVerify/component.json +114 -0
- package/es/DragVerify/index.js +19 -19
- package/es/Drawer/component.json +200 -0
- package/es/Drawer/index.js +86 -86
- package/es/Drawer/interface.d.ts +1 -1
- package/es/Drawer/util.d.ts +1 -6
- package/es/Drawer/util.js +9 -6
- package/es/Dropdown/component.json +147 -0
- package/es/Dropdown/index.js +1 -1
- package/es/DynamicMultiBox/component.json +278 -0
- package/es/DynamicMultiBox/formItem.d.ts +1 -1
- package/es/DynamicMultiBox/index.js +1 -1
- package/es/DynamicMultiBox/rowForm.d.ts +2 -2
- package/es/Empty/component.json +123 -0
- package/es/Empty/index.css +1 -1
- package/es/Empty/index.d.ts +2 -2
- package/es/Empty/index.js +27 -26
- package/es/Empty/style/index.css +1 -1
- package/es/FieldForm/FieldFormItem/ItemHolder.js +1 -1
- package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/es/FieldForm/FieldFormItem/StatusProvider.js +1 -1
- package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/es/FieldForm/Form.d.ts +2 -2
- package/es/FieldForm/Form.js +1 -1
- package/es/FieldForm/FormItemInput.js +1 -1
- package/es/FieldForm/FormItemLabel.js +1 -1
- package/es/FieldForm/FormList.d.ts +2 -2
- package/es/FieldForm/component.json +196 -0
- package/es/FieldForm/context.d.ts +5 -1
- package/es/FieldForm/context.js +2 -2
- package/es/FieldForm/hooks/useForm.d.ts +4 -3
- package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
- package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
- package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
- package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
- package/es/FieldForm/hooks/useItemRef.js +6 -6
- package/es/Form/component.json +161 -0
- package/es/Form/index.d.ts +52 -49
- package/es/Form/index.js +1 -1
- package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
- package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
- package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
- package/es/FormItem/compoments/formFile/index.js +8 -8
- package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
- package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
- package/es/FormItem/component.json +171 -0
- package/es/FormItem/index.d.ts +5 -5
- package/es/FormItem/index.js +23 -23
- package/es/FormItem/itemType.js +1 -1
- package/es/FunctionModal/component.json +197 -0
- package/es/FunctionModal/dialog.d.ts +1 -1
- package/es/FunctionModal/modalContext.d.ts +4 -1
- package/es/GlobalContext/confirmLocale.js +1 -1
- package/es/GlobalContext/index.js +1 -1
- package/es/Help/component.json +118 -0
- package/es/HelperText/component.json +126 -0
- package/es/Image/PreviewGroup.js +1 -1
- package/es/Image/component.json +165 -0
- package/es/Image/index.js +1 -1
- package/es/InputCode/component.json +191 -0
- package/es/InputCode/index.d.ts +2 -2
- package/es/InputLang/component.json +205 -0
- package/es/InputLang/index.js +2 -2
- package/es/InputNumber/component.json +162 -0
- package/es/Label/component.json +126 -0
- package/es/Label/index.d.ts +2 -2
- package/es/Loading/component.json +91 -0
- package/es/Menu/component.json +180 -0
- package/es/Menu/verticalMenuList.js +1 -1
- package/es/Message/component.json +246 -0
- package/es/Message/index.d.ts +2 -2
- package/es/Message/index.js +2 -2
- package/es/Modal/Confirm/index.d.ts +1 -1
- package/es/Modal/Confirm/index.js +1 -1
- package/es/Modal/component.json +277 -0
- package/es/Modal/index.d.ts +85 -5
- package/es/Modal/index.js +159 -122
- package/es/Modal/interface.d.ts +1 -0
- package/es/MultiBox/component.json +216 -0
- package/es/MultiBox/index.js +19 -14
- package/es/Notification/component.json +184 -0
- package/es/OperateBtn/component.json +134 -0
- package/es/OperateBtn/index.d.ts +3 -3
- package/es/PageHeader/component.json +112 -0
- package/es/PageHeader/horizontalMeun.js +1 -1
- package/es/PageHeader/horizontalMeunRight.js +1 -1
- package/es/Pagination/component.json +181 -0
- package/es/Pagination/index.js +15 -15
- package/es/ParauiProvider/index.js +1 -1
- package/es/PasswordRules/component.json +105 -0
- package/es/PasswordRules/index.d.ts +4 -4
- package/es/PopConfirm/component.json +227 -0
- package/es/PopConfirm/index.d.ts +1 -1
- package/es/PopConfirm/index.js +1 -1
- package/es/PopMenu/component.json +131 -0
- package/es/PopMenu/hooks.d.ts +1 -1
- package/es/PopMenu/index.js +8 -8
- package/es/Popover/component.json +165 -0
- package/es/Popover/index.js +1 -1
- package/es/Progress/component.json +161 -0
- package/es/Prompt/component.json +144 -0
- package/es/Querying/component.json +96 -0
- package/es/Querying/index.css +1 -1
- package/es/Querying/index.d.ts +2 -2
- package/es/Querying/index.js +20 -19
- package/es/Querying/style/index.css +1 -1
- package/es/QuickReply/QuickReplyCode/index.js +1 -1
- package/es/QuickReply/component.json +129 -0
- package/es/QuickReply/index.d.ts +1 -1
- package/es/Radio/component.json +136 -0
- package/es/RadioGroup/component.json +149 -0
- package/es/RangeInput/component.json +198 -0
- package/es/RangeInput/index.js +20 -20
- package/es/Result/component.json +104 -0
- package/es/ScrollBar/component.json +115 -0
- package/es/Search/component.json +177 -0
- package/es/Search/index.d.ts +1 -1
- package/es/Select/component.json +244 -0
- package/es/Select/index.js +114 -114
- package/es/SelectInput/component.json +184 -0
- package/es/Selector/component.json +203 -0
- package/es/Selector/index.js +56 -50
- package/es/Selector/interface.d.ts +2 -2
- package/es/Selector/selectorData/index.js +1 -1
- package/es/Selector/selectorMain/index.js +3 -3
- package/es/Selector/selectorNode/index.js +1 -1
- package/es/Selector/util.d.ts +3 -3
- package/es/Selector/util.js +6 -12
- package/es/SelectorPicker/component.json +179 -0
- package/es/SelectorPicker/index.d.ts +5 -5
- package/es/SelectorPicker/index.js +15 -15
- package/es/SingleBox/component.json +151 -0
- package/es/SingleBox/index.d.ts +2 -2
- package/es/Slider/component.json +181 -0
- package/es/SortBox/component.json +108 -0
- package/es/Status/component.json +104 -0
- package/es/Stepper/component.json +129 -0
- package/es/Stepper/index.d.ts +2 -2
- package/es/Switch/component.json +207 -0
- package/es/Switch/index.css +1 -1
- package/es/Switch/index.d.ts +3 -2
- package/es/Switch/index.js +60 -59
- package/es/Switch/style/index.css +1 -1
- package/es/Table/component.json +547 -0
- package/es/Table/index.d.ts +2 -2
- package/es/Table/index.js +385 -382
- package/es/Table/interface.d.ts +30 -0
- package/es/Table/tableHead.js +1 -1
- package/es/Table/util.d.ts +1 -1
- package/es/Table/util.js +3 -12
- package/es/Tabs/component.json +227 -0
- package/es/Tag/component.json +221 -0
- package/es/Tag/index.css +1 -1
- package/es/Tag/index.d.ts +1 -1
- package/es/Tag/index.js +20 -20
- package/es/Tag/style/index.css +1 -1
- package/es/TextEditor/component.json +186 -0
- package/es/TextEditor/index.d.ts +5 -5
- package/es/TextEditor/index.js +1 -1
- package/es/TextField/component.json +290 -0
- package/es/TextField/index.d.ts +2 -2
- package/es/TextField/index.js +1 -1
- package/es/TimePicker/component.json +176 -0
- package/es/Timeline/component.json +110 -0
- package/es/Title/component.json +156 -0
- package/es/ToggleButton/component.json +153 -0
- package/es/ToggleButton/index.js +1 -1
- package/es/Tooltip/component.json +176 -0
- package/es/Tooltip/index.js +58 -53
- package/es/Tooltip/interface.d.ts +14 -1
- package/es/Tooltip/utils.js +6 -6
- package/es/Transfer/component.json +157 -0
- package/es/Tree/OperateBar/index.js +1 -1
- package/es/Tree/Tree.js +3 -3
- package/es/Tree/component.json +512 -0
- package/es/Tree/interface.d.ts +1 -1
- package/es/Upload/component.json +450 -0
- package/es/Upload/util.js +1 -1
- package/es/Utils/snack-kit-shims.d.ts +18 -0
- package/es/Utils/snack-kit-shims.js +19 -0
- package/es/Utils/type.d.ts +0 -2
- package/es/_virtual/index.js +5 -3
- package/es/_virtual/index2.js +2 -5
- package/es/index.d.ts +2 -0
- package/es/index.js +1 -1
- package/es/locale/en_US.d.ts +361 -0
- package/es/locale/en_US.js +364 -0
- package/es/locale/index.d.ts +1 -723
- package/es/locale/index2.js +10 -0
- package/es/locale/zh_CN.d.ts +361 -0
- package/es/locale/zh_CN.js +364 -0
- package/es/node_modules/classnames/index.js +1 -1
- package/lib/AlignBox/component.json +89 -0
- package/lib/AlignBox/index.css +1 -1
- package/lib/AlignBox/index.d.ts +6 -2
- package/lib/AlignBox/index.js +1 -1
- package/lib/AlignBox/style/index.css +1 -1
- package/lib/Anchor/anchorMenu/index.d.ts +2 -1
- package/lib/Anchor/anchorMenu/index.js +1 -1
- package/lib/Anchor/component.json +130 -0
- package/lib/Anchor/index.js +1 -1
- package/lib/Anchor/type.d.ts +8 -4
- package/lib/Argv/component.json +216 -0
- package/lib/Argv/dataGenerator/index.js +1 -1
- package/lib/Argv/index.d.ts +5 -6
- package/lib/Argv/index.js +1 -1
- package/lib/AutoBox/component.json +133 -0
- package/lib/AutoBox/index.d.ts +3 -3
- package/lib/AutoBox/index.js +1 -1
- package/lib/AutoBox/protal.d.ts +2 -2
- package/lib/AutoBox/protal.js +1 -1
- package/lib/AutoButton/component.json +109 -0
- package/lib/AutoButton/index.js +1 -1
- package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
- package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
- package/lib/AutoTips/component.json +121 -0
- package/lib/AutoTips/index.js +1 -1
- package/lib/Badge/component.json +92 -0
- package/lib/Breadcrumbs/component.json +142 -0
- package/lib/Breadcrumbs/index.js +1 -1
- package/lib/Button/SplitButton.d.ts +2 -2
- package/lib/Button/component.json +168 -0
- package/lib/Button/index.js +1 -1
- package/lib/ButtonGroup/component.json +132 -0
- package/lib/ButtonGroup/index.d.ts +1 -1
- package/lib/Card/component.json +162 -0
- package/lib/Card/index.d.ts +2 -2
- package/lib/Card/index.js +1 -1
- package/lib/Carousel/component.json +142 -0
- package/lib/Carousel/index.d.ts +1 -1
- package/lib/Cascader/Cascader.js +1 -1
- package/lib/Cascader/OptionList/Column.js +1 -1
- package/lib/Cascader/OptionList/index.js +1 -1
- package/lib/Cascader/component.json +196 -0
- package/lib/Cascader/hooks/useEntities.js +1 -1
- package/lib/Cascader/interface.d.ts +1 -0
- package/lib/Cascader/utils/commonUtil.d.ts +1 -1
- package/lib/Cascader/utils/commonUtil.js +1 -1
- package/lib/Cascader/utils/treeUtil.d.ts +14 -5
- package/lib/Cascader/utils/treeUtil.js +1 -1
- package/lib/Checkbox/component.json +138 -0
- package/lib/CheckboxGroup/component.json +152 -0
- package/lib/CheckboxGroup/index.js +1 -1
- package/lib/CodeEditor/component.json +189 -0
- package/lib/CodeEditor/index.d.ts +11 -10
- package/lib/CodeEditor/index.js +1 -1
- package/lib/Collapse/component.json +166 -0
- package/lib/Collapse/index.d.ts +1 -1
- package/lib/Collapse/index.js +1 -1
- package/lib/CollapseBox/component.json +84 -0
- package/lib/CollapseLayout/component.json +155 -0
- package/lib/ColorPicker/component.json +142 -0
- package/lib/ComboSelect/component.json +181 -0
- package/lib/ComboSelect/index.js +1 -1
- package/lib/ComboSelect/interface.d.ts +2 -2
- package/lib/ComboSelect/utils.d.ts +3 -3
- package/lib/ComboSelect/utils.js +1 -1
- package/lib/Container/component.json +111 -0
- package/lib/ContentBox/component.json +81 -0
- package/lib/CopyText/component.json +118 -0
- package/lib/CycleSelector/component.json +98 -0
- package/lib/CycleSelector/index.js +1 -1
- package/lib/DatePicker/component.json +192 -0
- package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
- package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
- package/lib/Descriptions/component.json +142 -0
- package/lib/Descriptions/index.d.ts +1 -1
- package/lib/Desktop/component.json +171 -0
- package/lib/Desktop/index.js +1 -1
- package/lib/DragVerify/component.json +114 -0
- package/lib/DragVerify/index.js +1 -1
- package/lib/Drawer/component.json +200 -0
- package/lib/Drawer/index.js +1 -1
- package/lib/Drawer/interface.d.ts +1 -1
- package/lib/Drawer/util.d.ts +1 -6
- package/lib/Drawer/util.js +1 -1
- package/lib/Dropdown/component.json +147 -0
- package/lib/Dropdown/index.js +1 -1
- package/lib/DynamicMultiBox/component.json +278 -0
- package/lib/DynamicMultiBox/formItem.d.ts +1 -1
- package/lib/DynamicMultiBox/index.js +1 -1
- package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
- package/lib/Empty/component.json +123 -0
- package/lib/Empty/index.css +1 -1
- package/lib/Empty/index.d.ts +2 -2
- package/lib/Empty/index.js +1 -1
- package/lib/Empty/style/index.css +1 -1
- package/lib/FieldForm/FieldFormItem/ItemHolder.js +1 -1
- package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
- package/lib/FieldForm/FieldFormItem/StatusProvider.js +1 -1
- package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
- package/lib/FieldForm/Form.d.ts +2 -2
- package/lib/FieldForm/Form.js +1 -1
- package/lib/FieldForm/FormItemInput.js +1 -1
- package/lib/FieldForm/FormItemLabel.js +1 -1
- package/lib/FieldForm/FormList.d.ts +2 -2
- package/lib/FieldForm/component.json +196 -0
- package/lib/FieldForm/context.d.ts +5 -1
- package/lib/FieldForm/context.js +1 -1
- package/lib/FieldForm/hooks/useForm.d.ts +4 -3
- package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
- package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
- package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
- package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
- package/lib/FieldForm/hooks/useItemRef.js +1 -1
- package/lib/Form/component.json +161 -0
- package/lib/Form/index.d.ts +52 -49
- package/lib/Form/index.js +1 -1
- package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
- package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
- package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
- package/lib/FormItem/compoments/formFile/index.js +1 -1
- package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
- package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
- package/lib/FormItem/component.json +171 -0
- package/lib/FormItem/index.d.ts +5 -5
- package/lib/FormItem/index.js +1 -1
- package/lib/FormItem/itemType.js +1 -1
- package/lib/FunctionModal/component.json +197 -0
- package/lib/FunctionModal/dialog.d.ts +1 -1
- package/lib/FunctionModal/modalContext.d.ts +4 -1
- package/lib/GlobalContext/confirmLocale.js +1 -1
- package/lib/GlobalContext/index.js +1 -1
- package/lib/Help/component.json +118 -0
- package/lib/HelperText/component.json +126 -0
- package/lib/Image/PreviewGroup.js +1 -1
- package/lib/Image/component.json +165 -0
- package/lib/Image/index.js +1 -1
- package/lib/InputCode/component.json +191 -0
- package/lib/InputCode/index.d.ts +2 -2
- package/lib/InputLang/component.json +205 -0
- package/lib/InputLang/index.js +1 -1
- package/lib/InputNumber/component.json +162 -0
- package/lib/Label/component.json +126 -0
- package/lib/Label/index.d.ts +2 -2
- package/lib/Loading/component.json +91 -0
- package/lib/Menu/component.json +180 -0
- package/lib/Menu/verticalMenuList.js +1 -1
- package/lib/Message/component.json +246 -0
- package/lib/Message/index.d.ts +2 -2
- package/lib/Message/index.js +1 -1
- package/lib/Modal/Confirm/index.d.ts +1 -1
- package/lib/Modal/Confirm/index.js +1 -1
- package/lib/Modal/component.json +277 -0
- package/lib/Modal/index.d.ts +85 -5
- package/lib/Modal/index.js +1 -1
- package/lib/Modal/interface.d.ts +1 -0
- package/lib/MultiBox/component.json +216 -0
- package/lib/MultiBox/index.js +1 -1
- package/lib/Notification/component.json +184 -0
- package/lib/OperateBtn/component.json +134 -0
- package/lib/OperateBtn/index.d.ts +3 -3
- package/lib/PageHeader/component.json +112 -0
- package/lib/PageHeader/horizontalMeun.js +1 -1
- package/lib/PageHeader/horizontalMeunRight.js +1 -1
- package/lib/Pagination/component.json +181 -0
- package/lib/Pagination/index.js +1 -1
- package/lib/ParauiProvider/index.js +1 -1
- package/lib/PasswordRules/component.json +105 -0
- package/lib/PasswordRules/index.d.ts +4 -4
- package/lib/PopConfirm/component.json +227 -0
- package/lib/PopConfirm/index.d.ts +1 -1
- package/lib/PopConfirm/index.js +1 -1
- package/lib/PopMenu/component.json +131 -0
- package/lib/PopMenu/hooks.d.ts +1 -1
- package/lib/PopMenu/index.js +1 -1
- package/lib/Popover/component.json +165 -0
- package/lib/Popover/index.js +1 -1
- package/lib/Progress/component.json +161 -0
- package/lib/Prompt/component.json +144 -0
- package/lib/Querying/component.json +96 -0
- package/lib/Querying/index.css +1 -1
- package/lib/Querying/index.d.ts +2 -2
- package/lib/Querying/index.js +1 -1
- package/lib/Querying/style/index.css +1 -1
- package/lib/QuickReply/QuickReplyCode/index.js +1 -1
- package/lib/QuickReply/component.json +129 -0
- package/lib/QuickReply/index.d.ts +1 -1
- package/lib/Radio/component.json +136 -0
- package/lib/RadioGroup/component.json +149 -0
- package/lib/RangeInput/component.json +198 -0
- package/lib/RangeInput/index.js +1 -1
- package/lib/Result/component.json +104 -0
- package/lib/ScrollBar/component.json +115 -0
- package/lib/Search/component.json +177 -0
- package/lib/Search/index.d.ts +1 -1
- package/lib/Select/component.json +244 -0
- package/lib/Select/index.js +1 -1
- package/lib/SelectInput/component.json +184 -0
- package/lib/Selector/component.json +203 -0
- package/lib/Selector/index.js +1 -1
- package/lib/Selector/interface.d.ts +2 -2
- package/lib/Selector/selectorData/index.js +1 -1
- package/lib/Selector/selectorMain/index.js +1 -1
- package/lib/Selector/selectorNode/index.js +1 -1
- package/lib/Selector/util.d.ts +3 -3
- package/lib/Selector/util.js +1 -1
- package/lib/SelectorPicker/component.json +179 -0
- package/lib/SelectorPicker/index.d.ts +5 -5
- package/lib/SelectorPicker/index.js +1 -1
- package/lib/SingleBox/component.json +151 -0
- package/lib/SingleBox/index.d.ts +2 -2
- package/lib/Slider/component.json +181 -0
- package/lib/SortBox/component.json +108 -0
- package/lib/Status/component.json +104 -0
- package/lib/Stepper/component.json +129 -0
- package/lib/Stepper/index.d.ts +2 -2
- package/lib/Switch/component.json +207 -0
- package/lib/Switch/index.css +1 -1
- package/lib/Switch/index.d.ts +3 -2
- package/lib/Switch/index.js +1 -1
- package/lib/Switch/style/index.css +1 -1
- package/lib/Table/component.json +547 -0
- package/lib/Table/index.d.ts +2 -2
- package/lib/Table/index.js +1 -1
- package/lib/Table/interface.d.ts +30 -0
- package/lib/Table/tableHead.js +1 -1
- package/lib/Table/util.d.ts +1 -1
- package/lib/Table/util.js +1 -1
- package/lib/Tabs/component.json +227 -0
- package/lib/Tag/component.json +221 -0
- package/lib/Tag/index.css +1 -1
- package/lib/Tag/index.d.ts +1 -1
- package/lib/Tag/index.js +1 -1
- package/lib/Tag/style/index.css +1 -1
- package/lib/TextEditor/component.json +186 -0
- package/lib/TextEditor/index.d.ts +5 -5
- package/lib/TextEditor/index.js +1 -1
- package/lib/TextField/component.json +290 -0
- package/lib/TextField/index.d.ts +2 -2
- package/lib/TextField/index.js +1 -1
- package/lib/TimePicker/component.json +176 -0
- package/lib/Timeline/component.json +110 -0
- package/lib/Title/component.json +156 -0
- package/lib/ToggleButton/component.json +153 -0
- package/lib/ToggleButton/index.js +1 -1
- package/lib/Tooltip/component.json +176 -0
- package/lib/Tooltip/index.js +1 -1
- package/lib/Tooltip/interface.d.ts +14 -1
- package/lib/Tooltip/utils.js +1 -1
- package/lib/Transfer/component.json +157 -0
- package/lib/Tree/OperateBar/index.js +2 -2
- package/lib/Tree/Tree.js +1 -1
- package/lib/Tree/component.json +512 -0
- package/lib/Tree/interface.d.ts +1 -1
- package/lib/Upload/component.json +450 -0
- package/lib/Upload/util.js +1 -1
- package/lib/Utils/snack-kit-shims.d.ts +18 -0
- package/lib/Utils/snack-kit-shims.js +2 -0
- package/lib/Utils/type.d.ts +0 -2
- package/lib/_virtual/index.js +1 -1
- package/lib/_virtual/index2.js +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +1 -1
- package/lib/locale/en_US.d.ts +361 -0
- package/lib/locale/en_US.js +2 -0
- package/lib/locale/index.d.ts +1 -723
- package/lib/locale/index2.js +2 -0
- package/lib/locale/zh_CN.d.ts +361 -0
- package/lib/locale/zh_CN.js +2 -0
- package/lib/node_modules/classnames/index.js +1 -1
- package/package.json +11 -4
- package/es/_virtual/index3.js +0 -5
- package/es/_virtual/index4.js +0 -5
- package/es/node_modules/@para-snack/core/dist/index.js +0 -5231
- package/lib/_virtual/index3.js +0 -2
- package/lib/_virtual/index4.js +0 -2
- package/lib/node_modules/@para-snack/core/dist/index.js +0 -20
- /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
- /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
- /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
- /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
|
@@ -0,0 +1,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
|
+
}
|
package/lib/Tag/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.paraui-v4-tag-outline.paraui-v4-tag{border:.5px solid rgb(92,101,115)}.paraui-v4-tag-outline.paraui-v4-tag-blue{border:.5px solid rgb(46,101,230)}.paraui-v4-tag-outline.paraui-v4-tag-green{border:.5px solid rgb(19,191,76)}.paraui-v4-tag-outline.paraui-v4-tag-yellow{border:.5px solid rgb(255,147,38)}.paraui-v4-tag-outline.paraui-v4-tag-red{border:.5px solid rgb(244,66,66)}.paraui-v4-tag-edit-input{
|
|
1
|
+
@charset "UTF-8";.paraui-v4-tag-outline.paraui-v4-tag{border:.5px solid rgb(92,101,115)}.paraui-v4-tag-outline.paraui-v4-tag-blue{border:.5px solid rgb(46,101,230)}.paraui-v4-tag-outline.paraui-v4-tag-green{border:.5px solid rgb(19,191,76)}.paraui-v4-tag-outline.paraui-v4-tag-yellow{border:.5px solid rgb(255,147,38)}.paraui-v4-tag-outline.paraui-v4-tag-red{border:.5px solid rgb(244,66,66)}.paraui-v4-tag-edit-input{align-self:flex-start;height:24px;font-size:14px;color:#1d2126;text-indent:8px;border:1px solid rgb(46,101,230);border-radius:4px}.paraui-v4-tag{display:inline-flex;align-items:center;justify-content:center;max-width:100%;height:24px;padding:0 10px;font-size:14px;line-height:18px;color:#1d2126;white-space:nowrap;vertical-align:bottom;background:#eaecf1;border-radius:2px}.paraui-v4-tag .tag-custom-icon:hover{cursor:default;background:none!important}.paraui-v4-tag .tag-close-icon:hover{background-color:#d4dae3}.paraui-v4-tag .tag-edit-icon{display:flex}.paraui-v4-tag.paraui-v4-tag-large{line-height:28px}.paraui-v4-tag.paraui-v4-tag-medium{line-height:24px}.paraui-v4-tag.paraui-v4-tag-small{height:20px;padding:0 6px;font-size:12px}.paraui-v4-tag.paraui-v4-tag-small>svg{font-size:12px}.paraui-v4-tag.paraui-v4-tag-small>svg+.paraui-v4-auto-tips{margin-left:2px}.paraui-v4-tag.paraui-v4-tag-small .tag-close-icon{margin-left:2px}.paraui-v4-tag.paraui-v4-tag-small .tag-edit-icon{font-size:12px}.paraui-v4-tag>svg{font-size:16px;color:inherit}.paraui-v4-tag .tag-edit-icon{font-size:16px;color:inherit;cursor:pointer}.paraui-v4-tag .tag-edit-icon>svg{color:#1d2126}.paraui-v4-tag .tag-close-icon{margin-left:4px;font-size:16px;color:inherit;cursor:pointer}.paraui-v4-tag .tag-close-icon:hover{color:inherit}.paraui-v4-tag>svg+.paraui-v4-auto-tips{margin-left:4px}.paraui-v4-tag.paraui-v4-tag-has-color,.paraui-v4-tag.paraui-v4-tag-has-color svg,.paraui-v4-tag.paraui-v4-tag-has-color svg:hover{color:inherit}.paraui-v4-tag.paraui-v4-tag-blue{color:#2e65e6;background-color:#2e65e61a}.paraui-v4-tag.paraui-v4-tag-green{color:#13bf4c;background-color:#13bf4c1a}.paraui-v4-tag.paraui-v4-tag-yellow{color:#ff9326;background-color:#ff93261a}.paraui-v4-tag.paraui-v4-tag-red{color:#f44242;background-color:#f442421a}.paraui-v4-tag.paraui-v4-tag-hidden{display:none}.paraui-v4-tag-small svg{font-size:12px}.paraui-v4-tag-group{display:flex;flex-flow:row wrap;align-items:center}.paraui-v4-tag-group .tag-group-input{align-self:flex-start;height:24px;font-size:14px;color:#1d2126;text-indent:8px;border:1px solid rgb(46,101,230);border-radius:4px}.paraui-v4-tag-group .tag-group-input .tag-group-input-large{height:28px}.paraui-v4-tag-group .tag-group-new .tag-group-new-icon{padding:0 5px}.paraui-v4-tag-group .tag-group-add-btn{border:1px dashed rgb(212,218,227)}.paraui-v4-tag-group .tag-group-add-btn .tag-edit-icon{background:none!important}.paraui-v4-tag-group .tag-group-add-btn:hover{cursor:pointer}.paraui-v4-tag-group .tag-group-add-btn:hover svg{color:#2e65e6}.paraui-v4-tag-group .tag-group-add-btn:hover .tag-text{color:#2e65e6}
|
package/lib/Tag/index.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ export interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
30
30
|
/** cls */
|
|
31
31
|
className?: string;
|
|
32
32
|
/** 大小 */
|
|
33
|
-
size?: 'small' | 'large';
|
|
33
|
+
size?: 'small' | 'medium' | 'large';
|
|
34
34
|
/** 编辑输入框样式 */
|
|
35
35
|
editInputClassName?: string;
|
|
36
36
|
/** 编辑输入框宽度 */
|
package/lib/Tag/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const s=require("../_virtual/jsx-runtime.js"),n=require("react");require("../node_modules/@para-ui/icons/SvgIcon/index.js");const le=require("../node_modules/@para-ui/icons/Close/index.js"),ae=require("../node_modules/@para-ui/icons/EditOutline/index.js"),w=require("clsx"),ue=require("./TagGroup.js"),o=require("../GlobalContext/constant.js"),ce=require("../AutoTips/index.js"),p=require("../node_modules/tinycolor2/esm/tinycolor.js"),de=require("../Hooks/useGlobalProps.js");;/* empty css */const pe=["blue","green","yellow","red"],fe=a=>{const{type:f="normal",className:A,children:r,icon:u,color:t,onClose:G,onEdit:x,getWidth:g,tagChange:h,editInputClassName:F,closeIcon:m,closable:_=!1,editable:C=!1,size:E="
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const s=require("../_virtual/jsx-runtime.js"),n=require("react");require("../node_modules/@para-ui/icons/SvgIcon/index.js");const le=require("../node_modules/@para-ui/icons/Close/index.js"),ae=require("../node_modules/@para-ui/icons/EditOutline/index.js"),w=require("clsx"),ue=require("./TagGroup.js"),o=require("../GlobalContext/constant.js"),ce=require("../AutoTips/index.js"),p=require("../node_modules/tinycolor2/esm/tinycolor.js"),de=require("../Hooks/useGlobalProps.js");;/* empty css */const pe=["blue","green","yellow","red"],fe=a=>{const{type:f="normal",className:A,children:r,icon:u,color:t,onClose:G,onEdit:x,getWidth:g,tagChange:h,editInputClassName:F,closeIcon:m,closable:_=!1,editable:C=!1,size:E="small",maxWidth:B,style:O,visible:R,editInputWidth:z,tipMaxWidth:D,marginBottom:j,marginRight:v,...K}=de.default(a,"TagGroup"),[H,b]=n.useState(!0),[I,$]=n.useState(!1),[y,S]=n.useState(""),[q,J]=n.useState(0),[Q,c]=n.useState(!1),[U,d]=n.useState(!1),X=n.useRef(),i=n.useRef(null);n.useEffect(()=>{"visible"in a&&b(!!R)},[R]),n.useEffect(()=>{if(!i.current)return;const{offsetWidth:e}=i.current;J(e),g&&g(e)},[i,I]),n.useEffect(()=>{typeof r=="string"&&S(r)},[r]);const l=()=>t?pe.includes(t):!1,Y={color:t&&!l()?t:void 0,backgroundColor:t&&!l()?p.default(t).setAlpha(.1).toRgbString():void 0,borderColor:t&&!l()&&f==="outline"?t:void 0,maxWidth:B,marginBottom:j,marginRight:v,...O},M={backgroundColor:Q?p.default(t).setAlpha(.1).toRgbString():void 0,borderRadius:"2px"},Z={backgroundColor:U?p.default(t).setAlpha(.1).toRgbString():void 0,marginRight:r?E==="small"?"2px":"4px":void 0,borderRadius:"2px"},ee=w(`${o.$prefixCls}-tag`,`${o.$prefixCls}-tag-${f}`,`${o.$prefixCls}-tag-${E}`,A,{[`${o.$prefixCls}-tag-has-color`]:t,[`${o.$prefixCls}-tag-hidden`]:!H,[`${o.$prefixCls}-tag-${t}`]:l()}),N=e=>{e.stopPropagation(),G?.(e),c(!1),!e.defaultPrevented&&("visible"in a||b(!1))},P=()=>{c(!0)},k=()=>{c(!1)},T=()=>{d(!0)},W=()=>{d(!1)},te=e=>{e.stopPropagation(),x&&x(e),!e.defaultPrevented&&(d(!1),$(!0))},se=()=>_?m?s.jsxRuntimeExports.jsx("span",{className:"tag-close-icon",style:M,onClick:N,onMouseEnter:P,onMouseLeave:k,children:m}):s.jsxRuntimeExports.jsx(le.Close,{className:"tag-close-icon",style:M,onClick:N,onMouseEnter:P,onMouseLeave:k}):null,ne=()=>(C||u)&&s.jsxRuntimeExports.jsx("span",{className:`tag-edit-icon ${u?"tag-custom-icon":""}`,style:Z,onMouseEnter:T,onMouseLeave:W,children:C?s.jsxRuntimeExports.jsx(ae.EditOutline,{onMouseEnter:T,onMouseLeave:W,className:"tag-edit-icon",onClick:te}):s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{children:u})}),oe=e=>{S(e.target.value),h&&h(e.target.value)},L=()=>{$(!1)},re=e=>{(e.keyCode===13||e.which===13)&&L()},ie=()=>{const e=w(`${o.$prefixCls}-tag-edit-input`,F);return s.jsxRuntimeExports.jsx("input",{style:{width:z||q,minWidth:q,marginBottom:j,marginRight:v},type:"text",autoFocus:!0,ref:X,className:e,value:y,onChange:oe,onBlur:L,onKeyDown:re})};return s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{children:I?ie():s.jsxRuntimeExports.jsxs("span",{...K,className:ee,style:Y,ref:i,children:[ne(),r&&s.jsxRuntimeExports.jsx(ce.default,{tipMaxWidth:D,children:s.jsxRuntimeExports.jsx("span",{className:"tag-text",children:y||r})}),se()]})})},V=fe;exports.TagGroup=ue.default;exports.Tag=V;exports.default=V;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/Tag/style/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.paraui-v4-tag-outline.paraui-v4-tag{border:.5px solid #5c6573}.paraui-v4-tag-outline.paraui-v4-tag-blue{border:.5px solid #2e65e6}.paraui-v4-tag-outline.paraui-v4-tag-green{border:.5px solid #13bf4c}.paraui-v4-tag-outline.paraui-v4-tag-yellow{border:.5px solid #ff9326}.paraui-v4-tag-outline.paraui-v4-tag-red{border:.5px solid #f44242}.paraui-v4-tag-edit-input{
|
|
1
|
+
.paraui-v4-tag-outline.paraui-v4-tag{border:.5px solid #5c6573}.paraui-v4-tag-outline.paraui-v4-tag-blue{border:.5px solid #2e65e6}.paraui-v4-tag-outline.paraui-v4-tag-green{border:.5px solid #13bf4c}.paraui-v4-tag-outline.paraui-v4-tag-yellow{border:.5px solid #ff9326}.paraui-v4-tag-outline.paraui-v4-tag-red{border:.5px solid #f44242}.paraui-v4-tag-edit-input{align-self:flex-start;height:24px;font-size:14px;color:#1d2126;text-indent:8px;border:1px solid #2e65e6;border-radius:4px}.paraui-v4-tag{display:inline-flex;align-items:center;justify-content:center;max-width:100%;height:24px;padding:0 10px;font-size:14px;line-height:18px;color:#1d2126;white-space:nowrap;vertical-align:bottom;background:#eaecf1;border-radius:2px}.paraui-v4-tag .tag-custom-icon:hover{cursor:default;background:none !important}.paraui-v4-tag .tag-close-icon:hover{background-color:#d4dae3}.paraui-v4-tag .tag-edit-icon{display:flex}.paraui-v4-tag.paraui-v4-tag-large{line-height:28px}.paraui-v4-tag.paraui-v4-tag-medium{line-height:24px}.paraui-v4-tag.paraui-v4-tag-small{height:20px;padding:0 6px;font-size:12px}.paraui-v4-tag.paraui-v4-tag-small>svg{font-size:12px}.paraui-v4-tag.paraui-v4-tag-small>svg+.paraui-v4-auto-tips{margin-left:2px}.paraui-v4-tag.paraui-v4-tag-small .tag-close-icon{margin-left:2px}.paraui-v4-tag.paraui-v4-tag-small .tag-edit-icon{font-size:12px}.paraui-v4-tag>svg{font-size:16px;color:inherit}.paraui-v4-tag .tag-edit-icon{font-size:16px;color:inherit;cursor:pointer}.paraui-v4-tag .tag-edit-icon>svg{color:#1d2126}.paraui-v4-tag .tag-close-icon{margin-left:4px;font-size:16px;color:inherit;cursor:pointer}.paraui-v4-tag .tag-close-icon:hover{color:inherit}.paraui-v4-tag>svg+.paraui-v4-auto-tips{margin-left:4px}.paraui-v4-tag.paraui-v4-tag-has-color,.paraui-v4-tag.paraui-v4-tag-has-color svg,.paraui-v4-tag.paraui-v4-tag-has-color svg:hover{color:inherit}.paraui-v4-tag.paraui-v4-tag-blue{color:#2e65e6;background-color:rgba(46,101,230,.1)}.paraui-v4-tag.paraui-v4-tag-green{color:#13bf4c;background-color:rgba(19,191,76,.1)}.paraui-v4-tag.paraui-v4-tag-yellow{color:#ff9326;background-color:rgba(255,147,38,.1)}.paraui-v4-tag.paraui-v4-tag-red{color:#f44242;background-color:rgba(244,66,66,.1)}.paraui-v4-tag.paraui-v4-tag-hidden{display:none}.paraui-v4-tag-small svg{font-size:12px}.paraui-v4-tag-group{display:flex;flex-flow:row wrap;align-items:center}.paraui-v4-tag-group .tag-group-input{align-self:flex-start;height:24px;font-size:14px;color:#1d2126;text-indent:8px;border:1px solid #2e65e6;border-radius:4px}.paraui-v4-tag-group .tag-group-input .tag-group-input-large{height:28px}.paraui-v4-tag-group .tag-group-new .tag-group-new-icon{padding:0 5px}.paraui-v4-tag-group .tag-group-add-btn{border:1px dashed #d4dae3}.paraui-v4-tag-group .tag-group-add-btn .tag-edit-icon{background:none !important}.paraui-v4-tag-group .tag-group-add-btn:hover{cursor:pointer}.paraui-v4-tag-group .tag-group-add-btn:hover svg{color:#2e65e6}.paraui-v4-tag-group .tag-group-add-btn:hover .tag-text{color:#2e65e6}
|
|
@@ -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
|
+
}
|
|
@@ -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 {
|
package/lib/TextEditor/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../node_modules/@wangeditor/editor/dist/css/style.css');require('./index.css');const o=require("../_virtual/jsx-runtime.js"),t=require("react"),le=require("../Label/index.js"),T=require("@wangeditor/editor-for-react"),ae=require("@wangeditor/editor"),ie=require("../HelperText/index.js"),ce=require("../GlobalContext/constant.js"),de=require("./common.js"),fe=require("@
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../node_modules/@wangeditor/editor/dist/css/style.css');require('./index.css');const o=require("../_virtual/jsx-runtime.js"),t=require("react"),le=require("../Label/index.js"),T=require("@wangeditor/editor-for-react"),ae=require("@wangeditor/editor"),ie=require("../HelperText/index.js"),ce=require("../GlobalContext/constant.js"),de=require("./common.js"),fe=require("@snack-kit/lib"),me=require("../GlobalContext/useFormatMessage.js"),xe=require("./lang/index.js");;/* empty css */;/* empty css */const ge=t.forwardRef((d,S)=>{const N=me.default("TextEditor",xe.default),{style:F,toolbarStyle:H={},editorStyle:M={height:"300px",overflowY:"hidden"},hideErrorDom:_,className:f,error:m,server:x,helperText:B,required:g,labelSign:C,label:u,labelTooltip:s,placeholder:I=N({id:"pleaseEnter"}),onChange:E,onFocus:b,onBlur:p,onDestroyed:v,readOnly:L=!1,autoFocus:O=!1,max:$,in18:l,defaultValue:h,value:n,excludeKeys:w,insertKeys:D,toolbarKeys:a=de.TOOL_BAR_CONFIG,uploadImage:K={base64LimitSize:5*1024*1024,timeout:15*1e3},uploadVideo:V={timeout:15*1e3},disabled:y}=d,i=t.useRef(""),[r,j]=t.useState(null),[P,c]=t.useState(""),[U,k]=t.useState(fe.UUID),[z,A]=t.useState(!1);t.useEffect(()=>{A(a.length<1)},[a]);const G=e=>{b&&b(e)},Y=e=>{p&&p(e)},J=e=>{v&&v(e)},Q=e=>{d.value===void 0&&c(e.getHtml()),i.current!==e.getHtml()&&(i.current=e.getHtml(),E&&E(e.getHtml(),e.getText()))},W={excludeKeys:w,toolbarKeys:a,insertKeys:D},X={placeholder:I,onFocus:G,onBlur:Y,onDestroyed:J,readOnly:L,autoFocus:O,maxLength:$,MENU_CONF:{uploadImage:{...K,server:x},uploadVideo:{...V,server:x}}};t.useEffect(()=>{l&&ae.i18nChangeLanguage(l),k(Math.random().toString(36).slice(-8))},[l]),t.useEffect(()=>{h!==void 0&&c(h)},[]),t.useEffect(()=>{n!==void 0&&c(n),i.current=n||""},[n]),t.useEffect(()=>{y?r?.disable():r?.enable()},[y]);const Z=()=>{if(r)return r.getHtml()},ee=()=>{if(r)return r.getText()},te=()=>{r&&r.clear()},re=e=>{r&&(r.setHtml(e),setTimeout(()=>{r.focus(!0)}))},oe=()=>r;t.useEffect(()=>()=>{r!=null&&(r.destroy(),j(null))},[r]),t.useImperativeHandle(S,()=>({getContent:Z,getText:ee,clearEditor:te,setContent:re,getEditor:oe}));const se=()=>{let e=`${ce.$prefixCls}-text-editor`;return f&&(e+=` ${f}`),m&&(e+=" is-error"),e},ne=t.useMemo(()=>{const e=()=>{let R="text-editor-label";return s&&s.className&&(R+=` ${s.className}`),R};return u?o.jsxRuntimeExports.jsx(le.default,{label:u,required:g,labelSign:C,...s,className:e()}):null},[u,C,g,s]),q=t.useRef(!1),ue=t.useCallback(e=>{q.current||j(e)},[]);return t.useEffect(()=>()=>{q.current=!0},[]),o.jsxRuntimeExports.jsxs("div",{className:se(),style:F,children:[ne,o.jsxRuntimeExports.jsxs("div",{className:`text-editor-content ${z?"preview-mode":""}`,children:[o.jsxRuntimeExports.jsx(T.Toolbar,{editor:r,defaultConfig:W,mode:"default",style:H},U),o.jsxRuntimeExports.jsx(T.Editor,{defaultConfig:X,value:P,onCreated:ue,onChange:Q,mode:"default",style:M})]}),o.jsxRuntimeExports.jsx(ie.default,{className:"text-editor-error-text",error:m,helperText:B,hideErrorDom:_})]})});exports.default=ge;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|