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,35 @@
|
|
|
1
|
+
import { useContext, useLayoutEffect, useRef } from 'react';
|
|
2
|
+
import Context from './Context';
|
|
3
|
+
import { useForceRender } from '../../use';
|
|
4
|
+
export function useSelectorWithStoreAndSubscription(getState, subscribe, selector) {
|
|
5
|
+
const latestSelector = useRef();
|
|
6
|
+
const latestStoreState = useRef();
|
|
7
|
+
const forceRender = useForceRender();
|
|
8
|
+
useLayoutEffect(() => {
|
|
9
|
+
latestSelector.current = selector;
|
|
10
|
+
});
|
|
11
|
+
if (selector !== latestSelector.current) {
|
|
12
|
+
latestStoreState.current = selector(getState());
|
|
13
|
+
}
|
|
14
|
+
useLayoutEffect(() => {
|
|
15
|
+
return subscribe(() => {
|
|
16
|
+
const storeState = getState();
|
|
17
|
+
const nextSelectedState = latestSelector.current(storeState);
|
|
18
|
+
if (nextSelectedState === latestStoreState.current) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
latestStoreState.current = nextSelectedState;
|
|
22
|
+
forceRender();
|
|
23
|
+
});
|
|
24
|
+
}, []);
|
|
25
|
+
return latestStoreState.current;
|
|
26
|
+
}
|
|
27
|
+
function createSelectorHook() {
|
|
28
|
+
return function useSelector(selector, externalStore) {
|
|
29
|
+
const store = useContext(Context);
|
|
30
|
+
const { getState, subscribe } = externalStore || store;
|
|
31
|
+
const selectedState = useSelectorWithStoreAndSubscription(getState, subscribe, selector);
|
|
32
|
+
return selectedState;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export const useSelector = createSelectorHook();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type NodeName = string | number;
|
|
2
|
+
export type NamePath = NodeName | NodeName[];
|
|
3
|
+
export type ValidateStatus = 'passed' | 'failed' | 'unvalidated';
|
|
4
|
+
export interface ValidateOptions {
|
|
5
|
+
triggerName?: string;
|
|
6
|
+
validateOnly?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface FieldErrors {
|
|
9
|
+
errors: string[];
|
|
10
|
+
name: NodeName[];
|
|
11
|
+
}
|
|
12
|
+
export interface ErrorInfo {
|
|
13
|
+
errorFields: FieldErrors[];
|
|
14
|
+
values: Record<string, any>;
|
|
15
|
+
}
|
|
16
|
+
export interface NodeData {
|
|
17
|
+
errors?: string[];
|
|
18
|
+
name?: NamePath;
|
|
19
|
+
value?: any;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FormStore } from './createFormStore';
|
|
2
|
+
export declare function useForm(form?: FormStore): readonly [{
|
|
3
|
+
getError: (name: import("./type").NamePath) => string[];
|
|
4
|
+
getErrors: (name?: import("./type").NamePath[]) => import("./type").FieldErrors[];
|
|
5
|
+
getValue: (name: import("./type").NamePath) => any;
|
|
6
|
+
getValues: (name?: import("./type").NamePath[]) => any;
|
|
7
|
+
scrollToField: (name: import("./type").NamePath, options?: ScrollIntoViewOptions) => void;
|
|
8
|
+
setNodeData: (data: import("./type").NodeData[]) => void;
|
|
9
|
+
setValues: (values: any) => void;
|
|
10
|
+
setValue: (name: import("./type").NamePath, value: any) => void;
|
|
11
|
+
validate: (name?: import("./type").ValidateOptions | import("./type").NamePath[], options?: import("./type").ValidateOptions) => Promise<any>;
|
|
12
|
+
submit: () => Promise<void>;
|
|
13
|
+
reset: (name?: import("./type").NamePath[]) => void;
|
|
14
|
+
getInternalHooks: <K extends typeof import("./createFormStore").HOOK_KEY>(hookKey: K) => K extends typeof import("./createFormStore").HOOK_KEY ? {
|
|
15
|
+
relateFormNode: (node: import("./useNode").FormNode) => void;
|
|
16
|
+
setInitialValues: (values: Record<string, any>, onlyCacheValues: boolean) => void;
|
|
17
|
+
setCallbacks: (cbs: import("./createFormStore").FormCallbacks) => void;
|
|
18
|
+
getFormInitialValues: () => Record<string, any>;
|
|
19
|
+
setValidateMessages: (validateMessages: import("./Validator").ValidateMessages) => void;
|
|
20
|
+
validator: import("./Validator").Validator;
|
|
21
|
+
store: {
|
|
22
|
+
getState: () => any;
|
|
23
|
+
dispatch: (action: any) => void;
|
|
24
|
+
subscribe: (listener: any) => () => void;
|
|
25
|
+
};
|
|
26
|
+
} : null;
|
|
27
|
+
}];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import createFormStore from './createFormStore';
|
|
3
|
+
export function useForm(form) {
|
|
4
|
+
const formRef = useRef();
|
|
5
|
+
if (!formRef.current) {
|
|
6
|
+
if (form) {
|
|
7
|
+
formRef.current = form;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
formRef.current = createFormStore();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return [formRef.current];
|
|
14
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { arrayEqual, getObjectValueInDepth, toArray } from '../utils';
|
|
2
|
+
import { useContext, useEffect } from 'react';
|
|
3
|
+
import StoreContext from './store/Context';
|
|
4
|
+
import { useForceRender } from '../use';
|
|
5
|
+
export function useInternalWatch(name) {
|
|
6
|
+
const { subscribe } = useContext(StoreContext);
|
|
7
|
+
const forceRender = useForceRender();
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
let oldValues = [];
|
|
10
|
+
if (!name) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
return subscribe((state) => {
|
|
14
|
+
// 监听所有
|
|
15
|
+
if (name.length === 0) {
|
|
16
|
+
forceRender();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const newValues = name.map((n) => getObjectValueInDepth(state, toArray(n)));
|
|
20
|
+
if (!arrayEqual(oldValues, newValues)) {
|
|
21
|
+
oldValues = newValues;
|
|
22
|
+
forceRender();
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}, [name]);
|
|
26
|
+
}
|
|
27
|
+
export default useInternalWatch;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FormStore } from './createFormStore';
|
|
3
|
+
import { Rule } from './Validator';
|
|
4
|
+
import { NamePath, NodeName, ValidateOptions, ValidateStatus } from './type';
|
|
5
|
+
import { Store } from './store/createStore';
|
|
6
|
+
export declare function isListNodeValue(list?: any[]): any;
|
|
7
|
+
export declare function isMapNodeValue(map?: object): any;
|
|
8
|
+
export type FormNodeType = 'list' | 'map' | 'field' | 'form';
|
|
9
|
+
export interface FormNode {
|
|
10
|
+
type: FormNodeType;
|
|
11
|
+
name?: NodeName;
|
|
12
|
+
value: any;
|
|
13
|
+
parentNode: FormNode;
|
|
14
|
+
childNodes: FormNode[];
|
|
15
|
+
data: Record<string, any>;
|
|
16
|
+
appendChild: (node: FormNode) => void;
|
|
17
|
+
removeChild: (node: FormNode) => void;
|
|
18
|
+
getNamePath: () => NodeName[];
|
|
19
|
+
makeNamePathValue: (value: any) => any;
|
|
20
|
+
getDescendantNode: (name: NamePath) => FormNode | null;
|
|
21
|
+
getAllDescendantNode: () => FormNode[];
|
|
22
|
+
getInitialValue: () => any;
|
|
23
|
+
getDeepInitialValue: () => any;
|
|
24
|
+
getDeepValue: () => any;
|
|
25
|
+
setValue: (value: any) => void;
|
|
26
|
+
setValueAndValidate: (value: any) => void;
|
|
27
|
+
setValueAndDeepValidate: (value: any) => void;
|
|
28
|
+
reset: () => void;
|
|
29
|
+
dispatch: (value: any) => void;
|
|
30
|
+
validate: (options?: ValidateOptions) => Promise<void>;
|
|
31
|
+
errors: string[];
|
|
32
|
+
finalRequired: boolean;
|
|
33
|
+
finalValidateStatus: ValidateStatus;
|
|
34
|
+
setErrors: (errors: string[]) => void;
|
|
35
|
+
scrollToField: (options?: ScrollIntoViewOptions) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare function getNamePathByCurrentName(name: number | string, parentNode: FormNode): (string | number)[];
|
|
38
|
+
export declare function useNode(options: {
|
|
39
|
+
store?: Store;
|
|
40
|
+
formStore?: FormStore;
|
|
41
|
+
type: FormNodeType;
|
|
42
|
+
name?: NodeName;
|
|
43
|
+
label?: ReactNode;
|
|
44
|
+
initialValue?: any;
|
|
45
|
+
rules?: Rule[];
|
|
46
|
+
validateFirst?: boolean;
|
|
47
|
+
validateStatus?: ValidateStatus;
|
|
48
|
+
required?: boolean;
|
|
49
|
+
}): FormNode[];
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { useContext, useLayoutEffect, useMemo, useRef } from 'react';
|
|
2
|
+
import { useEvent } from '../use';
|
|
3
|
+
import { useSelector } from './store/useSelector';
|
|
4
|
+
import { getObjectValueInDepth, isNullish, isNumber, isPlainObject, isUndefined, noop, toArray, } from '../utils';
|
|
5
|
+
import FieldContext from './FieldContext';
|
|
6
|
+
import { HOOK_KEY } from './createFormStore';
|
|
7
|
+
import useValidator from './useValidator';
|
|
8
|
+
import { useDispatch } from './store/useDispatch';
|
|
9
|
+
import { NodeContext } from './NodeContext';
|
|
10
|
+
const listSymbol = Symbol('LIST_NODE_SYMBOL');
|
|
11
|
+
const mapSymbol = Symbol('MAP_NODE_SYMBOL');
|
|
12
|
+
function markListNodeValue(list) {
|
|
13
|
+
list[listSymbol] = true;
|
|
14
|
+
return list;
|
|
15
|
+
}
|
|
16
|
+
function markMapNodeValue(map) {
|
|
17
|
+
map[mapSymbol] = true;
|
|
18
|
+
return map;
|
|
19
|
+
}
|
|
20
|
+
export function isListNodeValue(list) {
|
|
21
|
+
return Array.isArray(list) && list[listSymbol];
|
|
22
|
+
}
|
|
23
|
+
export function isMapNodeValue(map) {
|
|
24
|
+
return isPlainObject(map) && map[mapSymbol];
|
|
25
|
+
}
|
|
26
|
+
export function getNamePathByCurrentName(name, parentNode) {
|
|
27
|
+
const namePath = [name];
|
|
28
|
+
let currentParentNode = parentNode;
|
|
29
|
+
while (currentParentNode && currentParentNode.type !== 'form') {
|
|
30
|
+
if (!isNullish(currentParentNode.name)) {
|
|
31
|
+
namePath.unshift(currentParentNode.name);
|
|
32
|
+
}
|
|
33
|
+
currentParentNode = currentParentNode.parentNode;
|
|
34
|
+
}
|
|
35
|
+
return namePath;
|
|
36
|
+
}
|
|
37
|
+
function getUnFieldParentNode(parentNode) {
|
|
38
|
+
let currentParentNode = parentNode;
|
|
39
|
+
while (currentParentNode && currentParentNode.type === 'field') {
|
|
40
|
+
currentParentNode = currentParentNode.parentNode;
|
|
41
|
+
}
|
|
42
|
+
return currentParentNode;
|
|
43
|
+
}
|
|
44
|
+
export function useNode(options) {
|
|
45
|
+
const { store, formStore: externalFormStore, type, name, label, initialValue, rules, validateFirst, validateStatus, required, } = options;
|
|
46
|
+
const dispatch = useDispatch(store);
|
|
47
|
+
const mayParentNode = useContext(NodeContext);
|
|
48
|
+
const parentNode = useMemo(() => {
|
|
49
|
+
return getUnFieldParentNode(mayParentNode);
|
|
50
|
+
}, [mayParentNode]);
|
|
51
|
+
const value = useSelector((state) => {
|
|
52
|
+
if (!isNullish(name)) {
|
|
53
|
+
const namePath = getNamePathByCurrentName(name, parentNode);
|
|
54
|
+
return getObjectValueInDepth(state, namePath);
|
|
55
|
+
}
|
|
56
|
+
}, store);
|
|
57
|
+
const getNamePath = useEvent(() => {
|
|
58
|
+
return name ? getNamePathByCurrentName(name, parentNode) : [];
|
|
59
|
+
});
|
|
60
|
+
const fieldContext = useContext(FieldContext);
|
|
61
|
+
const formStore = externalFormStore || fieldContext.formStore;
|
|
62
|
+
const { getFormInitialValues } = formStore.getInternalHooks(HOOK_KEY);
|
|
63
|
+
const { validate, finalRequired, finalValidateStatus, setInnerValidateStatus: setValidateStatus, errors, setErrors, } = useValidator({
|
|
64
|
+
formStore,
|
|
65
|
+
rules,
|
|
66
|
+
validateFirst,
|
|
67
|
+
validateStatus,
|
|
68
|
+
value,
|
|
69
|
+
name,
|
|
70
|
+
label,
|
|
71
|
+
required,
|
|
72
|
+
getNamePath,
|
|
73
|
+
});
|
|
74
|
+
const data = useRef({});
|
|
75
|
+
useLayoutEffect(() => {
|
|
76
|
+
if (data.current.shouldValidate) {
|
|
77
|
+
data.current.shouldValidate = false;
|
|
78
|
+
validate().catch(noop);
|
|
79
|
+
}
|
|
80
|
+
}, [value]);
|
|
81
|
+
const childNodes = useRef([]);
|
|
82
|
+
const appendChild = useEvent((node) => {
|
|
83
|
+
childNodes.current.push(node);
|
|
84
|
+
});
|
|
85
|
+
const removeChild = useEvent((node) => {
|
|
86
|
+
const index = childNodes.current.indexOf(node);
|
|
87
|
+
if (index !== -1) {
|
|
88
|
+
childNodes.current.splice(index, 1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
const makeNamePathValue = useEvent((value) => {
|
|
92
|
+
let currentValue = value;
|
|
93
|
+
let currentName = name;
|
|
94
|
+
let currentParentNode = parentNode;
|
|
95
|
+
while (currentParentNode) {
|
|
96
|
+
const parentNodeName = currentParentNode.name;
|
|
97
|
+
const parentNodetype = currentParentNode.type;
|
|
98
|
+
if (parentNodetype === 'form' || !isNullish(parentNodeName)) {
|
|
99
|
+
switch (parentNodetype) {
|
|
100
|
+
case 'map':
|
|
101
|
+
case 'form':
|
|
102
|
+
currentValue = markMapNodeValue({
|
|
103
|
+
[currentName]: currentValue,
|
|
104
|
+
});
|
|
105
|
+
break;
|
|
106
|
+
case 'list': {
|
|
107
|
+
const list = markListNodeValue([]);
|
|
108
|
+
list[currentName] = currentValue;
|
|
109
|
+
currentValue = list;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
currentName = parentNodeName;
|
|
113
|
+
}
|
|
114
|
+
currentParentNode = currentParentNode.parentNode;
|
|
115
|
+
}
|
|
116
|
+
return currentValue;
|
|
117
|
+
});
|
|
118
|
+
const getDescendantNode = useEvent((name) => {
|
|
119
|
+
let currentChildNodes = childNodes.current;
|
|
120
|
+
let currentNode = null;
|
|
121
|
+
for (const key of toArray(name)) {
|
|
122
|
+
currentNode = null;
|
|
123
|
+
for (let l = currentChildNodes.length, i = l - 1; i >= 0; i--) {
|
|
124
|
+
const node = currentChildNodes[i];
|
|
125
|
+
if (node.name === key) {
|
|
126
|
+
currentChildNodes = node.childNodes;
|
|
127
|
+
currentNode = node;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (!currentNode) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return currentNode;
|
|
136
|
+
});
|
|
137
|
+
const getAllDescendantNode = useEvent(() => {
|
|
138
|
+
const nodes = [];
|
|
139
|
+
function recurse(childNodes) {
|
|
140
|
+
childNodes.forEach((node) => {
|
|
141
|
+
nodes.push(node);
|
|
142
|
+
recurse(node.childNodes);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
recurse(childNodes.current);
|
|
146
|
+
return nodes;
|
|
147
|
+
});
|
|
148
|
+
const getInitialValue = useEvent(() => {
|
|
149
|
+
const rootInitialValue = getObjectValueInDepth(getFormInitialValues(), getNamePath());
|
|
150
|
+
return isUndefined(rootInitialValue) ? initialValue : rootInitialValue;
|
|
151
|
+
});
|
|
152
|
+
const getDeepInitialValue = useEvent(() => {
|
|
153
|
+
switch (type) {
|
|
154
|
+
case 'field':
|
|
155
|
+
return getInitialValue();
|
|
156
|
+
case 'map':
|
|
157
|
+
case 'form':
|
|
158
|
+
return childNodes.current.reduce((value, childNode) => {
|
|
159
|
+
if (!isNullish(childNode.name)) {
|
|
160
|
+
value[childNode.name] = childNode.getDeepInitialValue();
|
|
161
|
+
}
|
|
162
|
+
return value;
|
|
163
|
+
}, markMapNodeValue({}));
|
|
164
|
+
case 'list': {
|
|
165
|
+
const listValue = childNodes.current.map((childNode) => {
|
|
166
|
+
return childNode.getDeepInitialValue();
|
|
167
|
+
});
|
|
168
|
+
return markListNodeValue(listValue);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
const getDeepValue = useEvent(() => {
|
|
173
|
+
switch (type) {
|
|
174
|
+
case 'field':
|
|
175
|
+
return value;
|
|
176
|
+
case 'map':
|
|
177
|
+
case 'form':
|
|
178
|
+
return childNodes.current.reduce((value, childNode) => {
|
|
179
|
+
if (!isNullish(childNode.name)) {
|
|
180
|
+
value[childNode.name] = childNode.getDeepValue();
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}, {});
|
|
184
|
+
case 'list': {
|
|
185
|
+
return childNodes.current.map((childNode) => {
|
|
186
|
+
return childNode.getDeepValue();
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
const setValue = useEvent((value) => {
|
|
192
|
+
if (type === 'map' || type === 'form') {
|
|
193
|
+
if (!isPlainObject(value)) {
|
|
194
|
+
value = markMapNodeValue({});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (type === 'list') {
|
|
198
|
+
if (!Array.isArray(value)) {
|
|
199
|
+
value = markListNodeValue([]);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
dispatch(makeNamePathValue(value));
|
|
203
|
+
});
|
|
204
|
+
const setValueAndValidate = useEvent((value) => {
|
|
205
|
+
setValue(value);
|
|
206
|
+
data.current.shouldValidate = true;
|
|
207
|
+
});
|
|
208
|
+
const setValueAndDeepValidate = useEvent((value) => {
|
|
209
|
+
setValue(value);
|
|
210
|
+
getAllDescendantNode().forEach((node) => {
|
|
211
|
+
if (node.errors?.length > 0) {
|
|
212
|
+
node.data.shouldValidate = true;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
const reset = useEvent(() => {
|
|
217
|
+
setValue(getInitialValue());
|
|
218
|
+
setErrors([]);
|
|
219
|
+
setValidateStatus('unvalidated');
|
|
220
|
+
childNodes.current.forEach((node) => {
|
|
221
|
+
node.reset();
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
const scrollToField = useEvent((options) => {
|
|
225
|
+
if (type === 'field') {
|
|
226
|
+
data.current.scrollToField?.(options);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
const node = useMemo(() => {
|
|
230
|
+
return {
|
|
231
|
+
type,
|
|
232
|
+
name,
|
|
233
|
+
value,
|
|
234
|
+
parentNode,
|
|
235
|
+
childNodes: childNodes.current,
|
|
236
|
+
data: data.current,
|
|
237
|
+
appendChild,
|
|
238
|
+
removeChild,
|
|
239
|
+
getNamePath,
|
|
240
|
+
makeNamePathValue,
|
|
241
|
+
getDescendantNode,
|
|
242
|
+
getAllDescendantNode,
|
|
243
|
+
getInitialValue,
|
|
244
|
+
getDeepInitialValue,
|
|
245
|
+
getDeepValue,
|
|
246
|
+
setValue,
|
|
247
|
+
setValueAndValidate,
|
|
248
|
+
setValueAndDeepValidate,
|
|
249
|
+
reset,
|
|
250
|
+
dispatch,
|
|
251
|
+
validate,
|
|
252
|
+
errors,
|
|
253
|
+
finalRequired,
|
|
254
|
+
finalValidateStatus,
|
|
255
|
+
setErrors,
|
|
256
|
+
scrollToField,
|
|
257
|
+
};
|
|
258
|
+
}, []);
|
|
259
|
+
node.name = name;
|
|
260
|
+
node.value = value;
|
|
261
|
+
node.parentNode = parentNode;
|
|
262
|
+
node.errors = errors;
|
|
263
|
+
node.finalRequired = finalRequired;
|
|
264
|
+
node.finalValidateStatus = finalValidateStatus;
|
|
265
|
+
useMemo(() => {
|
|
266
|
+
if (parentNode && !isNullish(name)) {
|
|
267
|
+
// 与dom排列顺序保持一致
|
|
268
|
+
if (parentNode.type === 'list' && isNumber(name)) {
|
|
269
|
+
parentNode.childNodes.splice(name, 0, node);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
parentNode.appendChild(node);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}, []);
|
|
276
|
+
useLayoutEffect(() => {
|
|
277
|
+
return () => {
|
|
278
|
+
if (parentNode && !isNullish(name)) {
|
|
279
|
+
parentNode.removeChild(node);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
}, []);
|
|
283
|
+
return [node];
|
|
284
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FormStore } from './createFormStore';
|
|
3
|
+
import { NodeName, ValidateOptions, ValidateStatus } from './type';
|
|
4
|
+
import { Rule } from './Validator';
|
|
5
|
+
export declare function useValidator(options: {
|
|
6
|
+
formStore?: FormStore;
|
|
7
|
+
rules?: Rule[];
|
|
8
|
+
validateFirst?: boolean;
|
|
9
|
+
validateStatus?: ValidateStatus;
|
|
10
|
+
value: any;
|
|
11
|
+
name?: NodeName;
|
|
12
|
+
label: ReactNode;
|
|
13
|
+
getNamePath: () => NodeName[];
|
|
14
|
+
required?: boolean;
|
|
15
|
+
}): {
|
|
16
|
+
finalRequired: boolean;
|
|
17
|
+
validate: (options?: ValidateOptions) => Promise<void>;
|
|
18
|
+
finalValidateStatus: ValidateStatus;
|
|
19
|
+
setInnerValidateStatus: import("react").Dispatch<import("react").SetStateAction<ValidateStatus>>;
|
|
20
|
+
errors: string[];
|
|
21
|
+
setErrors: import("react").Dispatch<import("react").SetStateAction<string[]>>;
|
|
22
|
+
};
|
|
23
|
+
export default useValidator;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { useContext, useMemo, useState } from 'react';
|
|
2
|
+
import FieldContext from './FieldContext';
|
|
3
|
+
import { HOOK_KEY } from './createFormStore';
|
|
4
|
+
import { getRuleConfig } from './Validator';
|
|
5
|
+
import { useEvent } from '../use';
|
|
6
|
+
import { isBoolean, toArray } from '../utils';
|
|
7
|
+
export function useValidator(options) {
|
|
8
|
+
const { formStore: externalFormStore, rules, validateFirst, validateStatus, value, name, label, getNamePath, required, } = options;
|
|
9
|
+
const fieldContext = useContext(FieldContext);
|
|
10
|
+
const formStore = externalFormStore || fieldContext.formStore;
|
|
11
|
+
const { validator } = formStore.getInternalHooks(HOOK_KEY);
|
|
12
|
+
const [errors, setErrors] = useState([]);
|
|
13
|
+
const [innerValidateStatus, setInnerValidateStatus] = useState('unvalidated');
|
|
14
|
+
const finalValidateStatus = validateStatus || innerValidateStatus;
|
|
15
|
+
const ruleRequired = useMemo(() => {
|
|
16
|
+
return !!(rules &&
|
|
17
|
+
rules.some((rule) => getRuleConfig(rule, formStore).required));
|
|
18
|
+
}, [rules]);
|
|
19
|
+
const validate = useEvent((options = {}) => {
|
|
20
|
+
const { triggerName, validateOnly } = options;
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
if (!rules) {
|
|
23
|
+
setErrors([]);
|
|
24
|
+
setInnerValidateStatus('passed');
|
|
25
|
+
return resolve();
|
|
26
|
+
}
|
|
27
|
+
let filteredRules = rules;
|
|
28
|
+
if (triggerName) {
|
|
29
|
+
filteredRules = rules.filter(Boolean).filter((rule) => {
|
|
30
|
+
const ruleConfig = getRuleConfig(rule, formStore);
|
|
31
|
+
const { trigger } = ruleConfig;
|
|
32
|
+
if (!trigger) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return toArray(trigger).includes(triggerName);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
validator
|
|
39
|
+
.validate(filteredRules, {
|
|
40
|
+
validateFirst,
|
|
41
|
+
value,
|
|
42
|
+
name,
|
|
43
|
+
label,
|
|
44
|
+
form: formStore,
|
|
45
|
+
})
|
|
46
|
+
.then(() => {
|
|
47
|
+
if (!validateOnly) {
|
|
48
|
+
setErrors([]);
|
|
49
|
+
setInnerValidateStatus('passed');
|
|
50
|
+
}
|
|
51
|
+
resolve();
|
|
52
|
+
})
|
|
53
|
+
.catch((errors) => {
|
|
54
|
+
if (!validateOnly) {
|
|
55
|
+
setErrors(errors);
|
|
56
|
+
setInnerValidateStatus('failed');
|
|
57
|
+
}
|
|
58
|
+
reject({
|
|
59
|
+
name: getNamePath(),
|
|
60
|
+
errors,
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
finalRequired: isBoolean(required) ? required : ruleRequired,
|
|
67
|
+
validate,
|
|
68
|
+
finalValidateStatus,
|
|
69
|
+
setInnerValidateStatus,
|
|
70
|
+
errors,
|
|
71
|
+
setErrors,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export default useValidator;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useContext, useMemo } from 'react';
|
|
2
|
+
import FieldContext from './FieldContext';
|
|
3
|
+
import { HOOK_KEY } from './createFormStore';
|
|
4
|
+
import { getObjectValueInDepth, toArray } from '../utils';
|
|
5
|
+
import { useSelectorWithStoreAndSubscription } from './store/useSelector';
|
|
6
|
+
export function useWatch(name, form) {
|
|
7
|
+
const { formStore: contextFormStore } = useContext(FieldContext);
|
|
8
|
+
const formStore = form || contextFormStore;
|
|
9
|
+
if (!formStore) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const { store: { getState, subscribe }, } = formStore.getInternalHooks(HOOK_KEY);
|
|
13
|
+
const selector = useMemo(() => {
|
|
14
|
+
return (state) => {
|
|
15
|
+
name = toArray(name);
|
|
16
|
+
if (name.length === 0) {
|
|
17
|
+
return state;
|
|
18
|
+
}
|
|
19
|
+
return getObjectValueInDepth(state, name);
|
|
20
|
+
};
|
|
21
|
+
}, [name]);
|
|
22
|
+
return useSelectorWithStoreAndSubscription(getState, subscribe, selector);
|
|
23
|
+
}
|
|
24
|
+
export default useWatch;
|
package/dist/grid/Col.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { View } from '@tarojs/components';
|
|
4
|
+
import classNames from 'classnames';
|
|
5
|
+
import { RowContext } from './Row';
|
|
6
|
+
import { useBem } from '../use';
|
|
7
|
+
import { filterNullish } from '../utils';
|
|
8
|
+
export const Col = (props) => {
|
|
9
|
+
const { children, className, style, span, offset, order, ...restProps } = props;
|
|
10
|
+
const [bem] = useBem('col');
|
|
11
|
+
const gap = useContext(RowContext);
|
|
12
|
+
return (_jsx(View, { ...restProps, className: classNames(bem.b(), bem.m(span, span), bem.m(`offset-${offset}`, offset), className), style: {
|
|
13
|
+
...style,
|
|
14
|
+
...filterNullish({
|
|
15
|
+
order,
|
|
16
|
+
padding: gap ? gap / 2 : null,
|
|
17
|
+
}),
|
|
18
|
+
}, children: children }));
|
|
19
|
+
};
|
|
20
|
+
export default Col;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { BaseProps } from '../base';
|
|
3
|
+
export type RowContextValue = number | undefined;
|
|
4
|
+
export declare const RowContext: import("react").Context<number>;
|
|
5
|
+
export interface RowProps extends BaseProps {
|
|
6
|
+
gap?: number;
|
|
7
|
+
justify?: 'start' | 'center' | 'end' | 'around' | 'between' | 'evenly';
|
|
8
|
+
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
9
|
+
}
|
|
10
|
+
export declare const Row: FC<RowProps>;
|
|
11
|
+
export default Row;
|
package/dist/grid/Row.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext } from 'react';
|
|
3
|
+
import { View } from '@tarojs/components';
|
|
4
|
+
import classNames from 'classnames';
|
|
5
|
+
import { useBem } from '../use';
|
|
6
|
+
import { filterNullish } from '../utils';
|
|
7
|
+
const mapJustify = {
|
|
8
|
+
start: 'flex-start',
|
|
9
|
+
center: 'center',
|
|
10
|
+
end: 'flex-end',
|
|
11
|
+
around: 'space-around',
|
|
12
|
+
between: 'space-between',
|
|
13
|
+
evenly: 'space-evenly',
|
|
14
|
+
};
|
|
15
|
+
const mapAlign = {
|
|
16
|
+
start: 'flex-start',
|
|
17
|
+
center: 'center',
|
|
18
|
+
end: 'flex-end',
|
|
19
|
+
stretch: 'stretch',
|
|
20
|
+
};
|
|
21
|
+
export const RowContext = createContext(undefined);
|
|
22
|
+
export const Row = (props) => {
|
|
23
|
+
const { className, style, children, gap, justify, align, ...restProps } = props;
|
|
24
|
+
const [bem] = useBem('row');
|
|
25
|
+
return (_jsx(View, { ...restProps, className: classNames(bem.b(), className), style: {
|
|
26
|
+
...style,
|
|
27
|
+
...filterNullish({
|
|
28
|
+
justifyContent: justify && mapJustify[justify],
|
|
29
|
+
alignItems: align && mapAlign[align],
|
|
30
|
+
margin: gap ? -gap / 2 : null,
|
|
31
|
+
}),
|
|
32
|
+
}, children: _jsx(RowContext.Provider, { value: gap, children: children }) }));
|
|
33
|
+
};
|
|
34
|
+
export default Row;
|