@will-ui/vue 1.0.0
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/LICENSE +21 -0
- package/README.md +48 -0
- package/TAILWIND.md +282 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/components/audioPlayer/AudioPlayer.d.ts +123 -0
- package/dist/components/audioPlayer/AudioPlayer.js +375 -0
- package/dist/components/audioPlayer/AudioPlayer.js.map +1 -0
- package/dist/components/audioPlayer/index.d.ts +2 -0
- package/dist/components/audioPlayer/style/index.css +1 -0
- package/dist/components/btn/Btn.d.ts +45 -0
- package/dist/components/btn/Btn.js +165 -0
- package/dist/components/btn/Btn.js.map +1 -0
- package/dist/components/btn/config.d.ts +33 -0
- package/dist/components/btn/config.js +20 -0
- package/dist/components/btn/config.js.map +1 -0
- package/dist/components/btn/context.d.ts +12 -0
- package/dist/components/btn/context.js +6 -0
- package/dist/components/btn/context.js.map +1 -0
- package/dist/components/btn/index.d.ts +5 -0
- package/dist/components/btn/style/index.css +1 -0
- package/dist/components/btnGroup/BtnGroup.d.ts +46 -0
- package/dist/components/btnGroup/BtnGroup.js +43 -0
- package/dist/components/btnGroup/BtnGroup.js.map +1 -0
- package/dist/components/btnGroup/config.d.ts +14 -0
- package/dist/components/btnGroup/config.js +11 -0
- package/dist/components/btnGroup/config.js.map +1 -0
- package/dist/components/btnGroup/index.d.ts +3 -0
- package/dist/components/btnGroup/style/index.css +1 -0
- package/dist/components/cascade/Cascade.d.ts +1957 -0
- package/dist/components/cascade/Cascade.js +283 -0
- package/dist/components/cascade/Cascade.js.map +1 -0
- package/dist/components/cascade/config.d.ts +30 -0
- package/dist/components/cascade/config.js +18 -0
- package/dist/components/cascade/config.js.map +1 -0
- package/dist/components/cascade/index.d.ts +3 -0
- package/dist/components/cascade/style/index.css +1 -0
- package/dist/components/checkbox/Checkbox.d.ts +241 -0
- package/dist/components/checkbox/Checkbox.js +182 -0
- package/dist/components/checkbox/Checkbox.js.map +1 -0
- package/dist/components/checkbox/config.d.ts +18 -0
- package/dist/components/checkbox/config.js +11 -0
- package/dist/components/checkbox/config.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/style/index.css +1 -0
- package/dist/components/choose/Choose.d.ts +1016 -0
- package/dist/components/choose/Choose.js +402 -0
- package/dist/components/choose/Choose.js.map +1 -0
- package/dist/components/choose/config.d.ts +37 -0
- package/dist/components/choose/config.js +21 -0
- package/dist/components/choose/config.js.map +1 -0
- package/dist/components/choose/index.d.ts +3 -0
- package/dist/components/choose/injectionKey.d.ts +12 -0
- package/dist/components/choose/injectionKey.js +11 -0
- package/dist/components/choose/injectionKey.js.map +1 -0
- package/dist/components/choose/style/index.css +1 -0
- package/dist/components/choose2/Choose2.d.ts +1711 -0
- package/dist/components/choose2/Choose2.js +403 -0
- package/dist/components/choose2/Choose2.js.map +1 -0
- package/dist/components/choose2/config.d.ts +37 -0
- package/dist/components/choose2/config.js +20 -0
- package/dist/components/choose2/config.js.map +1 -0
- package/dist/components/choose2/index.d.ts +3 -0
- package/dist/components/choose2/style/index.css +1 -0
- package/dist/components/chooseItem/ChooseItem.d.ts +46 -0
- package/dist/components/chooseItem/ChooseItem.js +72 -0
- package/dist/components/chooseItem/ChooseItem.js.map +1 -0
- package/dist/components/chooseItem/config.d.ts +12 -0
- package/dist/components/chooseItem/config.js +9 -0
- package/dist/components/chooseItem/config.js.map +1 -0
- package/dist/components/chooseItem/index.d.ts +3 -0
- package/dist/components/chooseItem/style/index.css +1 -0
- package/dist/components/circleProgress/CircleProgress.d.ts +83 -0
- package/dist/components/circleProgress/CircleProgress.js +108 -0
- package/dist/components/circleProgress/CircleProgress.js.map +1 -0
- package/dist/components/circleProgress/index.d.ts +1 -0
- package/dist/components/circleProgress/style/index.css +1 -0
- package/dist/components/close/Close.d.ts +114 -0
- package/dist/components/close/Close.js +82 -0
- package/dist/components/close/Close.js.map +1 -0
- package/dist/components/close/index.d.ts +1 -0
- package/dist/components/close/style/index.css +1 -0
- package/dist/components/colorPicker/ColorPicker.d.ts +138 -0
- package/dist/components/colorPicker/ColorPicker.js +404 -0
- package/dist/components/colorPicker/ColorPicker.js.map +1 -0
- package/dist/components/colorPicker/config.d.ts +24 -0
- package/dist/components/colorPicker/config.js +14 -0
- package/dist/components/colorPicker/config.js.map +1 -0
- package/dist/components/colorPicker/index.d.ts +4 -0
- package/dist/components/colorPicker/style/index.css +1 -0
- package/dist/components/confirm/index.d.ts +73 -0
- package/dist/components/confirm/index.js +177 -0
- package/dist/components/confirm/index.js.map +1 -0
- package/dist/components/confirm/src/style/index.css +1 -0
- package/dist/components/copy/Copy.d.ts +28 -0
- package/dist/components/copy/Copy.js +110 -0
- package/dist/components/copy/Copy.js.map +1 -0
- package/dist/components/copy/config.d.ts +25 -0
- package/dist/components/copy/config.js +13 -0
- package/dist/components/copy/config.js.map +1 -0
- package/dist/components/copy/index.d.ts +5 -0
- package/dist/components/copy/spawnCopyToast.d.ts +13 -0
- package/dist/components/copy/spawnCopyToast.js +150 -0
- package/dist/components/copy/spawnCopyToast.js.map +1 -0
- package/dist/components/copy/style/index.css +1 -0
- package/dist/components/cornerEars/CornerEars.d.ts +24 -0
- package/dist/components/cornerEars/CornerEars.js +108 -0
- package/dist/components/cornerEars/CornerEars.js.map +1 -0
- package/dist/components/cornerEars/cornerGeometry.d.ts +8 -0
- package/dist/components/cornerEars/cornerGeometry.js +63 -0
- package/dist/components/cornerEars/cornerGeometry.js.map +1 -0
- package/dist/components/cornerEars/index.d.ts +2 -0
- package/dist/components/cornerEars/style/index.css +1 -0
- package/dist/components/date/DatePanel.js +398 -0
- package/dist/components/date/DatePanel.js.map +1 -0
- package/dist/components/date/DatePicker.d.ts +226 -0
- package/dist/components/date/DatePicker.js +349 -0
- package/dist/components/date/DatePicker.js.map +1 -0
- package/dist/components/date/Days.d.ts +44 -0
- package/dist/components/date/Days.js +93 -0
- package/dist/components/date/Days.js.map +1 -0
- package/dist/components/date/Months.d.ts +32 -0
- package/dist/components/date/Months.js +87 -0
- package/dist/components/date/Months.js.map +1 -0
- package/dist/components/date/QuickDate.d.ts +24 -0
- package/dist/components/date/QuickDate.js +48 -0
- package/dist/components/date/QuickDate.js.map +1 -0
- package/dist/components/date/Years.d.ts +38 -0
- package/dist/components/date/Years.js +85 -0
- package/dist/components/date/Years.js.map +1 -0
- package/dist/components/date/_use/quickDate.d.ts +4 -0
- package/dist/components/date/_use/quickDate.js +30 -0
- package/dist/components/date/_use/quickDate.js.map +1 -0
- package/dist/components/date/_use/useDateModules.d.ts +37 -0
- package/dist/components/date/_use/useDateModules.js +100 -0
- package/dist/components/date/_use/useDateModules.js.map +1 -0
- package/dist/components/date/config.d.ts +32 -0
- package/dist/components/date/config.js +18 -0
- package/dist/components/date/config.js.map +1 -0
- package/dist/components/date/index.d.ts +3 -0
- package/dist/components/date/style/index.css +1 -0
- package/dist/components/date/types.d.ts +32 -0
- package/dist/components/drawer/Drawer.d.ts +332 -0
- package/dist/components/drawer/Drawer.js +329 -0
- package/dist/components/drawer/Drawer.js.map +1 -0
- package/dist/components/drawer/config.d.ts +28 -0
- package/dist/components/drawer/config.js +16 -0
- package/dist/components/drawer/config.js.map +1 -0
- package/dist/components/drawer/index.d.ts +3 -0
- package/dist/components/drawer/src/style/drawer.css +1 -0
- package/dist/components/ellipsis/Ellipsis.d.ts +74 -0
- package/dist/components/ellipsis/Ellipsis.js +103 -0
- package/dist/components/ellipsis/Ellipsis.js.map +1 -0
- package/dist/components/ellipsis/index.d.ts +1 -0
- package/dist/components/ellipsis/style/index.css +1 -0
- package/dist/components/empty/Empty.d.ts +92 -0
- package/dist/components/empty/Empty.js +85 -0
- package/dist/components/empty/Empty.js.map +1 -0
- package/dist/components/empty/config.d.ts +23 -0
- package/dist/components/empty/config.js +14 -0
- package/dist/components/empty/config.js.map +1 -0
- package/dist/components/empty/index.d.ts +3 -0
- package/dist/components/empty/style/index.css +1 -0
- package/dist/components/empty/type.d.ts +9 -0
- package/dist/components/equalizer/Equalizer.d.ts +62 -0
- package/dist/components/equalizer/Equalizer.js +56 -0
- package/dist/components/equalizer/Equalizer.js.map +1 -0
- package/dist/components/equalizer/index.d.ts +1 -0
- package/dist/components/equalizer/style/index.css +1 -0
- package/dist/components/fallback/Fallback.d.ts +44 -0
- package/dist/components/fallback/Fallback.js +55 -0
- package/dist/components/fallback/Fallback.js.map +1 -0
- package/dist/components/fallback/index.d.ts +1 -0
- package/dist/components/fallback/style/index.css +1 -0
- package/dist/components/form/Form.d.ts +169 -0
- package/dist/components/form/Form.js +235 -0
- package/dist/components/form/Form.js.map +1 -0
- package/dist/components/form/_use/formRules.d.ts +18 -0
- package/dist/components/form/_use/formRules.js +80 -0
- package/dist/components/form/_use/formRules.js.map +1 -0
- package/dist/components/form/config.d.ts +35 -0
- package/dist/components/form/config.js +20 -0
- package/dist/components/form/config.js.map +1 -0
- package/dist/components/form/context.d.ts +34 -0
- package/dist/components/form/context.js +8 -0
- package/dist/components/form/context.js.map +1 -0
- package/dist/components/form/index.d.ts +3 -0
- package/dist/components/form/style/index.css +1 -0
- package/dist/components/formItem/FormItem.d.ts +144 -0
- package/dist/components/formItem/FormItem.js +218 -0
- package/dist/components/formItem/FormItem.js.map +1 -0
- package/dist/components/formItem/config.d.ts +21 -0
- package/dist/components/formItem/config.js +12 -0
- package/dist/components/formItem/config.js.map +1 -0
- package/dist/components/formItem/context.d.ts +22 -0
- package/dist/components/formItem/context.js +8 -0
- package/dist/components/formItem/context.js.map +1 -0
- package/dist/components/formItem/index.d.ts +3 -0
- package/dist/components/formItem/style/index.css +1 -0
- package/dist/components/icon/Icon.d.ts +117 -0
- package/dist/components/icon/Icon.js +116 -0
- package/dist/components/icon/Icon.js.map +1 -0
- package/dist/components/icon/config.d.ts +28 -0
- package/dist/components/icon/config.js +16 -0
- package/dist/components/icon/config.js.map +1 -0
- package/dist/components/icon/index.d.ts +4 -0
- package/dist/components/icon/style/index.css +1 -0
- package/dist/components/icon/type.d.ts +16 -0
- package/dist/components/image/Image.d.ts +21 -0
- package/dist/components/image/Image.js +68 -0
- package/dist/components/image/Image.js.map +1 -0
- package/dist/components/image/config.d.ts +21 -0
- package/dist/components/image/config.js +11 -0
- package/dist/components/image/config.js.map +1 -0
- package/dist/components/image/index.d.ts +4 -0
- package/dist/components/image/style/index.css +1 -0
- package/dist/components/index.d.ts +79 -0
- package/dist/components/index.js +124 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layer/Layer.d.ts +410 -0
- package/dist/components/layer/Layer.js +557 -0
- package/dist/components/layer/Layer.js.map +1 -0
- package/dist/components/layer/index.d.ts +2 -0
- package/dist/components/layer/injectionKey.d.ts +5 -0
- package/dist/components/layer/injectionKey.js +6 -0
- package/dist/components/layer/injectionKey.js.map +1 -0
- package/dist/components/layer/style/index.css +1 -0
- package/dist/components/lcdFont/LcdFont.d.ts +126 -0
- package/dist/components/lcdFont/LcdFont.js +232 -0
- package/dist/components/lcdFont/LcdFont.js.map +1 -0
- package/dist/components/lcdFont/config.d.ts +43 -0
- package/dist/components/lcdFont/config.js +41 -0
- package/dist/components/lcdFont/config.js.map +1 -0
- package/dist/components/lcdFont/format.d.ts +8 -0
- package/dist/components/lcdFont/format.js +39 -0
- package/dist/components/lcdFont/format.js.map +1 -0
- package/dist/components/lcdFont/index.d.ts +5 -0
- package/dist/components/lcdFont/segments.d.ts +32 -0
- package/dist/components/lcdFont/segments.js +326 -0
- package/dist/components/lcdFont/segments.js.map +1 -0
- package/dist/components/lcdFont/style/index.css +1 -0
- package/dist/components/lcdFont/type.d.ts +26 -0
- package/dist/components/list/List.d.ts +480 -0
- package/dist/components/list/List.js +289 -0
- package/dist/components/list/List.js.map +1 -0
- package/dist/components/list/config.d.ts +3 -0
- package/dist/components/list/index.d.ts +3 -0
- package/dist/components/list/style/index.css +1 -0
- package/dist/components/loading/Loading.d.ts +97 -0
- package/dist/components/loading/Loading.js +124 -0
- package/dist/components/loading/Loading.js.map +1 -0
- package/dist/components/loading/config.d.ts +22 -0
- package/dist/components/loading/config.js +13 -0
- package/dist/components/loading/config.js.map +1 -0
- package/dist/components/loading/index.d.ts +3 -0
- package/dist/components/loading/style/index.css +1 -0
- package/dist/components/loading/type.d.ts +13 -0
- package/dist/components/mask/Mask.d.ts +79 -0
- package/dist/components/mask/Mask.js +82 -0
- package/dist/components/mask/Mask.js.map +1 -0
- package/dist/components/mask/config.d.ts +21 -0
- package/dist/components/mask/config.js +14 -0
- package/dist/components/mask/config.js.map +1 -0
- package/dist/components/mask/index.d.ts +3 -0
- package/dist/components/mask/style/mask.css +1 -0
- package/dist/components/match/Match copy.d.ts +1600 -0
- package/dist/components/match/Match.d.ts +1621 -0
- package/dist/components/match/Match.js +343 -0
- package/dist/components/match/Match.js.map +1 -0
- package/dist/components/match/config.d.ts +29 -0
- package/dist/components/match/config.js +17 -0
- package/dist/components/match/config.js.map +1 -0
- package/dist/components/match/index.d.ts +3 -0
- package/dist/components/match/style/index.css +1 -0
- package/dist/components/modal/Modal.d.ts +460 -0
- package/dist/components/modal/Modal.js +297 -0
- package/dist/components/modal/Modal.js.map +1 -0
- package/dist/components/modal/config.d.ts +33 -0
- package/dist/components/modal/config.js +19 -0
- package/dist/components/modal/config.js.map +1 -0
- package/dist/components/modal/index.d.ts +3 -0
- package/dist/components/modal/style/index.css +1 -0
- package/dist/components/notice/Notice.d.ts +137 -0
- package/dist/components/notice/Notice.js +192 -0
- package/dist/components/notice/Notice.js.map +1 -0
- package/dist/components/notice/index.d.ts +51 -0
- package/dist/components/notice/index.js +243 -0
- package/dist/components/notice/index.js.map +1 -0
- package/dist/components/notice/src/_util/index.d.ts +11 -0
- package/dist/components/notice/src/_util/index.js +50 -0
- package/dist/components/notice/src/_util/index.js.map +1 -0
- package/dist/components/notice/src/style/index.css +1 -0
- package/dist/components/notice/types.d.ts +98 -0
- package/dist/components/number/Number copy.d.ts +966 -0
- package/dist/components/number/Number.d.ts +1034 -0
- package/dist/components/number/Number.js +241 -0
- package/dist/components/number/Number.js.map +1 -0
- package/dist/components/number/config.d.ts +26 -0
- package/dist/components/number/config.js +15 -0
- package/dist/components/number/config.js.map +1 -0
- package/dist/components/number/index.d.ts +3 -0
- package/dist/components/number/style/index.css +1 -0
- package/dist/components/pagination/index.d.ts +3 -0
- package/dist/components/pagination/src/Pagination.d.ts +2830 -0
- package/dist/components/pagination/src/Pagination.js +288 -0
- package/dist/components/pagination/src/Pagination.js.map +1 -0
- package/dist/components/pagination/src/config.d.ts +25 -0
- package/dist/components/pagination/src/config.js +20 -0
- package/dist/components/pagination/src/config.js.map +1 -0
- package/dist/components/pagination/src/style/index.css +1 -0
- package/dist/components/picture/Picture.d.ts +18 -0
- package/dist/components/picture/Picture.js +254 -0
- package/dist/components/picture/Picture.js.map +1 -0
- package/dist/components/picture/PictureToolbar.d.ts +29 -0
- package/dist/components/picture/PictureToolbar.js +97 -0
- package/dist/components/picture/PictureToolbar.js.map +1 -0
- package/dist/components/picture/PictureViewport.d.ts +47 -0
- package/dist/components/picture/PictureViewport.js +203 -0
- package/dist/components/picture/PictureViewport.js.map +1 -0
- package/dist/components/picture/config.d.ts +16 -0
- package/dist/components/picture/config.js +16 -0
- package/dist/components/picture/config.js.map +1 -0
- package/dist/components/picture/index.d.ts +5 -0
- package/dist/components/picture/pictureFlip.d.ts +16 -0
- package/dist/components/picture/pictureFlip.js +103 -0
- package/dist/components/picture/pictureFlip.js.map +1 -0
- package/dist/components/picture/style/index.css +1 -0
- package/dist/components/progress/Progress.d.ts +94 -0
- package/dist/components/progress/Progress.js +112 -0
- package/dist/components/progress/Progress.js.map +1 -0
- package/dist/components/progress/index.d.ts +1 -0
- package/dist/components/progress/style/index.css +1 -0
- package/dist/components/radio/Radio.d.ts +112 -0
- package/dist/components/radio/Radio.js +130 -0
- package/dist/components/radio/Radio.js.map +1 -0
- package/dist/components/radio/config.d.ts +29 -0
- package/dist/components/radio/config.js +18 -0
- package/dist/components/radio/config.js.map +1 -0
- package/dist/components/radio/index.d.ts +3 -0
- package/dist/components/radio/style/index.css +1 -0
- package/dist/components/scrollbar/Scrollbar.d.ts +93 -0
- package/dist/components/scrollbar/Scrollbar.js +515 -0
- package/dist/components/scrollbar/Scrollbar.js.map +1 -0
- package/dist/components/scrollbar/index.d.ts +1 -0
- package/dist/components/scrollbar/style/index.css +1 -0
- package/dist/components/sheet/Sheet.d.ts +1448 -0
- package/dist/components/sheet/Sheet.js +592 -0
- package/dist/components/sheet/Sheet.js.map +1 -0
- package/dist/components/sheet/_cell.d.ts +181 -0
- package/dist/components/sheet/_cell.js +132 -0
- package/dist/components/sheet/_cell.js.map +1 -0
- package/dist/components/sheet/_props.d.ts +170 -0
- package/dist/components/sheet/_props.js +183 -0
- package/dist/components/sheet/_props.js.map +1 -0
- package/dist/components/sheet/_row.d.ts +2 -0
- package/dist/components/sheet/_row.js +14 -0
- package/dist/components/sheet/_row.js.map +1 -0
- package/dist/components/sheet/_tbody.d.ts +348 -0
- package/dist/components/sheet/_tbody.js +255 -0
- package/dist/components/sheet/_tbody.js.map +1 -0
- package/dist/components/sheet/_tfoot.d.ts +195 -0
- package/dist/components/sheet/_tfoot.js +78 -0
- package/dist/components/sheet/_tfoot.js.map +1 -0
- package/dist/components/sheet/_thead.d.ts +529 -0
- package/dist/components/sheet/_thead.js +148 -0
- package/dist/components/sheet/_thead.js.map +1 -0
- package/dist/components/sheet/_use.d.ts +38 -0
- package/dist/components/sheet/_use.js +493 -0
- package/dist/components/sheet/_use.js.map +1 -0
- package/dist/components/sheet/_util.d.ts +34 -0
- package/dist/components/sheet/_util.js +111 -0
- package/dist/components/sheet/_util.js.map +1 -0
- package/dist/components/sheet/index.d.ts +1 -0
- package/dist/components/sheet/style/index.css +1 -0
- package/dist/components/slideDown/SlideDown.d.ts +62 -0
- package/dist/components/slideDown/SlideDown.js +128 -0
- package/dist/components/slideDown/SlideDown.js.map +1 -0
- package/dist/components/slideDown/index.d.ts +1 -0
- package/dist/components/slider/Slider.d.ts +1726 -0
- package/dist/components/slider/Slider.js +471 -0
- package/dist/components/slider/Slider.js.map +1 -0
- package/dist/components/slider/index.d.ts +1 -0
- package/dist/components/slider/style/index.css +1 -0
- package/dist/components/svgIcon/SvgIcon.d.ts +37 -0
- package/dist/components/svgIcon/SvgIcon.js +78 -0
- package/dist/components/svgIcon/SvgIcon.js.map +1 -0
- package/dist/components/svgIcon/index.d.ts +3 -0
- package/dist/components/svgIcon/style/index.css +1 -0
- package/dist/components/switch/Switch.d.ts +105 -0
- package/dist/components/switch/Switch.js +158 -0
- package/dist/components/switch/Switch.js.map +1 -0
- package/dist/components/switch/config.d.ts +16 -0
- package/dist/components/switch/config.js +11 -0
- package/dist/components/switch/config.js.map +1 -0
- package/dist/components/switch/index.d.ts +1 -0
- package/dist/components/switch/style/index.css +1 -0
- package/dist/components/tab/Tab.d.ts +113 -0
- package/dist/components/tab/Tab.js +485 -0
- package/dist/components/tab/Tab.js.map +1 -0
- package/dist/components/tab/index.d.ts +2 -0
- package/dist/components/tab/style/index.css +1 -0
- package/dist/components/textarea/Textarea.d.ts +37 -0
- package/dist/components/textarea/Textarea.js +193 -0
- package/dist/components/textarea/Textarea.js.map +1 -0
- package/dist/components/textarea/config.d.ts +30 -0
- package/dist/components/textarea/config.js +16 -0
- package/dist/components/textarea/config.js.map +1 -0
- package/dist/components/textarea/index.d.ts +4 -0
- package/dist/components/textarea/style/index.css +1 -0
- package/dist/components/time/Dial.js +7 -0
- package/dist/components/time/Dial.js.map +1 -0
- package/dist/components/time/Dial.vue_vue_type_script_setup_true_lang.js +178 -0
- package/dist/components/time/Dial.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/time/TimePicker.d.ts +1301 -0
- package/dist/components/time/TimePicker.js +162 -0
- package/dist/components/time/TimePicker.js.map +1 -0
- package/dist/components/time/_use/useTimeModules.d.ts +1 -0
- package/dist/components/time/index.d.ts +1 -0
- package/dist/components/time/style/dial.css +1 -0
- package/dist/components/time/style/index.css +1 -0
- package/dist/components/toggle/Toggle.d.ts +140 -0
- package/dist/components/toggle/Toggle.js +209 -0
- package/dist/components/toggle/Toggle.js.map +1 -0
- package/dist/components/toggle/index.d.ts +1 -0
- package/dist/components/toggle/style/index.css +1 -0
- package/dist/components/toggle/style/scale.css +1 -0
- package/dist/components/toggle/style/translate.css +1 -0
- package/dist/components/tooltip/Tooltip.d.ts +536 -0
- package/dist/components/tooltip/Tooltip.js +51 -0
- package/dist/components/tooltip/Tooltip.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +1 -0
- package/dist/components/tooltip/style/index.css +1 -0
- package/dist/components/tree/Tree.d.ts +187 -0
- package/dist/components/tree/Tree.js +229 -0
- package/dist/components/tree/Tree.js.map +1 -0
- package/dist/components/tree/TreeItem.d.ts +86 -0
- package/dist/components/tree/TreeItem.js +152 -0
- package/dist/components/tree/TreeItem.js.map +1 -0
- package/dist/components/tree/TreeList.d.ts +86 -0
- package/dist/components/tree/TreeList.js +52 -0
- package/dist/components/tree/TreeList.js.map +1 -0
- package/dist/components/tree/_use/treeState.d.ts +45 -0
- package/dist/components/tree/_use/treeState.js +417 -0
- package/dist/components/tree/_use/treeState.js.map +1 -0
- package/dist/components/tree/config.d.ts +27 -0
- package/dist/components/tree/config.js +16 -0
- package/dist/components/tree/config.js.map +1 -0
- package/dist/components/tree/index.d.ts +4 -0
- package/dist/components/tree/style/index.css +1 -0
- package/dist/components/tree-choose/TreeChoose.d.ts +833 -0
- package/dist/components/tree-choose/TreeChoose.js +320 -0
- package/dist/components/tree-choose/TreeChoose.js.map +1 -0
- package/dist/components/tree-choose/config.d.ts +41 -0
- package/dist/components/tree-choose/config.js +19 -0
- package/dist/components/tree-choose/config.js.map +1 -0
- package/dist/components/tree-choose/index.d.ts +4 -0
- package/dist/components/tree-choose/style/index.css +1 -0
- package/dist/components/trigger/Trigger.d.ts +921 -0
- package/dist/components/trigger/Trigger.js +105 -0
- package/dist/components/trigger/Trigger.js.map +1 -0
- package/dist/components/trigger/index.d.ts +1 -0
- package/dist/components/trigger/style/index.css +2 -0
- package/dist/components/upload/Upload.d.ts +249 -0
- package/dist/components/upload/Upload.js +342 -0
- package/dist/components/upload/Upload.js.map +1 -0
- package/dist/components/upload/config.d.ts +39 -0
- package/dist/components/upload/config.js +21 -0
- package/dist/components/upload/config.js.map +1 -0
- package/dist/components/upload/index.d.ts +4 -0
- package/dist/components/upload/style/index.css +1 -0
- package/dist/components/upload/types.d.ts +47 -0
- package/dist/components/virtual/Virtual.d.ts +57 -0
- package/dist/components/virtual/Virtual.js +62 -0
- package/dist/components/virtual/Virtual.js.map +1 -0
- package/dist/components/virtual/Virtual/345/216/237/347/211/210.d.ts +44 -0
- package/dist/components/virtual/index.d.ts +4 -0
- package/dist/components/virtual/style/index.css +1 -0
- package/dist/components/virtual/useVirtualList.d.ts +50 -0
- package/dist/components/virtual/useVirtualList.js +376 -0
- package/dist/components/virtual/useVirtualList.js.map +1 -0
- package/dist/components/write/Write.d.ts +532 -0
- package/dist/components/write/Write.js +228 -0
- package/dist/components/write/Write.js.map +1 -0
- package/dist/components/write/index.d.ts +1 -0
- package/dist/components/write/style/index.css +1 -0
- package/dist/config/dictionary.d.ts +21 -0
- package/dist/config/dictionary.js +28 -0
- package/dist/config/dictionary.js.map +1 -0
- package/dist/config/i18n.d.ts +22 -0
- package/dist/config/i18n.js +53 -0
- package/dist/config/i18n.js.map +1 -0
- package/dist/config/plugin.d.ts +88 -0
- package/dist/config/plugin.js +13 -0
- package/dist/config/plugin.js.map +1 -0
- package/dist/config/types.d.ts +56 -0
- package/dist/directives/clickOutside.d.ts +10 -0
- package/dist/directives/clickOutside.js +69 -0
- package/dist/directives/clickOutside.js.map +1 -0
- package/dist/directives/index.d.ts +3 -0
- package/dist/directives/index.js +13 -0
- package/dist/directives/index.js.map +1 -0
- package/dist/directives/loading.d.ts +19 -0
- package/dist/directives/loading.js +64 -0
- package/dist/directives/loading.js.map +1 -0
- package/dist/index.d.ts +127 -0
- package/dist/index.js +91 -0
- package/dist/locales/de-DE/index.d.ts +144 -0
- package/dist/locales/de-DE/index.js +140 -0
- package/dist/locales/de-DE/index.js.map +1 -0
- package/dist/locales/en-US/index.d.ts +144 -0
- package/dist/locales/en-US/index.js +140 -0
- package/dist/locales/en-US/index.js.map +1 -0
- package/dist/locales/index.d.ts +3 -0
- package/dist/locales/zh-CN/index.d.ts +144 -0
- package/dist/locales/zh-CN/index.js +140 -0
- package/dist/locales/zh-CN/index.js.map +1 -0
- package/dist/plugin.d.ts +6 -0
- package/dist/plugin.js +38 -0
- package/dist/plugin.js.map +1 -0
- package/dist/styles/index.css +49 -0
- package/dist/theme/_transition.css +169 -0
- package/dist/theme/index.css +5 -0
- package/dist/theme/tokens/_base.css +7 -0
- package/dist/theme/tokens/_common.css +37 -0
- package/dist/theme/tokens/_scrollbar.css +53 -0
- package/dist/theme/tokens/_size.css +18 -0
- package/dist/theme/tokens/_text.css +16 -0
- package/dist/theme/tokens/_var.css +1087 -0
- package/dist/theme/tokens/components/audioPlayer.css +542 -0
- package/dist/theme/tokens/components/btn.css +253 -0
- package/dist/theme/tokens/components/btnGroup.css +68 -0
- package/dist/theme/tokens/components/cascade.css +77 -0
- package/dist/theme/tokens/components/checkbox.css +100 -0
- package/dist/theme/tokens/components/choose.css +175 -0
- package/dist/theme/tokens/components/choose2.css +242 -0
- package/dist/theme/tokens/components/chooseItem.css +54 -0
- package/dist/theme/tokens/components/circleProgress.css +61 -0
- package/dist/theme/tokens/components/close.css +12 -0
- package/dist/theme/tokens/components/colorPicker.css +404 -0
- package/dist/theme/tokens/components/confirm.css +128 -0
- package/dist/theme/tokens/components/copy.css +80 -0
- package/dist/theme/tokens/components/cornerEars.css +102 -0
- package/dist/theme/tokens/components/date/days.css +79 -0
- package/dist/theme/tokens/components/date/index.css +249 -0
- package/dist/theme/tokens/components/date/months.css +68 -0
- package/dist/theme/tokens/components/drawer.css +189 -0
- package/dist/theme/tokens/components/ellipsis.css +46 -0
- package/dist/theme/tokens/components/empty.css +24 -0
- package/dist/theme/tokens/components/equalizer.css +51 -0
- package/dist/theme/tokens/components/fallback.css +4 -0
- package/dist/theme/tokens/components/form.css +50 -0
- package/dist/theme/tokens/components/formItem.css +194 -0
- package/dist/theme/tokens/components/icon.css +41 -0
- package/dist/theme/tokens/components/image.css +70 -0
- package/dist/theme/tokens/components/layer.css +190 -0
- package/dist/theme/tokens/components/lcdFont.css +121 -0
- package/dist/theme/tokens/components/list.css +97 -0
- package/dist/theme/tokens/components/loading.css +64 -0
- package/dist/theme/tokens/components/mask.css +26 -0
- package/dist/theme/tokens/components/match.css +119 -0
- package/dist/theme/tokens/components/modal.css +136 -0
- package/dist/theme/tokens/components/notice.css +264 -0
- package/dist/theme/tokens/components/number.css +150 -0
- package/dist/theme/tokens/components/pagination.css +215 -0
- package/dist/theme/tokens/components/picture.css +299 -0
- package/dist/theme/tokens/components/progress.css +101 -0
- package/dist/theme/tokens/components/radio.css +183 -0
- package/dist/theme/tokens/components/scrollbar.css +160 -0
- package/dist/theme/tokens/components/sheet.css +518 -0
- package/dist/theme/tokens/components/slider.css +171 -0
- package/dist/theme/tokens/components/svgIcon.css +6 -0
- package/dist/theme/tokens/components/switch.css +67 -0
- package/dist/theme/tokens/components/tab.css +215 -0
- package/dist/theme/tokens/components/textarea.css +109 -0
- package/dist/theme/tokens/components/time/dial.css +123 -0
- package/dist/theme/tokens/components/time/index.css +29 -0
- package/dist/theme/tokens/components/toggle/index.css +14 -0
- package/dist/theme/tokens/components/toggle/scale.css +34 -0
- package/dist/theme/tokens/components/toggle/translate.css +41 -0
- package/dist/theme/tokens/components/tooltip.css +77 -0
- package/dist/theme/tokens/components/tree-choose.css +154 -0
- package/dist/theme/tokens/components/tree.css +172 -0
- package/dist/theme/tokens/components/trigger.css +90 -0
- package/dist/theme/tokens/components/upload.css +302 -0
- package/dist/theme/tokens/components/virtual.css +6 -0
- package/dist/theme/tokens/components/write.css +155 -0
- package/dist/theme/tokens/iconfont/iconfont.css +103 -0
- package/dist/theme/tokens/iconfont/iconfont.ttf +0 -0
- package/dist/theme/tokens/iconfont/iconfont.woff +0 -0
- package/dist/theme/tokens/iconfont/iconfont.woff2 +0 -0
- package/dist/theme/tokens/index.css +19 -0
- package/dist/use/index.d.ts +34 -0
- package/dist/use/toggle/types.d.ts +27 -0
- package/dist/use/toggle/useToggle.d.ts +22 -0
- package/dist/use/toggle/useToggleArray.d.ts +14 -0
- package/dist/use/toggle/useToggleArray.js +36 -0
- package/dist/use/toggle/useToggleArray.js.map +1 -0
- package/dist/use/toggle/useToggleCycle.d.ts +11 -0
- package/dist/use/toggle/useToggleCycle.js +88 -0
- package/dist/use/toggle/useToggleCycle.js.map +1 -0
- package/dist/use/toggle/useToggleMap.d.ts +10 -0
- package/dist/use/toggle/useToggleObject.d.ts +13 -0
- package/dist/use/useAudioPlayer.d.ts +160 -0
- package/dist/use/useAudioPlayer.js +799 -0
- package/dist/use/useAudioPlayer.js.map +1 -0
- package/dist/use/useBoundingClientRect.d.ts +14 -0
- package/dist/use/useBoundingClientRect.js +54 -0
- package/dist/use/useBoundingClientRect.js.map +1 -0
- package/dist/use/useChildComponentsCollector.js +30 -0
- package/dist/use/useChildComponentsCollector.js.map +1 -0
- package/dist/use/useComponentClass.d.ts +1 -0
- package/dist/use/useComponentClass.js +6 -0
- package/dist/use/useComponentClass.js.map +1 -0
- package/dist/use/useComponentConfig.d.ts +10 -0
- package/dist/use/useComponentConfig.js +31 -0
- package/dist/use/useComponentConfig.js.map +1 -0
- package/dist/use/useCount.d.ts +13 -0
- package/dist/use/useCount.js +36 -0
- package/dist/use/useCount.js.map +1 -0
- package/dist/use/useDate.d.ts +53 -0
- package/dist/use/useDate.js +280 -0
- package/dist/use/useDate.js.map +1 -0
- package/dist/use/useDelay.d.ts +5 -0
- package/dist/use/useDelay.js +38 -0
- package/dist/use/useDelay.js.map +1 -0
- package/dist/use/useDrag.d.ts +17 -0
- package/dist/use/useElement.d.ts +15 -0
- package/dist/use/useElement.js +41 -0
- package/dist/use/useElement.js.map +1 -0
- package/dist/use/useEscStack.d.ts +14 -0
- package/dist/use/useEscStack.js +62 -0
- package/dist/use/useEscStack.js.map +1 -0
- package/dist/use/useEvent.d.ts +9 -0
- package/dist/use/useEvent.js +43 -0
- package/dist/use/useEvent.js.map +1 -0
- package/dist/use/useFormItem.d.ts +9 -0
- package/dist/use/useFormItem.js +20 -0
- package/dist/use/useFormItem.js.map +1 -0
- package/dist/use/useGlobalZIndex.d.ts +6 -0
- package/dist/use/useGlobalZIndex.js +28 -0
- package/dist/use/useGlobalZIndex.js.map +1 -0
- package/dist/use/useMouse.d.ts +15 -0
- package/dist/use/useMouse.js +36 -0
- package/dist/use/useMouse.js.map +1 -0
- package/dist/use/useMousePositionInElement.d.ts +6 -0
- package/dist/use/useMousePositionInElement.js +27 -0
- package/dist/use/useMousePositionInElement.js.map +1 -0
- package/dist/use/useParentNode.d.ts +3 -0
- package/dist/use/useParentNode.js +25 -0
- package/dist/use/useParentNode.js.map +1 -0
- package/dist/use/usePercentDrag.d.ts +20 -0
- package/dist/use/usePercentDrag.js +59 -0
- package/dist/use/usePercentDrag.js.map +1 -0
- package/dist/use/usePictureViewport.d.ts +57 -0
- package/dist/use/usePictureViewport.js +229 -0
- package/dist/use/usePictureViewport.js.map +1 -0
- package/dist/use/useRequest.d.ts +7 -0
- package/dist/use/useRequest.js +31 -0
- package/dist/use/useRequest.js.map +1 -0
- package/dist/use/useScaleFromPoint.d.ts +57 -0
- package/dist/use/useScaleFromPoint.js +325 -0
- package/dist/use/useScaleFromPoint.js.map +1 -0
- package/dist/use/useScroll.d.ts +9 -0
- package/dist/use/useScroll.js +60 -0
- package/dist/use/useScroll.js.map +1 -0
- package/dist/use/useSearch.d.ts +11 -0
- package/dist/use/useSearch.js +65 -0
- package/dist/use/useSearch.js.map +1 -0
- package/dist/use/useSlot.d.ts +10 -0
- package/dist/use/useSlot.js +57 -0
- package/dist/use/useSlot.js.map +1 -0
- package/dist/use/useTabIndex.d.ts +1 -0
- package/dist/use/useTabIndex.js +18 -0
- package/dist/use/useTabIndex.js.map +1 -0
- package/dist/use/useUII18n.js +26 -0
- package/dist/use/useUII18n.js.map +1 -0
- package/dist/use/useUpload.d.ts +49 -0
- package/dist/use/useUpload.js +396 -0
- package/dist/use/useUpload.js.map +1 -0
- package/dist/use/useVisibleResize.d.ts +6 -0
- package/dist/use/useVisibleResize.js +77 -0
- package/dist/use/useVisibleResize.js.map +1 -0
- package/dist/util/calc.d.ts +40 -0
- package/dist/util/calc.js +239 -0
- package/dist/util/calc.js.map +1 -0
- package/dist/util/colors.d.ts +78 -0
- package/dist/util/colors.js +320 -0
- package/dist/util/colors.js.map +1 -0
- package/dist/util/cssVars.d.ts +62 -0
- package/dist/util/cssVars.js +170 -0
- package/dist/util/cssVars.js.map +1 -0
- package/dist/util/dom.d.ts +65 -0
- package/dist/util/dom.js +212 -0
- package/dist/util/dom.js.map +1 -0
- package/dist/util/index.d.ts +5 -0
- package/dist/util/tools.d.ts +54 -0
- package/dist/util/tools.js +90 -0
- package/dist/util/tools.js.map +1 -0
- package/dist/util/vnode.d.ts +2 -0
- package/package.json +88 -0
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
import { propColorToCssVars, propSizeToCssVars, toCssVarsStyle } from "../../util/cssVars.js";
|
|
2
|
+
import { computed, createVNode, defineComponent, nextTick, onBeforeUnmount, onMounted, reactive, ref, watch } from "vue";
|
|
3
|
+
//#region components/tab/Tab.tsx
|
|
4
|
+
var Tab = /* @__PURE__ */ defineComponent({
|
|
5
|
+
name: "Tab",
|
|
6
|
+
props: {
|
|
7
|
+
/**
|
|
8
|
+
* 当前激活标签的值(v-model)
|
|
9
|
+
* 与 index 二选一即可;同时传入时以 modelValue 为准
|
|
10
|
+
*/
|
|
11
|
+
modelValue: {
|
|
12
|
+
type: [
|
|
13
|
+
String,
|
|
14
|
+
Number,
|
|
15
|
+
Boolean,
|
|
16
|
+
Object
|
|
17
|
+
],
|
|
18
|
+
default: void 0
|
|
19
|
+
},
|
|
20
|
+
/**
|
|
21
|
+
* 当前激活标签索引(v-model:index)
|
|
22
|
+
* @default 0
|
|
23
|
+
*/
|
|
24
|
+
index: {
|
|
25
|
+
type: Number,
|
|
26
|
+
default: 0
|
|
27
|
+
},
|
|
28
|
+
/**
|
|
29
|
+
* 标签数据源
|
|
30
|
+
* 支持格式:
|
|
31
|
+
* - 对象数组: [{ label: '标签名', value: '值' }]
|
|
32
|
+
* - 纯字符串数组: ['标签1', '标签2']
|
|
33
|
+
* - 键值对对象: { '标签1': '值1', '标签2': '值2' }
|
|
34
|
+
*/
|
|
35
|
+
data: {
|
|
36
|
+
type: [Array, Object],
|
|
37
|
+
required: true
|
|
38
|
+
},
|
|
39
|
+
/**
|
|
40
|
+
* 自定义标签项 CSS 类名
|
|
41
|
+
*/
|
|
42
|
+
itemClass: { type: [
|
|
43
|
+
String,
|
|
44
|
+
Object,
|
|
45
|
+
Array
|
|
46
|
+
] },
|
|
47
|
+
/**
|
|
48
|
+
* 激活态额外 CSS 类名
|
|
49
|
+
*/
|
|
50
|
+
activeItemClass: { type: [
|
|
51
|
+
String,
|
|
52
|
+
Object,
|
|
53
|
+
Array
|
|
54
|
+
] },
|
|
55
|
+
/**
|
|
56
|
+
* 自定义指示线条样式
|
|
57
|
+
*/
|
|
58
|
+
lineStyle: { type: Function },
|
|
59
|
+
/**
|
|
60
|
+
* 标签方向
|
|
61
|
+
* @default 'horizontal'
|
|
62
|
+
*/
|
|
63
|
+
direction: {
|
|
64
|
+
type: String,
|
|
65
|
+
default: "horizontal"
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* 标签类型
|
|
69
|
+
* @default 'default'
|
|
70
|
+
*/
|
|
71
|
+
type: {
|
|
72
|
+
type: String,
|
|
73
|
+
default: "default"
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* 是否显示激活线条
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
showLine: {
|
|
80
|
+
type: Boolean,
|
|
81
|
+
default: true
|
|
82
|
+
},
|
|
83
|
+
/**
|
|
84
|
+
* 线条宽度,默认与标签内容宽度一致(水平方向)
|
|
85
|
+
*/
|
|
86
|
+
lineWidth: { type: [Number, String] },
|
|
87
|
+
/**
|
|
88
|
+
* 线条高度,默认与标签内容高度一致(垂直方向)
|
|
89
|
+
* @default 2
|
|
90
|
+
*/
|
|
91
|
+
lineHeight: {
|
|
92
|
+
type: [Number, String],
|
|
93
|
+
default: 2
|
|
94
|
+
},
|
|
95
|
+
/**
|
|
96
|
+
* 是否可关闭
|
|
97
|
+
* @default false
|
|
98
|
+
*/
|
|
99
|
+
closable: {
|
|
100
|
+
type: Boolean,
|
|
101
|
+
default: false
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* 数据中标签文字的字段名
|
|
105
|
+
* @default 'label'
|
|
106
|
+
*/
|
|
107
|
+
labelField: {
|
|
108
|
+
type: String,
|
|
109
|
+
default: "label"
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* 数据中值的字段名
|
|
113
|
+
* @default 'value'
|
|
114
|
+
*/
|
|
115
|
+
valueField: {
|
|
116
|
+
type: String,
|
|
117
|
+
default: "value"
|
|
118
|
+
},
|
|
119
|
+
/** 品牌主色 → `--w-prop-tab-color` */
|
|
120
|
+
color: {
|
|
121
|
+
type: String,
|
|
122
|
+
default: void 0
|
|
123
|
+
},
|
|
124
|
+
/** 实例尺度(px)→ `--w-prop-tab-size` */
|
|
125
|
+
size: {
|
|
126
|
+
type: Number,
|
|
127
|
+
default: void 0
|
|
128
|
+
},
|
|
129
|
+
/** 实例 CSS 变量 */
|
|
130
|
+
cssVars: {
|
|
131
|
+
type: Object,
|
|
132
|
+
default: void 0
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
emits: {
|
|
136
|
+
/**
|
|
137
|
+
* 值变化事件(用于 v-model)
|
|
138
|
+
*/
|
|
139
|
+
"update:modelValue": (value) => true,
|
|
140
|
+
/**
|
|
141
|
+
* 索引变化事件(用于 v-model:index)
|
|
142
|
+
*/
|
|
143
|
+
"update:index": (index) => true,
|
|
144
|
+
/**
|
|
145
|
+
* 切换标签时触发
|
|
146
|
+
*/
|
|
147
|
+
change: (value, index, item) => true,
|
|
148
|
+
/**
|
|
149
|
+
* 点击标签时触发(无论是否切换)
|
|
150
|
+
*/
|
|
151
|
+
click: (value, index, item) => true,
|
|
152
|
+
/**
|
|
153
|
+
* 关闭标签时触发
|
|
154
|
+
*/
|
|
155
|
+
close: (value, index, item) => true
|
|
156
|
+
},
|
|
157
|
+
slots: Object,
|
|
158
|
+
setup(props, { emit, slots, expose }) {
|
|
159
|
+
const rootRef = ref();
|
|
160
|
+
const lineRef = ref();
|
|
161
|
+
const items = ref([]);
|
|
162
|
+
const currentIndex = ref(0);
|
|
163
|
+
const linePos = reactive({
|
|
164
|
+
left: 0,
|
|
165
|
+
top: 0,
|
|
166
|
+
width: 0,
|
|
167
|
+
height: 0
|
|
168
|
+
});
|
|
169
|
+
const processedData = computed(() => {
|
|
170
|
+
const { data, labelField, valueField } = props;
|
|
171
|
+
if (Array.isArray(data)) return data.map((item, index) => {
|
|
172
|
+
if (typeof item === "string" || typeof item === "number") return {
|
|
173
|
+
[labelField]: item,
|
|
174
|
+
[valueField]: item,
|
|
175
|
+
_index: index
|
|
176
|
+
};
|
|
177
|
+
return {
|
|
178
|
+
...item,
|
|
179
|
+
[labelField]: item[labelField] ?? item.label ?? String(index),
|
|
180
|
+
[valueField]: item[valueField] !== void 0 ? item[valueField] : item.value !== void 0 ? item.value : index,
|
|
181
|
+
_index: index
|
|
182
|
+
};
|
|
183
|
+
});
|
|
184
|
+
return Object.entries(data || {}).map(([key, value], index) => ({
|
|
185
|
+
[labelField]: key,
|
|
186
|
+
[valueField]: value,
|
|
187
|
+
_index: index
|
|
188
|
+
}));
|
|
189
|
+
});
|
|
190
|
+
const dataLength = computed(() => processedData.value.length);
|
|
191
|
+
const currentItem = computed(() => processedData.value[currentIndex.value]);
|
|
192
|
+
const currentValue = computed(() => {
|
|
193
|
+
return currentItem.value?.[props.valueField];
|
|
194
|
+
});
|
|
195
|
+
const isVertical = computed(() => props.direction === "vertical");
|
|
196
|
+
const computedLineStyle = computed(() => {
|
|
197
|
+
const { lineStyle, lineWidth, lineHeight } = props;
|
|
198
|
+
if (lineStyle) return lineStyle(linePos);
|
|
199
|
+
if (isVertical.value) {
|
|
200
|
+
let height = linePos.height;
|
|
201
|
+
if (lineHeight !== void 0) height = typeof lineHeight === "number" ? lineHeight : parseFloat(String(lineHeight));
|
|
202
|
+
const width = lineWidth !== void 0 ? typeof lineWidth === "number" ? lineWidth : parseFloat(String(lineWidth)) : 2;
|
|
203
|
+
return {
|
|
204
|
+
transform: `translate3d(${linePos.left + linePos.width - width}px, ${lineHeight !== void 0 ? linePos.top + (linePos.height - height) / 2 : linePos.top}px, 0)`,
|
|
205
|
+
width: `${width}px`,
|
|
206
|
+
height: `${height}px`
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
let width = linePos.width;
|
|
210
|
+
if (lineWidth !== void 0) width = typeof lineWidth === "number" ? lineWidth : parseFloat(String(lineWidth));
|
|
211
|
+
const height = typeof lineHeight === "number" ? lineHeight : parseFloat(String(lineHeight));
|
|
212
|
+
return {
|
|
213
|
+
transform: `translate3d(${lineWidth !== void 0 ? linePos.left + (linePos.width - width) / 2 : linePos.left}px, ${linePos.top + linePos.height - height}px, 0)`,
|
|
214
|
+
width: `${width}px`,
|
|
215
|
+
height: typeof lineHeight === "number" ? `${lineHeight}px` : String(lineHeight)
|
|
216
|
+
};
|
|
217
|
+
});
|
|
218
|
+
const containerClass = computed(() => [
|
|
219
|
+
"w-tab",
|
|
220
|
+
`w-tab--${props.direction}`,
|
|
221
|
+
`w-tab--${props.type}`,
|
|
222
|
+
{
|
|
223
|
+
"w-tab--no-line": !props.showLine,
|
|
224
|
+
"w-tab--closable": props.closable
|
|
225
|
+
}
|
|
226
|
+
]);
|
|
227
|
+
function clampIndex(index) {
|
|
228
|
+
if (dataLength.value <= 0) return 0;
|
|
229
|
+
return Math.min(Math.max(index, 0), dataLength.value - 1);
|
|
230
|
+
}
|
|
231
|
+
function findIndexByValue(value) {
|
|
232
|
+
return processedData.value.findIndex((item) => item[props.valueField] === value);
|
|
233
|
+
}
|
|
234
|
+
function findEnabledIndex(from, step) {
|
|
235
|
+
const len = dataLength.value;
|
|
236
|
+
if (len <= 0) return -1;
|
|
237
|
+
let i = from;
|
|
238
|
+
for (let n = 0; n < len; n++) {
|
|
239
|
+
i = (i + step + len) % len;
|
|
240
|
+
if (!processedData.value[i]?.disabled) return i;
|
|
241
|
+
}
|
|
242
|
+
return -1;
|
|
243
|
+
}
|
|
244
|
+
function resolveIndexFromProps() {
|
|
245
|
+
if (props.modelValue !== void 0) {
|
|
246
|
+
const byValue = findIndexByValue(props.modelValue);
|
|
247
|
+
if (byValue !== -1) return byValue;
|
|
248
|
+
}
|
|
249
|
+
return clampIndex(props.index ?? 0);
|
|
250
|
+
}
|
|
251
|
+
function syncActive(index, options) {
|
|
252
|
+
const next = clampIndex(index);
|
|
253
|
+
const item = processedData.value[next];
|
|
254
|
+
if (!item || item.disabled) return;
|
|
255
|
+
const value = item[props.valueField];
|
|
256
|
+
const changed = currentIndex.value !== next;
|
|
257
|
+
currentIndex.value = next;
|
|
258
|
+
emit("update:index", next);
|
|
259
|
+
emit("update:modelValue", value);
|
|
260
|
+
if (changed && options?.emitChange !== false) emit("change", value, next, item);
|
|
261
|
+
}
|
|
262
|
+
function getItemLabel(index) {
|
|
263
|
+
return processedData.value[index]?.[props.labelField];
|
|
264
|
+
}
|
|
265
|
+
function getItemClass(index, item) {
|
|
266
|
+
return [
|
|
267
|
+
"w-tab-item",
|
|
268
|
+
props.itemClass,
|
|
269
|
+
{
|
|
270
|
+
"w-tab-item-active": currentIndex.value === index,
|
|
271
|
+
"w-tab-item-disabled": item.disabled
|
|
272
|
+
},
|
|
273
|
+
currentIndex.value === index && props.activeItemClass
|
|
274
|
+
].filter(Boolean);
|
|
275
|
+
}
|
|
276
|
+
function createSlotOptions(index, item) {
|
|
277
|
+
return {
|
|
278
|
+
index,
|
|
279
|
+
item,
|
|
280
|
+
value: item?.[props.valueField],
|
|
281
|
+
label: item?.[props.labelField],
|
|
282
|
+
isActive: currentIndex.value === index
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
function handleClick(index, item) {
|
|
286
|
+
const value = item[props.valueField];
|
|
287
|
+
emit("click", value, index, item);
|
|
288
|
+
if (item.disabled) return;
|
|
289
|
+
if (currentIndex.value !== index) syncActive(index);
|
|
290
|
+
}
|
|
291
|
+
function handleClose(index, item, event) {
|
|
292
|
+
event.stopPropagation();
|
|
293
|
+
emit("close", item[props.valueField], index, item);
|
|
294
|
+
}
|
|
295
|
+
function handleKeydown(event) {
|
|
296
|
+
const { key } = event;
|
|
297
|
+
const vertical = isVertical.value;
|
|
298
|
+
let next = -1;
|
|
299
|
+
if (vertical && key === "ArrowDown" || !vertical && key === "ArrowRight") next = findEnabledIndex(currentIndex.value, 1);
|
|
300
|
+
else if (vertical && key === "ArrowUp" || !vertical && key === "ArrowLeft") next = findEnabledIndex(currentIndex.value, -1);
|
|
301
|
+
else if (key === "Home") next = findEnabledIndex(-1, 1);
|
|
302
|
+
else if (key === "End") next = findEnabledIndex(dataLength.value, -1);
|
|
303
|
+
else return;
|
|
304
|
+
if (next === -1) return;
|
|
305
|
+
event.preventDefault();
|
|
306
|
+
syncActive(next);
|
|
307
|
+
nextTick(() => items.value[next]?.focus());
|
|
308
|
+
}
|
|
309
|
+
watch(() => props.modelValue, (value) => {
|
|
310
|
+
if (value === void 0) return;
|
|
311
|
+
const i = findIndexByValue(value);
|
|
312
|
+
if (i !== -1 && i !== currentIndex.value) currentIndex.value = i;
|
|
313
|
+
});
|
|
314
|
+
watch(() => props.index, (index) => {
|
|
315
|
+
if (props.modelValue !== void 0) return;
|
|
316
|
+
const next = clampIndex(index);
|
|
317
|
+
if (next !== currentIndex.value) currentIndex.value = next;
|
|
318
|
+
});
|
|
319
|
+
watch(processedData, (list) => {
|
|
320
|
+
if (!list.length) {
|
|
321
|
+
currentIndex.value = 0;
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
if (props.modelValue !== void 0) {
|
|
325
|
+
const byValue = findIndexByValue(props.modelValue);
|
|
326
|
+
if (byValue !== -1) {
|
|
327
|
+
if (byValue !== currentIndex.value) currentIndex.value = byValue;
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const next = clampIndex(currentIndex.value);
|
|
331
|
+
const item = list[next];
|
|
332
|
+
currentIndex.value = next;
|
|
333
|
+
if (item) {
|
|
334
|
+
emit("update:index", next);
|
|
335
|
+
emit("update:modelValue", item[props.valueField]);
|
|
336
|
+
}
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
if (currentIndex.value >= list.length) {
|
|
340
|
+
const next = clampIndex(list.length - 1);
|
|
341
|
+
const item = list[next];
|
|
342
|
+
currentIndex.value = next;
|
|
343
|
+
if (item) {
|
|
344
|
+
emit("update:index", next);
|
|
345
|
+
emit("update:modelValue", item[props.valueField]);
|
|
346
|
+
}
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
if (list[currentIndex.value]?.disabled) {
|
|
350
|
+
const next = findEnabledIndex(currentIndex.value - 1, 1);
|
|
351
|
+
if (next !== -1) syncActive(next, { emitChange: false });
|
|
352
|
+
}
|
|
353
|
+
}, { deep: true });
|
|
354
|
+
currentIndex.value = resolveIndexFromProps();
|
|
355
|
+
let rafId = null;
|
|
356
|
+
function measureLine() {
|
|
357
|
+
const root = rootRef.value;
|
|
358
|
+
if (!root || !items.value?.length) return;
|
|
359
|
+
const activeItem = items.value[currentIndex.value];
|
|
360
|
+
if (!activeItem) {
|
|
361
|
+
linePos.width = 0;
|
|
362
|
+
linePos.height = 0;
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
const rootRect = root.getBoundingClientRect();
|
|
366
|
+
const itemRect = activeItem.getBoundingClientRect();
|
|
367
|
+
linePos.left = itemRect.left - rootRect.left;
|
|
368
|
+
linePos.top = itemRect.top - rootRect.top;
|
|
369
|
+
linePos.width = itemRect.width;
|
|
370
|
+
linePos.height = itemRect.height;
|
|
371
|
+
}
|
|
372
|
+
function scheduleUpdate() {
|
|
373
|
+
if (rafId != null) return;
|
|
374
|
+
if (typeof requestAnimationFrame === "undefined") {
|
|
375
|
+
measureLine();
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
rafId = requestAnimationFrame(() => {
|
|
379
|
+
rafId = null;
|
|
380
|
+
measureLine();
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
watch([
|
|
384
|
+
currentIndex,
|
|
385
|
+
() => props.direction,
|
|
386
|
+
processedData
|
|
387
|
+
], () => {
|
|
388
|
+
scheduleUpdate();
|
|
389
|
+
}, { flush: "post" });
|
|
390
|
+
let resizeObserver = null;
|
|
391
|
+
onMounted(() => {
|
|
392
|
+
scheduleUpdate();
|
|
393
|
+
if (typeof ResizeObserver !== "undefined" && rootRef.value) {
|
|
394
|
+
resizeObserver = new ResizeObserver(() => scheduleUpdate());
|
|
395
|
+
resizeObserver.observe(rootRef.value);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
onBeforeUnmount(() => {
|
|
399
|
+
resizeObserver?.disconnect();
|
|
400
|
+
resizeObserver = null;
|
|
401
|
+
if (rafId != null) {
|
|
402
|
+
cancelAnimationFrame(rafId);
|
|
403
|
+
rafId = null;
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
expose({
|
|
407
|
+
currentIndex,
|
|
408
|
+
currentItem,
|
|
409
|
+
currentValue,
|
|
410
|
+
processedData,
|
|
411
|
+
setIndex: (index) => {
|
|
412
|
+
if (index >= 0 && index < dataLength.value) handleClick(index, processedData.value[index]);
|
|
413
|
+
},
|
|
414
|
+
setValue: (value) => {
|
|
415
|
+
const index = findIndexByValue(value);
|
|
416
|
+
if (index !== -1) handleClick(index, processedData.value[index]);
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
return () => {
|
|
420
|
+
const tokenStyle = toCssVarsStyle({
|
|
421
|
+
...propSizeToCssVars("tab", props.size),
|
|
422
|
+
...propColorToCssVars("tab", props.color),
|
|
423
|
+
...props.cssVars
|
|
424
|
+
});
|
|
425
|
+
const list = createVNode("ul", {
|
|
426
|
+
"class": containerClass.value,
|
|
427
|
+
"style": slots.content ? void 0 : tokenStyle,
|
|
428
|
+
"ref": rootRef,
|
|
429
|
+
"role": "tablist",
|
|
430
|
+
"aria-orientation": props.direction,
|
|
431
|
+
"onKeydown": handleKeydown
|
|
432
|
+
}, [props.showLine && props.type === "default" && createVNode("li", {
|
|
433
|
+
"class": "w-tab-line",
|
|
434
|
+
"ref": lineRef,
|
|
435
|
+
"style": computedLineStyle.value,
|
|
436
|
+
"aria-hidden": "true"
|
|
437
|
+
}, null), processedData.value.map((item, index) => {
|
|
438
|
+
const slotOptions = createSlotOptions(index, item);
|
|
439
|
+
const label = getItemLabel(index);
|
|
440
|
+
const isActive = currentIndex.value === index;
|
|
441
|
+
const itemClosable = !item.disabled && (item.closable === true || props.closable && item.closable !== false);
|
|
442
|
+
return createVNode("li", {
|
|
443
|
+
"key": item[props.valueField] ?? index,
|
|
444
|
+
"ref": (el) => {
|
|
445
|
+
items.value[index] = el;
|
|
446
|
+
if (index === 0 && items.value.length > dataLength.value) items.value.length = dataLength.value;
|
|
447
|
+
},
|
|
448
|
+
"class": getItemClass(index, item),
|
|
449
|
+
"role": "tab",
|
|
450
|
+
"tabindex": isActive ? 0 : -1,
|
|
451
|
+
"aria-selected": isActive,
|
|
452
|
+
"aria-disabled": !!item.disabled,
|
|
453
|
+
"onClick": () => handleClick(index, item)
|
|
454
|
+
}, [slots.default ? slots.default(slotOptions) : createVNode("span", { "class": "w-tab-item-label" }, [label]), itemClosable && createVNode("span", {
|
|
455
|
+
"class": "w-tab-item-close",
|
|
456
|
+
"role": "button",
|
|
457
|
+
"tabindex": -1,
|
|
458
|
+
"aria-label": "close",
|
|
459
|
+
"onClick": (e) => handleClose(index, item, e)
|
|
460
|
+
}, [slots.close ? slots.close(slotOptions) : "×"])]);
|
|
461
|
+
})]);
|
|
462
|
+
if (!slots.content) return list;
|
|
463
|
+
const active = currentItem.value;
|
|
464
|
+
const panelScope = createSlotOptions(currentIndex.value, active || {
|
|
465
|
+
[props.labelField]: "",
|
|
466
|
+
[props.valueField]: void 0
|
|
467
|
+
});
|
|
468
|
+
return createVNode("div", {
|
|
469
|
+
"class": [
|
|
470
|
+
"w-tab-wrapper",
|
|
471
|
+
`w-tab-wrapper--${props.direction}`,
|
|
472
|
+
`w-tab-wrapper--${props.type}`
|
|
473
|
+
],
|
|
474
|
+
"style": tokenStyle
|
|
475
|
+
}, [list, createVNode("div", {
|
|
476
|
+
"class": "w-tab-panel",
|
|
477
|
+
"role": "tabpanel"
|
|
478
|
+
}, [slots.content(panelScope)])]);
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
//#endregion
|
|
483
|
+
export { Tab as default };
|
|
484
|
+
|
|
485
|
+
//# sourceMappingURL=Tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tab.js","names":["defineComponent","reactive","ref","computed","watch","nextTick","onMounted","onBeforeUnmount","createVNode","_createVNode","propColorToCssVars","propSizeToCssVars","toCssVarsStyle","TabImpl","name","props","modelValue","type","String","Number","Boolean","Object","default","undefined","index","data","Array","required","itemClass","activeItemClass","lineStyle","Function","direction","showLine","lineWidth","lineHeight","closable","labelField","valueField","color","size","cssVars","emits","value","change","item","click","close","slots","setup","emit","expose","rootRef","lineRef","items","currentIndex","linePos","left","top","width","height","processedData","isArray","map","_index","label","entries","key","dataLength","length","currentItem","currentValue","isVertical","computedLineStyle","parseFloat","x","y","transform","containerClass","clampIndex","Math","min","max","findIndexByValue","findIndex","findEnabledIndex","from","step","len","i","n","disabled","resolveIndexFromProps","byValue","syncActive","options","next","changed","emitChange","getItemLabel","getItemClass","filter","createSlotOptions","isActive","handleClick","handleClose","event","stopPropagation","handleKeydown","vertical","preventDefault","focus","list","active","deep","rafId","measureLine","root","activeItem","rootRect","getBoundingClientRect","itemRect","scheduleUpdate","requestAnimationFrame","flush","resizeObserver","ResizeObserver","observe","disconnect","cancelAnimationFrame","setIndex","setValue","tokenStyle","content","slotOptions","itemClosable","el","onClick","e","panelScope","Tab"],"sources":["../../../components/tab/Tab.tsx"],"sourcesContent":["import {\r\n defineComponent,\r\n reactive,\r\n ref,\r\n computed,\r\n watch,\r\n nextTick,\r\n onMounted,\r\n onBeforeUnmount,\r\n} from 'vue'\r\nimport type { PropType, SlotsType } from 'vue'\r\nimport { propColorToCssVars, propSizeToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\n\r\n// ==================== 类型定义 ====================\r\n\r\n/**\r\n * 标签项基础字段(勿加 [key: string]: any,否则会冲掉 label/value 提示)\r\n * 业务扩展字段通过 data 元素类型 T 自动带上\r\n */\r\nexport interface TabItem {\r\n label?: string\r\n value?: any\r\n disabled?: boolean\r\n closable?: boolean\r\n}\r\n\r\n/**\r\n * 标签数据源:对象数组 / 纯字符串数组 / 键值对对象\r\n */\r\nexport type TabData<T = TabItem> =\r\n | T[]\r\n | string[]\r\n | number[]\r\n | Record<string, any>\r\n\r\n/** 字符串/数字项在组件内会被规范化成 { label, value } */\r\nexport type NormalizedTabItem<T> = T extends string | number\r\n ? { label: T; value: T; disabled?: boolean; closable?: boolean }\r\n : T\r\n\r\ntype TabItemValue<T> =\r\n NormalizedTabItem<T> extends { value?: infer V } ? V : any\r\n\r\ntype TabItemLabel<T> =\r\n NormalizedTabItem<T> extends { label?: infer L } ? L : any\r\n\r\n/**\r\n * 插槽作用域;T 由 data 元素类型推断,一般不用手写\r\n */\r\nexport interface TabSlotScope<T = TabItem> {\r\n index: number\r\n item: NormalizedTabItem<T>\r\n value: TabItemValue<T>\r\n label: TabItemLabel<T>\r\n isActive: boolean\r\n}\r\n\r\n/**\r\n * 线条位置类型\r\n */\r\nexport interface LinePosition {\r\n left: number\r\n top: number\r\n width: number\r\n height: number\r\n}\r\n\r\n/**\r\n * 标签方向\r\n */\r\nexport type TabDirection = 'horizontal' | 'vertical'\r\n\r\n/**\r\n * 标签类型\r\n */\r\nexport type TabType = 'default' | 'card' | 'border-card'\r\n\r\nexport type TabSlots<T = any> = {\r\n default?: (scope: TabSlotScope<T>) => any\r\n close?: (scope: TabSlotScope<T>) => any\r\n /** 当前激活标签对应的内容区 */\r\n content?: (scope: TabSlotScope<T>) => any\r\n}\r\n\r\nexport interface TabProps<T = any> {\r\n modelValue?: any\r\n index?: number\r\n data?: TabData<T>\r\n itemClass?:\r\n | string\r\n | Record<string, boolean>\r\n | (string | Record<string, boolean>)[]\r\n activeItemClass?:\r\n | string\r\n | Record<string, boolean>\r\n | (string | Record<string, boolean>)[]\r\n lineStyle?: (pos: LinePosition) => Record<string, string | number>\r\n direction?: TabDirection\r\n type?: TabType\r\n showLine?: boolean\r\n lineWidth?: number | string\r\n lineHeight?: number | string\r\n closable?: boolean\r\n labelField?: string\r\n valueField?: string\r\n /** 品牌主色 → `--w-prop-tab-color` */\r\n color?: string\r\n /** 实例尺度(px)→ `--w-prop-tab-size` */\r\n size?: number\r\n /** 实例 CSS 变量 */\r\n cssVars?: CssVars\r\n}\r\n\r\n/** Vue TSX:$props 含 v-slots,才能从 data 推断插槽 T */\r\nexport type TabJSXProps<T = any> = TabProps<T> & {\r\n 'v-slots'?: TabSlots<T>\r\n vSlots?: TabSlots<T>\r\n class?: unknown\r\n style?: unknown\r\n 'onUpdate:modelValue'?: (value: any) => void\r\n 'onUpdate:index'?: (index: number) => void\r\n onChange?: (value: any, index: number, item: NormalizedTabItem<T>) => void\r\n onClick?: (value: any, index: number, item: NormalizedTabItem<T>) => void\r\n onClose?: (value: any, index: number, item: NormalizedTabItem<T>) => void\r\n}\r\n\r\nexport type TabExpose = {\r\n setIndex: (index: number) => void\r\n setValue: (value: any) => void\r\n}\r\n\r\n/**\r\n * Vue JSX 通过 `$props` 取属性(不支持 `<Tab<T>>`)。\r\n * `<Tab data={list} v-slots={{ content: ({ item, value }) => ... }} />`\r\n * 会从 list 元素类型推断 item / value。\r\n */\r\nexport type TabComponent = {\r\n new <T = any>(): TabExpose & {\r\n $props: TabJSXProps<T>\r\n }\r\n}\r\n\r\n// ==================== 组件定义 ====================\r\n\r\nconst TabImpl = defineComponent({\r\n name: 'Tab',\r\n\r\n props: {\r\n /**\r\n * 当前激活标签的值(v-model)\r\n * 与 index 二选一即可;同时传入时以 modelValue 为准\r\n */\r\n modelValue: {\r\n type: [String, Number, Boolean, Object] as PropType<any>,\r\n default: undefined,\r\n },\r\n\r\n /**\r\n * 当前激活标签索引(v-model:index)\r\n * @default 0\r\n */\r\n index: {\r\n type: Number,\r\n default: 0,\r\n },\r\n\r\n /**\r\n * 标签数据源\r\n * 支持格式:\r\n * - 对象数组: [{ label: '标签名', value: '值' }]\r\n * - 纯字符串数组: ['标签1', '标签2']\r\n * - 键值对对象: { '标签1': '值1', '标签2': '值2' }\r\n */\r\n data: {\r\n type: [Array, Object] as PropType<TabData>,\r\n required: true,\r\n },\r\n\r\n /**\r\n * 自定义标签项 CSS 类名\r\n */\r\n itemClass: {\r\n type: [String, Object, Array] as PropType<\r\n string | Record<string, boolean> | (string | Record<string, boolean>)[]\r\n >,\r\n },\r\n\r\n /**\r\n * 激活态额外 CSS 类名\r\n */\r\n activeItemClass: {\r\n type: [String, Object, Array] as PropType<\r\n string | Record<string, boolean> | (string | Record<string, boolean>)[]\r\n >,\r\n },\r\n\r\n /**\r\n * 自定义指示线条样式\r\n */\r\n lineStyle: {\r\n type: Function as PropType<\r\n (pos: LinePosition) => Record<string, string | number>\r\n >,\r\n },\r\n\r\n /**\r\n * 标签方向\r\n * @default 'horizontal'\r\n */\r\n direction: {\r\n type: String as PropType<TabDirection>,\r\n default: 'horizontal',\r\n },\r\n\r\n /**\r\n * 标签类型\r\n * @default 'default'\r\n */\r\n type: {\r\n type: String as PropType<TabType>,\r\n default: 'default',\r\n },\r\n\r\n /**\r\n * 是否显示激活线条\r\n * @default true\r\n */\r\n showLine: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n\r\n /**\r\n * 线条宽度,默认与标签内容宽度一致(水平方向)\r\n */\r\n lineWidth: {\r\n type: [Number, String] as PropType<number | string>,\r\n },\r\n\r\n /**\r\n * 线条高度,默认与标签内容高度一致(垂直方向)\r\n * @default 2\r\n */\r\n lineHeight: {\r\n type: [Number, String] as PropType<number | string>,\r\n default: 2,\r\n },\r\n\r\n /**\r\n * 是否可关闭\r\n * @default false\r\n */\r\n closable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n /**\r\n * 数据中标签文字的字段名\r\n * @default 'label'\r\n */\r\n labelField: {\r\n type: String,\r\n default: 'label',\r\n },\r\n\r\n /**\r\n * 数据中值的字段名\r\n * @default 'value'\r\n */\r\n valueField: {\r\n type: String,\r\n default: 'value',\r\n },\r\n\r\n /** 品牌主色 → `--w-prop-tab-color` */\r\n color: { type: String, default: undefined },\r\n /** 实例尺度(px)→ `--w-prop-tab-size` */\r\n size: { type: Number, default: undefined },\r\n /** 实例 CSS 变量 */\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n\r\n emits: {\r\n /**\r\n * 值变化事件(用于 v-model)\r\n */\r\n 'update:modelValue': (value: any) => true,\r\n\r\n /**\r\n * 索引变化事件(用于 v-model:index)\r\n */\r\n 'update:index': (index: number) => true,\r\n\r\n /**\r\n * 切换标签时触发\r\n */\r\n change: (value: any, index: number, item: any) => true,\r\n\r\n /**\r\n * 点击标签时触发(无论是否切换)\r\n */\r\n click: (value: any, index: number, item: any) => true,\r\n\r\n /**\r\n * 关闭标签时触发\r\n */\r\n close: (value: any, index: number, item: any) => true,\r\n },\r\n\r\n slots: Object as SlotsType<TabSlots>,\r\n\r\n setup(props, { emit, slots, expose }) {\r\n const rootRef = ref<HTMLElement>()\r\n const lineRef = ref<HTMLElement>()\r\n const items = ref<(HTMLElement | null)[]>([])\r\n const currentIndex = ref(0)\r\n\r\n const linePos = reactive<LinePosition>({\r\n left: 0,\r\n top: 0,\r\n width: 0,\r\n height: 0,\r\n })\r\n\r\n const processedData = computed(() => {\r\n const { data, labelField, valueField } = props\r\n\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n if (typeof item === 'string' || typeof item === 'number') {\r\n return {\r\n [labelField]: item,\r\n [valueField]: item,\r\n _index: index,\r\n }\r\n }\r\n return {\r\n ...item,\r\n [labelField]: item[labelField] ?? item.label ?? String(index),\r\n [valueField]:\r\n item[valueField] !== undefined\r\n ? item[valueField]\r\n : item.value !== undefined\r\n ? item.value\r\n : index,\r\n _index: index,\r\n }\r\n })\r\n }\r\n\r\n return Object.entries(data || {}).map(([key, value], index) => ({\r\n [labelField]: key,\r\n [valueField]: value,\r\n _index: index,\r\n }))\r\n })\r\n\r\n const dataLength = computed(() => processedData.value.length)\r\n\r\n const currentItem = computed(\r\n () => processedData.value[currentIndex.value] as TabItem | undefined,\r\n )\r\n\r\n const currentValue = computed(() => {\r\n const item = currentItem.value\r\n return item?.[props.valueField]\r\n })\r\n\r\n const isVertical = computed(() => props.direction === 'vertical')\r\n\r\n const computedLineStyle = computed(() => {\r\n const { lineStyle, lineWidth, lineHeight } = props\r\n\r\n if (lineStyle) {\r\n return lineStyle(linePos)\r\n }\r\n\r\n // 使用 transform: translate3d 进行位移,避免 left/top 过渡引发重排\r\n if (isVertical.value) {\r\n let height = linePos.height\r\n if (lineHeight !== undefined) {\r\n height =\r\n typeof lineHeight === 'number'\r\n ? lineHeight\r\n : parseFloat(String(lineHeight))\r\n }\r\n const width =\r\n lineWidth !== undefined\r\n ? typeof lineWidth === 'number'\r\n ? lineWidth\r\n : parseFloat(String(lineWidth))\r\n : 2\r\n\r\n const x = linePos.left + linePos.width - width\r\n const y =\r\n lineHeight !== undefined\r\n ? linePos.top + (linePos.height - height) / 2\r\n : linePos.top\r\n\r\n return {\r\n transform: `translate3d(${x}px, ${y}px, 0)`,\r\n width: `${width}px`,\r\n height: `${height}px`,\r\n }\r\n }\r\n\r\n let width = linePos.width\r\n if (lineWidth !== undefined) {\r\n width =\r\n typeof lineWidth === 'number'\r\n ? lineWidth\r\n : parseFloat(String(lineWidth))\r\n }\r\n const height =\r\n typeof lineHeight === 'number'\r\n ? lineHeight\r\n : parseFloat(String(lineHeight))\r\n\r\n const x =\r\n lineWidth !== undefined\r\n ? linePos.left + (linePos.width - width) / 2\r\n : linePos.left\r\n const y = linePos.top + linePos.height - height\r\n\r\n return {\r\n transform: `translate3d(${x}px, ${y}px, 0)`,\r\n width: `${width}px`,\r\n height:\r\n typeof lineHeight === 'number'\r\n ? `${lineHeight}px`\r\n : String(lineHeight),\r\n }\r\n })\r\n\r\n const containerClass = computed(() => [\r\n 'w-tab',\r\n `w-tab--${props.direction}`,\r\n `w-tab--${props.type}`,\r\n {\r\n 'w-tab--no-line': !props.showLine,\r\n 'w-tab--closable': props.closable,\r\n },\r\n ])\r\n\r\n function clampIndex(index: number) {\r\n if (dataLength.value <= 0) return 0\r\n return Math.min(Math.max(index, 0), dataLength.value - 1)\r\n }\r\n\r\n function findIndexByValue(value: any) {\r\n return processedData.value.findIndex(\r\n (item) => item[props.valueField] === value,\r\n )\r\n }\r\n\r\n function findEnabledIndex(from: number, step: 1 | -1) {\r\n const len = dataLength.value\r\n if (len <= 0) return -1\r\n let i = from\r\n for (let n = 0; n < len; n++) {\r\n i = (i + step + len) % len\r\n if (!processedData.value[i]?.disabled) return i\r\n }\r\n return -1\r\n }\r\n\r\n function resolveIndexFromProps() {\r\n if (props.modelValue !== undefined) {\r\n const byValue = findIndexByValue(props.modelValue)\r\n if (byValue !== -1) return byValue\r\n }\r\n return clampIndex(props.index ?? 0)\r\n }\r\n\r\n function syncActive(index: number, options?: { emitChange?: boolean }) {\r\n const next = clampIndex(index)\r\n const item = processedData.value[next]\r\n if (!item || item.disabled) return\r\n\r\n const value = item[props.valueField]\r\n const changed = currentIndex.value !== next\r\n currentIndex.value = next\r\n\r\n emit('update:index', next)\r\n emit('update:modelValue', value)\r\n if (changed && options?.emitChange !== false) {\r\n emit('change', value, next, item)\r\n }\r\n }\r\n\r\n function getItemLabel(index: number) {\r\n return processedData.value[index]?.[props.labelField]\r\n }\r\n\r\n function getItemClass(index: number, item: any) {\r\n return [\r\n 'w-tab-item',\r\n props.itemClass,\r\n {\r\n 'w-tab-item-active': currentIndex.value === index,\r\n 'w-tab-item-disabled': item.disabled,\r\n },\r\n currentIndex.value === index && props.activeItemClass,\r\n ].filter(Boolean)\r\n }\r\n\r\n function createSlotOptions(index: number, item: any): TabSlotScope {\r\n return {\r\n index,\r\n item,\r\n value: item?.[props.valueField],\r\n label: item?.[props.labelField],\r\n isActive: currentIndex.value === index,\r\n }\r\n }\r\n\r\n function handleClick(index: number, item: any) {\r\n const value = item[props.valueField]\r\n emit('click', value, index, item)\r\n if (item.disabled) return\r\n if (currentIndex.value !== index) {\r\n syncActive(index)\r\n }\r\n }\r\n\r\n function handleClose(index: number, item: any, event: Event) {\r\n event.stopPropagation()\r\n emit('close', item[props.valueField], index, item)\r\n }\r\n\r\n function handleKeydown(event: KeyboardEvent) {\r\n const { key } = event\r\n const vertical = isVertical.value\r\n let next = -1\r\n\r\n if (\r\n (vertical && key === 'ArrowDown') ||\r\n (!vertical && key === 'ArrowRight')\r\n ) {\r\n next = findEnabledIndex(currentIndex.value, 1)\r\n } else if (\r\n (vertical && key === 'ArrowUp') ||\r\n (!vertical && key === 'ArrowLeft')\r\n ) {\r\n next = findEnabledIndex(currentIndex.value, -1)\r\n } else if (key === 'Home') {\r\n next = findEnabledIndex(-1, 1)\r\n } else if (key === 'End') {\r\n next = findEnabledIndex(dataLength.value, -1)\r\n } else {\r\n return\r\n }\r\n\r\n if (next === -1) return\r\n event.preventDefault()\r\n syncActive(next)\r\n nextTick(() => items.value[next]?.focus())\r\n }\r\n\r\n // 外部 modelValue / index 同步\r\n watch(\r\n () => props.modelValue,\r\n (value) => {\r\n if (value === undefined) return\r\n const i = findIndexByValue(value)\r\n if (i !== -1 && i !== currentIndex.value) {\r\n currentIndex.value = i\r\n }\r\n },\r\n )\r\n\r\n watch(\r\n () => props.index,\r\n (index) => {\r\n // 仅在未使用 v-model 时跟随 index,避免与 modelValue 抢控制权\r\n if (props.modelValue !== undefined) return\r\n const next = clampIndex(index)\r\n if (next !== currentIndex.value) {\r\n currentIndex.value = next\r\n }\r\n },\r\n )\r\n\r\n // 数据变化:校正越界 / 已被删除的选中项\r\n watch(\r\n processedData,\r\n (list) => {\r\n if (!list.length) {\r\n currentIndex.value = 0\r\n return\r\n }\r\n\r\n if (props.modelValue !== undefined) {\r\n const byValue = findIndexByValue(props.modelValue)\r\n if (byValue !== -1) {\r\n if (byValue !== currentIndex.value) currentIndex.value = byValue\r\n return\r\n }\r\n // 当前值已被移除:落到邻近可用项,并回写 v-model\r\n const next = clampIndex(currentIndex.value)\r\n const item = list[next]\r\n currentIndex.value = next\r\n if (item) {\r\n emit('update:index', next)\r\n emit('update:modelValue', item[props.valueField])\r\n }\r\n return\r\n }\r\n\r\n if (currentIndex.value >= list.length) {\r\n const next = clampIndex(list.length - 1)\r\n const item = list[next]\r\n currentIndex.value = next\r\n if (item) {\r\n emit('update:index', next)\r\n emit('update:modelValue', item[props.valueField])\r\n }\r\n return\r\n }\r\n\r\n const active = list[currentIndex.value]\r\n if (active?.disabled) {\r\n const next = findEnabledIndex(currentIndex.value - 1, 1)\r\n if (next !== -1) {\r\n syncActive(next, { emitChange: false })\r\n }\r\n }\r\n },\r\n { deep: true },\r\n )\r\n\r\n // 初始化选中项\r\n currentIndex.value = resolveIndexFromProps()\r\n\r\n // 使用 rAF 调度测量,避免在响应式同步阶段连续读 rect 触发强制重排\r\n let rafId: number | null = null\r\n\r\n function measureLine() {\r\n const root = rootRef.value\r\n if (!root || !items.value?.length) return\r\n\r\n const activeItem = items.value[currentIndex.value]\r\n if (!activeItem) {\r\n linePos.width = 0\r\n linePos.height = 0\r\n return\r\n }\r\n\r\n // 一次性读取 root 与 item 的 rect,相减得到相对坐标;\r\n // 比 getOffset 遍历 offsetParent 更快且语义更准确\r\n const rootRect = root.getBoundingClientRect()\r\n const itemRect = activeItem.getBoundingClientRect()\r\n\r\n linePos.left = itemRect.left - rootRect.left\r\n linePos.top = itemRect.top - rootRect.top\r\n linePos.width = itemRect.width\r\n linePos.height = itemRect.height\r\n }\r\n\r\n function scheduleUpdate() {\r\n if (rafId != null) return\r\n if (typeof requestAnimationFrame === 'undefined') {\r\n measureLine()\r\n return\r\n }\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null\r\n measureLine()\r\n })\r\n }\r\n\r\n // currentIndex / direction / 数据变化后重新测量\r\n watch(\r\n [currentIndex, () => props.direction, processedData],\r\n () => {\r\n scheduleUpdate()\r\n },\r\n { flush: 'post' },\r\n )\r\n\r\n // 监听容器尺寸变化(窗口缩放、字体延迟加载等)\r\n let resizeObserver: ResizeObserver | null = null\r\n onMounted(() => {\r\n scheduleUpdate()\r\n if (typeof ResizeObserver !== 'undefined' && rootRef.value) {\r\n resizeObserver = new ResizeObserver(() => scheduleUpdate())\r\n resizeObserver.observe(rootRef.value)\r\n }\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n resizeObserver?.disconnect()\r\n resizeObserver = null\r\n if (rafId != null) {\r\n cancelAnimationFrame(rafId)\r\n rafId = null\r\n }\r\n })\r\n\r\n expose({\r\n currentIndex,\r\n currentItem,\r\n currentValue,\r\n processedData,\r\n setIndex: (index: number) => {\r\n if (index >= 0 && index < dataLength.value) {\r\n handleClick(index, processedData.value[index])\r\n }\r\n },\r\n setValue: (value: any) => {\r\n const index = findIndexByValue(value)\r\n if (index !== -1) {\r\n handleClick(index, processedData.value[index])\r\n }\r\n },\r\n })\r\n\r\n return () => {\r\n const tokenStyle = toCssVarsStyle({\r\n ...propSizeToCssVars('tab', props.size),\r\n ...propColorToCssVars('tab', props.color),\r\n ...props.cssVars,\r\n })\r\n\r\n const list = (\r\n <ul\r\n class={containerClass.value}\r\n style={slots.content ? undefined : tokenStyle}\r\n ref={rootRef}\r\n role=\"tablist\"\r\n aria-orientation={props.direction}\r\n onKeydown={handleKeydown}>\r\n {props.showLine && props.type === 'default' && (\r\n <li\r\n class=\"w-tab-line\"\r\n ref={lineRef}\r\n style={computedLineStyle.value}\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n\r\n {processedData.value.map((item, index) => {\r\n const slotOptions = createSlotOptions(index, item)\r\n const label = getItemLabel(index)\r\n const isActive = currentIndex.value === index\r\n const itemClosable =\r\n !item.disabled &&\r\n (item.closable === true ||\r\n (props.closable && item.closable !== false))\r\n\r\n return (\r\n <li\r\n key={item[props.valueField] ?? index}\r\n ref={(el: HTMLElement | null) => {\r\n items.value[index] = el\r\n if (index === 0 && items.value.length > dataLength.value) {\r\n items.value.length = dataLength.value\r\n }\r\n }}\r\n class={getItemClass(index, item)}\r\n role=\"tab\"\r\n tabindex={isActive ? 0 : -1}\r\n aria-selected={isActive}\r\n aria-disabled={!!item.disabled}\r\n onClick={() => handleClick(index, item)}>\r\n {slots.default ? (\r\n slots.default(slotOptions)\r\n ) : (\r\n <span class=\"w-tab-item-label\">{label}</span>\r\n )}\r\n\r\n {itemClosable && (\r\n <span\r\n class=\"w-tab-item-close\"\r\n role=\"button\"\r\n tabindex={-1}\r\n aria-label=\"close\"\r\n onClick={(e) => handleClose(index, item, e)}>\r\n {slots.close ? slots.close(slotOptions) : '×'}\r\n </span>\r\n )}\r\n </li>\r\n )\r\n })}\r\n </ul>\r\n )\r\n\r\n if (!slots.content) {\r\n return list\r\n }\r\n\r\n const active = currentItem.value\r\n const panelScope = createSlotOptions(\r\n currentIndex.value,\r\n active || { [props.labelField]: '', [props.valueField]: undefined },\r\n )\r\n\r\n return (\r\n <div\r\n class={[\r\n 'w-tab-wrapper',\r\n `w-tab-wrapper--${props.direction}`,\r\n `w-tab-wrapper--${props.type}`,\r\n ]}\r\n style={tokenStyle}>\r\n {list}\r\n <div class=\"w-tab-panel\" role=\"tabpanel\">\r\n {slots.content(panelScope)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n },\r\n})\r\n\r\nconst Tab = TabImpl as unknown as TabComponent\r\n\r\n/** 实例类型;一般写 `InstanceType<typeof Tab>` 即可 */\r\nexport type TabInstance = InstanceType<TabComponent>\r\n\r\nexport default Tab\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import '../../../theme/tokens/components/tab.css';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CssVars } from '../../util';
|
|
2
|
+
export type { TextareaGlobalConfig } from './config';
|
|
3
|
+
export { TEXTAREA_FALLBACK } from './config';
|
|
4
|
+
export type TextareaProps = {
|
|
5
|
+
modelValue?: string;
|
|
6
|
+
size?: number;
|
|
7
|
+
color?: string;
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
maxlength?: number;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
readonly?: boolean;
|
|
12
|
+
block?: boolean;
|
|
13
|
+
/** 停输后触发 save 的防抖毫秒;默认 3000 */
|
|
14
|
+
saveDelay?: number;
|
|
15
|
+
validateEvent?: boolean;
|
|
16
|
+
cssVars?: CssVars;
|
|
17
|
+
};
|
|
18
|
+
export type TextareaJSXProps = TextareaProps & Omit<JSX.IntrinsicElements['div'], keyof TextareaProps | 'ref' | 'onInput' | 'onChange'>;
|
|
19
|
+
export type TextareaExpose = {
|
|
20
|
+
focus: () => void;
|
|
21
|
+
blur: () => void;
|
|
22
|
+
select: () => void;
|
|
23
|
+
textarea: HTMLTextAreaElement | undefined;
|
|
24
|
+
};
|
|
25
|
+
export type TextareaComponent = {
|
|
26
|
+
new (): {
|
|
27
|
+
$props: TextareaJSXProps;
|
|
28
|
+
$emit: {
|
|
29
|
+
(e: 'update:modelValue', value: string): void;
|
|
30
|
+
(e: 'input', value: string): void;
|
|
31
|
+
(e: 'change', value: string): void;
|
|
32
|
+
(e: 'save', value: string): void;
|
|
33
|
+
};
|
|
34
|
+
} & TextareaExpose;
|
|
35
|
+
};
|
|
36
|
+
declare const _default: TextareaComponent;
|
|
37
|
+
export default _default;
|