sard 1.0.0-canary.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/dist/accordion/Item.d.ts +17 -0
- package/dist/accordion/Item.js +25 -0
- package/dist/accordion/index.d.ts +26 -0
- package/dist/accordion/index.js +27 -0
- package/dist/accordion/index.scss +49 -0
- package/dist/action-sheet/ActionSheet.d.ts +24 -0
- package/dist/action-sheet/ActionSheet.js +79 -0
- package/dist/action-sheet/Agent.d.ts +6 -0
- package/dist/action-sheet/Agent.js +7 -0
- package/dist/action-sheet/Item.d.ts +16 -0
- package/dist/action-sheet/Item.js +22 -0
- package/dist/action-sheet/imperative.d.ts +10 -0
- package/dist/action-sheet/imperative.js +22 -0
- package/dist/action-sheet/index.d.ts +12 -0
- package/dist/action-sheet/index.js +10 -0
- package/dist/action-sheet/index.scss +148 -0
- package/dist/animated/index.d.ts +62 -0
- package/dist/animated/index.js +101 -0
- package/dist/animated/index.rn.d.ts +4 -0
- package/dist/animated/index.rn.js +35 -0
- package/dist/avatar/Group.d.ts +9 -0
- package/dist/avatar/Group.js +27 -0
- package/dist/avatar/index.d.ts +17 -0
- package/dist/avatar/index.js +22 -0
- package/dist/avatar/index.scss +82 -0
- package/dist/badge/index.d.ts +13 -0
- package/dist/badge/index.js +16 -0
- package/dist/badge/index.scss +81 -0
- package/dist/base.d.ts +11 -0
- package/dist/base.js +1 -0
- package/dist/button/CustomButton.d.ts +9 -0
- package/dist/button/CustomButton.js +23 -0
- package/dist/button/index.d.ts +21 -0
- package/dist/button/index.js +34 -0
- package/dist/button/index.scss +346 -0
- package/dist/calendar/Day.d.ts +23 -0
- package/dist/calendar/Day.js +70 -0
- package/dist/calendar/MonthPicker.d.ts +13 -0
- package/dist/calendar/MonthPicker.js +22 -0
- package/dist/calendar/Toolbar.d.ts +11 -0
- package/dist/calendar/Toolbar.js +18 -0
- package/dist/calendar/Weeks.d.ts +6 -0
- package/dist/calendar/Weeks.js +18 -0
- package/dist/calendar/index.d.ts +48 -0
- package/dist/calendar/index.js +193 -0
- package/dist/calendar/index.scss +210 -0
- package/dist/card/index.d.ts +15 -0
- package/dist/card/index.js +14 -0
- package/dist/card/index.scss +64 -0
- package/dist/cascader/index.d.ts +43 -0
- package/dist/cascader/index.js +216 -0
- package/dist/cascader/index.scss +130 -0
- package/dist/checkbox/Group.d.ts +5 -0
- package/dist/checkbox/Group.js +5 -0
- package/dist/checkbox/index.d.ts +10 -0
- package/dist/checkbox/index.js +8 -0
- package/dist/checkbox/index.scss +78 -0
- package/dist/collapse/index.d.ts +14 -0
- package/dist/collapse/index.js +61 -0
- package/dist/collapse/index.rn.d.ts +14 -0
- package/dist/collapse/index.rn.js +76 -0
- package/dist/collapse/index.scss +31 -0
- package/dist/components.d.ts +66 -0
- package/dist/components.js +66 -0
- package/dist/components.scss +65 -0
- package/dist/config-provider/index.d.ts +21 -0
- package/dist/config-provider/index.js +20 -0
- package/dist/count-down/index.d.ts +26 -0
- package/dist/count-down/index.js +95 -0
- package/dist/datetime-picker/index.d.ts +36 -0
- package/dist/datetime-picker/index.js +230 -0
- package/dist/dialog/Agent.d.ts +6 -0
- package/dist/dialog/Agent.js +7 -0
- package/dist/dialog/Dialog.d.ts +31 -0
- package/dist/dialog/Dialog.js +103 -0
- package/dist/dialog/imperative.d.ts +17 -0
- package/dist/dialog/imperative.js +35 -0
- package/dist/dialog/index.d.ts +14 -0
- package/dist/dialog/index.js +12 -0
- package/dist/dialog/index.scss +156 -0
- package/dist/dropdown/Item.d.ts +33 -0
- package/dist/dropdown/Item.js +164 -0
- package/dist/dropdown/Option.d.ts +10 -0
- package/dist/dropdown/Option.js +12 -0
- package/dist/dropdown/index.d.ts +20 -0
- package/dist/dropdown/index.js +59 -0
- package/dist/dropdown/index.scss +236 -0
- package/dist/ellipsis/index.d.ts +8 -0
- package/dist/ellipsis/index.js +18 -0
- package/dist/ellipsis/index.scss +23 -0
- package/dist/empty/index.d.ts +10 -0
- package/dist/empty/index.js +14 -0
- package/dist/empty/index.scss +59 -0
- package/dist/footer-bar/index.d.ts +8 -0
- package/dist/footer-bar/index.js +15 -0
- package/dist/footer-bar/index.scss +29 -0
- package/dist/form/CustomForm.d.ts +13 -0
- package/dist/form/CustomForm.js +26 -0
- package/dist/form/ErrorList.d.ts +6 -0
- package/dist/form/ErrorList.js +15 -0
- package/dist/form/Field.d.ts +41 -0
- package/dist/form/Field.js +124 -0
- package/dist/form/FieldContext.d.ts +18 -0
- package/dist/form/FieldContext.js +8 -0
- package/dist/form/List.d.ts +31 -0
- package/dist/form/List.js +87 -0
- package/dist/form/Map.d.ts +17 -0
- package/dist/form/Map.js +24 -0
- package/dist/form/NodeContext.d.ts +12 -0
- package/dist/form/NodeContext.js +14 -0
- package/dist/form/Validator.d.ts +88 -0
- package/dist/form/Validator.js +268 -0
- package/dist/form/createFormStore.d.ts +36 -0
- package/dist/form/createFormStore.js +249 -0
- package/dist/form/index.d.ts +43 -0
- package/dist/form/index.js +109 -0
- package/dist/form/index.scss +200 -0
- package/dist/form/store/Context.d.ts +4 -0
- package/dist/form/store/Context.js +3 -0
- package/dist/form/store/createStore.d.ts +6 -0
- package/dist/form/store/createStore.js +28 -0
- package/dist/form/store/useDispatch.d.ts +2 -0
- package/dist/form/store/useDispatch.js +10 -0
- package/dist/form/store/useSelector.d.ts +7 -0
- package/dist/form/store/useSelector.js +35 -0
- package/dist/form/type.d.ts +20 -0
- package/dist/form/type.js +1 -0
- package/dist/form/useForm.d.ts +27 -0
- package/dist/form/useForm.js +14 -0
- package/dist/form/useInternalWatch.d.ts +3 -0
- package/dist/form/useInternalWatch.js +27 -0
- package/dist/form/useNode.d.ts +49 -0
- package/dist/form/useNode.js +284 -0
- package/dist/form/useValidator.d.ts +23 -0
- package/dist/form/useValidator.js +74 -0
- package/dist/form/useWatch.d.ts +4 -0
- package/dist/form/useWatch.js +24 -0
- package/dist/grid/Col.d.ts +9 -0
- package/dist/grid/Col.js +20 -0
- package/dist/grid/Row.d.ts +11 -0
- package/dist/grid/Row.js +34 -0
- package/dist/grid/index.d.ts +2 -0
- package/dist/grid/index.js +2 -0
- package/dist/grid/index.scss +56 -0
- package/dist/halfline/index.d.ts +10 -0
- package/dist/halfline/index.js +27 -0
- package/dist/halfline/index.scss +80 -0
- package/dist/icon/common.d.ts +15 -0
- package/dist/icon/common.js +1 -0
- package/dist/icon/font/iconfont.json +275 -0
- package/dist/icon/font/iconfont.rn.scss +0 -0
- package/dist/icon/font/iconfont.scss +164 -0
- package/dist/icon/font/iconfont.ttf +0 -0
- package/dist/icon/fontLoader.d.ts +7 -0
- package/dist/icon/fontLoader.js +14 -0
- package/dist/icon/fontLoader.rn.d.ts +6 -0
- package/dist/icon/fontLoader.rn.js +52 -0
- package/dist/icon/index.d.ts +21 -0
- package/dist/icon/index.js +41 -0
- package/dist/icon/index.scss +23 -0
- package/dist/index-bar/Item.d.ts +9 -0
- package/dist/index-bar/Item.js +11 -0
- package/dist/index-bar/Nav.d.ts +13 -0
- package/dist/index-bar/Nav.js +75 -0
- package/dist/index-bar/index.d.ts +19 -0
- package/dist/index-bar/index.js +142 -0
- package/dist/index-bar/index.scss +153 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.scss +1 -0
- package/dist/input/index.d.ts +37 -0
- package/dist/input/index.js +116 -0
- package/dist/input/index.scss +249 -0
- package/dist/linear-gradient/index.d.ts +14 -0
- package/dist/linear-gradient/index.js +30 -0
- package/dist/linear-gradient/index.rn.d.ts +3 -0
- package/dist/linear-gradient/index.rn.js +3 -0
- package/dist/list/Item.d.ts +22 -0
- package/dist/list/Item.js +26 -0
- package/dist/list/ListContext.d.ts +9 -0
- package/dist/list/ListContext.js +2 -0
- package/dist/list/OrderContext.d.ts +8 -0
- package/dist/list/OrderContext.js +6 -0
- package/dist/list/index.d.ts +19 -0
- package/dist/list/index.js +29 -0
- package/dist/list/index.scss +257 -0
- package/dist/loading/index.d.ts +10 -0
- package/dist/loading/index.js +47 -0
- package/dist/loading/index.scss +25 -0
- package/dist/locale/index.d.ts +199 -0
- package/dist/locale/index.js +36 -0
- package/dist/locale/lang/en-US.d.ts +92 -0
- package/dist/locale/lang/en-US.js +92 -0
- package/dist/locale/lang/zh-CN.d.ts +92 -0
- package/dist/locale/lang/zh-CN.js +92 -0
- package/dist/locale/useTranslate.d.ts +7 -0
- package/dist/locale/useTranslate.js +41 -0
- package/dist/mask/index.d.ts +13 -0
- package/dist/mask/index.js +26 -0
- package/dist/mask/index.scss +24 -0
- package/dist/menu/Item.d.ts +15 -0
- package/dist/menu/Item.js +17 -0
- package/dist/menu/index.d.ts +17 -0
- package/dist/menu/index.js +15 -0
- package/dist/menu/index.scss +128 -0
- package/dist/mesh/Item.d.ts +16 -0
- package/dist/mesh/Item.js +16 -0
- package/dist/mesh/index.d.ts +14 -0
- package/dist/mesh/index.js +69 -0
- package/dist/mesh/index.scss +131 -0
- package/dist/mesh/type.d.ts +9 -0
- package/dist/mesh/type.js +1 -0
- package/dist/modal/index.d.ts +8 -0
- package/dist/modal/index.js +9 -0
- package/dist/modal/index.rn.d.ts +8 -0
- package/dist/modal/index.rn.js +8 -0
- package/dist/navbar/Item.d.ts +8 -0
- package/dist/navbar/Item.js +11 -0
- package/dist/navbar/index.d.ts +15 -0
- package/dist/navbar/index.js +16 -0
- package/dist/navbar/index.scss +128 -0
- package/dist/notice-bar/index.d.ts +28 -0
- package/dist/notice-bar/index.js +135 -0
- package/dist/notice-bar/index.scss +109 -0
- package/dist/notify/Agent.d.ts +6 -0
- package/dist/notify/Agent.js +7 -0
- package/dist/notify/Notify.d.ts +22 -0
- package/dist/notify/Notify.js +48 -0
- package/dist/notify/imperative.d.ts +18 -0
- package/dist/notify/imperative.js +35 -0
- package/dist/notify/index.d.ts +15 -0
- package/dist/notify/index.js +13 -0
- package/dist/notify/index.scss +65 -0
- package/dist/number-keyboard/index.d.ts +10 -0
- package/dist/number-keyboard/index.js +51 -0
- package/dist/number-keyboard/index.scss +93 -0
- package/dist/pagination/index.d.ts +20 -0
- package/dist/pagination/index.js +65 -0
- package/dist/pagination/index.scss +131 -0
- package/dist/pan-gesture-detector/index.d.ts +8 -0
- package/dist/pan-gesture-detector/index.js +11 -0
- package/dist/pan-gesture-detector/index.rn.d.ts +8 -0
- package/dist/pan-gesture-detector/index.rn.js +23 -0
- package/dist/pan-gesture-detector/usePan.d.ts +47 -0
- package/dist/pan-gesture-detector/usePan.js +146 -0
- package/dist/password-input/index.d.ts +22 -0
- package/dist/password-input/index.js +91 -0
- package/dist/password-input/index.scss +189 -0
- package/dist/picker/InertialMotion.d.ts +20 -0
- package/dist/picker/InertialMotion.js +141 -0
- package/dist/picker/PickerView.d.ts +1 -0
- package/dist/picker/PickerView.h5.d.ts +17 -0
- package/dist/picker/PickerView.h5.js +36 -0
- package/dist/picker/PickerView.js +1 -0
- package/dist/picker/PickerViewColumn copy.d.ts +9 -0
- package/dist/picker/PickerViewColumn copy.js +143 -0
- package/dist/picker/PickerViewColumn.d.ts +12 -0
- package/dist/picker/PickerViewColumn.js +238 -0
- package/dist/picker/index.d.ts +38 -0
- package/dist/picker/index.js +224 -0
- package/dist/picker/index.rn.scss +0 -0
- package/dist/picker/index.scss +138 -0
- package/dist/popout/index.d.ts +25 -0
- package/dist/popout/index.js +87 -0
- package/dist/popout/index.scss +136 -0
- package/dist/popout-input/index.d.ts +29 -0
- package/dist/popout-input/index.js +91 -0
- package/dist/popout-input/index.scss +53 -0
- package/dist/popover/index.d.ts +35 -0
- package/dist/popover/index.js +193 -0
- package/dist/popover/index.scss +94 -0
- package/dist/popover/utils.d.ts +23 -0
- package/dist/popover/utils.js +124 -0
- package/dist/popup/index.d.ts +29 -0
- package/dist/popup/index.js +60 -0
- package/dist/popup/index.scss +60 -0
- package/dist/pressable/index.d.ts +13 -0
- package/dist/pressable/index.js +58 -0
- package/dist/pressable/index.rn.d.ts +13 -0
- package/dist/pressable/index.rn.js +50 -0
- package/dist/progress-bar/index.d.ts +10 -0
- package/dist/progress-bar/index.js +22 -0
- package/dist/progress-bar/index.scss +45 -0
- package/dist/progress-circle/index.d.ts +11 -0
- package/dist/progress-circle/index.js +54 -0
- package/dist/progress-circle/index.scss +141 -0
- package/dist/radio/Group.d.ts +5 -0
- package/dist/radio/Group.js +5 -0
- package/dist/radio/index.d.ts +10 -0
- package/dist/radio/index.js +8 -0
- package/dist/radio/index.scss +77 -0
- package/dist/rate/index.d.ts +23 -0
- package/dist/rate/index.js +116 -0
- package/dist/rate/index.scss +99 -0
- package/dist/result/index.d.ts +12 -0
- package/dist/result/index.js +19 -0
- package/dist/result/index.scss +88 -0
- package/dist/safe-area/index.d.ts +7 -0
- package/dist/safe-area/index.js +35 -0
- package/dist/safe-area/index.scss +24 -0
- package/dist/scroll-view/index.d.ts +24 -0
- package/dist/scroll-view/index.js +72 -0
- package/dist/scroll-view/index.rn.d.ts +21 -0
- package/dist/scroll-view/index.rn.js +51 -0
- package/dist/search/index.d.ts +26 -0
- package/dist/search/index.js +35 -0
- package/dist/search/index.scss +75 -0
- package/dist/share-sheet/Item.d.ts +15 -0
- package/dist/share-sheet/Item.js +26 -0
- package/dist/share-sheet/Row.d.ts +10 -0
- package/dist/share-sheet/Row.js +26 -0
- package/dist/share-sheet/index.d.ts +26 -0
- package/dist/share-sheet/index.js +76 -0
- package/dist/share-sheet/index.scss +230 -0
- package/dist/skeleton/Avatar.d.ts +7 -0
- package/dist/skeleton/Avatar.js +17 -0
- package/dist/skeleton/Block.d.ts +8 -0
- package/dist/skeleton/Block.js +44 -0
- package/dist/skeleton/Paragraph.d.ts +7 -0
- package/dist/skeleton/Paragraph.js +13 -0
- package/dist/skeleton/Title.d.ts +7 -0
- package/dist/skeleton/Title.js +16 -0
- package/dist/skeleton/index.d.ts +28 -0
- package/dist/skeleton/index.js +22 -0
- package/dist/skeleton/index.scss +108 -0
- package/dist/slider/index.d.ts +36 -0
- package/dist/slider/index.js +187 -0
- package/dist/slider/index.scss +138 -0
- package/dist/space/index.d.ts +13 -0
- package/dist/space/index.js +33 -0
- package/dist/space/index.scss +36 -0
- package/dist/stepper/index.d.ts +26 -0
- package/dist/stepper/index.js +138 -0
- package/dist/stepper/index.scss +106 -0
- package/dist/steps/Step.d.ts +23 -0
- package/dist/steps/Step.js +41 -0
- package/dist/steps/index.d.ts +23 -0
- package/dist/steps/index.js +38 -0
- package/dist/steps/index.scss +300 -0
- package/dist/style/base.scss +3 -0
- package/dist/style/functions.scss +54 -0
- package/dist/style/index.d.ts +2 -0
- package/dist/style/index.js +2 -0
- package/dist/style/index.scss +0 -0
- package/dist/style/mixins/bem.scss +63 -0
- package/dist/style/mixins/border.scss +80 -0
- package/dist/style/mixins/disabled.scss +9 -0
- package/dist/style/mixins/env.rn.scss +11 -0
- package/dist/style/mixins/env.scss +11 -0
- package/dist/style/mixins/fixed.rn.scss +3 -0
- package/dist/style/mixins/fixed.scss +3 -0
- package/dist/style/mixins/sticky.rn.scss +3 -0
- package/dist/style/mixins/sticky.scss +3 -0
- package/dist/style/mixins/theme.scss +11 -0
- package/dist/style/mixins/universal.rn.scss +2 -0
- package/dist/style/mixins/universal.scss +6 -0
- package/dist/style/mixins.scss +8 -0
- package/dist/style/utils.scss +130 -0
- package/dist/style/variables.scss +422 -0
- package/dist/swiper/Item.d.ts +8 -0
- package/dist/swiper/Item.js +10 -0
- package/dist/swiper/index.d.ts +12 -0
- package/dist/swiper/index.js +13 -0
- package/dist/swiper/index.scss +10 -0
- package/dist/switch/index.d.ts +19 -0
- package/dist/switch/index.js +78 -0
- package/dist/switch/index.scss +106 -0
- package/dist/tabbar/Item.d.ts +17 -0
- package/dist/tabbar/Item.js +24 -0
- package/dist/tabbar/index.d.ts +17 -0
- package/dist/tabbar/index.js +33 -0
- package/dist/tabbar/index.scss +89 -0
- package/dist/tabs/Tab.d.ts +12 -0
- package/dist/tabs/Tab.js +17 -0
- package/dist/tabs/index.d.ts +23 -0
- package/dist/tabs/index.js +258 -0
- package/dist/tabs/index.scss +113 -0
- package/dist/tag/index.d.ts +17 -0
- package/dist/tag/index.js +21 -0
- package/dist/tag/index.scss +93 -0
- package/dist/template/index.d.ts +6 -0
- package/dist/template/index.js +10 -0
- package/dist/template/index.scss +16 -0
- package/dist/toast/Agent.d.ts +6 -0
- package/dist/toast/Agent.js +7 -0
- package/dist/toast/Toast.d.ts +24 -0
- package/dist/toast/Toast.js +43 -0
- package/dist/toast/imperative.d.ts +18 -0
- package/dist/toast/imperative.js +35 -0
- package/dist/toast/index.d.ts +15 -0
- package/dist/toast/index.js +13 -0
- package/dist/toast/index.scss +96 -0
- package/dist/transition/CSSTransition.d.ts +7 -0
- package/dist/transition/CSSTransition.js +49 -0
- package/dist/transition/CSSTransition.rn.d.ts +7 -0
- package/dist/transition/CSSTransition.rn.js +312 -0
- package/dist/transition/index.d.ts +43 -0
- package/dist/transition/index.js +156 -0
- package/dist/transition/index.rn.scss +0 -0
- package/dist/transition/index.scss +158 -0
- package/dist/upload/Preview.d.ts +35 -0
- package/dist/upload/Preview.js +41 -0
- package/dist/upload/PreviewVideo.d.ts +7 -0
- package/dist/upload/PreviewVideo.js +38 -0
- package/dist/upload/PreviewVideo.rn.d.ts +6 -0
- package/dist/upload/PreviewVideo.rn.js +24 -0
- package/dist/upload/chooseMedia.d.ts +26 -0
- package/dist/upload/chooseMedia.h5.d.ts +25 -0
- package/dist/upload/chooseMedia.h5.js +117 -0
- package/dist/upload/chooseMedia.js +55 -0
- package/dist/upload/index.d.ts +37 -0
- package/dist/upload/index.js +167 -0
- package/dist/upload/index.scss +247 -0
- package/dist/use/index.d.ts +20 -0
- package/dist/use/index.js +20 -0
- package/dist/use/useAutoplay.d.ts +1 -0
- package/dist/use/useAutoplay.js +34 -0
- package/dist/use/useBem.d.ts +9 -0
- package/dist/use/useBem.js +52 -0
- package/dist/use/useBrush.d.ts +23 -0
- package/dist/use/useBrush.js +61 -0
- package/dist/use/useControllableValue.d.ts +12 -0
- package/dist/use/useControllableValue.js +59 -0
- package/dist/use/useEvent.d.ts +4 -0
- package/dist/use/useEvent.js +12 -0
- package/dist/use/useForceRender.d.ts +5 -0
- package/dist/use/useForceRender.js +8 -0
- package/dist/use/useIndexableMap.d.ts +21 -0
- package/dist/use/useIndexableMap.js +65 -0
- package/dist/use/useInertRef.d.ts +7 -0
- package/dist/use/useInertRef.js +15 -0
- package/dist/use/useInternalSelect.d.ts +42 -0
- package/dist/use/useInternalSelect.js +64 -0
- package/dist/use/useLayoutUpdateEffect.d.ts +5 -0
- package/dist/use/useLayoutUpdateEffect.js +18 -0
- package/dist/use/usePropRef.d.ts +5 -0
- package/dist/use/usePropRef.js +9 -0
- package/dist/use/useResize.d.ts +2 -0
- package/dist/use/useResize.js +14 -0
- package/dist/use/useResizeObserver.d.ts +5 -0
- package/dist/use/useResizeObserver.js +38 -0
- package/dist/use/useSelect.d.ts +15 -0
- package/dist/use/useSelect.js +56 -0
- package/dist/use/useSelectorId.d.ts +1 -0
- package/dist/use/useSelectorId.js +5 -0
- package/dist/use/useSetTimeout.d.ts +10 -0
- package/dist/use/useSetTimeout.js +34 -0
- package/dist/use/useStopMovePropagate.d.ts +5 -0
- package/dist/use/useStopMovePropagate.js +28 -0
- package/dist/use/useThrottle.d.ts +8 -0
- package/dist/use/useThrottle.js +11 -0
- package/dist/use/useUpdateEffect.d.ts +5 -0
- package/dist/use/useUpdateEffect.js +18 -0
- package/dist/use/useUpdateWatchSync.d.ts +5 -0
- package/dist/use/useUpdateWatchSync.js +18 -0
- package/dist/use/useWatchStateSync.d.ts +4 -0
- package/dist/use/useWatchStateSync.js +18 -0
- package/dist/utils/animate.d.ts +28 -0
- package/dist/utils/animate.js +81 -0
- package/dist/utils/createPubSub.d.ts +8 -0
- package/dist/utils/createPubSub.js +53 -0
- package/dist/utils/date.d.ts +13 -0
- package/dist/utils/date.js +87 -0
- package/dist/utils/dom.d.ts +149 -0
- package/dist/utils/dom.js +297 -0
- package/dist/utils/file.d.ts +18 -0
- package/dist/utils/file.js +57 -0
- package/dist/utils/imperative.d.ts +20 -0
- package/dist/utils/imperative.js +37 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/is.d.ts +16 -0
- package/dist/utils/is.js +57 -0
- package/dist/utils/measure.d.ts +8 -0
- package/dist/utils/measure.js +13 -0
- package/dist/utils/measure.rn.d.ts +8 -0
- package/dist/utils/measure.rn.js +15 -0
- package/dist/utils/platform.android.d.ts +2 -0
- package/dist/utils/platform.android.js +2 -0
- package/dist/utils/platform.d.ts +2 -0
- package/dist/utils/platform.ios.d.ts +2 -0
- package/dist/utils/platform.ios.js +2 -0
- package/dist/utils/platform.js +2 -0
- package/dist/utils/style.d.ts +10 -0
- package/dist/utils/style.js +34 -0
- package/dist/utils/utils.d.ts +199 -0
- package/dist/utils/utils.js +639 -0
- package/package.json +30 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function createPubSub() {
|
|
2
|
+
const events = {};
|
|
3
|
+
const on = (type, handler) => {
|
|
4
|
+
let handlers;
|
|
5
|
+
if (!(handlers = events[type])) {
|
|
6
|
+
handlers = events[type] = new Set();
|
|
7
|
+
}
|
|
8
|
+
handlers.add(handler);
|
|
9
|
+
};
|
|
10
|
+
const off = (type, handler) => {
|
|
11
|
+
let handlers;
|
|
12
|
+
if (!type) {
|
|
13
|
+
Object.keys(events).forEach((key) => {
|
|
14
|
+
delete events[key];
|
|
15
|
+
});
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (!(handlers = events[type])) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!handler) {
|
|
22
|
+
delete events[type];
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
handlers.delete(handler);
|
|
26
|
+
if (handlers.size === 0) {
|
|
27
|
+
delete events[type];
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const emit = (type, ...payload) => {
|
|
31
|
+
let handlers;
|
|
32
|
+
if (!(handlers = events[type])) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
handlers.forEach((handler) => {
|
|
36
|
+
handler(...payload);
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const once = (type, handler) => {
|
|
40
|
+
const oldHandler = handler;
|
|
41
|
+
handler = () => {
|
|
42
|
+
oldHandler();
|
|
43
|
+
off(type, handler);
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
on,
|
|
48
|
+
off,
|
|
49
|
+
emit,
|
|
50
|
+
once,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export const pubSub = createPubSub();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function getDaysInMonth(year: number, month: number): 29 | 28 | 30 | 31;
|
|
2
|
+
export declare function getWeekOnFirstDay(year: number, month: number): number;
|
|
3
|
+
export declare function getDaysInDate(date: Date): number;
|
|
4
|
+
export declare function toDateNumber(date: Date): number;
|
|
5
|
+
export declare function toDateString(date: Date): string;
|
|
6
|
+
export declare function toMonthNumber(date: Date): number;
|
|
7
|
+
export declare function getPadStartDays(year: number, month: number, amount: number): Date[];
|
|
8
|
+
export declare function getPadEndDays(year: number, month: number, amount: number): Date[];
|
|
9
|
+
export declare function getOffsetDaysFromFirstDay(weekOnFirstDay: number, weekStartsOn: number): number;
|
|
10
|
+
export declare function formatDate(date: Date, formatStr?: string): string;
|
|
11
|
+
export declare function minmaxDate(date: Date, minDate: Date, maxDate: Date): Date;
|
|
12
|
+
export declare function getPrevMonthDate(date: Date): Date;
|
|
13
|
+
export declare function getNextMonthDate(date: Date): Date;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { minmax } from './utils';
|
|
2
|
+
// 获取一个月中的天数
|
|
3
|
+
export function getDaysInMonth(year, month) {
|
|
4
|
+
month = month + 1;
|
|
5
|
+
if (month === 2) {
|
|
6
|
+
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 29 : 28;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
return [4, 6, 9, 11].includes(month) ? 30 : 31;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// 获取一个月中一号对应的星期
|
|
13
|
+
export function getWeekOnFirstDay(year, month) {
|
|
14
|
+
return new Date(year, month, 1).getDay();
|
|
15
|
+
}
|
|
16
|
+
// 获取 Date 中的总天数
|
|
17
|
+
export function getDaysInDate(date) {
|
|
18
|
+
return Math.floor(date.getTime() / 1000 / 60 / 60 / 24);
|
|
19
|
+
}
|
|
20
|
+
// 把日期转换为年月日数值
|
|
21
|
+
export function toDateNumber(date) {
|
|
22
|
+
return date.getFullYear() * 10000 + date.getMonth() * 100 + date.getDate();
|
|
23
|
+
}
|
|
24
|
+
// 把日期转换为年月日字符串
|
|
25
|
+
export function toDateString(date) {
|
|
26
|
+
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
|
|
27
|
+
}
|
|
28
|
+
// 把日期转换为年月数值
|
|
29
|
+
export function toMonthNumber(date) {
|
|
30
|
+
return date.getFullYear() * 10000 + date.getMonth() * 100;
|
|
31
|
+
}
|
|
32
|
+
// 获取从开头开始填充的日期
|
|
33
|
+
export function getPadStartDays(year, month, amount) {
|
|
34
|
+
const dates = [];
|
|
35
|
+
for (let i = amount - 1; i >= 0; i--) {
|
|
36
|
+
dates.push(new Date(year, month, -i));
|
|
37
|
+
}
|
|
38
|
+
return dates;
|
|
39
|
+
}
|
|
40
|
+
// 获取从结尾开始填充的日期
|
|
41
|
+
export function getPadEndDays(year, month, amount) {
|
|
42
|
+
const dates = [];
|
|
43
|
+
for (let i = 1; i <= amount; i++) {
|
|
44
|
+
dates.push(new Date(year, month + 1, i));
|
|
45
|
+
}
|
|
46
|
+
return dates;
|
|
47
|
+
}
|
|
48
|
+
// 获取一号偏移的天数
|
|
49
|
+
export function getOffsetDaysFromFirstDay(weekOnFirstDay, weekStartsOn) {
|
|
50
|
+
return (weekOnFirstDay - weekStartsOn + 7) % 7;
|
|
51
|
+
}
|
|
52
|
+
// 根据传入的占位符返回格式化后的日期
|
|
53
|
+
export function formatDate(date, formatStr = 'YYYY-MM-DD HH:mm:ss') {
|
|
54
|
+
const regexp = /YYYY|YY|MM|M|DD|D|HH|H|hh|h|mm|m|ss|s|SSS/g;
|
|
55
|
+
const matches = {
|
|
56
|
+
YYYY: (date) => String(date.getFullYear()).padStart(4, '0'),
|
|
57
|
+
YY: (date) => String(date.getFullYear()).slice(-2),
|
|
58
|
+
MM: (date) => String(date.getMonth() + 1).padStart(2, '0'),
|
|
59
|
+
M: (date) => String(date.getMonth() + 1),
|
|
60
|
+
DD: (date) => String(date.getDate()).padStart(2, '0'),
|
|
61
|
+
D: (date) => String(date.getDate()),
|
|
62
|
+
HH: (date) => String(date.getHours()).padStart(2, '0'),
|
|
63
|
+
H: (date) => String(date.getHours()),
|
|
64
|
+
hh: (date) => String(date.getHours() % 24).padStart(2, '0'),
|
|
65
|
+
h: (date) => String(date.getHours() % 24),
|
|
66
|
+
mm: (date) => String(date.getMinutes()).padStart(2, '0'),
|
|
67
|
+
m: (date) => String(date.getMinutes()),
|
|
68
|
+
ss: (date) => String(date.getSeconds()).padStart(2, '0'),
|
|
69
|
+
s: (date) => String(date.getSeconds()),
|
|
70
|
+
SSS: (date) => String(date.getMilliseconds()).padStart(3, '0'),
|
|
71
|
+
};
|
|
72
|
+
return formatStr.replace(regexp, (match) => {
|
|
73
|
+
return matches[match](date);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// 限定日期范围
|
|
77
|
+
export function minmaxDate(date, minDate, maxDate) {
|
|
78
|
+
return new Date(minmax(date.getTime(), minDate.getTime(), maxDate.getTime()));
|
|
79
|
+
}
|
|
80
|
+
// 获取上一个月的日期对象
|
|
81
|
+
export function getPrevMonthDate(date) {
|
|
82
|
+
return new Date(date.getFullYear(), date.getMonth() - 1, 1);
|
|
83
|
+
}
|
|
84
|
+
// 获取下一个月的日期对象
|
|
85
|
+
export function getNextMonthDate(date) {
|
|
86
|
+
return new Date(date.getFullYear(), date.getMonth() + 1, 1);
|
|
87
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Taro from '@tarojs/taro';
|
|
2
|
+
import { TouchEvent } from 'react';
|
|
3
|
+
export declare const systemInfo: Taro.getSystemInfoSync.Result;
|
|
4
|
+
export declare function pageScrollTop(top: number, animated?: boolean): void;
|
|
5
|
+
interface windowResizeHandler {
|
|
6
|
+
(res: {
|
|
7
|
+
windowWidth: number;
|
|
8
|
+
windowHeight: number;
|
|
9
|
+
}): void;
|
|
10
|
+
__sard_listener: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function onWindowResize(listener: windowResizeHandler): void;
|
|
13
|
+
export declare function offWindowResize(listener: windowResizeHandler): void;
|
|
14
|
+
export type AutoHeight = boolean | {
|
|
15
|
+
minHeight?: number;
|
|
16
|
+
maxHeight?: number;
|
|
17
|
+
};
|
|
18
|
+
export declare function resizeTextArea(el: HTMLInputElement & HTMLTextAreaElement, autoHeight: AutoHeight): void;
|
|
19
|
+
/**
|
|
20
|
+
* @description: 获取目标元素在根元素内的可滚动的祖先元素
|
|
21
|
+
* @param {HTMLElement} target 目标元素,通常为 Event.target
|
|
22
|
+
* @param {HTMLElement} root 根元素
|
|
23
|
+
* @return {HTMLElement}
|
|
24
|
+
*/
|
|
25
|
+
export declare function getScrollParent(target: HTMLElement, root?: HTMLElement): HTMLElement;
|
|
26
|
+
/**
|
|
27
|
+
* @description: 阻止浏览器默认行为
|
|
28
|
+
* @param {Event} event
|
|
29
|
+
* @return {void}
|
|
30
|
+
*/
|
|
31
|
+
export declare function preventDefault(event: Event | TouchEvent): void;
|
|
32
|
+
/**
|
|
33
|
+
* @description: 获取元素的相对于指定元素的坐标
|
|
34
|
+
* @param {HTMLElement} elem
|
|
35
|
+
* @return {*}
|
|
36
|
+
*/
|
|
37
|
+
export declare function getOffset(elem: HTMLElement, root?: HTMLElement): {
|
|
38
|
+
top: number;
|
|
39
|
+
left: number;
|
|
40
|
+
};
|
|
41
|
+
export type ScrollIntoViewPosition = 'start' | 'center' | 'end' | 'nearest';
|
|
42
|
+
export interface ScrollIntoViewValueOptions {
|
|
43
|
+
placement?: ScrollIntoViewPosition;
|
|
44
|
+
offsetStart?: number;
|
|
45
|
+
offsetEnd?: number;
|
|
46
|
+
limited?: boolean;
|
|
47
|
+
pageHeight?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
```
|
|
51
|
+
page
|
|
52
|
+
╱
|
|
53
|
+
╭───────────────╮ viewport
|
|
54
|
+
╭─│─ ─ ─ ─ ─ ─ ─ ─│─╮ ╱
|
|
55
|
+
│ │ ╭───────────╮ │ │
|
|
56
|
+
│ │ │ element │ │ │
|
|
57
|
+
│ │ ╰───────────╯ │ │
|
|
58
|
+
╰─│─ ─ ─ ─ ─ ─ ─ ─│─╯
|
|
59
|
+
│ │
|
|
60
|
+
│ │
|
|
61
|
+
╰───────────────╯
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
# 对象
|
|
65
|
+
- viewport: 视窗
|
|
66
|
+
- page: 页面
|
|
67
|
+
- element: 元素
|
|
68
|
+
|
|
69
|
+
# 参数
|
|
70
|
+
- viewportHeight: 视窗高度
|
|
71
|
+
- viewportScrollTop: 视窗顶部滚动距离
|
|
72
|
+
- elementHeight: 元素高度
|
|
73
|
+
- elementToPageTopOffset: 元素距离页面顶部距离
|
|
74
|
+
|
|
75
|
+
# 选项
|
|
76
|
+
- placement: 元素在视窗中的位置(start, center, end, nearest)
|
|
77
|
+
- offsetStart: 元素距离视窗顶部的偏移量
|
|
78
|
+
- offsetEnd: 元素距离视窗底部的偏移量
|
|
79
|
+
- limited: 是否限定视窗滚动的距离,让页面始终覆盖视窗;需要同时传递pageHeight选项(用于自定义滚动)
|
|
80
|
+
- pageHeight: 页面高度
|
|
81
|
+
|
|
82
|
+
# 结果值
|
|
83
|
+
- viewportScrollTop: 视窗顶部滚动的新的距离
|
|
84
|
+
|
|
85
|
+
*/
|
|
86
|
+
export declare function getScrollIntoViewValue(viewportHeight: number, viewportScrollTop: number, elementHeight: number, elementToPageTopOffset: number, options?: ScrollIntoViewValueOptions): number;
|
|
87
|
+
export interface ScrollIntoViewOptions {
|
|
88
|
+
behavior?: 'smooth' | 'instant';
|
|
89
|
+
block?: 'start' | 'center' | 'end' | 'nearest';
|
|
90
|
+
inline?: 'start' | 'center' | 'end' | 'nearest';
|
|
91
|
+
contextId?: string;
|
|
92
|
+
offsetTop?: number;
|
|
93
|
+
offsetBottom?: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 滚动元素到页面指定位置
|
|
97
|
+
*
|
|
98
|
+
* @param pageScrollTop 当前页面滚动的距离
|
|
99
|
+
* @param element 使用 ref 获取到元素
|
|
100
|
+
*
|
|
101
|
+
*/
|
|
102
|
+
export declare function scrollIntoView(pageScrollTop: number, element: any, options?: ScrollIntoViewOptions): Promise<void>;
|
|
103
|
+
export type NodeRect = {
|
|
104
|
+
width: number;
|
|
105
|
+
height: number;
|
|
106
|
+
top: number;
|
|
107
|
+
right: number;
|
|
108
|
+
bottom: number;
|
|
109
|
+
left: number;
|
|
110
|
+
};
|
|
111
|
+
export declare function getRectById(id: string, ctxId?: string): Promise<NodeRect>;
|
|
112
|
+
/**
|
|
113
|
+
* 命令式获取获取元素的大小和位置,兼容H5、小程序、RN
|
|
114
|
+
*
|
|
115
|
+
* @param element 通过 ref 获取的元素
|
|
116
|
+
* @param ctxId 在小程序端如果使用 CustomWrapper 包裹元素,需要传递其id。
|
|
117
|
+
*/
|
|
118
|
+
export declare function getRectByElement(element: any, ctxId?: string): Promise<{
|
|
119
|
+
width: number;
|
|
120
|
+
height: number;
|
|
121
|
+
top: number;
|
|
122
|
+
right: number;
|
|
123
|
+
bottom: number;
|
|
124
|
+
left: number;
|
|
125
|
+
}>;
|
|
126
|
+
interface MatchScrollVisibleOptions {
|
|
127
|
+
offset?: number;
|
|
128
|
+
errorValue?: number;
|
|
129
|
+
contextId?: string;
|
|
130
|
+
isRect?: boolean;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @description: 匹配元素列表中第一个位于滚动盒子可视区域的元素
|
|
134
|
+
* @param {HTMLElement} elements 元素列表
|
|
135
|
+
* @param {function} callback 匹配成功时回调
|
|
136
|
+
* @param {number} offset 距离滚动盒子顶部的偏移量
|
|
137
|
+
* @param {number} errorValue 误差值
|
|
138
|
+
* @return {void}
|
|
139
|
+
*/
|
|
140
|
+
export declare function matchScrollVisible(elementsOrRects: any[], callback: (index: number) => unknown, options?: MatchScrollVisibleOptions): Promise<unknown>;
|
|
141
|
+
export declare function getElementById(id?: string): any;
|
|
142
|
+
export declare function createMouseBinder(options: {
|
|
143
|
+
onStart?: (event: any) => void;
|
|
144
|
+
onMove?: (event: any) => void;
|
|
145
|
+
onEnd?: (event: any) => void;
|
|
146
|
+
}): {
|
|
147
|
+
onMouseDown: (event: any) => void;
|
|
148
|
+
};
|
|
149
|
+
export {};
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import Taro from '@tarojs/taro';
|
|
2
|
+
import { minmax } from './utils';
|
|
3
|
+
import { isRN } from './is';
|
|
4
|
+
import { measure } from './measure';
|
|
5
|
+
import { isH5 } from './is';
|
|
6
|
+
export const systemInfo = Taro.getSystemInfoSync();
|
|
7
|
+
export function pageScrollTop(top, animated = true) {
|
|
8
|
+
window.scrollTo({
|
|
9
|
+
top,
|
|
10
|
+
behavior: animated ? 'smooth' : 'auto',
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function onWindowResize(listener) {
|
|
14
|
+
listener.__sard_listener = () => {
|
|
15
|
+
listener({
|
|
16
|
+
windowWidth: window.innerWidth,
|
|
17
|
+
windowHeight: window.innerHeight,
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
window.addEventListener('resize', listener.__sard_listener);
|
|
21
|
+
}
|
|
22
|
+
export function offWindowResize(listener) {
|
|
23
|
+
window.removeEventListener('resize', listener.__sard_listener);
|
|
24
|
+
}
|
|
25
|
+
// | { minRows?: number; maxRows?: number }
|
|
26
|
+
export function resizeTextArea(el, autoHeight) {
|
|
27
|
+
if (!autoHeight) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
el.style.height = 'auto';
|
|
31
|
+
let height = el.scrollHeight;
|
|
32
|
+
if (autoHeight !== true) {
|
|
33
|
+
const { minHeight = 0, maxHeight = Number.MAX_SAFE_INTEGER } = autoHeight;
|
|
34
|
+
height = Math.min(Math.max(minHeight, height), maxHeight);
|
|
35
|
+
}
|
|
36
|
+
el.style.height = height + 'px';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @description: 获取目标元素在根元素内的可滚动的祖先元素
|
|
40
|
+
* @param {HTMLElement} target 目标元素,通常为 Event.target
|
|
41
|
+
* @param {HTMLElement} root 根元素
|
|
42
|
+
* @return {HTMLElement}
|
|
43
|
+
*/
|
|
44
|
+
export function getScrollParent(target, root = document.documentElement) {
|
|
45
|
+
let current = target;
|
|
46
|
+
while (current && current.nodeType === 1 && current !== root) {
|
|
47
|
+
const { overflowY } = window.getComputedStyle(current);
|
|
48
|
+
if (['scroll', 'auto', 'overlay'].includes(overflowY)) {
|
|
49
|
+
return current;
|
|
50
|
+
}
|
|
51
|
+
current = current.parentNode;
|
|
52
|
+
}
|
|
53
|
+
return root;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @description: 阻止浏览器默认行为
|
|
57
|
+
* @param {Event} event
|
|
58
|
+
* @return {void}
|
|
59
|
+
*/
|
|
60
|
+
export function preventDefault(event) {
|
|
61
|
+
if (typeof event.cancelable !== 'boolean' || event.cancelable) {
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @description: 获取元素的相对于指定元素的坐标
|
|
67
|
+
* @param {HTMLElement} elem
|
|
68
|
+
* @return {*}
|
|
69
|
+
*/
|
|
70
|
+
export function getOffset(elem, root = document.body) {
|
|
71
|
+
let top = 0, left = 0;
|
|
72
|
+
if (elem && elem.nodeType === 1) {
|
|
73
|
+
while (elem.offsetParent && elem !== root) {
|
|
74
|
+
top += elem.offsetTop;
|
|
75
|
+
left += elem.offsetLeft;
|
|
76
|
+
elem = elem.offsetParent;
|
|
77
|
+
}
|
|
78
|
+
return { top: top, left: left };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
```
|
|
83
|
+
page
|
|
84
|
+
╱
|
|
85
|
+
╭───────────────╮ viewport
|
|
86
|
+
╭─│─ ─ ─ ─ ─ ─ ─ ─│─╮ ╱
|
|
87
|
+
│ │ ╭───────────╮ │ │
|
|
88
|
+
│ │ │ element │ │ │
|
|
89
|
+
│ │ ╰───────────╯ │ │
|
|
90
|
+
╰─│─ ─ ─ ─ ─ ─ ─ ─│─╯
|
|
91
|
+
│ │
|
|
92
|
+
│ │
|
|
93
|
+
╰───────────────╯
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
# 对象
|
|
97
|
+
- viewport: 视窗
|
|
98
|
+
- page: 页面
|
|
99
|
+
- element: 元素
|
|
100
|
+
|
|
101
|
+
# 参数
|
|
102
|
+
- viewportHeight: 视窗高度
|
|
103
|
+
- viewportScrollTop: 视窗顶部滚动距离
|
|
104
|
+
- elementHeight: 元素高度
|
|
105
|
+
- elementToPageTopOffset: 元素距离页面顶部距离
|
|
106
|
+
|
|
107
|
+
# 选项
|
|
108
|
+
- placement: 元素在视窗中的位置(start, center, end, nearest)
|
|
109
|
+
- offsetStart: 元素距离视窗顶部的偏移量
|
|
110
|
+
- offsetEnd: 元素距离视窗底部的偏移量
|
|
111
|
+
- limited: 是否限定视窗滚动的距离,让页面始终覆盖视窗;需要同时传递pageHeight选项(用于自定义滚动)
|
|
112
|
+
- pageHeight: 页面高度
|
|
113
|
+
|
|
114
|
+
# 结果值
|
|
115
|
+
- viewportScrollTop: 视窗顶部滚动的新的距离
|
|
116
|
+
|
|
117
|
+
*/
|
|
118
|
+
export function getScrollIntoViewValue(viewportHeight, viewportScrollTop, elementHeight, elementToPageTopOffset, options = {}) {
|
|
119
|
+
const { offsetStart = 0, offsetEnd = 0, pageHeight, limited } = options;
|
|
120
|
+
let placement = options.placement || 'nearest';
|
|
121
|
+
const elementToViewportTopOffset = elementToPageTopOffset - viewportScrollTop;
|
|
122
|
+
const elementToViewportBottomOffset = elementToPageTopOffset + elementHeight - viewportScrollTop - viewportHeight;
|
|
123
|
+
if (placement === 'nearest') {
|
|
124
|
+
if (elementToViewportTopOffset >= 0 && elementToViewportBottomOffset <= 0) {
|
|
125
|
+
return viewportScrollTop;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
placement =
|
|
129
|
+
Math.abs(elementToViewportTopOffset) >
|
|
130
|
+
Math.abs(elementToViewportBottomOffset)
|
|
131
|
+
? 'end'
|
|
132
|
+
: 'start';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
let nextScrollTop = 0;
|
|
136
|
+
switch (placement) {
|
|
137
|
+
case 'start':
|
|
138
|
+
nextScrollTop = elementToPageTopOffset - offsetStart;
|
|
139
|
+
break;
|
|
140
|
+
case 'center':
|
|
141
|
+
nextScrollTop =
|
|
142
|
+
elementToPageTopOffset - (viewportHeight - elementHeight) / 2;
|
|
143
|
+
break;
|
|
144
|
+
case 'end':
|
|
145
|
+
nextScrollTop =
|
|
146
|
+
elementToPageTopOffset + elementHeight - viewportHeight + offsetEnd;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
return limited
|
|
150
|
+
? minmax(nextScrollTop, 0, pageHeight - viewportHeight)
|
|
151
|
+
: nextScrollTop;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 滚动元素到页面指定位置
|
|
155
|
+
*
|
|
156
|
+
* @param pageScrollTop 当前页面滚动的距离
|
|
157
|
+
* @param element 使用 ref 获取到元素
|
|
158
|
+
*
|
|
159
|
+
*/
|
|
160
|
+
export async function scrollIntoView(pageScrollTop, element, options = {}) {
|
|
161
|
+
const { contextId, block = 'start', behavior = 'instant', offsetTop = 0, offsetBottom = 0, } = options;
|
|
162
|
+
const windowHeight = systemInfo.windowHeight;
|
|
163
|
+
const scrollTop = pageScrollTop;
|
|
164
|
+
const elRect = await getRectByElement(element, contextId);
|
|
165
|
+
const elHeight = elRect.height;
|
|
166
|
+
const elToPageTop = scrollTop + elRect.top;
|
|
167
|
+
// tips: rn ios 端的 windowHeight 是包括状态栏和导航栏的,和屏幕高度一致。
|
|
168
|
+
const RNStartOffset = isRN ? (systemInfo.statusBarHeight || 0) + 44 : 0;
|
|
169
|
+
const nextScrollTop = getScrollIntoViewValue(windowHeight, scrollTop, elHeight, elToPageTop, {
|
|
170
|
+
placement: block,
|
|
171
|
+
offsetStart: offsetTop + RNStartOffset,
|
|
172
|
+
offsetEnd: offsetBottom,
|
|
173
|
+
});
|
|
174
|
+
Taro.pageScrollTo({
|
|
175
|
+
scrollTop: nextScrollTop,
|
|
176
|
+
duration: behavior === 'smooth' ? 300 : 0,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// NodesRef.fields 的异步封装
|
|
180
|
+
export function getRectById(id, ctxId) {
|
|
181
|
+
return new Promise((resolve) => {
|
|
182
|
+
let query;
|
|
183
|
+
if (ctxId) {
|
|
184
|
+
const element = document.getElementById(ctxId);
|
|
185
|
+
if (element && element.ctx) {
|
|
186
|
+
query = Taro.createSelectorQuery().in(element.ctx);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (!query) {
|
|
190
|
+
query = Taro.createSelectorQuery();
|
|
191
|
+
}
|
|
192
|
+
query
|
|
193
|
+
.select(`#${id}`)
|
|
194
|
+
.fields({
|
|
195
|
+
rect: true,
|
|
196
|
+
size: true,
|
|
197
|
+
}, (res) => {
|
|
198
|
+
resolve(res);
|
|
199
|
+
})
|
|
200
|
+
.exec();
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// H5端获取元素位置和大小
|
|
204
|
+
function getRectByWebElement(element) {
|
|
205
|
+
return new Promise((resolve, reject) => {
|
|
206
|
+
if (element instanceof Element) {
|
|
207
|
+
const rect = element.getBoundingClientRect();
|
|
208
|
+
resolve(rect);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
reject();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 命令式获取获取元素的大小和位置,兼容H5、小程序、RN
|
|
217
|
+
*
|
|
218
|
+
* @param element 通过 ref 获取的元素
|
|
219
|
+
* @param ctxId 在小程序端如果使用 CustomWrapper 包裹元素,需要传递其id。
|
|
220
|
+
*/
|
|
221
|
+
export function getRectByElement(element, ctxId) {
|
|
222
|
+
if (isRN) {
|
|
223
|
+
return measure(element);
|
|
224
|
+
}
|
|
225
|
+
else if (isH5) {
|
|
226
|
+
return getRectByWebElement(element);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return getRectById(element.uid, ctxId);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* @description: 匹配元素列表中第一个位于滚动盒子可视区域的元素
|
|
234
|
+
* @param {HTMLElement} elements 元素列表
|
|
235
|
+
* @param {function} callback 匹配成功时回调
|
|
236
|
+
* @param {number} offset 距离滚动盒子顶部的偏移量
|
|
237
|
+
* @param {number} errorValue 误差值
|
|
238
|
+
* @return {void}
|
|
239
|
+
*/
|
|
240
|
+
export async function matchScrollVisible(elementsOrRects, callback, options = {}) {
|
|
241
|
+
const { offset: optionOffset = 0, errorValue = 5, contextId, isRect, } = options;
|
|
242
|
+
const offset = optionOffset + errorValue;
|
|
243
|
+
for (let i = 0, l = elementsOrRects.length; i < l; i++) {
|
|
244
|
+
const elementOrRect = elementsOrRects[i];
|
|
245
|
+
let rect;
|
|
246
|
+
if (isRect) {
|
|
247
|
+
rect = elementOrRect;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
rect = await getRectByElement(elementOrRect, contextId);
|
|
251
|
+
}
|
|
252
|
+
if (rect) {
|
|
253
|
+
if (i === 0) {
|
|
254
|
+
if (rect.top > offset) {
|
|
255
|
+
return callback(i);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else if (i > 0 && i < l - 1) {
|
|
259
|
+
if (rect.top > offset) {
|
|
260
|
+
return callback(i - 1);
|
|
261
|
+
}
|
|
262
|
+
else if (rect.top <= offset && rect.bottom > offset) {
|
|
263
|
+
return callback(i);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
return callback(i);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
export function getElementById(id) {
|
|
273
|
+
if (id && typeof document === 'object' && document) {
|
|
274
|
+
return document.getElementById(id);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// 兼容pc端鼠标操作
|
|
278
|
+
export function createMouseBinder(options) {
|
|
279
|
+
const { onStart, onMove, onEnd } = options;
|
|
280
|
+
const handleMouseDown = (event) => {
|
|
281
|
+
onStart?.(event);
|
|
282
|
+
const handeMouseMove = (event) => {
|
|
283
|
+
event.preventDefault();
|
|
284
|
+
onMove?.(event);
|
|
285
|
+
};
|
|
286
|
+
const handeMouseUp = (event) => {
|
|
287
|
+
document.removeEventListener('mousemove', handeMouseMove);
|
|
288
|
+
document.removeEventListener('mouseup', handeMouseUp);
|
|
289
|
+
onEnd?.(event);
|
|
290
|
+
};
|
|
291
|
+
document.addEventListener('mousemove', handeMouseMove);
|
|
292
|
+
document.addEventListener('mouseup', handeMouseUp);
|
|
293
|
+
};
|
|
294
|
+
return {
|
|
295
|
+
onMouseDown: handleMouseDown,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function isImageUrl(url: string): boolean;
|
|
2
|
+
export declare function isImageFile(options: {
|
|
3
|
+
isImage?: boolean;
|
|
4
|
+
file?: File;
|
|
5
|
+
url?: string;
|
|
6
|
+
content?: string;
|
|
7
|
+
}): boolean;
|
|
8
|
+
export declare function isVideoUrl(url: string): boolean;
|
|
9
|
+
export declare function isVideoFile(options: {
|
|
10
|
+
isVideo?: boolean;
|
|
11
|
+
file?: File;
|
|
12
|
+
url?: string;
|
|
13
|
+
content?: string;
|
|
14
|
+
}): boolean;
|
|
15
|
+
export declare function isFileUrl(url: string): boolean;
|
|
16
|
+
export type FileReaderResultType = 'file' | 'dataUrl' | 'text';
|
|
17
|
+
export declare function readFileContent(file: File, resultType: FileReaderResultType): Promise<string | void>;
|
|
18
|
+
export declare function getFileName(path: string, ext?: boolean): string;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { isNumber, isString } from './is';
|
|
2
|
+
// 判断url是否为图片url
|
|
3
|
+
export function isImageUrl(url) {
|
|
4
|
+
const rPicMime = /\.(?:jpg|jpeg|png|gif|svg|bmp|webp|tiff|tif|heic|heif)$/i;
|
|
5
|
+
return (isNumber(url) ||
|
|
6
|
+
(isString(url) && (rPicMime.test(url) || url.indexOf('data:image') === 0)));
|
|
7
|
+
}
|
|
8
|
+
// 判断是否为图片,可以有多种校验方式
|
|
9
|
+
export function isImageFile(options) {
|
|
10
|
+
const { isImage, file, url, content } = options;
|
|
11
|
+
return (isImage ||
|
|
12
|
+
(file && file.type.indexOf('image') === 0) ||
|
|
13
|
+
(url && isImageUrl(url)) ||
|
|
14
|
+
(isString(content) && content.indexOf('data:image') === 0));
|
|
15
|
+
}
|
|
16
|
+
// 判断url是否为图片url
|
|
17
|
+
export function isVideoUrl(url) {
|
|
18
|
+
const rVideoMime = /\.(avi|mp4|mov|wmv|flv|mkv|mpeg|mpg|3gp|webm|swf|rmvb|vob|ts|mts|m2ts|divx|asf|ogv|f4v)$/i;
|
|
19
|
+
return (isNumber(url) ||
|
|
20
|
+
(isString(url) && (rVideoMime.test(url) || url.indexOf('data:video') === 0)));
|
|
21
|
+
}
|
|
22
|
+
// 判断是否为图片,可以有多种校验方式
|
|
23
|
+
export function isVideoFile(options) {
|
|
24
|
+
const { isVideo, file, url, content } = options;
|
|
25
|
+
return (isVideo ||
|
|
26
|
+
(file && file.type.indexOf('video') === 0) ||
|
|
27
|
+
(url && isImageUrl(url)) ||
|
|
28
|
+
(isString(content) && content.indexOf('data:video') === 0));
|
|
29
|
+
}
|
|
30
|
+
// 判断url是否为文件url
|
|
31
|
+
export function isFileUrl(url) {
|
|
32
|
+
return url.includes('/');
|
|
33
|
+
}
|
|
34
|
+
// 读取文件内容
|
|
35
|
+
export function readFileContent(file, resultType) {
|
|
36
|
+
return new Promise((resolve) => {
|
|
37
|
+
if (resultType === 'file') {
|
|
38
|
+
resolve();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const reader = new FileReader();
|
|
42
|
+
reader.onload = () => {
|
|
43
|
+
resolve(reader.result);
|
|
44
|
+
};
|
|
45
|
+
if (resultType === 'dataUrl') {
|
|
46
|
+
reader.readAsDataURL(file);
|
|
47
|
+
}
|
|
48
|
+
else if (resultType === 'text') {
|
|
49
|
+
reader.readAsText(file);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// 从路径中获取文件名(可以选择是否包含扩展名)
|
|
54
|
+
export function getFileName(path, ext = true) {
|
|
55
|
+
const name = path.match(/\/([^/]+)$/)?.[1] || '';
|
|
56
|
+
return ext ? name : name.replace(/\.[^.]+$/, '');
|
|
57
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { PopupProps } from '../popup';
|
|
3
|
+
export type AgentProps<ComponentProps extends {
|
|
4
|
+
onVisible?: (visible: boolean) => void;
|
|
5
|
+
popupProps?: PopupProps;
|
|
6
|
+
}> = {
|
|
7
|
+
id?: string;
|
|
8
|
+
$$afterRender?: () => void;
|
|
9
|
+
popupProps?: PopupProps;
|
|
10
|
+
} & ComponentProps;
|
|
11
|
+
export interface AgentRef<ComponentProps> {
|
|
12
|
+
show(props: ComponentProps): void;
|
|
13
|
+
hide(): void;
|
|
14
|
+
}
|
|
15
|
+
export interface MapIdAgent<ComponentProps, ComponentRef> {
|
|
16
|
+
[id: string]: MutableRefObject<(AgentRef<ComponentProps> & ComponentRef) | undefined>;
|
|
17
|
+
}
|
|
18
|
+
export declare function useAgent<ComponentProps extends {
|
|
19
|
+
onVisible?(visible: boolean): void;
|
|
20
|
+
}, ComponentRef>(component: any, agentProps: AgentProps<ComponentProps>, mapIdAgent: MapIdAgent<ComponentProps, ComponentRef>, defaultId: string): import("react").CElement<any, import("react").Component<any, any, any>>;
|