@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 @@
|
|
|
1
|
+
{"version":3,"file":"Picture.js","names":["Teleport","computed","defineComponent","mergeProps","nextTick","onBeforeUnmount","ref","watch","Fragment","_Fragment","createVNode","_createVNode","propSizeToCssVars","toCssVarsStyle","useComponentConfig","useEscStack","useGlobalZIndex","useUII18n","createPictureViewport","Close","Icon","Image","Mask","Toggle","normalizePictureImages","PICTURE_FALLBACK","runPictureImgEnter","PictureToolbar","PictureViewport","INTERACT_SAFE","PictureImpl","name","inheritAttrs","components","props","images","type","String","Array","default","undefined","size","Number","round","Boolean","cssVars","Object","emits","_v","show","_index","hide","setup","attrs","emit","cfg","t","zIndex","add","curIndex","alwaysOneWay","fromRect","interact","viewportApi","viewportController","stopFlip","list","v","value","reset","prepareImageChange","enableInteract","fit","playEnterFlip","Promise","r","requestAnimationFrame","el","getFlipEl","from","onEnd","openAt","i","e","target","currentTarget","getBoundingClientRect","close","onViewerClick","closest","onThumbClick","goPrev","prev","goNext","next","bindViewport","length","rootProps","class","style","multi","map","src","stopPropagation","item","use","index","onClick"],"sources":["../../../components/picture/Picture.tsx"],"sourcesContent":["import {\r\n Teleport,\r\n computed,\r\n defineComponent,\r\n mergeProps,\r\n nextTick,\r\n onBeforeUnmount,\r\n ref,\r\n watch,\r\n type PropType,\r\n} from 'vue'\r\nimport {\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useEscStack from '../../use/useEscStack'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { createPictureViewport } from '../../use/usePictureViewport'\r\nimport Close from '../close/index'\r\nimport Icon from '../icon/index'\r\nimport Image from '../image/index'\r\nimport Mask from '../mask/index'\r\nimport Toggle from '../toggle/index'\r\nimport {\r\n normalizePictureImages,\r\n PICTURE_FALLBACK,\r\n} from './config'\r\nimport { runPictureImgEnter } from './pictureFlip'\r\nimport PictureToolbar from './PictureToolbar'\r\nimport PictureViewport, {\r\n type PictureViewportMethods,\r\n} from './PictureViewport'\r\n\r\nexport type { PictureGlobalConfig } from './config'\r\nexport { PICTURE_FALLBACK, normalizePictureImages } from './config'\r\n\r\nexport type PictureProps = {\r\n /** 图片地址:逗号分隔字符串或数组 */\r\n images?: string | string[]\r\n size?: number\r\n round?: boolean | string\r\n cssVars?: CssVars\r\n}\r\n\r\nexport type PictureJSXProps = PictureProps &\r\n Omit<JSX.IntrinsicElements['div'], keyof PictureProps | 'ref'>\r\n\r\nexport type PictureComponent = {\r\n new (): {\r\n $props: PictureJSXProps\r\n }\r\n}\r\n\r\nconst INTERACT_SAFE =\r\n '.w-picture-viewer__viewport, .w-picture-viewer__img-wrap, .w-picture-viewer__img, .w-picture-viewer__thumb, .w-picture-viewer__nav, .w-picture-viewer__close, .w-picture-viewer__thumbs, .w-picture-viewer__toolbar'\r\n\r\nconst PictureImpl = defineComponent({\r\n name: 'Picture',\r\n inheritAttrs: false,\r\n components: {\r\n Image,\r\n Mask,\r\n Toggle,\r\n Close,\r\n Icon,\r\n PictureViewport,\r\n PictureToolbar,\r\n },\r\n props: {\r\n images: {\r\n type: [String, Array] as PropType<string | string[]>,\r\n default: undefined,\r\n },\r\n size: { type: Number, default: undefined },\r\n round: {\r\n type: [Boolean, String] as PropType<boolean | string>,\r\n default: undefined,\r\n },\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n emits: {\r\n 'update:show': (_v: boolean) => true,\r\n show: (_index: number) => true,\r\n hide: () => true,\r\n },\r\n setup(props, { attrs, emit }) {\r\n const cfg = useComponentConfig('Picture', props, PICTURE_FALLBACK)\r\n const { t } = useUII18n()\r\n const { zIndex, add } = useGlobalZIndex()\r\n const show = ref(false)\r\n const curIndex = ref(0)\r\n const alwaysOneWay = ref(false)\r\n const fromRect = ref<DOMRect | null>(null)\r\n const interact = ref(false)\r\n const viewportApi = ref<PictureViewportMethods | null>(null)\r\n const viewportController = createPictureViewport()\r\n let stopFlip: (() => void) | undefined\r\n\r\n const list = computed(() => normalizePictureImages(props.images))\r\n\r\n watch(show, (v) => {\r\n emit('update:show', v)\r\n if (!v) {\r\n emit('hide')\r\n stopFlip?.()\r\n stopFlip = undefined\r\n fromRect.value = null\r\n interact.value = false\r\n viewportApi.value = null\r\n viewportController.reset()\r\n }\r\n })\r\n\r\n watch(curIndex, () => {\r\n if (!show.value || !interact.value) return\r\n // 切图:保留相对缩放,仅清平移(具体落点在新图 onLoad)\r\n viewportController.prepareImageChange()\r\n })\r\n\r\n useEscStack(\r\n show,\r\n () => {\r\n show.value = false\r\n },\r\n () => zIndex.value,\r\n )\r\n\r\n function enableInteract() {\r\n // 仅打开进场结束后校准一次适应;切图不走这里\r\n viewportApi.value?.fit(false)\r\n interact.value = true\r\n }\r\n\r\n async function playEnterFlip() {\r\n stopFlip?.()\r\n stopFlip = undefined\r\n interact.value = false\r\n await nextTick()\r\n await new Promise<void>((r) => requestAnimationFrame(() => r()))\r\n const el = viewportApi.value?.getFlipEl()\r\n const from = fromRect.value\r\n if (!el || !from) {\r\n fromRect.value = null\r\n enableInteract()\r\n return\r\n }\r\n fromRect.value = null\r\n stopFlip = runPictureImgEnter(el, from, {\r\n onEnd: () => {\r\n enableInteract()\r\n },\r\n })\r\n }\r\n\r\n function openAt(i: number, e?: MouseEvent) {\r\n const target = (e?.currentTarget as HTMLElement | null) ?? null\r\n fromRect.value = target?.getBoundingClientRect() ?? null\r\n viewportController.reset()\r\n curIndex.value = i\r\n alwaysOneWay.value = false\r\n interact.value = false\r\n add()\r\n show.value = true\r\n emit('show', i)\r\n void playEnterFlip()\r\n }\r\n\r\n function close() {\r\n show.value = false\r\n }\r\n\r\n function onViewerClick(e: MouseEvent) {\r\n const el = e.target as HTMLElement | null\r\n if (el?.closest(INTERACT_SAFE)) return\r\n close()\r\n }\r\n\r\n function onThumbClick(i: number) {\r\n curIndex.value = i\r\n alwaysOneWay.value = false\r\n }\r\n\r\n function goPrev(prev: () => void) {\r\n alwaysOneWay.value = true\r\n prev()\r\n }\r\n\r\n function goNext(next: () => void) {\r\n alwaysOneWay.value = true\r\n next()\r\n }\r\n\r\n function bindViewport(el: unknown) {\r\n // Toggle 切图时旧实例可能后触发 null,勿清掉新实例\r\n if (el) viewportApi.value = el as PictureViewportMethods\r\n }\r\n\r\n onBeforeUnmount(() => {\r\n stopFlip?.()\r\n })\r\n\r\n return () => {\r\n const images = list.value\r\n if (!images.length) return null\r\n\r\n const rootProps = mergeProps(\r\n {\r\n class: 'w-picture',\r\n style: toCssVarsStyle({\r\n ...propSizeToCssVars('picture', cfg.value.size),\r\n ...props.cssVars,\r\n }),\r\n },\r\n attrs,\r\n )\r\n\r\n const multi = images.length > 1\r\n\r\n return (\r\n <>\r\n <div {...rootProps}>\r\n {images.map((src, i) => (\r\n <Image\r\n key={`${src}-${i}`}\r\n class={[\r\n 'w-picture__thumb',\r\n { 'is-previewing': show.value && curIndex.value === i },\r\n ]}\r\n src={src}\r\n round={cfg.value.round}\r\n onClick={(e: MouseEvent) => openAt(i, e)}\r\n />\r\n ))}\r\n </div>\r\n\r\n <Mask\r\n show={show.value}\r\n zIndex={zIndex.value}\r\n class=\"w-picture-mask\"\r\n canCloseByClickSelf\r\n onUpdate:show={(v: boolean) => {\r\n show.value = v\r\n }}\r\n />\r\n\r\n <Teleport to=\"body\">\r\n {show.value ? (\r\n <div\r\n class=\"w-picture-viewer\"\r\n style={{\r\n /* 高于 Mask,避免同层 portal 重排后盖住操作控件 */\r\n ['--__w-picture-viewer-z-index' as string]: zIndex.value + 1,\r\n }}\r\n onClick={onViewerClick}>\r\n <Close\r\n class=\"w-picture-viewer__close\"\r\n size={24}\r\n ariaLabel={t('picture.close')}\r\n title={t('picture.close')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n close()\r\n }}\r\n />\r\n\r\n <Toggle\r\n class=\"w-picture-viewer__stage\"\r\n wheel={false}\r\n index={curIndex.value}\r\n data={images}\r\n itemClass=\"w-picture-viewer__item\"\r\n transform=\"translate\"\r\n alwaysOneWay={alwaysOneWay.value}\r\n onUpdate:index={(i: number) => {\r\n curIndex.value = i\r\n }}\r\n v-slots={{\r\n default: ({ item }: { item: string }) => (\r\n <PictureViewport\r\n key={`${item}-${curIndex.value}`}\r\n ref={bindViewport}\r\n src={item}\r\n interact={interact.value}\r\n controller={viewportController}\r\n />\r\n ),\r\n use: ({\r\n index,\r\n prev,\r\n next,\r\n }: {\r\n index: number\r\n prev: () => void\r\n next: () => void\r\n }) => (\r\n <>\r\n <PictureToolbar\r\n viewport={viewportApi.value}\r\n disabled={!interact.value}\r\n />\r\n {multi ? (\r\n <div class=\"w-picture-viewer__thumbs\">\r\n {images.map((src, i) => (\r\n <img\r\n key={`${src}-t-${i}`}\r\n class={[\r\n 'w-picture-viewer__thumb',\r\n { 'is-active': i === index },\r\n ]}\r\n src={src}\r\n alt=\"\"\r\n draggable={false}\r\n onClick={() => onThumbClick(i)}\r\n />\r\n ))}\r\n </div>\r\n ) : null}\r\n {multi ? (\r\n <>\r\n <Icon\r\n class=\"w-picture-viewer__nav w-picture-viewer__nav--prev\"\r\n name=\"w-icon-arrow-down\"\r\n rotate\r\n direction=\"z\"\r\n deg={90}\r\n size=\"var(--w-picture-viewer-nav-size)\"\r\n ariaLabel={t('picture.prev')}\r\n title={t('picture.prev')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n goPrev(prev)\r\n }}\r\n />\r\n <Icon\r\n class=\"w-picture-viewer__nav w-picture-viewer__nav--next\"\r\n name=\"w-icon-arrow-down\"\r\n rotate\r\n direction=\"z\"\r\n deg={-90}\r\n size=\"var(--w-picture-viewer-nav-size)\"\r\n ariaLabel={t('picture.next')}\r\n title={t('picture.next')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n goNext(next)\r\n }}\r\n />\r\n </>\r\n ) : null}\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n ) : null}\r\n </Teleport>\r\n </>\r\n )\r\n }\r\n },\r\n})\r\n\r\nexport default PictureImpl as unknown as PictureComponent\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PropType } from 'vue';
|
|
2
|
+
import { PictureViewportMethods } from './PictureViewport';
|
|
3
|
+
export type PictureToolbarProps = {
|
|
4
|
+
viewport?: PictureViewportMethods | null;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const PictureToolbar: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
8
|
+
viewport: {
|
|
9
|
+
type: PropType<PictureViewportMethods | null | undefined>;
|
|
10
|
+
default: any;
|
|
11
|
+
};
|
|
12
|
+
disabled: {
|
|
13
|
+
type: BooleanConstructor;
|
|
14
|
+
default: boolean;
|
|
15
|
+
};
|
|
16
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
17
|
+
viewport: {
|
|
18
|
+
type: PropType<PictureViewportMethods | null | undefined>;
|
|
19
|
+
default: any;
|
|
20
|
+
};
|
|
21
|
+
disabled: {
|
|
22
|
+
type: BooleanConstructor;
|
|
23
|
+
default: boolean;
|
|
24
|
+
};
|
|
25
|
+
}>> & Readonly<{}>, {
|
|
26
|
+
disabled: boolean;
|
|
27
|
+
viewport: PictureViewportMethods;
|
|
28
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
29
|
+
export default PictureToolbar;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { useUII18n } from "../../use/useUII18n.js";
|
|
2
|
+
import { PICTURE_VIEWPORT_ZOOM_STEP } from "../../use/usePictureViewport.js";
|
|
3
|
+
import SvgIcon from "../svgIcon/SvgIcon.js";
|
|
4
|
+
import { createTextVNode, createVNode, defineComponent } from "vue";
|
|
5
|
+
//#region components/picture/PictureToolbar.tsx
|
|
6
|
+
var PictureToolbar = /* @__PURE__ */ defineComponent({
|
|
7
|
+
name: "PictureToolbar",
|
|
8
|
+
props: {
|
|
9
|
+
viewport: {
|
|
10
|
+
type: Object,
|
|
11
|
+
default: void 0
|
|
12
|
+
},
|
|
13
|
+
disabled: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
default: false
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
setup(props) {
|
|
19
|
+
const { t } = useUII18n();
|
|
20
|
+
const iconSize = "var(--w-picture-toolbar-icon-size)";
|
|
21
|
+
function run(fn) {
|
|
22
|
+
if (props.disabled) return;
|
|
23
|
+
fn?.();
|
|
24
|
+
}
|
|
25
|
+
function btn(key, title, onClick, child) {
|
|
26
|
+
return createVNode("button", {
|
|
27
|
+
"key": key,
|
|
28
|
+
"type": "button",
|
|
29
|
+
"class": "w-picture-viewer__toolbar-btn",
|
|
30
|
+
"title": title,
|
|
31
|
+
"aria-label": title,
|
|
32
|
+
"disabled": props.disabled,
|
|
33
|
+
"onClick": (e) => {
|
|
34
|
+
e.stopPropagation();
|
|
35
|
+
run(onClick);
|
|
36
|
+
}
|
|
37
|
+
}, [child]);
|
|
38
|
+
}
|
|
39
|
+
return () => {
|
|
40
|
+
const vp = props.viewport;
|
|
41
|
+
return createVNode("div", {
|
|
42
|
+
"class": "w-picture-viewer__toolbar",
|
|
43
|
+
"onClick": (e) => e.stopPropagation()
|
|
44
|
+
}, [
|
|
45
|
+
btn("rl", t("picture.rotateLeft"), () => vp?.rotateBy(-90), createVNode(SvgIcon, {
|
|
46
|
+
"name": "rotate-left",
|
|
47
|
+
"size": iconSize
|
|
48
|
+
}, null)),
|
|
49
|
+
btn("rr", t("picture.rotateRight"), () => vp?.rotateBy(90), createVNode(SvgIcon, {
|
|
50
|
+
"name": "rotate-right",
|
|
51
|
+
"size": iconSize
|
|
52
|
+
}, null)),
|
|
53
|
+
createVNode("span", {
|
|
54
|
+
"class": "w-picture-viewer__toolbar-divider",
|
|
55
|
+
"aria-hidden": "true"
|
|
56
|
+
}, null),
|
|
57
|
+
btn("fx", t("picture.flipX"), () => vp?.flip("x"), createVNode(SvgIcon, {
|
|
58
|
+
"name": "flip-x",
|
|
59
|
+
"size": iconSize
|
|
60
|
+
}, null)),
|
|
61
|
+
btn("fy", t("picture.flipY"), () => vp?.flip("y"), createVNode(SvgIcon, {
|
|
62
|
+
"name": "flip-y",
|
|
63
|
+
"size": iconSize
|
|
64
|
+
}, null)),
|
|
65
|
+
createVNode("span", {
|
|
66
|
+
"class": "w-picture-viewer__toolbar-divider",
|
|
67
|
+
"aria-hidden": "true"
|
|
68
|
+
}, null),
|
|
69
|
+
btn("zo", t("picture.zoomOut"), () => vp?.zoomBy(1 / PICTURE_VIEWPORT_ZOOM_STEP), createVNode(SvgIcon, {
|
|
70
|
+
"name": "zoom-out",
|
|
71
|
+
"size": iconSize
|
|
72
|
+
}, null)),
|
|
73
|
+
btn("zi", t("picture.zoomIn"), () => vp?.zoomBy(PICTURE_VIEWPORT_ZOOM_STEP), createVNode(SvgIcon, {
|
|
74
|
+
"name": "zoom-in",
|
|
75
|
+
"size": iconSize
|
|
76
|
+
}, null)),
|
|
77
|
+
createVNode("span", {
|
|
78
|
+
"class": "w-picture-viewer__toolbar-divider",
|
|
79
|
+
"aria-hidden": "true"
|
|
80
|
+
}, null),
|
|
81
|
+
btn("one", t("picture.oneToOne"), () => vp?.oneToOne(), createVNode("span", { "class": "w-picture-viewer__toolbar-label" }, [createTextVNode("1:1")])),
|
|
82
|
+
btn("fit", t("picture.fit"), () => vp?.fit(true), createVNode(SvgIcon, {
|
|
83
|
+
"name": "fit",
|
|
84
|
+
"size": iconSize
|
|
85
|
+
}, null)),
|
|
86
|
+
btn("reset", t("picture.reset"), () => vp?.reset(), createVNode(SvgIcon, {
|
|
87
|
+
"name": "reset",
|
|
88
|
+
"size": iconSize
|
|
89
|
+
}, null))
|
|
90
|
+
]);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
//#endregion
|
|
95
|
+
export { PictureToolbar as default };
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=PictureToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PictureToolbar.js","names":["defineComponent","createVNode","_createVNode","createTextVNode","_createTextVNode","useUII18n","SvgIcon","PICTURE_VIEWPORT_ZOOM_STEP","PictureToolbar","name","props","viewport","type","Object","default","undefined","disabled","Boolean","setup","t","iconSize","run","fn","btn","key","title","onClick","child","e","stopPropagation","vp","rotateBy","flip","zoomBy","oneToOne","fit","reset"],"sources":["../../../components/picture/PictureToolbar.tsx"],"sourcesContent":["import { defineComponent, type PropType } from 'vue'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport SvgIcon from '../svgIcon/index'\r\nimport { PICTURE_VIEWPORT_ZOOM_STEP } from '../../use/usePictureViewport'\r\nimport type { PictureViewportMethods } from './PictureViewport'\r\n\r\nexport type PictureToolbarProps = {\r\n viewport?: PictureViewportMethods | null\r\n disabled?: boolean\r\n}\r\n\r\nconst PictureToolbar = defineComponent({\r\n name: 'PictureToolbar',\r\n props: {\r\n viewport: {\r\n type: Object as PropType<PictureViewportMethods | null | undefined>,\r\n default: undefined,\r\n },\r\n disabled: { type: Boolean, default: false },\r\n },\r\n setup(props) {\r\n const { t } = useUII18n()\r\n const iconSize = 'var(--w-picture-toolbar-icon-size)'\r\n\r\n function run(fn?: () => void) {\r\n if (props.disabled) return\r\n fn?.()\r\n }\r\n\r\n function btn(\r\n key: string,\r\n title: string,\r\n onClick: () => void,\r\n child: unknown,\r\n ) {\r\n return (\r\n <button\r\n key={key}\r\n type=\"button\"\r\n class=\"w-picture-viewer__toolbar-btn\"\r\n title={title}\r\n aria-label={title}\r\n disabled={props.disabled}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n run(onClick)\r\n }}>\r\n {child}\r\n </button>\r\n )\r\n }\r\n\r\n return () => {\r\n const vp = props.viewport\r\n return (\r\n <div\r\n class=\"w-picture-viewer__toolbar\"\r\n onClick={(e: MouseEvent) => e.stopPropagation()}>\r\n {btn(\r\n 'rl',\r\n t('picture.rotateLeft'),\r\n () => vp?.rotateBy(-90),\r\n <SvgIcon name=\"rotate-left\" size={iconSize} />,\r\n )}\r\n {btn(\r\n 'rr',\r\n t('picture.rotateRight'),\r\n () => vp?.rotateBy(90),\r\n <SvgIcon name=\"rotate-right\" size={iconSize} />,\r\n )}\r\n <span class=\"w-picture-viewer__toolbar-divider\" aria-hidden=\"true\" />\r\n {btn(\r\n 'fx',\r\n t('picture.flipX'),\r\n () => vp?.flip('x'),\r\n <SvgIcon name=\"flip-x\" size={iconSize} />,\r\n )}\r\n {btn(\r\n 'fy',\r\n t('picture.flipY'),\r\n () => vp?.flip('y'),\r\n <SvgIcon name=\"flip-y\" size={iconSize} />,\r\n )}\r\n <span class=\"w-picture-viewer__toolbar-divider\" aria-hidden=\"true\" />\r\n {btn(\r\n 'zo',\r\n t('picture.zoomOut'),\r\n () => vp?.zoomBy(1 / PICTURE_VIEWPORT_ZOOM_STEP),\r\n <SvgIcon name=\"zoom-out\" size={iconSize} />,\r\n )}\r\n {btn(\r\n 'zi',\r\n t('picture.zoomIn'),\r\n () => vp?.zoomBy(PICTURE_VIEWPORT_ZOOM_STEP),\r\n <SvgIcon name=\"zoom-in\" size={iconSize} />,\r\n )}\r\n <span class=\"w-picture-viewer__toolbar-divider\" aria-hidden=\"true\" />\r\n {btn(\r\n 'one',\r\n t('picture.oneToOne'),\r\n () => vp?.oneToOne(),\r\n <span class=\"w-picture-viewer__toolbar-label\">1:1</span>,\r\n )}\r\n {btn(\r\n 'fit',\r\n t('picture.fit'),\r\n () => vp?.fit(true),\r\n <SvgIcon name=\"fit\" size={iconSize} />,\r\n )}\r\n {btn(\r\n 'reset',\r\n t('picture.reset'),\r\n () => vp?.reset(),\r\n <SvgIcon name=\"reset\" size={iconSize} />,\r\n )}\r\n </div>\r\n )\r\n }\r\n },\r\n})\r\n\r\nexport default PictureToolbar\r\n"],"mappings":";;;;;AAWA,IAAMQ,iBAAiBR,gCAAgB;CACrCS,MAAM;CACNC,OAAO;EACLC,UAAU;GACRC,MAAMC;GACNC,SAASC,KAAAA;EACX;EACAC,UAAU;GAAEJ,MAAMK;GAASH,SAAS;EAAM;CAC5C;CACAI,MAAMR,OAAO;EACX,MAAM,EAAES,MAAMd,UAAU;EACxB,MAAMe,WAAW;EAEjB,SAASC,IAAIC,IAAiB;GAC5B,IAAIZ,MAAMM,UAAU;GACpBM,KAAK;EACP;EAEA,SAASC,IACPC,KACAC,OACAC,SACAC,OACA;GACA,OAAAzB,YAAA,UAAA;IAAA,OAESsB;IAAG,QAAA;IAAA,SAAA;IAAA,SAGDC;IAAK,cACAA;IAAK,YACPf,MAAMM;IAAQ,YACdY,MAAkB;KAC1BA,EAAEC,gBAAgB;KAClBR,IAAIK,OAAO;IACb;GAAC,GAAA,CACAC,KAAK,CAAA;EAGZ;EAEA,aAAa;GACX,MAAMG,KAAKpB,MAAMC;GACjB,OAAAT,YAAA,OAAA;IAAA,SAAA;IAAA,YAGc0B,MAAkBA,EAAEC,gBAAgB;GAAC,GAAA;IAC9CN,IACC,MACAJ,EAAE,oBAAoB,SAChBW,IAAIC,SAAS,GAAG,GAAC7B,YAAAI,SAAA;KAAA,QAAA;KAAA,QACWc;IAAQ,GAAA,IAAA,CAC5C;IACCG,IACC,MACAJ,EAAE,qBAAqB,SACjBW,IAAIC,SAAS,EAAE,GAAC7B,YAAAI,SAAA;KAAA,QAAA;KAAA,QACac;IAAQ,GAAA,IAAA,CAC7C;IAAClB,YAAA,QAAA;KAAA,SAAA;KAAA,eAAA;IAAA,GAAA,IAAA;IAEAqB,IACC,MACAJ,EAAE,eAAe,SACXW,IAAIE,KAAK,GAAG,GAAC9B,YAAAI,SAAA;KAAA,QAAA;KAAA,QACUc;IAAQ,GAAA,IAAA,CACvC;IACCG,IACC,MACAJ,EAAE,eAAe,SACXW,IAAIE,KAAK,GAAG,GAAC9B,YAAAI,SAAA;KAAA,QAAA;KAAA,QACUc;IAAQ,GAAA,IAAA,CACvC;IAAClB,YAAA,QAAA;KAAA,SAAA;KAAA,eAAA;IAAA,GAAA,IAAA;IAEAqB,IACC,MACAJ,EAAE,iBAAiB,SACbW,IAAIG,OAAO,IAAI1B,0BAA0B,GAACL,YAAAI,SAAA;KAAA,QAAA;KAAA,QACjBc;IAAQ,GAAA,IAAA,CACzC;IACCG,IACC,MACAJ,EAAE,gBAAgB,SACZW,IAAIG,OAAO1B,0BAA0B,GAACL,YAAAI,SAAA;KAAA,QAAA;KAAA,QACdc;IAAQ,GAAA,IAAA,CACxC;IAAClB,YAAA,QAAA;KAAA,SAAA;KAAA,eAAA;IAAA,GAAA,IAAA;IAEAqB,IACC,OACAJ,EAAE,kBAAkB,SACdW,IAAII,SAAS,GAAChC,YAAA,QAAA,EAAA,SAAA,kCAAA,GAAA,CAAAE,gBAAA,KAAA,CAAA,CAAA,CAEtB;IACCmB,IACC,OACAJ,EAAE,aAAa,SACTW,IAAIK,IAAI,IAAI,GAACjC,YAAAI,SAAA;KAAA,QAAA;KAAA,QACOc;IAAQ,GAAA,IAAA,CACpC;IACCG,IACC,SACAJ,EAAE,eAAe,SACXW,IAAIM,MAAM,GAAClC,YAAAI,SAAA;KAAA,QAAA;KAAA,QACWc;IAAQ,GAAA,IAAA,CACtC;GAAC,CAAA;EAGP;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PropType } from 'vue';
|
|
2
|
+
import { UsePictureViewport } from '../../use/usePictureViewport';
|
|
3
|
+
export type PictureViewportMethods = {
|
|
4
|
+
reset: () => void;
|
|
5
|
+
fit: (withTransition?: boolean) => void;
|
|
6
|
+
oneToOne: () => void;
|
|
7
|
+
zoomBy: (factor: number) => void;
|
|
8
|
+
rotateBy: (delta: number) => void;
|
|
9
|
+
flip: (axis: 'x' | 'y') => void;
|
|
10
|
+
getFlipEl: () => HTMLElement | undefined;
|
|
11
|
+
getApi: () => UsePictureViewport;
|
|
12
|
+
};
|
|
13
|
+
declare const PictureViewport: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
14
|
+
src: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
required: true;
|
|
17
|
+
};
|
|
18
|
+
/** FLIP 结束后才为 true */
|
|
19
|
+
interact: {
|
|
20
|
+
type: BooleanConstructor;
|
|
21
|
+
default: boolean;
|
|
22
|
+
};
|
|
23
|
+
/** 与 Picture 共享,切图时保留缩放/旋转/翻转 */
|
|
24
|
+
controller: {
|
|
25
|
+
type: PropType<UsePictureViewport>;
|
|
26
|
+
default: any;
|
|
27
|
+
};
|
|
28
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
29
|
+
src: {
|
|
30
|
+
type: StringConstructor;
|
|
31
|
+
required: true;
|
|
32
|
+
};
|
|
33
|
+
/** FLIP 结束后才为 true */
|
|
34
|
+
interact: {
|
|
35
|
+
type: BooleanConstructor;
|
|
36
|
+
default: boolean;
|
|
37
|
+
};
|
|
38
|
+
/** 与 Picture 共享,切图时保留缩放/旋转/翻转 */
|
|
39
|
+
controller: {
|
|
40
|
+
type: PropType<UsePictureViewport>;
|
|
41
|
+
default: any;
|
|
42
|
+
};
|
|
43
|
+
}>> & Readonly<{}>, {
|
|
44
|
+
interact: boolean;
|
|
45
|
+
controller: UsePictureViewport;
|
|
46
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
47
|
+
export default PictureViewport;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import useVisibleResize from "../../use/useVisibleResize.js";
|
|
2
|
+
import { PICTURE_VIEWPORT_ZOOM_STEP, createPictureViewport } from "../../use/usePictureViewport.js";
|
|
3
|
+
import { computed, createVNode, defineComponent, onBeforeUnmount, onMounted, ref, shallowRef, watch } from "vue";
|
|
4
|
+
//#region components/picture/PictureViewport.tsx
|
|
5
|
+
var PictureViewport = /* @__PURE__ */ defineComponent({
|
|
6
|
+
name: "PictureViewport",
|
|
7
|
+
props: {
|
|
8
|
+
src: {
|
|
9
|
+
type: String,
|
|
10
|
+
required: true
|
|
11
|
+
},
|
|
12
|
+
/** FLIP 结束后才为 true */
|
|
13
|
+
interact: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
default: false
|
|
16
|
+
},
|
|
17
|
+
/** 与 Picture 共享,切图时保留缩放/旋转/翻转 */
|
|
18
|
+
controller: {
|
|
19
|
+
type: Object,
|
|
20
|
+
default: void 0
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
setup(props, { expose }) {
|
|
24
|
+
const rootRef = ref();
|
|
25
|
+
const wrapRef = ref();
|
|
26
|
+
const imgRef = ref();
|
|
27
|
+
const transformCss = ref("translate(0px, 0px) rotate(0deg) scale(1, 1)");
|
|
28
|
+
const useTransition = ref(false);
|
|
29
|
+
const ready = ref(false);
|
|
30
|
+
const dragging = ref(false);
|
|
31
|
+
const canPan = ref(false);
|
|
32
|
+
const natural = shallowRef({
|
|
33
|
+
w: 0,
|
|
34
|
+
h: 0
|
|
35
|
+
});
|
|
36
|
+
const localApi = createPictureViewport();
|
|
37
|
+
const api = () => props.controller ?? localApi;
|
|
38
|
+
let dragLast = null;
|
|
39
|
+
let unsub;
|
|
40
|
+
const syncFromApi = () => {
|
|
41
|
+
const a = api();
|
|
42
|
+
useTransition.value = a.consumeTransition();
|
|
43
|
+
transformCss.value = a.getTransform();
|
|
44
|
+
canPan.value = a.canPan();
|
|
45
|
+
};
|
|
46
|
+
function bindSubscribe() {
|
|
47
|
+
unsub?.();
|
|
48
|
+
unsub = api().subscribe(syncFromApi);
|
|
49
|
+
syncFromApi();
|
|
50
|
+
}
|
|
51
|
+
bindSubscribe();
|
|
52
|
+
watch(() => props.controller, () => bindSubscribe());
|
|
53
|
+
function measureViewport() {
|
|
54
|
+
const el = rootRef.value;
|
|
55
|
+
if (!el) return;
|
|
56
|
+
const { width, height } = el.getBoundingClientRect();
|
|
57
|
+
if (width < 1 || height < 1) return;
|
|
58
|
+
api().setViewportSize(width, height);
|
|
59
|
+
syncFromApi();
|
|
60
|
+
}
|
|
61
|
+
useVisibleResize(rootRef, () => {
|
|
62
|
+
measureViewport();
|
|
63
|
+
});
|
|
64
|
+
function onImgLoad() {
|
|
65
|
+
const img = imgRef.value;
|
|
66
|
+
if (!img) return;
|
|
67
|
+
const w = img.naturalWidth;
|
|
68
|
+
const h = img.naturalHeight;
|
|
69
|
+
if (w < 1 || h < 1) return;
|
|
70
|
+
natural.value = {
|
|
71
|
+
w,
|
|
72
|
+
h
|
|
73
|
+
};
|
|
74
|
+
measureViewport();
|
|
75
|
+
api().setNaturalSize(w, h);
|
|
76
|
+
ready.value = true;
|
|
77
|
+
syncFromApi();
|
|
78
|
+
}
|
|
79
|
+
watch(() => props.src, (src, prev) => {
|
|
80
|
+
if (prev == null || prev === src) return;
|
|
81
|
+
ready.value = false;
|
|
82
|
+
api().prepareImageChange();
|
|
83
|
+
syncFromApi();
|
|
84
|
+
});
|
|
85
|
+
function pointerFromCenter(clientX, clientY) {
|
|
86
|
+
const el = rootRef.value;
|
|
87
|
+
if (!el) return {
|
|
88
|
+
x: 0,
|
|
89
|
+
y: 0
|
|
90
|
+
};
|
|
91
|
+
const r = el.getBoundingClientRect();
|
|
92
|
+
return {
|
|
93
|
+
x: clientX - (r.left + r.width / 2),
|
|
94
|
+
y: clientY - (r.top + r.height / 2)
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function onWheel(e) {
|
|
98
|
+
if (!props.interact || !ready.value) return;
|
|
99
|
+
e.preventDefault();
|
|
100
|
+
e.stopPropagation();
|
|
101
|
+
const factor = e.deltaY < 0 ? PICTURE_VIEWPORT_ZOOM_STEP : 1 / PICTURE_VIEWPORT_ZOOM_STEP;
|
|
102
|
+
const p = pointerFromCenter(e.clientX, e.clientY);
|
|
103
|
+
api().zoomAt(p.x, p.y, factor);
|
|
104
|
+
}
|
|
105
|
+
function onPointerDown(e) {
|
|
106
|
+
if (!props.interact || !ready.value) return;
|
|
107
|
+
if (e.button !== 0) return;
|
|
108
|
+
if (!api().canPan()) return;
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
dragging.value = true;
|
|
111
|
+
dragLast = {
|
|
112
|
+
x: e.clientX,
|
|
113
|
+
y: e.clientY
|
|
114
|
+
};
|
|
115
|
+
e.currentTarget.setPointerCapture?.(e.pointerId);
|
|
116
|
+
}
|
|
117
|
+
function onPointerMove(e) {
|
|
118
|
+
if (!dragging.value || !dragLast) return;
|
|
119
|
+
const dx = e.clientX - dragLast.x;
|
|
120
|
+
const dy = e.clientY - dragLast.y;
|
|
121
|
+
dragLast = {
|
|
122
|
+
x: e.clientX,
|
|
123
|
+
y: e.clientY
|
|
124
|
+
};
|
|
125
|
+
api().panBy(dx, dy);
|
|
126
|
+
}
|
|
127
|
+
function onPointerUp(e) {
|
|
128
|
+
if (!dragging.value) return;
|
|
129
|
+
dragging.value = false;
|
|
130
|
+
dragLast = null;
|
|
131
|
+
try {
|
|
132
|
+
e.currentTarget.releasePointerCapture?.(e.pointerId);
|
|
133
|
+
} catch {}
|
|
134
|
+
}
|
|
135
|
+
onMounted(() => {
|
|
136
|
+
measureViewport();
|
|
137
|
+
if (imgRef.value?.complete) onImgLoad();
|
|
138
|
+
});
|
|
139
|
+
onBeforeUnmount(() => {
|
|
140
|
+
unsub?.();
|
|
141
|
+
});
|
|
142
|
+
expose({
|
|
143
|
+
reset: () => {
|
|
144
|
+
api().reset();
|
|
145
|
+
syncFromApi();
|
|
146
|
+
},
|
|
147
|
+
fit: (withTransition = true) => {
|
|
148
|
+
api().fit(withTransition);
|
|
149
|
+
syncFromApi();
|
|
150
|
+
},
|
|
151
|
+
oneToOne: () => {
|
|
152
|
+
api().oneToOne(true);
|
|
153
|
+
syncFromApi();
|
|
154
|
+
},
|
|
155
|
+
zoomBy: (factor) => {
|
|
156
|
+
api().zoomBy(factor);
|
|
157
|
+
syncFromApi();
|
|
158
|
+
},
|
|
159
|
+
rotateBy: (delta) => {
|
|
160
|
+
api().rotateBy(delta);
|
|
161
|
+
syncFromApi();
|
|
162
|
+
},
|
|
163
|
+
flip: (axis) => {
|
|
164
|
+
api().flip(axis);
|
|
165
|
+
syncFromApi();
|
|
166
|
+
},
|
|
167
|
+
getFlipEl: () => wrapRef.value,
|
|
168
|
+
getApi: () => api()
|
|
169
|
+
});
|
|
170
|
+
const rootClass = computed(() => ["w-picture-viewer__viewport", {
|
|
171
|
+
"is-panning": props.interact && canPan.value,
|
|
172
|
+
"is-dragging": dragging.value
|
|
173
|
+
}]);
|
|
174
|
+
return () => createVNode("div", {
|
|
175
|
+
"ref": rootRef,
|
|
176
|
+
"class": rootClass.value,
|
|
177
|
+
"onWheel": onWheel,
|
|
178
|
+
"onPointerdown": onPointerDown,
|
|
179
|
+
"onPointermove": onPointerMove,
|
|
180
|
+
"onPointerup": onPointerUp,
|
|
181
|
+
"onPointercancel": onPointerUp
|
|
182
|
+
}, [createVNode("div", {
|
|
183
|
+
"ref": wrapRef,
|
|
184
|
+
"class": "w-picture-viewer__img-wrap"
|
|
185
|
+
}, [createVNode("div", {
|
|
186
|
+
"class": ["w-picture-viewer__transform", { "is-transition": useTransition.value }],
|
|
187
|
+
"style": ready.value ? { transform: transformCss.value } : void 0
|
|
188
|
+
}, [createVNode("img", {
|
|
189
|
+
"ref": imgRef,
|
|
190
|
+
"class": ["w-picture-viewer__img", { "is-fit-css": !ready.value }],
|
|
191
|
+
"src": props.src,
|
|
192
|
+
"alt": "",
|
|
193
|
+
"draggable": false,
|
|
194
|
+
"width": ready.value && natural.value.w ? natural.value.w : void 0,
|
|
195
|
+
"height": ready.value && natural.value.h ? natural.value.h : void 0,
|
|
196
|
+
"onLoad": onImgLoad
|
|
197
|
+
}, null)])])]);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
//#endregion
|
|
201
|
+
export { PictureViewport as default };
|
|
202
|
+
|
|
203
|
+
//# sourceMappingURL=PictureViewport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PictureViewport.js","names":["computed","defineComponent","onBeforeUnmount","onMounted","ref","shallowRef","watch","createVNode","_createVNode","createPictureViewport","PICTURE_VIEWPORT_ZOOM_STEP","useVisibleResize","PictureViewport","name","props","src","type","String","required","interact","Boolean","default","controller","Object","undefined","setup","expose","rootRef","wrapRef","imgRef","transformCss","useTransition","ready","dragging","canPan","natural","w","h","localApi","api","dragLast","unsub","syncFromApi","a","value","consumeTransition","getTransform","bindSubscribe","subscribe","measureViewport","el","width","height","getBoundingClientRect","setViewportSize","onImgLoad","img","naturalWidth","naturalHeight","setNaturalSize","prev","prepareImageChange","pointerFromCenter","clientX","clientY","x","y","r","left","top","onWheel","e","preventDefault","stopPropagation","factor","deltaY","p","zoomAt","onPointerDown","button","currentTarget","setPointerCapture","pointerId","onPointerMove","dx","dy","panBy","onPointerUp","releasePointerCapture","complete","methods","reset","fit","withTransition","oneToOne","zoomBy","rotateBy","delta","flip","axis","getFlipEl","getApi","rootClass","transform"],"sources":["../../../components/picture/PictureViewport.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n shallowRef,\r\n watch,\r\n type PropType,\r\n} from 'vue'\r\nimport {\r\n createPictureViewport,\r\n PICTURE_VIEWPORT_ZOOM_STEP,\r\n type UsePictureViewport,\r\n} from '../../use/usePictureViewport'\r\nimport useVisibleResize from '../../use/useVisibleResize'\r\n\r\nexport type PictureViewportMethods = {\r\n reset: () => void\r\n fit: (withTransition?: boolean) => void\r\n oneToOne: () => void\r\n zoomBy: (factor: number) => void\r\n rotateBy: (delta: number) => void\r\n flip: (axis: 'x' | 'y') => void\r\n getFlipEl: () => HTMLElement | undefined\r\n getApi: () => UsePictureViewport\r\n}\r\n\r\nconst PictureViewport = defineComponent({\r\n name: 'PictureViewport',\r\n props: {\r\n src: { type: String, required: true },\r\n /** FLIP 结束后才为 true */\r\n interact: { type: Boolean, default: false },\r\n /** 与 Picture 共享,切图时保留缩放/旋转/翻转 */\r\n controller: {\r\n type: Object as PropType<UsePictureViewport>,\r\n default: undefined,\r\n },\r\n },\r\n setup(props, { expose }) {\r\n const rootRef = ref<HTMLElement>()\r\n const wrapRef = ref<HTMLElement>()\r\n const imgRef = ref<HTMLImageElement>()\r\n const transformCss = ref('translate(0px, 0px) rotate(0deg) scale(1, 1)')\r\n const useTransition = ref(false)\r\n const ready = ref(false)\r\n const dragging = ref(false)\r\n const canPan = ref(false)\r\n const natural = shallowRef({ w: 0, h: 0 })\r\n\r\n const localApi = createPictureViewport()\r\n const api = () => props.controller ?? localApi\r\n let dragLast: { x: number; y: number } | null = null\r\n let unsub: (() => void) | undefined\r\n\r\n const syncFromApi = () => {\r\n const a = api()\r\n useTransition.value = a.consumeTransition()\r\n transformCss.value = a.getTransform()\r\n canPan.value = a.canPan()\r\n }\r\n\r\n function bindSubscribe() {\r\n unsub?.()\r\n unsub = api().subscribe(syncFromApi)\r\n syncFromApi()\r\n }\r\n\r\n bindSubscribe()\r\n watch(\r\n () => props.controller,\r\n () => bindSubscribe(),\r\n )\r\n\r\n function measureViewport() {\r\n const el = rootRef.value\r\n if (!el) return\r\n const { width, height } = el.getBoundingClientRect()\r\n if (width < 1 || height < 1) return\r\n api().setViewportSize(width, height)\r\n syncFromApi()\r\n }\r\n\r\n useVisibleResize(rootRef, () => {\r\n measureViewport()\r\n })\r\n\r\n function onImgLoad() {\r\n const img = imgRef.value\r\n if (!img) return\r\n const w = img.naturalWidth\r\n const h = img.naturalHeight\r\n if (w < 1 || h < 1) return\r\n natural.value = { w, h }\r\n measureViewport()\r\n api().setNaturalSize(w, h)\r\n ready.value = true\r\n syncFromApi()\r\n }\r\n\r\n watch(\r\n () => props.src,\r\n (src, prev) => {\r\n if (prev == null || prev === src) return\r\n ready.value = false\r\n api().prepareImageChange()\r\n syncFromApi()\r\n },\r\n )\r\n\r\n function pointerFromCenter(clientX: number, clientY: number) {\r\n const el = rootRef.value\r\n if (!el) return { x: 0, y: 0 }\r\n const r = el.getBoundingClientRect()\r\n return {\r\n x: clientX - (r.left + r.width / 2),\r\n y: clientY - (r.top + r.height / 2),\r\n }\r\n }\r\n\r\n function onWheel(e: WheelEvent) {\r\n if (!props.interact || !ready.value) return\r\n e.preventDefault()\r\n e.stopPropagation()\r\n const factor =\r\n e.deltaY < 0\r\n ? PICTURE_VIEWPORT_ZOOM_STEP\r\n : 1 / PICTURE_VIEWPORT_ZOOM_STEP\r\n const p = pointerFromCenter(e.clientX, e.clientY)\r\n api().zoomAt(p.x, p.y, factor)\r\n }\r\n\r\n function onPointerDown(e: PointerEvent) {\r\n if (!props.interact || !ready.value) return\r\n if (e.button !== 0) return\r\n if (!api().canPan()) return\r\n e.preventDefault()\r\n dragging.value = true\r\n dragLast = { x: e.clientX, y: e.clientY }\r\n ;(e.currentTarget as HTMLElement).setPointerCapture?.(e.pointerId)\r\n }\r\n\r\n function onPointerMove(e: PointerEvent) {\r\n if (!dragging.value || !dragLast) return\r\n const dx = e.clientX - dragLast.x\r\n const dy = e.clientY - dragLast.y\r\n dragLast = { x: e.clientX, y: e.clientY }\r\n api().panBy(dx, dy)\r\n }\r\n\r\n function onPointerUp(e: PointerEvent) {\r\n if (!dragging.value) return\r\n dragging.value = false\r\n dragLast = null\r\n try {\r\n ;(e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId)\r\n } catch {\r\n /* ignore */\r\n }\r\n }\r\n\r\n onMounted(() => {\r\n measureViewport()\r\n if (imgRef.value?.complete) onImgLoad()\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n unsub?.()\r\n })\r\n\r\n const methods: PictureViewportMethods = {\r\n reset: () => {\r\n api().reset()\r\n syncFromApi()\r\n },\r\n fit: (withTransition = true) => {\r\n api().fit(withTransition)\r\n syncFromApi()\r\n },\r\n oneToOne: () => {\r\n api().oneToOne(true)\r\n syncFromApi()\r\n },\r\n zoomBy: (factor) => {\r\n api().zoomBy(factor)\r\n syncFromApi()\r\n },\r\n rotateBy: (delta) => {\r\n api().rotateBy(delta)\r\n syncFromApi()\r\n },\r\n flip: (axis) => {\r\n api().flip(axis)\r\n syncFromApi()\r\n },\r\n getFlipEl: () => wrapRef.value,\r\n getApi: () => api(),\r\n }\r\n\r\n expose(methods)\r\n\r\n const rootClass = computed(() => [\r\n 'w-picture-viewer__viewport',\r\n {\r\n 'is-panning': props.interact && canPan.value,\r\n 'is-dragging': dragging.value,\r\n },\r\n ])\r\n\r\n return () => (\r\n <div\r\n ref={rootRef}\r\n class={rootClass.value}\r\n onWheel={onWheel}\r\n onPointerdown={onPointerDown}\r\n onPointermove={onPointerMove}\r\n onPointerup={onPointerUp}\r\n onPointercancel={onPointerUp}>\r\n <div ref={wrapRef} class=\"w-picture-viewer__img-wrap\">\r\n <div\r\n class={[\r\n 'w-picture-viewer__transform',\r\n { 'is-transition': useTransition.value },\r\n ]}\r\n style={\r\n ready.value ? { transform: transformCss.value } : undefined\r\n }>\r\n <img\r\n ref={imgRef}\r\n class={[\r\n 'w-picture-viewer__img',\r\n { 'is-fit-css': !ready.value },\r\n ]}\r\n src={props.src}\r\n alt=\"\"\r\n draggable={false}\r\n width={ready.value && natural.value.w ? natural.value.w : undefined}\r\n height={\r\n ready.value && natural.value.h ? natural.value.h : undefined\r\n }\r\n onLoad={onImgLoad}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n },\r\n})\r\n\r\nexport default PictureViewport\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 可通过 `app.use(UI, { components: { Picture: {...} } })` 配置的项。
|
|
3
|
+
* 不宜全局配置:images(实例资源列表)。
|
|
4
|
+
*/
|
|
5
|
+
export type PictureGlobalConfig = Partial<{
|
|
6
|
+
/** 缩略图尺度核(px)→ `--w-prop-picture-size`,并桥接 Image */
|
|
7
|
+
size: number;
|
|
8
|
+
/** 透传 Image:true → 圆形;string → 自定义圆角 */
|
|
9
|
+
round: boolean | string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const PICTURE_FALLBACK: {
|
|
12
|
+
size: number | undefined;
|
|
13
|
+
round: boolean | string | undefined;
|
|
14
|
+
};
|
|
15
|
+
/** 规范化图片列表:支持逗号分隔字符串或数组 */
|
|
16
|
+
export declare function normalizePictureImages(images?: string | string[] | null): string[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region components/picture/config.ts
|
|
2
|
+
var PICTURE_FALLBACK = {
|
|
3
|
+
size: void 0,
|
|
4
|
+
round: false
|
|
5
|
+
};
|
|
6
|
+
/** 规范化图片列表:支持逗号分隔字符串或数组 */
|
|
7
|
+
function normalizePictureImages(images) {
|
|
8
|
+
if (!images) return [];
|
|
9
|
+
if (typeof images === "string") return images.split(",").map((s) => s.trim()).filter(Boolean);
|
|
10
|
+
if (Array.isArray(images)) return images.filter((m) => typeof m === "string" && !!m);
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PICTURE_FALLBACK, normalizePictureImages };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../components/picture/config.ts"],"sourcesContent":["/**\r\n * 可通过 `app.use(UI, { components: { Picture: {...} } })` 配置的项。\r\n * 不宜全局配置:images(实例资源列表)。\r\n */\r\nexport type PictureGlobalConfig = Partial<{\r\n /** 缩略图尺度核(px)→ `--w-prop-picture-size`,并桥接 Image */\r\n size: number\r\n /** 透传 Image:true → 圆形;string → 自定义圆角 */\r\n round: boolean | string\r\n}>\r\n\r\nexport const PICTURE_FALLBACK = {\r\n size: undefined as number | undefined,\r\n round: false as boolean | string | undefined,\r\n}\r\n\r\n/** 规范化图片列表:支持逗号分隔字符串或数组 */\r\nexport function normalizePictureImages(\r\n images?: string | string[] | null,\r\n): string[] {\r\n if (!images) return []\r\n if (typeof images === 'string') {\r\n return images\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n }\r\n if (Array.isArray(images)) {\r\n return images.filter((m): m is string => typeof m === 'string' && !!m)\r\n }\r\n return []\r\n}\r\n"],"mappings":";AAWA,IAAa,mBAAmB;CAC9B,MAAM,KAAA;CACN,OAAO;AACT;;AAGA,SAAgB,uBACd,QACU;CACV,IAAI,CAAC,QAAQ,OAAO,CAAC;CACrB,IAAI,OAAO,WAAW,UACpB,OAAO,OACJ,MAAM,GAAG,CAAC,CACV,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;CAEnB,IAAI,MAAM,QAAQ,MAAM,GACtB,OAAO,OAAO,QAAQ,MAAmB,OAAO,MAAM,YAAY,CAAC,CAAC,CAAC;CAEvE,OAAO,CAAC;AACV"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** 缩略图矩形 → 大图矩形的 FLIP(分轴缩放,避免收尾宽高比突变) */
|
|
2
|
+
export declare function computePictureFlipTransform(from: DOMRectReadOnly, to: DOMRectReadOnly): {
|
|
3
|
+
dx: number;
|
|
4
|
+
dy: number;
|
|
5
|
+
scaleX: number;
|
|
6
|
+
scaleY: number;
|
|
7
|
+
} | null;
|
|
8
|
+
export type PictureFlipEnterOptions = {
|
|
9
|
+
/** FLIP 结束(含取消/失败)后回调一次 */
|
|
10
|
+
onEnd?: () => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 将元素从 fromRect 视觉位置 FLIP 到当前布局(仅执行一次进场)。
|
|
14
|
+
* 优先 WAAPI,收尾更顺;返回清理函数。
|
|
15
|
+
*/
|
|
16
|
+
export declare function runPictureImgEnter(el: HTMLElement, from: DOMRectReadOnly, options?: PictureFlipEnterOptions): () => void;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
//#region components/picture/pictureFlip.ts
|
|
2
|
+
/** 缩略图矩形 → 大图矩形的 FLIP(分轴缩放,避免收尾宽高比突变) */
|
|
3
|
+
function computePictureFlipTransform(from, to) {
|
|
4
|
+
if (from.width < 1 || from.height < 1 || to.width < 1 || to.height < 1) return null;
|
|
5
|
+
const scaleX = from.width / to.width;
|
|
6
|
+
const scaleY = from.height / to.height;
|
|
7
|
+
return {
|
|
8
|
+
dx: from.left + from.width / 2 - (to.left + to.width / 2),
|
|
9
|
+
dy: from.top + from.height / 2 - (to.top + to.height / 2),
|
|
10
|
+
scaleX,
|
|
11
|
+
scaleY
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function readCssTimeMs(raw, fallbackMs) {
|
|
15
|
+
const v = raw.trim();
|
|
16
|
+
if (!v) return fallbackMs;
|
|
17
|
+
if (v.endsWith("ms")) {
|
|
18
|
+
const n = Number.parseFloat(v);
|
|
19
|
+
return Number.isFinite(n) ? n : fallbackMs;
|
|
20
|
+
}
|
|
21
|
+
if (v.endsWith("s")) {
|
|
22
|
+
const n = Number.parseFloat(v);
|
|
23
|
+
return Number.isFinite(n) ? n * 1e3 : fallbackMs;
|
|
24
|
+
}
|
|
25
|
+
const n = Number.parseFloat(v);
|
|
26
|
+
return Number.isFinite(n) ? n : fallbackMs;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 将元素从 fromRect 视觉位置 FLIP 到当前布局(仅执行一次进场)。
|
|
30
|
+
* 优先 WAAPI,收尾更顺;返回清理函数。
|
|
31
|
+
*/
|
|
32
|
+
function runPictureImgEnter(el, from, options) {
|
|
33
|
+
const flip = computePictureFlipTransform(from, el.getBoundingClientRect());
|
|
34
|
+
if (!flip) {
|
|
35
|
+
options?.onEnd?.();
|
|
36
|
+
return () => {};
|
|
37
|
+
}
|
|
38
|
+
const cs = getComputedStyle(el);
|
|
39
|
+
const durationMs = readCssTimeMs(cs.getPropertyValue("--w-picture-img-enter-duration"), 520);
|
|
40
|
+
const easing = cs.getPropertyValue("--w-picture-img-enter-ease").trim() || "cubic-bezier(0.33, 1, 0.68, 1)";
|
|
41
|
+
const fromTransform = `translate(${flip.dx}px, ${flip.dy}px) scale(${flip.scaleX}, ${flip.scaleY})`;
|
|
42
|
+
const toTransform = "translate(0px, 0px) scale(1, 1)";
|
|
43
|
+
let done = false;
|
|
44
|
+
let ended = false;
|
|
45
|
+
const emitEnd = () => {
|
|
46
|
+
if (ended) return;
|
|
47
|
+
ended = true;
|
|
48
|
+
options?.onEnd?.();
|
|
49
|
+
};
|
|
50
|
+
const finish = () => {
|
|
51
|
+
if (done) return;
|
|
52
|
+
done = true;
|
|
53
|
+
el.style.transition = "";
|
|
54
|
+
el.style.transform = "";
|
|
55
|
+
emitEnd();
|
|
56
|
+
};
|
|
57
|
+
if (typeof el.animate === "function") {
|
|
58
|
+
const anim = el.animate([{ transform: fromTransform }, { transform: toTransform }], {
|
|
59
|
+
duration: durationMs,
|
|
60
|
+
easing,
|
|
61
|
+
fill: "forwards"
|
|
62
|
+
});
|
|
63
|
+
anim.finished.then(() => {
|
|
64
|
+
try {
|
|
65
|
+
anim.commitStyles();
|
|
66
|
+
} catch {}
|
|
67
|
+
anim.cancel();
|
|
68
|
+
el.style.transform = "";
|
|
69
|
+
emitEnd();
|
|
70
|
+
}).catch(() => {
|
|
71
|
+
finish();
|
|
72
|
+
});
|
|
73
|
+
return () => {
|
|
74
|
+
anim.cancel();
|
|
75
|
+
finish();
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
el.style.transition = "none";
|
|
79
|
+
el.style.transform = fromTransform;
|
|
80
|
+
el.offsetWidth;
|
|
81
|
+
const onEnd = (e) => {
|
|
82
|
+
if (e.target !== el) return;
|
|
83
|
+
if (e.propertyName && e.propertyName !== "transform") return;
|
|
84
|
+
el.removeEventListener("transitionend", onEnd);
|
|
85
|
+
finish();
|
|
86
|
+
};
|
|
87
|
+
el.addEventListener("transitionend", onEnd);
|
|
88
|
+
el.style.transition = `transform ${durationMs}ms ${easing}`;
|
|
89
|
+
el.style.transform = toTransform;
|
|
90
|
+
const timer = window.setTimeout(() => {
|
|
91
|
+
el.removeEventListener("transitionend", onEnd);
|
|
92
|
+
finish();
|
|
93
|
+
}, durationMs + 80);
|
|
94
|
+
return () => {
|
|
95
|
+
window.clearTimeout(timer);
|
|
96
|
+
el.removeEventListener("transitionend", onEnd);
|
|
97
|
+
finish();
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
export { computePictureFlipTransform, runPictureImgEnter };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=pictureFlip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pictureFlip.js","names":[],"sources":["../../../components/picture/pictureFlip.ts"],"sourcesContent":["/** 缩略图矩形 → 大图矩形的 FLIP(分轴缩放,避免收尾宽高比突变) */\r\nexport function computePictureFlipTransform(\r\n from: DOMRectReadOnly,\r\n to: DOMRectReadOnly,\r\n): { dx: number; dy: number; scaleX: number; scaleY: number } | null {\r\n if (from.width < 1 || from.height < 1 || to.width < 1 || to.height < 1) {\r\n return null\r\n }\r\n const scaleX = from.width / to.width\r\n const scaleY = from.height / to.height\r\n const dx = from.left + from.width / 2 - (to.left + to.width / 2)\r\n const dy = from.top + from.height / 2 - (to.top + to.height / 2)\r\n return { dx, dy, scaleX, scaleY }\r\n}\r\n\r\nfunction readCssTimeMs(raw: string, fallbackMs: number): number {\r\n const v = raw.trim()\r\n if (!v) return fallbackMs\r\n if (v.endsWith('ms')) {\r\n const n = Number.parseFloat(v)\r\n return Number.isFinite(n) ? n : fallbackMs\r\n }\r\n if (v.endsWith('s')) {\r\n const n = Number.parseFloat(v)\r\n return Number.isFinite(n) ? n * 1000 : fallbackMs\r\n }\r\n const n = Number.parseFloat(v)\r\n return Number.isFinite(n) ? n : fallbackMs\r\n}\r\n\r\nexport type PictureFlipEnterOptions = {\r\n /** FLIP 结束(含取消/失败)后回调一次 */\r\n onEnd?: () => void\r\n}\r\n\r\n/**\r\n * 将元素从 fromRect 视觉位置 FLIP 到当前布局(仅执行一次进场)。\r\n * 优先 WAAPI,收尾更顺;返回清理函数。\r\n */\r\nexport function runPictureImgEnter(\r\n el: HTMLElement,\r\n from: DOMRectReadOnly,\r\n options?: PictureFlipEnterOptions,\r\n): () => void {\r\n const to = el.getBoundingClientRect()\r\n const flip = computePictureFlipTransform(from, to)\r\n if (!flip) {\r\n options?.onEnd?.()\r\n return () => {}\r\n }\r\n\r\n const cs = getComputedStyle(el)\r\n const durationMs = readCssTimeMs(\r\n cs.getPropertyValue('--w-picture-img-enter-duration'),\r\n 520,\r\n )\r\n const easing =\r\n cs.getPropertyValue('--w-picture-img-enter-ease').trim() ||\r\n 'cubic-bezier(0.33, 1, 0.68, 1)'\r\n\r\n const fromTransform = `translate(${flip.dx}px, ${flip.dy}px) scale(${flip.scaleX}, ${flip.scaleY})`\r\n const toTransform = 'translate(0px, 0px) scale(1, 1)'\r\n\r\n let done = false\r\n let ended = false\r\n const emitEnd = () => {\r\n if (ended) return\r\n ended = true\r\n options?.onEnd?.()\r\n }\r\n const finish = () => {\r\n if (done) return\r\n done = true\r\n // 动画已到 identity,只清内联,避免打断最后一帧\r\n el.style.transition = ''\r\n el.style.transform = ''\r\n emitEnd()\r\n }\r\n\r\n if (typeof el.animate === 'function') {\r\n const anim = el.animate(\r\n [{ transform: fromTransform }, { transform: toTransform }],\r\n {\r\n duration: durationMs,\r\n easing,\r\n fill: 'forwards',\r\n },\r\n )\r\n anim.finished\r\n .then(() => {\r\n try {\r\n anim.commitStyles()\r\n } catch {\r\n /* ignore */\r\n }\r\n anim.cancel()\r\n // commit 后已是终点;去掉内联 transform,回到 stylesheet\r\n el.style.transform = ''\r\n emitEnd()\r\n })\r\n .catch(() => {\r\n finish()\r\n })\r\n return () => {\r\n anim.cancel()\r\n finish()\r\n }\r\n }\r\n\r\n // fallback:CSS transition\r\n el.style.transition = 'none'\r\n el.style.transform = fromTransform\r\n void el.offsetWidth\r\n const onEnd = (e: TransitionEvent) => {\r\n if (e.target !== el) return\r\n if (e.propertyName && e.propertyName !== 'transform') return\r\n el.removeEventListener('transitionend', onEnd)\r\n finish()\r\n }\r\n el.addEventListener('transitionend', onEnd)\r\n el.style.transition = `transform ${durationMs}ms ${easing}`\r\n el.style.transform = toTransform\r\n const timer = window.setTimeout(() => {\r\n el.removeEventListener('transitionend', onEnd)\r\n finish()\r\n }, durationMs + 80)\r\n\r\n return () => {\r\n window.clearTimeout(timer)\r\n el.removeEventListener('transitionend', onEnd)\r\n finish()\r\n }\r\n}\r\n"],"mappings":"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"}
|