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,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useRef 的惰性初始化版本,
|
|
3
|
+
* 接受一个函数,在函数中计算并返回初始的 MutableRefObject,
|
|
4
|
+
* 此函数只在初始渲染时被调用。
|
|
5
|
+
*/
|
|
6
|
+
import { useRef } from 'react';
|
|
7
|
+
export function useInertRef(callback) {
|
|
8
|
+
const ref = useRef();
|
|
9
|
+
const initialized = useRef(false);
|
|
10
|
+
if (!initialized.current) {
|
|
11
|
+
ref.current = callback();
|
|
12
|
+
initialized.current = true;
|
|
13
|
+
}
|
|
14
|
+
return ref;
|
|
15
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ITouchEvent } from '@tarojs/components';
|
|
3
|
+
import { BaseProps } from '../base';
|
|
4
|
+
type IconType = 'square' | 'circle' | 'record';
|
|
5
|
+
export interface InternalSelectContextValue {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
readOnly?: boolean;
|
|
8
|
+
size?: number;
|
|
9
|
+
type?: IconType;
|
|
10
|
+
icon?: (checked: boolean) => ReactNode;
|
|
11
|
+
checkedColor?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const InternalSelectContext: import("react").Context<InternalSelectContextValue>;
|
|
14
|
+
export interface InternalCheckProps extends Omit<BaseProps, 'children'> {
|
|
15
|
+
children?: ReactNode | ((checked: boolean, toggle: () => void) => ReactNode);
|
|
16
|
+
checked?: boolean;
|
|
17
|
+
defaultChecked?: boolean;
|
|
18
|
+
value?: any;
|
|
19
|
+
onChange?: (checked: boolean, value: any) => void;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
readOnly?: boolean;
|
|
22
|
+
size?: number;
|
|
23
|
+
type?: IconType;
|
|
24
|
+
icon?: (checked: boolean) => ReactNode;
|
|
25
|
+
checkedColor?: string;
|
|
26
|
+
onClick?: (event: ITouchEvent) => void;
|
|
27
|
+
}
|
|
28
|
+
export declare const useInternalSelect: <T extends "multiple" | "single">(checkType: T, checkClass: string, props: InternalCheckProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export interface InternalCheckGroupProps<T extends 'single' | 'multiple', V = T extends 'single' ? any : any[]> {
|
|
30
|
+
children?: ReactNode;
|
|
31
|
+
value?: V;
|
|
32
|
+
defaultValue?: V;
|
|
33
|
+
onChange?: (value: V) => void;
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
readOnly?: boolean;
|
|
36
|
+
size?: number;
|
|
37
|
+
type?: IconType;
|
|
38
|
+
icon?: (checked: boolean) => ReactNode;
|
|
39
|
+
checkedColor?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare const useInternalCheckGroup: <T extends "multiple" | "single">(checkType: T, props: InternalCheckGroupProps<T, T extends "single" ? any : any[]>) => import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { Icon } from '../icon';
|
|
5
|
+
import { isFunction, isNullish } from '../utils';
|
|
6
|
+
import { SelectContext, useSelect, useSelectGroup } from './useSelect';
|
|
7
|
+
import { CustomWrapper, View } from '@tarojs/components';
|
|
8
|
+
import { useBem } from './useBem';
|
|
9
|
+
import { useEvent } from './useEvent';
|
|
10
|
+
export const InternalSelectContext = createContext(null);
|
|
11
|
+
const mapTypeIcon = {
|
|
12
|
+
square: ['square', 'check-square-fill'],
|
|
13
|
+
circle: ['circle', 'check-circle-fill'],
|
|
14
|
+
record: ['circle', 'record-circle'],
|
|
15
|
+
};
|
|
16
|
+
export const useInternalSelect = (checkType, checkClass, props) => {
|
|
17
|
+
const { className, style, children, checked, defaultChecked, value, onChange, disabled, readOnly, size, type, icon, checkedColor, onClick, ...restProps } = props;
|
|
18
|
+
const [bem] = useBem(checkClass);
|
|
19
|
+
const [isChecked, toggle] = useSelect(checkType, {
|
|
20
|
+
defaultValue: defaultChecked,
|
|
21
|
+
value: checked,
|
|
22
|
+
trigger: onChange,
|
|
23
|
+
initialValue: false,
|
|
24
|
+
}, value);
|
|
25
|
+
if (isFunction(children)) {
|
|
26
|
+
return (_jsx(InternalSelectContext.Provider, { value: null, children: children(isChecked, toggle) }));
|
|
27
|
+
}
|
|
28
|
+
const internalContext = useContext(InternalSelectContext);
|
|
29
|
+
const mergedDisabled = disabled ?? internalContext?.disabled;
|
|
30
|
+
const mergedReadOnly = readOnly ?? internalContext?.readOnly;
|
|
31
|
+
const mergedSize = size ?? internalContext?.size;
|
|
32
|
+
const mergedType = type ??
|
|
33
|
+
internalContext?.type ??
|
|
34
|
+
(checkType === 'single' ? 'record' : 'square');
|
|
35
|
+
const mergedIcon = icon ?? internalContext?.icon;
|
|
36
|
+
const mergedCheckedColor = checkedColor ?? internalContext?.checkedColor;
|
|
37
|
+
const handleCheckboxClick = useEvent((event) => {
|
|
38
|
+
if (!mergedDisabled && !mergedReadOnly) {
|
|
39
|
+
toggle();
|
|
40
|
+
}
|
|
41
|
+
onClick?.(event);
|
|
42
|
+
});
|
|
43
|
+
return (_jsx(CustomWrapper, { children: _jsx(InternalSelectContext.Provider, { value: null, children: _jsxs(View, { ...restProps, className: classNames(bem.b(), bem.m('checked', isChecked), bem.m('disabled', mergedDisabled), bem.m('readonly', mergedReadOnly), className), style: style, onClick: handleCheckboxClick, children: [mergedIcon ? (mergedIcon(isChecked)) : (_jsx(Icon, { className: classNames(bem.e('icon'), bem.em('icon', 'checked', isChecked), bem.em('icon', 'disabled', mergedDisabled)), size: mergedSize, color: isChecked && !mergedDisabled ? mergedCheckedColor : undefined, name: mapTypeIcon[mergedType][isChecked ? 1 : 0] })), !isNullish(children) && (_jsx(View, { className: classNames(bem.e('label'), bem.em('label', 'disabled', mergedDisabled)), children: children }))] }) }) }));
|
|
44
|
+
};
|
|
45
|
+
export const useInternalCheckGroup = (checkType, props) => {
|
|
46
|
+
const { children, value, defaultValue, onChange, disabled, readOnly, size, type, icon, checkedColor, } = props;
|
|
47
|
+
const context = useSelectGroup({
|
|
48
|
+
value,
|
|
49
|
+
defaultValue,
|
|
50
|
+
trigger: onChange,
|
|
51
|
+
initialValue: () => (checkType === 'single' ? '' : []),
|
|
52
|
+
});
|
|
53
|
+
const internalContext = useMemo(() => {
|
|
54
|
+
return {
|
|
55
|
+
disabled,
|
|
56
|
+
readOnly,
|
|
57
|
+
size,
|
|
58
|
+
type,
|
|
59
|
+
icon,
|
|
60
|
+
checkedColor,
|
|
61
|
+
};
|
|
62
|
+
}, [disabled, readOnly, size, type, icon, checkedColor]);
|
|
63
|
+
return (_jsx(InternalSelectContext.Provider, { value: internalContext, children: _jsx(SelectContext.Provider, { value: context, children: children }) }));
|
|
64
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用法同 useLayoutEffect,但只在 update 阶段调用
|
|
3
|
+
*/
|
|
4
|
+
import { useLayoutEffect, useRef } from 'react';
|
|
5
|
+
export const useLayoutUpdateEffect = (callback, deps) => {
|
|
6
|
+
const firstMount = useRef(false);
|
|
7
|
+
useLayoutEffect(() => {
|
|
8
|
+
if (firstMount.current) {
|
|
9
|
+
return callback();
|
|
10
|
+
}
|
|
11
|
+
}, deps);
|
|
12
|
+
useLayoutEffect(() => {
|
|
13
|
+
firstMount.current = true;
|
|
14
|
+
return () => {
|
|
15
|
+
firstMount.current = false;
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import Taro from '@tarojs/taro';
|
|
3
|
+
import { throttle } from '../utils';
|
|
4
|
+
import { useEvent } from './useEvent';
|
|
5
|
+
export function useResize(func, wait, options) {
|
|
6
|
+
const fn = useEvent(func);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
const handler = throttle(fn, wait, options);
|
|
9
|
+
Taro.onWindowResize(handler);
|
|
10
|
+
return () => {
|
|
11
|
+
Taro.offWindowResize(handler);
|
|
12
|
+
};
|
|
13
|
+
}, []);
|
|
14
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用于解决组件不显示时无法操作节点滚动或尺寸相关接口的问题
|
|
3
|
+
*/
|
|
4
|
+
/// <reference types="react" />
|
|
5
|
+
export declare function useResizeObserver(callback: (...args: unknown[]) => unknown): readonly [import("react").MemoExoticComponent<() => import("react").DetailedReactHTMLElement<import("react").HTMLAttributes<any>, any>>];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用于解决组件不显示时无法操作节点滚动或尺寸相关接口的问题
|
|
3
|
+
*/
|
|
4
|
+
import { useMemo, useRef, createElement, memo } from 'react';
|
|
5
|
+
import { useEvent } from './useEvent';
|
|
6
|
+
export function useResizeObserver(callback) {
|
|
7
|
+
const resizeObserver = useRef();
|
|
8
|
+
const memoCallback = useEvent(() => {
|
|
9
|
+
callback();
|
|
10
|
+
});
|
|
11
|
+
const observe = useEvent((node) => {
|
|
12
|
+
resizeObserver.current?.disconnect();
|
|
13
|
+
if (node) {
|
|
14
|
+
resizeObserver.current = new ResizeObserver((entries) => {
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
if (entry.contentRect.width > 0) {
|
|
17
|
+
memoCallback();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
resizeObserver.current.observe(node);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
const ResizeSpy = useMemo(() => memo(() => createElement('div', {
|
|
25
|
+
style: {
|
|
26
|
+
position: 'fixed',
|
|
27
|
+
zIndex: -1,
|
|
28
|
+
width: 1,
|
|
29
|
+
height: 0,
|
|
30
|
+
pointerEvents: 'none',
|
|
31
|
+
opacity: 0,
|
|
32
|
+
},
|
|
33
|
+
ref: (node) => {
|
|
34
|
+
observe(node);
|
|
35
|
+
},
|
|
36
|
+
})), []);
|
|
37
|
+
return [ResizeSpy];
|
|
38
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { UseControllableValueOptions } from './useControllableValue';
|
|
3
|
+
export interface SelectContextValue<V> {
|
|
4
|
+
value: V;
|
|
5
|
+
onChange: (value: V) => void;
|
|
6
|
+
}
|
|
7
|
+
export interface UseSelectOptions extends UseControllableValueOptions<boolean> {
|
|
8
|
+
clearable?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const SelectContext: import("react").Context<SelectContextValue<any>>;
|
|
11
|
+
export declare function useSelect<T extends 'single' | 'multiple', V>(type: T, options: UseSelectOptions, value: V): readonly [boolean, () => void];
|
|
12
|
+
export declare function useSelectGroup<V>(options: UseControllableValueOptions<V>): {
|
|
13
|
+
value: V;
|
|
14
|
+
onChange: (val: V) => void;
|
|
15
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, } from 'react';
|
|
2
|
+
import { useControllableValue, } from './useControllableValue';
|
|
3
|
+
import { useEvent } from './useEvent';
|
|
4
|
+
export const SelectContext = createContext(null);
|
|
5
|
+
export function useSelect(type, options, value) {
|
|
6
|
+
const context = useContext(SelectContext);
|
|
7
|
+
const { clearable } = options;
|
|
8
|
+
const [innerSelected, setInnerSelected] = useControllableValue(options);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (context) {
|
|
11
|
+
setInnerSelected(type === 'single'
|
|
12
|
+
? context.value === value
|
|
13
|
+
: context.value.includes(value), value);
|
|
14
|
+
}
|
|
15
|
+
}, [context]);
|
|
16
|
+
const toggle = useEvent(() => {
|
|
17
|
+
if (type === 'single' && innerSelected && !clearable) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (context) {
|
|
21
|
+
let nextValue;
|
|
22
|
+
if (type === 'single') {
|
|
23
|
+
if (innerSelected) {
|
|
24
|
+
nextValue = undefined;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
nextValue = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (innerSelected) {
|
|
32
|
+
nextValue = context.value.filter((item) => item !== value);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
nextValue = context.value.concat(value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
context.onChange(nextValue);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
setInnerSelected(type === 'single' ? true : !innerSelected, value);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return [innerSelected, toggle];
|
|
45
|
+
}
|
|
46
|
+
export function useSelectGroup(options) {
|
|
47
|
+
const [innerValue, setInnerValue] = useControllableValue(options);
|
|
48
|
+
const handleChange = useCallback((val) => {
|
|
49
|
+
setInnerValue(val);
|
|
50
|
+
}, []);
|
|
51
|
+
const context = useMemo(() => ({
|
|
52
|
+
value: innerValue,
|
|
53
|
+
onChange: handleChange,
|
|
54
|
+
}), [innerValue]);
|
|
55
|
+
return context;
|
|
56
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useSelectorId(perfix?: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 使在函数组件中更好使用 setTimeout,可以重置或清除定时器
|
|
3
|
+
*/
|
|
4
|
+
import { AnyFunction } from '../base';
|
|
5
|
+
interface UseSetTimeoutOptions {
|
|
6
|
+
canDelay?: AnyFunction;
|
|
7
|
+
tailing?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function useSetTimeout(callback: AnyFunction, duration: number, options?: UseSetTimeoutOptions): readonly [(...args: any[]) => void, () => void, () => boolean];
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 使在函数组件中更好使用 setTimeout,可以重置或清除定时器
|
|
3
|
+
*/
|
|
4
|
+
import { useEffect, useRef } from 'react';
|
|
5
|
+
import { useEvent } from './useEvent';
|
|
6
|
+
export function useSetTimeout(callback, duration, options = {}) {
|
|
7
|
+
const { canDelay = () => true, tailing } = options;
|
|
8
|
+
const timer = useRef(0);
|
|
9
|
+
const func = useEvent(callback);
|
|
10
|
+
const canDelayCallback = useEvent(canDelay);
|
|
11
|
+
const cancel = useEvent(() => {
|
|
12
|
+
if (timer.current) {
|
|
13
|
+
clearTimeout(timer.current);
|
|
14
|
+
timer.current = 0;
|
|
15
|
+
if (tailing) {
|
|
16
|
+
func();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
const doSomethingLater = useEvent((...args) => {
|
|
21
|
+
cancel();
|
|
22
|
+
if (canDelayCallback()) {
|
|
23
|
+
timer.current = setTimeout(() => {
|
|
24
|
+
timer.current = 0;
|
|
25
|
+
func(...args);
|
|
26
|
+
}, duration);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const isWaitingToDoSomething = useEvent(() => {
|
|
30
|
+
return !!timer.current;
|
|
31
|
+
});
|
|
32
|
+
useEffect(() => cancel, []);
|
|
33
|
+
return [doSomethingLater, cancel, isWaitingToDoSomething];
|
|
34
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useCallback, useEffect } from 'react';
|
|
2
|
+
export function useStopMovePropagate(ref, immediate) {
|
|
3
|
+
const handler = useCallback((event) => {
|
|
4
|
+
if (immediate) {
|
|
5
|
+
event.stopImmediatePropagation();
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
event.stopPropagation();
|
|
9
|
+
}
|
|
10
|
+
}, []);
|
|
11
|
+
const on = useCallback(() => {
|
|
12
|
+
if (ref.current instanceof EventTarget) {
|
|
13
|
+
ref.current.addEventListener('touchmove', handler, {
|
|
14
|
+
passive: false,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}, []);
|
|
18
|
+
const off = useCallback(() => {
|
|
19
|
+
if (ref.current instanceof EventTarget) {
|
|
20
|
+
ref.current.removeEventListener('touchmove', handler);
|
|
21
|
+
}
|
|
22
|
+
}, []);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
on();
|
|
25
|
+
return off;
|
|
26
|
+
}, []);
|
|
27
|
+
return { on, off };
|
|
28
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DebounceOptions } from '../utils';
|
|
2
|
+
import { AnyFunction } from '../base';
|
|
3
|
+
export declare function useThrottle(callback: AnyFunction, wait: number, options?: DebounceOptions): {
|
|
4
|
+
(...args: any[]): any;
|
|
5
|
+
cancel: () => void;
|
|
6
|
+
flush: () => any;
|
|
7
|
+
pending: () => boolean;
|
|
8
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useEffect, useMemo } from 'react';
|
|
2
|
+
import { throttle } from '../utils';
|
|
3
|
+
import { useEvent } from './useEvent';
|
|
4
|
+
export function useThrottle(callback, wait, options) {
|
|
5
|
+
const cb = useEvent(callback);
|
|
6
|
+
const handler = useMemo(() => {
|
|
7
|
+
return throttle(cb, wait, options);
|
|
8
|
+
}, []);
|
|
9
|
+
useEffect(() => () => handler.cancel(), []);
|
|
10
|
+
return handler;
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用法同 useEffect update 阶段调用
|
|
3
|
+
*/
|
|
4
|
+
import { useEffect, useRef } from 'react';
|
|
5
|
+
export const useUpdateEffect = (callback, deps) => {
|
|
6
|
+
const firstMount = useRef(false);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (firstMount.current) {
|
|
9
|
+
return callback();
|
|
10
|
+
}
|
|
11
|
+
}, deps);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
firstMount.current = true;
|
|
14
|
+
return () => {
|
|
15
|
+
firstMount.current = false;
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* update 阶段的同步监听
|
|
3
|
+
*/
|
|
4
|
+
import { useLayoutEffect, useMemo, useRef } from 'react';
|
|
5
|
+
export function useUpdateWatchSync(factory, deps) {
|
|
6
|
+
const firstMount = useRef(false);
|
|
7
|
+
useLayoutEffect(() => {
|
|
8
|
+
firstMount.current = true;
|
|
9
|
+
return () => {
|
|
10
|
+
firstMount.current = false;
|
|
11
|
+
};
|
|
12
|
+
}, []);
|
|
13
|
+
return useMemo(() => {
|
|
14
|
+
if (firstMount.current) {
|
|
15
|
+
factory();
|
|
16
|
+
}
|
|
17
|
+
}, deps);
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 扩展 useState 的功能,可以同步监听 value 以便更新自身的值
|
|
3
|
+
*/
|
|
4
|
+
import { useMemo, useRef } from 'react';
|
|
5
|
+
import { useForceRender } from './useForceRender';
|
|
6
|
+
import { useEvent } from './useEvent';
|
|
7
|
+
export function useWatchStateSync(value) {
|
|
8
|
+
const forceRender = useForceRender();
|
|
9
|
+
const stateRef = useRef(value);
|
|
10
|
+
useMemo(() => {
|
|
11
|
+
stateRef.current = value;
|
|
12
|
+
}, [value]);
|
|
13
|
+
const setState = useEvent((value) => {
|
|
14
|
+
stateRef.current = value;
|
|
15
|
+
forceRender();
|
|
16
|
+
});
|
|
17
|
+
return [stateRef.current, setState];
|
|
18
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare function easeInQuad(k: number): number;
|
|
2
|
+
export declare function easeOutQuad(k: number): number;
|
|
3
|
+
export declare function easeInOutQuad(k: number): number;
|
|
4
|
+
export declare function easeOutSine(k: number): number;
|
|
5
|
+
export declare function easeOutCubic(k: number): number;
|
|
6
|
+
export interface AnimateOptions {
|
|
7
|
+
from: number;
|
|
8
|
+
to: number;
|
|
9
|
+
duration?: number;
|
|
10
|
+
step?: (value: number) => void;
|
|
11
|
+
finish?: (value: number) => void;
|
|
12
|
+
easing?: (k: number) => number;
|
|
13
|
+
}
|
|
14
|
+
export interface AnimateStop {
|
|
15
|
+
(): void;
|
|
16
|
+
finish(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare function animate({ from, to, duration, step, finish, easing, }: AnimateOptions): AnimateStop;
|
|
19
|
+
interface Point {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function getDistanceByTowPoints(p1: Point, p2: Point): number;
|
|
24
|
+
export declare function getAngle360(p1: Point, p2: Point): number;
|
|
25
|
+
export type Direction = 'right' | 'left' | 'up' | 'down';
|
|
26
|
+
export declare function getDirectionByAngle(angle: number): Direction;
|
|
27
|
+
export declare function getDirectionByTwoPoints(p1: Point, p2: Point): Direction;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { minmax, noop } from './utils';
|
|
2
|
+
export function easeInQuad(k) {
|
|
3
|
+
return k * k;
|
|
4
|
+
}
|
|
5
|
+
export function easeOutQuad(k) {
|
|
6
|
+
return k * (2 - k);
|
|
7
|
+
}
|
|
8
|
+
export function easeInOutQuad(k) {
|
|
9
|
+
if ((k *= 2) < 1)
|
|
10
|
+
return 0.5 * k * k;
|
|
11
|
+
return -0.5 * (--k * (k - 2) - 1);
|
|
12
|
+
}
|
|
13
|
+
export function easeOutSine(k) {
|
|
14
|
+
return Math.sin((k * Math.PI) / 2);
|
|
15
|
+
}
|
|
16
|
+
export function easeOutCubic(k) {
|
|
17
|
+
return --k * k * k + 1;
|
|
18
|
+
}
|
|
19
|
+
export function animate({ from = 0, to = 0, duration = 0, step = noop, finish, easing = easeOutQuad, }) {
|
|
20
|
+
const total = to - from;
|
|
21
|
+
const begin = Date.now();
|
|
22
|
+
let progress = 0;
|
|
23
|
+
let over = false;
|
|
24
|
+
const stop = () => {
|
|
25
|
+
over = true;
|
|
26
|
+
};
|
|
27
|
+
stop.finish = () => {
|
|
28
|
+
stop();
|
|
29
|
+
step(to);
|
|
30
|
+
finish?.(to);
|
|
31
|
+
};
|
|
32
|
+
const stepCallback = () => {
|
|
33
|
+
if (over) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
progress = minmax((Date.now() - begin) / duration, 0, 1);
|
|
37
|
+
const value = easing(progress) * total + from;
|
|
38
|
+
step(value);
|
|
39
|
+
if (progress === 1) {
|
|
40
|
+
stop();
|
|
41
|
+
return finish?.(value);
|
|
42
|
+
}
|
|
43
|
+
requestAnimationFrame(stepCallback);
|
|
44
|
+
};
|
|
45
|
+
if (duration === 0) {
|
|
46
|
+
step(to);
|
|
47
|
+
finish?.(to);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
requestAnimationFrame(stepCallback);
|
|
51
|
+
}
|
|
52
|
+
return stop;
|
|
53
|
+
}
|
|
54
|
+
// 计算两点之间的距离
|
|
55
|
+
export function getDistanceByTowPoints(p1, p2) {
|
|
56
|
+
return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2);
|
|
57
|
+
}
|
|
58
|
+
// 根据起始点和结束点坐标获取角度: 以3点钟方向为0度,逆时针递增
|
|
59
|
+
export function getAngle360(p1, p2) {
|
|
60
|
+
const angle = 90 - (Math.atan2(p1.y - p2.y, p2.x - p1.x) / Math.PI) * 180;
|
|
61
|
+
return angle < 0 ? angle + 360 : angle;
|
|
62
|
+
}
|
|
63
|
+
export function getDirectionByAngle(angle) {
|
|
64
|
+
if (angle <= 45 || angle >= 315) {
|
|
65
|
+
return 'up';
|
|
66
|
+
}
|
|
67
|
+
else if (angle > 45 && angle < 135) {
|
|
68
|
+
return 'right';
|
|
69
|
+
}
|
|
70
|
+
else if (angle >= 135 && angle <= 225) {
|
|
71
|
+
return 'down';
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// angle > 225 && angle < 315
|
|
75
|
+
return 'left';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 根据起始点和结束点获取方向(上下左右)
|
|
79
|
+
export function getDirectionByTwoPoints(p1, p2) {
|
|
80
|
+
return getDirectionByAngle(getAngle360(p1, p2));
|
|
81
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface PubSub {
|
|
2
|
+
on(type: string, handler: (...args: unknown[]) => unknown): void;
|
|
3
|
+
off(type?: string, handler?: (...args: unknown[]) => unknown): void;
|
|
4
|
+
emit(type: string, ...payload: any[]): void;
|
|
5
|
+
once(type: string, handler: (...args: unknown[]) => unknown): void;
|
|
6
|
+
}
|
|
7
|
+
export declare function createPubSub(): PubSub;
|
|
8
|
+
export declare const pubSub: PubSub;
|