react-native-system-ui 1.0.2 → 1.0.4
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/README.md +42 -22
- package/dist/cjs/components/action-sheet/ActionSheet.js +1 -301
- package/dist/cjs/components/action-sheet/index.js +1 -16
- package/dist/cjs/components/action-sheet/tokens.js +1 -133
- package/dist/cjs/components/area/Area.js +1 -127
- package/dist/cjs/components/area/index.js +1 -9
- package/dist/cjs/components/area/tokens.js +1 -14
- package/dist/cjs/components/avatar/Avatar.js +1 -125
- package/dist/cjs/components/avatar/index.js +1 -18
- package/dist/cjs/components/avatar/tokens.js +1 -56
- package/dist/cjs/components/badge/Badge.js +1 -166
- package/dist/cjs/components/badge/index.js +1 -8
- package/dist/cjs/components/badge/tokens.js +1 -81
- package/dist/cjs/components/button/Button.js +1 -203
- package/dist/cjs/components/button/ButtonContext.js +1 -12
- package/dist/cjs/components/button/ButtonGroup.js +1 -65
- package/dist/cjs/components/button/index.js +1 -12
- package/dist/cjs/components/button/tokens.js +1 -176
- package/dist/cjs/components/calendar/Calendar.js +1 -452
- package/dist/cjs/components/calendar/index.js +1 -9
- package/dist/cjs/components/calendar/tokens.js +1 -129
- package/dist/cjs/components/cascader/Cascader.js +1 -482
- package/dist/cjs/components/cascader/index.js +1 -15
- package/dist/cjs/components/cascader/tokens.js +1 -138
- package/dist/cjs/components/cascader/useCascaderExtend.js +1 -39
- package/dist/cjs/components/cell/Cell.js +1 -181
- package/dist/cjs/components/cell/CellContext.js +1 -19
- package/dist/cjs/components/cell/CellGroup.js +1 -100
- package/dist/cjs/components/cell/index.js +1 -19
- package/dist/cjs/components/cell/tokens.js +1 -173
- package/dist/cjs/components/checkbox/Checkbox.js +1 -251
- package/dist/cjs/components/checkbox/CheckboxContext.js +1 -12
- package/dist/cjs/components/checkbox/CheckboxGroup.js +1 -148
- package/dist/cjs/components/checkbox/index.js +1 -16
- package/dist/cjs/components/checkbox/tokens.js +1 -97
- package/dist/cjs/components/circle/Circle.js +1 -212
- package/dist/cjs/components/circle/index.js +1 -9
- package/dist/cjs/components/circle/tokens.js +1 -55
- package/dist/cjs/components/collapse/Collapse.js +1 -311
- package/dist/cjs/components/collapse/index.js +1 -8
- package/dist/cjs/components/collapse/tokens.js +1 -81
- package/dist/cjs/components/config-provider/ConfigProvider.js +1 -44
- package/dist/cjs/components/config-provider/DirectionContext.js +1 -15
- package/dist/cjs/components/config-provider/LocaleContext.js +1 -16
- package/dist/cjs/components/config-provider/index.js +1 -40
- package/dist/cjs/components/config-provider/locale/en-US.js +1 -112
- package/dist/cjs/components/config-provider/locale/zh-CN.js +1 -112
- package/dist/cjs/components/config-provider/tokens.js +1 -11
- package/dist/cjs/components/config-provider/useDirection.js +1 -16
- package/dist/cjs/components/config-provider/useLocale.js +1 -16
- package/dist/cjs/components/count-down/CountDown.js +1 -88
- package/dist/cjs/components/count-down/index.js +1 -15
- package/dist/cjs/components/count-down/tokens.js +1 -34
- package/dist/cjs/components/datetime-picker/DatetimePicker.js +1 -319
- package/dist/cjs/components/datetime-picker/index.js +1 -9
- package/dist/cjs/components/datetime-picker/tokens.js +1 -22
- package/dist/cjs/components/dialog/Dialog.js +1 -433
- package/dist/cjs/components/dialog/imperative.js +1 -199
- package/dist/cjs/components/dialog/index.js +1 -23
- package/dist/cjs/components/dialog/tokens.js +1 -64
- package/dist/cjs/components/divider/Divider.js +1 -126
- package/dist/cjs/components/divider/index.js +1 -8
- package/dist/cjs/components/divider/tokens.js +1 -62
- package/dist/cjs/components/empty/Empty.js +1 -125
- package/dist/cjs/components/empty/index.js +1 -8
- package/dist/cjs/components/empty/tokens.js +1 -55
- package/dist/cjs/components/error-boundary/ErrorBoundary.js +1 -74
- package/dist/cjs/components/error-boundary/index.js +1 -19
- package/dist/cjs/components/field/Field.js +1 -565
- package/dist/cjs/components/field/index.js +1 -29
- package/dist/cjs/components/field/tokens.js +1 -150
- package/dist/cjs/components/flex/Flex.js +1 -85
- package/dist/cjs/components/flex/FlexContext.js +1 -12
- package/dist/cjs/components/flex/FlexItem.js +1 -95
- package/dist/cjs/components/flex/index.js +1 -19
- package/dist/cjs/components/flex/tokens.js +1 -21
- package/dist/cjs/components/form/Form.js +1 -340
- package/dist/cjs/components/form/FormContext.js +1 -12
- package/dist/cjs/components/form/FormItem.js +1 -151
- package/dist/cjs/components/form/FormList.js +1 -95
- package/dist/cjs/components/form/index.js +1 -50
- package/dist/cjs/components/form/tokens.js +1 -14
- package/dist/cjs/components/form/utils.js +1 -56
- package/dist/cjs/components/grid/Grid.js +1 -118
- package/dist/cjs/components/grid/GridContext.js +1 -12
- package/dist/cjs/components/grid/GridItem.js +1 -158
- package/dist/cjs/components/grid/index.js +1 -12
- package/dist/cjs/components/grid/tokens.js +1 -105
- package/dist/cjs/components/image/Image.js +1 -263
- package/dist/cjs/components/image/index.js +1 -16
- package/dist/cjs/components/image/tokens.js +1 -66
- package/dist/cjs/components/image-preview/ImagePreview.js +1 -408
- package/dist/cjs/components/image-preview/imperative.js +1 -72
- package/dist/cjs/components/image-preview/index.js +1 -17
- package/dist/cjs/components/image-preview/tokens.js +1 -43
- package/dist/cjs/components/index.js +1 -769
- package/dist/cjs/components/input/Input.js +1 -122
- package/dist/cjs/components/input/index.js +1 -15
- package/dist/cjs/components/input/tokens.js +1 -22
- package/dist/cjs/components/loading/Loading.js +1 -76
- package/dist/cjs/components/loading/index.js +1 -8
- package/dist/cjs/components/loading/tokens.js +1 -32
- package/dist/cjs/components/nav-bar/NavBar.js +1 -196
- package/dist/cjs/components/nav-bar/index.js +1 -16
- package/dist/cjs/components/nav-bar/tokens.js +1 -90
- package/dist/cjs/components/notice-bar/NoticeBar.js +1 -369
- package/dist/cjs/components/notice-bar/index.js +1 -8
- package/dist/cjs/components/notice-bar/tokens.js +1 -39
- package/dist/cjs/components/notify/Notify.js +1 -262
- package/dist/cjs/components/notify/imperative.js +1 -145
- package/dist/cjs/components/notify/index.js +1 -10
- package/dist/cjs/components/notify/tokens.js +1 -74
- package/dist/cjs/components/number-keyboard/NumberKeyboard.js +1 -487
- package/dist/cjs/components/number-keyboard/index.js +1 -15
- package/dist/cjs/components/number-keyboard/tokens.js +1 -59
- package/dist/cjs/components/overlay/Overlay.js +1 -81
- package/dist/cjs/components/overlay/index.js +1 -28
- package/dist/cjs/components/overlay/tokens.js +1 -13
- package/dist/cjs/components/password-input/PasswordInput.js +1 -346
- package/dist/cjs/components/password-input/index.js +1 -13
- package/dist/cjs/components/password-input/tokens.js +1 -53
- package/dist/cjs/components/picker/Picker.js +1 -1056
- package/dist/cjs/components/picker/index.js +1 -15
- package/dist/cjs/components/picker/tokens.js +1 -53
- package/dist/cjs/components/popup/Popup.js +1 -518
- package/dist/cjs/components/popup/index.js +1 -15
- package/dist/cjs/components/popup/tokens.js +1 -62
- package/dist/cjs/components/portal/Portal.js +1 -50
- package/dist/cjs/components/portal/PortalContext.js +1 -15
- package/dist/cjs/components/portal/PortalHost.js +1 -253
- package/dist/cjs/components/portal/index.js +1 -25
- package/dist/cjs/components/portal/tokens.js +1 -11
- package/dist/cjs/components/progress/Progress.js +1 -216
- package/dist/cjs/components/progress/index.js +1 -14
- package/dist/cjs/components/progress/tokens.js +1 -52
- package/dist/cjs/components/radio/Radio.js +1 -245
- package/dist/cjs/components/radio/RadioContext.js +1 -12
- package/dist/cjs/components/radio/RadioGroup.js +1 -113
- package/dist/cjs/components/radio/index.js +1 -16
- package/dist/cjs/components/radio/tokens.js +1 -92
- package/dist/cjs/components/safe-area-view/SafeAreaView.js +1 -59
- package/dist/cjs/components/safe-area-view/index.js +1 -12
- package/dist/cjs/components/safe-area-view/tokens.js +1 -11
- package/dist/cjs/components/search/Search.js +1 -215
- package/dist/cjs/components/search/index.js +1 -15
- package/dist/cjs/components/search/tokens.js +1 -54
- package/dist/cjs/components/selector/Selector.js +1 -185
- package/dist/cjs/components/selector/index.js +1 -15
- package/dist/cjs/components/selector/tokens.js +1 -100
- package/dist/cjs/components/share-sheet/ShareSheet.js +1 -287
- package/dist/cjs/components/share-sheet/index.js +1 -16
- package/dist/cjs/components/share-sheet/tokens.js +1 -55
- package/dist/cjs/components/sidebar/Sidebar.js +1 -103
- package/dist/cjs/components/sidebar/SidebarContext.js +1 -17
- package/dist/cjs/components/sidebar/SidebarItem.js +1 -103
- package/dist/cjs/components/sidebar/index.js +1 -26
- package/dist/cjs/components/sidebar/tokens.js +1 -93
- package/dist/cjs/components/skeleton/Skeleton.js +1 -162
- package/dist/cjs/components/skeleton/index.js +1 -22
- package/dist/cjs/components/skeleton/tokens.js +1 -39
- package/dist/cjs/components/slider/Slider.js +1 -633
- package/dist/cjs/components/slider/index.js +1 -8
- package/dist/cjs/components/slider/tokens.js +1 -37
- package/dist/cjs/components/space/Space.js +1 -134
- package/dist/cjs/components/space/index.js +1 -18
- package/dist/cjs/components/space/tokens.js +1 -39
- package/dist/cjs/components/stepper/Stepper.js +1 -484
- package/dist/cjs/components/stepper/index.js +1 -15
- package/dist/cjs/components/stepper/tokens.js +1 -60
- package/dist/cjs/components/swiper/Swiper.js +1 -364
- package/dist/cjs/components/swiper/SwiperItem.js +1 -12
- package/dist/cjs/components/swiper/SwiperPagIndicator.js +1 -106
- package/dist/cjs/components/swiper/index.js +1 -40
- package/dist/cjs/components/swiper/tokens.js +1 -18
- package/dist/cjs/components/switch/Switch.js +1 -102
- package/dist/cjs/components/switch/index.js +1 -15
- package/dist/cjs/components/switch/tokens.js +1 -31
- package/dist/cjs/components/tabbar/Tabbar.js +1 -149
- package/dist/cjs/components/tabbar/TabbarContext.js +1 -17
- package/dist/cjs/components/tabbar/TabbarItem.js +1 -159
- package/dist/cjs/components/tabbar/index.js +1 -25
- package/dist/cjs/components/tabbar/tokens.js +1 -41
- package/dist/cjs/components/tabs/Tabs.js +1 -860
- package/dist/cjs/components/tabs/index.js +1 -25
- package/dist/cjs/components/tabs/tokens.js +1 -111
- package/dist/cjs/components/tag/Tag.js +1 -130
- package/dist/cjs/components/tag/index.js +1 -8
- package/dist/cjs/components/tag/tokens.js +1 -104
- package/dist/cjs/components/toast/Toast.js +1 -306
- package/dist/cjs/components/toast/imperative.js +1 -144
- package/dist/cjs/components/toast/index.js +1 -10
- package/dist/cjs/components/toast/tokens.js +1 -43
- package/dist/cjs/components/typography/Typography.js +1 -181
- package/dist/cjs/components/typography/index.js +1 -9
- package/dist/cjs/components/typography/tokens.js +1 -88
- package/dist/cjs/components/water-mark/WaterMark.js +1 -172
- package/dist/cjs/components/water-mark/index.js +1 -22
- package/dist/cjs/components/water-mark/tokens.js +1 -54
- package/dist/cjs/design-system/Text.js +1 -38
- package/dist/cjs/design-system/ThemeContext.js +1 -19
- package/dist/cjs/design-system/ThemeProvider.js +1 -31
- package/dist/cjs/design-system/createComponentTokensHook.js +1 -28
- package/dist/cjs/design-system/index.js +1 -66
- package/dist/cjs/design-system/mergeTokensOverride.js +1 -9
- package/dist/cjs/design-system/presets.js +1 -146
- package/dist/cjs/design-system/tokens.js +1 -135
- package/dist/cjs/design-system/useTheme.js +1 -16
- package/dist/cjs/hooks/animation/index.js +1 -25
- package/dist/cjs/hooks/animation/useAnimatedTransition.js +1 -72
- package/dist/cjs/hooks/animation/useReducedMotion.js +1 -75
- package/dist/cjs/hooks/aria/index.js +1 -49
- package/dist/cjs/hooks/aria/useAriaListBox.js +1 -50
- package/dist/cjs/hooks/aria/useAriaOverlay.js +1 -50
- package/dist/cjs/hooks/aria/useAriaPress.js +1 -94
- package/dist/cjs/hooks/aria/useAriaToggle.js +1 -41
- package/dist/cjs/hooks/gesture/index.js +1 -16
- package/dist/cjs/hooks/gesture/useGestureScroll.js +1 -129
- package/dist/cjs/hooks/index.js +1 -96
- package/dist/cjs/hooks/overlay/OverlayStackStore.js +1 -106
- package/dist/cjs/hooks/overlay/index.js +1 -27
- package/dist/cjs/hooks/overlay/useOverlayStack.js +1 -53
- package/dist/cjs/hooks/useControllableValue.js +1 -41
- package/dist/cjs/hooks/useCountDown.js +1 -99
- package/dist/cjs/hooks/useHairline.js +1 -46
- package/dist/cjs/hooks/useSafeAreaPadding.js +1 -38
- package/dist/cjs/index.js +1 -104
- package/dist/cjs/nativewind.js +1 -0
- package/dist/cjs/platform/animation.js +1 -22
- package/dist/cjs/platform/history.js +1 -14
- package/dist/cjs/platform/index.js +1 -60
- package/dist/cjs/platform/measure.js +1 -39
- package/dist/cjs/platform/runtime.js +1 -19
- package/dist/cjs/platform/scrollLock.js +1 -24
- package/dist/cjs/utils/array.js +1 -12
- package/dist/cjs/utils/color.js +1 -33
- package/dist/cjs/utils/compare.js +1 -21
- package/dist/cjs/utils/createPlatformShadow.js +1 -52
- package/dist/cjs/utils/date.js +1 -45
- package/dist/cjs/utils/deepMerge.js +1 -27
- package/dist/cjs/utils/hairline.js +1 -107
- package/dist/cjs/utils/index.js +1 -148
- package/dist/cjs/utils/number.js +1 -65
- package/dist/cjs/utils/promise.js +1 -9
- package/dist/cjs/utils/render.js +1 -21
- package/dist/cjs/utils/rtl.js +1 -25
- package/dist/cjs/utils/string.js +1 -22
- package/dist/cjs/utils/validate.js +1 -39
- package/dist/es/components/action-sheet/ActionSheet.js +1 -275
- package/dist/es/components/action-sheet/index.js +1 -3
- package/dist/es/components/action-sheet/tokens.js +1 -126
- package/dist/es/components/area/Area.js +1 -113
- package/dist/es/components/area/index.js +1 -2
- package/dist/es/components/area/tokens.js +1 -8
- package/dist/es/components/avatar/Avatar.js +1 -106
- package/dist/es/components/avatar/index.js +1 -1
- package/dist/es/components/avatar/tokens.js +1 -49
- package/dist/es/components/badge/Badge.js +1 -147
- package/dist/es/components/badge/index.js +1 -2
- package/dist/es/components/badge/tokens.js +1 -75
- package/dist/es/components/button/Button.js +1 -184
- package/dist/es/components/button/ButtonContext.js +1 -1
- package/dist/es/components/button/ButtonGroup.js +1 -46
- package/dist/es/components/button/index.js +1 -7
- package/dist/es/components/button/tokens.js +1 -170
- package/dist/es/components/calendar/Calendar.js +1 -432
- package/dist/es/components/calendar/index.js +1 -2
- package/dist/es/components/calendar/tokens.js +1 -122
- package/dist/es/components/cascader/Cascader.js +1 -456
- package/dist/es/components/cascader/index.js +1 -3
- package/dist/es/components/cascader/tokens.js +1 -131
- package/dist/es/components/cascader/useCascaderExtend.js +1 -32
- package/dist/es/components/cell/Cell.js +1 -156
- package/dist/es/components/cell/CellContext.js +1 -6
- package/dist/es/components/cell/CellGroup.js +1 -81
- package/dist/es/components/cell/index.js +1 -8
- package/dist/es/components/cell/tokens.js +1 -160
- package/dist/es/components/checkbox/Checkbox.js +1 -220
- package/dist/es/components/checkbox/CheckboxContext.js +1 -1
- package/dist/es/components/checkbox/CheckboxGroup.js +1 -117
- package/dist/es/components/checkbox/index.js +1 -5
- package/dist/es/components/checkbox/tokens.js +1 -85
- package/dist/es/components/circle/Circle.js +1 -187
- package/dist/es/components/circle/index.js +1 -2
- package/dist/es/components/circle/tokens.js +1 -48
- package/dist/es/components/collapse/Collapse.js +1 -286
- package/dist/es/components/collapse/index.js +1 -2
- package/dist/es/components/collapse/tokens.js +1 -74
- package/dist/es/components/config-provider/ConfigProvider.js +1 -25
- package/dist/es/components/config-provider/DirectionContext.js +1 -2
- package/dist/es/components/config-provider/LocaleContext.js +1 -3
- package/dist/es/components/config-provider/index.js +1 -5
- package/dist/es/components/config-provider/locale/en-US.js +1 -106
- package/dist/es/components/config-provider/locale/zh-CN.js +1 -106
- package/dist/es/components/config-provider/tokens.js +1 -5
- package/dist/es/components/config-provider/useDirection.js +1 -3
- package/dist/es/components/config-provider/useLocale.js +1 -3
- package/dist/es/components/count-down/CountDown.js +1 -69
- package/dist/es/components/count-down/index.js +1 -3
- package/dist/es/components/count-down/tokens.js +1 -27
- package/dist/es/components/datetime-picker/DatetimePicker.js +1 -305
- package/dist/es/components/datetime-picker/index.js +1 -2
- package/dist/es/components/datetime-picker/tokens.js +1 -16
- package/dist/es/components/dialog/Dialog.js +1 -407
- package/dist/es/components/dialog/imperative.js +1 -185
- package/dist/es/components/dialog/index.js +1 -17
- package/dist/es/components/dialog/tokens.js +1 -57
- package/dist/es/components/divider/Divider.js +1 -107
- package/dist/es/components/divider/index.js +1 -2
- package/dist/es/components/divider/tokens.js +1 -55
- package/dist/es/components/empty/Empty.js +1 -100
- package/dist/es/components/empty/index.js +1 -2
- package/dist/es/components/empty/tokens.js +1 -48
- package/dist/es/components/error-boundary/ErrorBoundary.js +1 -62
- package/dist/es/components/error-boundary/index.js +1 -1
- package/dist/es/components/field/Field.js +1 -539
- package/dist/es/components/field/index.js +1 -6
- package/dist/es/components/field/tokens.js +1 -138
- package/dist/es/components/flex/Flex.js +1 -66
- package/dist/es/components/flex/FlexContext.js +1 -1
- package/dist/es/components/flex/FlexItem.js +1 -76
- package/dist/es/components/flex/index.js +1 -8
- package/dist/es/components/flex/tokens.js +1 -15
- package/dist/es/components/form/Form.js +1 -319
- package/dist/es/components/form/FormContext.js +1 -1
- package/dist/es/components/form/FormItem.js +1 -138
- package/dist/es/components/form/FormList.js +1 -81
- package/dist/es/components/form/index.js +1 -13
- package/dist/es/components/form/tokens.js +1 -8
- package/dist/es/components/form/utils.js +1 -45
- package/dist/es/components/grid/Grid.js +1 -99
- package/dist/es/components/grid/GridContext.js +1 -1
- package/dist/es/components/grid/GridItem.js +1 -138
- package/dist/es/components/grid/index.js +1 -6
- package/dist/es/components/grid/tokens.js +1 -98
- package/dist/es/components/image/Image.js +1 -238
- package/dist/es/components/image/index.js +1 -3
- package/dist/es/components/image/tokens.js +1 -60
- package/dist/es/components/image-preview/ImagePreview.js +1 -388
- package/dist/es/components/image-preview/imperative.js +1 -58
- package/dist/es/components/image-preview/index.js +1 -11
- package/dist/es/components/image-preview/tokens.js +1 -37
- package/dist/es/components/index.js +1 -110
- package/dist/es/components/input/Input.js +1 -109
- package/dist/es/components/input/index.js +1 -3
- package/dist/es/components/input/tokens.js +1 -16
- package/dist/es/components/loading/Loading.js +1 -57
- package/dist/es/components/loading/index.js +1 -2
- package/dist/es/components/loading/tokens.js +1 -25
- package/dist/es/components/nav-bar/NavBar.js +1 -171
- package/dist/es/components/nav-bar/index.js +1 -3
- package/dist/es/components/nav-bar/tokens.js +1 -83
- package/dist/es/components/notice-bar/NoticeBar.js +1 -344
- package/dist/es/components/notice-bar/index.js +1 -2
- package/dist/es/components/notice-bar/tokens.js +1 -32
- package/dist/es/components/notify/Notify.js +1 -242
- package/dist/es/components/notify/imperative.js +1 -131
- package/dist/es/components/notify/index.js +1 -5
- package/dist/es/components/notify/tokens.js +1 -67
- package/dist/es/components/number-keyboard/NumberKeyboard.js +1 -467
- package/dist/es/components/number-keyboard/index.js +1 -3
- package/dist/es/components/number-keyboard/tokens.js +1 -53
- package/dist/es/components/overlay/Overlay.js +1 -50
- package/dist/es/components/overlay/index.js +1 -4
- package/dist/es/components/overlay/tokens.js +1 -7
- package/dist/es/components/password-input/PasswordInput.js +1 -327
- package/dist/es/components/password-input/index.js +1 -1
- package/dist/es/components/password-input/tokens.js +1 -41
- package/dist/es/components/picker/Picker.js +1 -1031
- package/dist/es/components/picker/index.js +1 -3
- package/dist/es/components/picker/tokens.js +1 -47
- package/dist/es/components/popup/Popup.js +1 -492
- package/dist/es/components/popup/index.js +1 -3
- package/dist/es/components/popup/tokens.js +1 -55
- package/dist/es/components/portal/Portal.js +1 -37
- package/dist/es/components/portal/PortalContext.js +1 -2
- package/dist/es/components/portal/PortalHost.js +1 -234
- package/dist/es/components/portal/index.js +1 -3
- package/dist/es/components/portal/tokens.js +1 -5
- package/dist/es/components/progress/Progress.js +1 -196
- package/dist/es/components/progress/index.js +1 -3
- package/dist/es/components/progress/tokens.js +1 -45
- package/dist/es/components/radio/Radio.js +1 -214
- package/dist/es/components/radio/RadioContext.js +1 -1
- package/dist/es/components/radio/RadioGroup.js +1 -82
- package/dist/es/components/radio/index.js +1 -5
- package/dist/es/components/radio/tokens.js +1 -80
- package/dist/es/components/safe-area-view/SafeAreaView.js +1 -40
- package/dist/es/components/safe-area-view/index.js +1 -1
- package/dist/es/components/safe-area-view/tokens.js +1 -5
- package/dist/es/components/search/Search.js +1 -189
- package/dist/es/components/search/index.js +1 -3
- package/dist/es/components/search/tokens.js +1 -48
- package/dist/es/components/selector/Selector.js +1 -166
- package/dist/es/components/selector/index.js +1 -3
- package/dist/es/components/selector/tokens.js +1 -88
- package/dist/es/components/share-sheet/ShareSheet.js +1 -267
- package/dist/es/components/share-sheet/index.js +1 -3
- package/dist/es/components/share-sheet/tokens.js +1 -49
- package/dist/es/components/sidebar/Sidebar.js +1 -84
- package/dist/es/components/sidebar/SidebarContext.js +1 -3
- package/dist/es/components/sidebar/SidebarItem.js +1 -84
- package/dist/es/components/sidebar/index.js +1 -8
- package/dist/es/components/sidebar/tokens.js +1 -80
- package/dist/es/components/skeleton/Skeleton.js +1 -143
- package/dist/es/components/skeleton/index.js +1 -4
- package/dist/es/components/skeleton/tokens.js +1 -33
- package/dist/es/components/slider/Slider.js +1 -596
- package/dist/es/components/slider/index.js +1 -2
- package/dist/es/components/slider/tokens.js +1 -31
- package/dist/es/components/space/Space.js +1 -115
- package/dist/es/components/space/index.js +1 -2
- package/dist/es/components/space/tokens.js +1 -32
- package/dist/es/components/stepper/Stepper.js +1 -465
- package/dist/es/components/stepper/index.js +1 -3
- package/dist/es/components/stepper/tokens.js +1 -54
- package/dist/es/components/swiper/Swiper.js +1 -344
- package/dist/es/components/swiper/SwiperItem.js +1 -1
- package/dist/es/components/swiper/SwiperPagIndicator.js +1 -87
- package/dist/es/components/swiper/index.js +1 -10
- package/dist/es/components/swiper/tokens.js +1 -12
- package/dist/es/components/switch/Switch.js +1 -83
- package/dist/es/components/switch/index.js +1 -3
- package/dist/es/components/switch/tokens.js +1 -25
- package/dist/es/components/tabbar/Tabbar.js +1 -130
- package/dist/es/components/tabbar/TabbarContext.js +1 -3
- package/dist/es/components/tabbar/TabbarItem.js +1 -139
- package/dist/es/components/tabbar/index.js +1 -7
- package/dist/es/components/tabbar/tokens.js +1 -35
- package/dist/es/components/tabs/Tabs.js +1 -841
- package/dist/es/components/tabs/index.js +1 -7
- package/dist/es/components/tabs/tokens.js +1 -105
- package/dist/es/components/tag/Tag.js +1 -105
- package/dist/es/components/tag/index.js +1 -2
- package/dist/es/components/tag/tokens.js +1 -97
- package/dist/es/components/toast/Toast.js +1 -280
- package/dist/es/components/toast/imperative.js +1 -130
- package/dist/es/components/toast/index.js +1 -5
- package/dist/es/components/toast/tokens.js +1 -36
- package/dist/es/components/typography/Typography.js +1 -162
- package/dist/es/components/typography/index.js +1 -2
- package/dist/es/components/typography/tokens.js +1 -82
- package/dist/es/components/water-mark/WaterMark.js +1 -153
- package/dist/es/components/water-mark/index.js +1 -4
- package/dist/es/components/water-mark/tokens.js +1 -42
- package/dist/es/design-system/Text.js +1 -19
- package/dist/es/design-system/ThemeContext.js +1 -6
- package/dist/es/design-system/ThemeProvider.js +1 -17
- package/dist/es/design-system/createComponentTokensHook.js +1 -15
- package/dist/es/design-system/index.js +1 -7
- package/dist/es/design-system/mergeTokensOverride.js +1 -2
- package/dist/es/design-system/presets.js +1 -139
- package/dist/es/design-system/tokens.js +1 -128
- package/dist/es/design-system/useTheme.js +1 -3
- package/dist/es/hooks/animation/index.js +1 -2
- package/dist/es/hooks/animation/useAnimatedTransition.js +1 -53
- package/dist/es/hooks/animation/useReducedMotion.js +1 -54
- package/dist/es/hooks/aria/index.js +1 -5
- package/dist/es/hooks/aria/useAriaListBox.js +1 -25
- package/dist/es/hooks/aria/useAriaOverlay.js +1 -25
- package/dist/es/hooks/aria/useAriaPress.js +1 -57
- package/dist/es/hooks/aria/useAriaToggle.js +1 -16
- package/dist/es/hooks/gesture/index.js +1 -2
- package/dist/es/hooks/gesture/useGestureScroll.js +1 -110
- package/dist/es/hooks/index.js +1 -8
- package/dist/es/hooks/overlay/OverlayStackStore.js +1 -93
- package/dist/es/hooks/overlay/index.js +1 -3
- package/dist/es/hooks/overlay/useOverlayStack.js +1 -40
- package/dist/es/hooks/useControllableValue.js +1 -29
- package/dist/es/hooks/useCountDown.js +1 -87
- package/dist/es/hooks/useHairline.js +1 -26
- package/dist/es/hooks/useSafeAreaPadding.js +1 -20
- package/dist/es/index.js +1 -11
- package/dist/es/nativewind.js +1 -0
- package/dist/es/platform/animation.js +1 -10
- package/dist/es/platform/history.js +1 -7
- package/dist/es/platform/index.js +1 -6
- package/dist/es/platform/measure.js +1 -32
- package/dist/es/platform/runtime.js +1 -4
- package/dist/es/platform/scrollLock.js +1 -16
- package/dist/es/types.js +1 -1
- package/dist/es/utils/array.js +1 -5
- package/dist/es/utils/color.js +1 -25
- package/dist/es/utils/compare.js +1 -13
- package/dist/es/utils/createPlatformShadow.js +1 -39
- package/dist/es/utils/date.js +1 -33
- package/dist/es/utils/deepMerge.js +1 -21
- package/dist/es/utils/hairline.js +1 -93
- package/dist/es/utils/index.js +1 -14
- package/dist/es/utils/number.js +1 -48
- package/dist/es/utils/promise.js +1 -2
- package/dist/es/utils/render.js +1 -7
- package/dist/es/utils/rtl.js +1 -17
- package/dist/es/utils/string.js +1 -13
- package/dist/es/utils/validate.js +1 -14
- package/dist/types/components/nav-bar/tokens.d.ts +1 -1
- package/dist/types/design-system/tokens.d.ts +1 -0
- package/dist/types/nativewind.d.ts +4 -0
- package/package.json +15 -3
|
@@ -1,115 +1 @@
|
|
|
1
|
-
function _extends()
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Pressable, View } from 'react-native';
|
|
4
|
-
import { useAriaPress } from '../../hooks';
|
|
5
|
-
import { resolveGapInput, useSpaceTokens } from './tokens';
|
|
6
|
-
import { parseNumberLike, isFiniteNumber, isFunction, isRenderable, renderTextOrNode } from '../../utils';
|
|
7
|
-
const alignMap = {
|
|
8
|
-
start: 'flex-start',
|
|
9
|
-
end: 'flex-end',
|
|
10
|
-
center: 'center',
|
|
11
|
-
baseline: 'baseline',
|
|
12
|
-
stretch: 'stretch'
|
|
13
|
-
};
|
|
14
|
-
const justifyMap = {
|
|
15
|
-
start: 'flex-start',
|
|
16
|
-
end: 'flex-end',
|
|
17
|
-
center: 'center',
|
|
18
|
-
between: 'space-between',
|
|
19
|
-
around: 'space-around',
|
|
20
|
-
evenly: 'space-evenly'
|
|
21
|
-
};
|
|
22
|
-
const parseSpaceSize = (v, presets) => {
|
|
23
|
-
if (v === undefined) return presets.normal;
|
|
24
|
-
if (isFiniteNumber(v)) return v;
|
|
25
|
-
if (typeof v === 'string' && v in presets) return presets[v];
|
|
26
|
-
return parseNumberLike(v, presets.normal) ?? presets.normal;
|
|
27
|
-
};
|
|
28
|
-
const parseGap = (v, presets) => {
|
|
29
|
-
if (Array.isArray(v)) return [parseSpaceSize(v[0], presets), parseSpaceSize(v[1], presets)];
|
|
30
|
-
const p = parseSpaceSize(v, presets);
|
|
31
|
-
return [p, p];
|
|
32
|
-
};
|
|
33
|
-
export const Space = /*#__PURE__*/React.memo(props => {
|
|
34
|
-
const {
|
|
35
|
-
children,
|
|
36
|
-
gap,
|
|
37
|
-
size: sizeP,
|
|
38
|
-
direction: dirP,
|
|
39
|
-
align: alignP,
|
|
40
|
-
justify: justP = 'start',
|
|
41
|
-
wrap: wrapP,
|
|
42
|
-
block: blockP,
|
|
43
|
-
fill: fillP,
|
|
44
|
-
divider,
|
|
45
|
-
tokensOverride,
|
|
46
|
-
style,
|
|
47
|
-
onClick,
|
|
48
|
-
...rest
|
|
49
|
-
} = props;
|
|
50
|
-
const tokens = useSpaceTokens(tokensOverride);
|
|
51
|
-
const hor = (dirP ?? tokens.defaults.direction) === 'horizontal';
|
|
52
|
-
const wrap = wrapP ?? tokens.defaults.wrap;
|
|
53
|
-
const gapIn = resolveGapInput(gap, sizeP, tokens.defaults.gapPreset);
|
|
54
|
-
const [hG, vG] = parseGap(gapIn, tokens.sizing.presets);
|
|
55
|
-
const hGap = Math.max(0, hG);
|
|
56
|
-
const vGap = Math.max(0, vG);
|
|
57
|
-
const justStretch = justP === 'stretch';
|
|
58
|
-
const justStyle = justStretch ? 'start' : justP;
|
|
59
|
-
const block = blockP ?? !hor;
|
|
60
|
-
const align = alignP ?? (hor ? 'center' : 'stretch');
|
|
61
|
-
const fillOrJust = hor && ((fillP ?? false) || justStretch);
|
|
62
|
-
const boxStyle = {
|
|
63
|
-
flexDirection: hor ? 'row' : 'column',
|
|
64
|
-
flexWrap: hor && wrap ? 'wrap' : 'nowrap',
|
|
65
|
-
alignItems: alignMap[align],
|
|
66
|
-
justifyContent: justifyMap[justStyle],
|
|
67
|
-
width: block ? '100%' : undefined,
|
|
68
|
-
columnGap: hor ? hGap : undefined,
|
|
69
|
-
rowGap: vGap
|
|
70
|
-
};
|
|
71
|
-
const txtStyle = {
|
|
72
|
-
fontFamily: tokens.typography.fontFamily,
|
|
73
|
-
fontSize: tokens.typography.fontSize
|
|
74
|
-
};
|
|
75
|
-
const arr = React.Children.toArray(children).filter(isRenderable);
|
|
76
|
-
const content = [];
|
|
77
|
-
for (let i = 0; i < arr.length; i++) {
|
|
78
|
-
const child = arr[i];
|
|
79
|
-
const key = /*#__PURE__*/React.isValidElement(child) && child.key != null ? child.key : i;
|
|
80
|
-
const flexS = fillOrJust ? {
|
|
81
|
-
flexGrow: 1,
|
|
82
|
-
flexBasis: 0,
|
|
83
|
-
minWidth: 0
|
|
84
|
-
} : !hor && (fillP || block) ? {
|
|
85
|
-
width: '100%'
|
|
86
|
-
} : undefined;
|
|
87
|
-
content.push(/*#__PURE__*/React.createElement(View, {
|
|
88
|
-
key: key,
|
|
89
|
-
style: flexS
|
|
90
|
-
}, renderTextOrNode(child, txtStyle)));
|
|
91
|
-
if (divider && i < arr.length - 1) content.push(/*#__PURE__*/React.createElement(View, {
|
|
92
|
-
key: `divider-${String(key)}`
|
|
93
|
-
}, renderTextOrNode(divider, txtStyle)));
|
|
94
|
-
}
|
|
95
|
-
const inter = isFunction(onClick);
|
|
96
|
-
const {
|
|
97
|
-
interactionProps,
|
|
98
|
-
states
|
|
99
|
-
} = useAriaPress({
|
|
100
|
-
disabled: !inter,
|
|
101
|
-
onPress: onClick,
|
|
102
|
-
extraProps: inter ? {
|
|
103
|
-
accessibilityRole: 'button'
|
|
104
|
-
} : undefined
|
|
105
|
-
});
|
|
106
|
-
if (inter) return /*#__PURE__*/React.createElement(Pressable, _extends({
|
|
107
|
-
style: [tokens.layout.container, boxStyle, style, states.pressed && {
|
|
108
|
-
opacity: 0.85
|
|
109
|
-
}]
|
|
110
|
-
}, interactionProps, rest), content);
|
|
111
|
-
return /*#__PURE__*/React.createElement(View, _extends({
|
|
112
|
-
style: [tokens.layout.container, boxStyle, style]
|
|
113
|
-
}, rest), content);
|
|
114
|
-
});
|
|
115
|
-
Space.displayName = 'Space';
|
|
1
|
+
function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},_extends.apply(null,arguments)}import React from"react";import{Pressable,View}from"react-native";import{useAriaPress}from"../../hooks";import{resolveGapInput,useSpaceTokens}from"./tokens";import{parseNumberLike,isFiniteNumber,isFunction,isRenderable,renderTextOrNode}from"../../utils";const alignMap={start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch"},justifyMap={start:"flex-start",end:"flex-end",center:"center",between:"space-between",around:"space-around",evenly:"space-evenly"},parseSpaceSize=(e,t)=>void 0===e?t.normal:isFiniteNumber(e)?e:"string"==typeof e&&e in t?t[e]:parseNumberLike(e,t.normal)??t.normal,parseGap=(e,t)=>{if(Array.isArray(e))return[parseSpaceSize(e[0],t),parseSpaceSize(e[1],t)];const r=parseSpaceSize(e,t);return[r,r]};export const Space=React.memo(e=>{const{children:t,gap:r,size:a,direction:n,align:s,justify:i="start",wrap:o,block:l,fill:c,divider:p,tokensOverride:d,style:u,onClick:f,...m}=e,y=useSpaceTokens(d),h="horizontal"===(n??y.defaults.direction),x=o??y.defaults.wrap,b=resolveGapInput(r,a,y.defaults.gapPreset),[g,v]=parseGap(b,y.sizing.presets),w=Math.max(0,g),S=Math.max(0,v),k="stretch"===i,R=l??!h,z=h&&((c??!1)||k),P={flexDirection:h?"row":"column",flexWrap:h&&x?"wrap":"nowrap",alignItems:alignMap[s??(h?"center":"stretch")],justifyContent:justifyMap[k?"start":i],width:R?"100%":void 0,columnGap:h?w:void 0,rowGap:S},N={fontFamily:y.typography.fontFamily,fontSize:y.typography.fontSize},G=React.Children.toArray(t).filter(isRenderable),O=[];for(let e=0;e<G.length;e++){const t=G[e],r=React.isValidElement(t)&&null!=t.key?t.key:e,a=z?{flexGrow:1,flexBasis:0,minWidth:0}:h||!c&&!R?void 0:{width:"100%"};O.push(React.createElement(View,{key:r,style:a},renderTextOrNode(t,N))),p&&e<G.length-1&&O.push(React.createElement(View,{key:`divider-${String(r)}`},renderTextOrNode(p,N)))}const j=isFunction(f),{interactionProps:F,states:M}=useAriaPress({disabled:!j,onPress:f,extraProps:j?{accessibilityRole:"button"}:void 0});return j?React.createElement(Pressable,_extends({style:[y.layout.container,P,u,M.pressed&&{opacity:.85}]},F,m),O):React.createElement(View,_extends({style:[y.layout.container,P,u]},m),O)});Space.displayName="Space";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { Space } from './Space';
|
|
1
|
+
export{Space as default}from"./Space";export{Space}from"./Space";
|
|
@@ -1,32 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
const createSpaceTokens = foundations => {
|
|
3
|
-
const {
|
|
4
|
-
spacing,
|
|
5
|
-
fontSize,
|
|
6
|
-
typography
|
|
7
|
-
} = foundations;
|
|
8
|
-
return {
|
|
9
|
-
defaults: {
|
|
10
|
-
direction: 'horizontal',
|
|
11
|
-
wrap: false,
|
|
12
|
-
gapPreset: 'normal'
|
|
13
|
-
},
|
|
14
|
-
layout: {
|
|
15
|
-
container: {}
|
|
16
|
-
},
|
|
17
|
-
typography: {
|
|
18
|
-
fontFamily: typography.fontFamily,
|
|
19
|
-
fontSize: fontSize.sm
|
|
20
|
-
},
|
|
21
|
-
sizing: {
|
|
22
|
-
presets: {
|
|
23
|
-
mini: spacing.xxs ?? spacing.xs ?? 4,
|
|
24
|
-
small: spacing.xs,
|
|
25
|
-
normal: spacing.sm,
|
|
26
|
-
large: spacing.md
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
export const useSpaceTokens = createComponentTokensHook('space', createSpaceTokens);
|
|
32
|
-
export const resolveGapInput = (gap, size, fallback) => gap ?? size ?? fallback ?? 'normal';
|
|
1
|
+
import{createComponentTokensHook}from"../../design-system";const createSpaceTokens=e=>{const{spacing:o,fontSize:n,typography:t}=e;return{defaults:{direction:"horizontal",wrap:!1,gapPreset:"normal"},layout:{container:{}},typography:{fontFamily:t.fontFamily,fontSize:n.sm},sizing:{presets:{mini:o.xxs??o.xs??4,small:o.xs,normal:o.sm,large:o.md}}}};export const useSpaceTokens=createComponentTokensHook("space",createSpaceTokens);export const resolveGapInput=(e,o,n)=>e??o??n??"normal";
|
|
@@ -1,465 +1 @@
|
|
|
1
|
-
function _extends()
|
|
2
|
-
import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
3
|
-
import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';
|
|
4
|
-
import { useControllableValue } from '../../hooks';
|
|
5
|
-
import { parseNumber, addNumber, clampValue, formatNumber, numberToString, parseDecimalLength, isFiniteNumber, isPromiseLike } from '../../utils';
|
|
6
|
-
import { useDirection } from '../config-provider/useDirection';
|
|
7
|
-
import { useStepperTokens } from './tokens';
|
|
8
|
-
import { createHairlineView } from '../../utils/hairline';
|
|
9
|
-
const LONG_PRESS_DELAY = 600;
|
|
10
|
-
const LONG_PRESS_INTERVAL = 100;
|
|
11
|
-
const StepperImpl = (props, ref) => {
|
|
12
|
-
const tokens = useStepperTokens(props.tokensOverride);
|
|
13
|
-
const layoutDir = useDirection();
|
|
14
|
-
const {
|
|
15
|
-
min,
|
|
16
|
-
max,
|
|
17
|
-
step = 1,
|
|
18
|
-
autoFixed = true,
|
|
19
|
-
beforeChange,
|
|
20
|
-
integer = false,
|
|
21
|
-
decimalLength: decimalLengthProp,
|
|
22
|
-
disabled = false,
|
|
23
|
-
disablePlus = false,
|
|
24
|
-
disableMinus = false,
|
|
25
|
-
disableInput = false,
|
|
26
|
-
allowEmpty = false,
|
|
27
|
-
showPlus = tokens.defaults.showPlus,
|
|
28
|
-
showMinus = tokens.defaults.showMinus,
|
|
29
|
-
showInput = tokens.defaults.showInput,
|
|
30
|
-
longPress = tokens.defaults.longPress,
|
|
31
|
-
theme = tokens.defaults.theme,
|
|
32
|
-
inputWidth,
|
|
33
|
-
buttonSize,
|
|
34
|
-
name,
|
|
35
|
-
placeholder,
|
|
36
|
-
onClick,
|
|
37
|
-
onPlus,
|
|
38
|
-
onMinus,
|
|
39
|
-
onOverlimit,
|
|
40
|
-
onFocus,
|
|
41
|
-
onBlur,
|
|
42
|
-
inputProps,
|
|
43
|
-
inputStyle,
|
|
44
|
-
buttonStyle,
|
|
45
|
-
style,
|
|
46
|
-
...restProps
|
|
47
|
-
} = props;
|
|
48
|
-
const [isChanging, setIsChanging] = useState(false);
|
|
49
|
-
const changingRef = useRef(false);
|
|
50
|
-
const onPlusRef = useRef(onPlus);
|
|
51
|
-
const onMinusRef = useRef(onMinus);
|
|
52
|
-
const onOverlimitRef = useRef(onOverlimit);
|
|
53
|
-
const onFocusRef = useRef(onFocus);
|
|
54
|
-
const onBlurRef = useRef(onBlur);
|
|
55
|
-
const onClickRef = useRef(onClick);
|
|
56
|
-
const valueRef = useRef(null);
|
|
57
|
-
const inputRef = useRef(null);
|
|
58
|
-
const inputValueRef = useRef('');
|
|
59
|
-
const inputPropsRef = useRef(inputProps);
|
|
60
|
-
const longPressRef = useRef({
|
|
61
|
-
hadLongPress: false
|
|
62
|
-
});
|
|
63
|
-
onPlusRef.current = onPlus;
|
|
64
|
-
onMinusRef.current = onMinus;
|
|
65
|
-
onOverlimitRef.current = onOverlimit;
|
|
66
|
-
onFocusRef.current = onFocus;
|
|
67
|
-
onBlurRef.current = onBlur;
|
|
68
|
-
onClickRef.current = onClick;
|
|
69
|
-
inputPropsRef.current = inputProps;
|
|
70
|
-
const decimalLen = parseDecimalLength(decimalLengthProp);
|
|
71
|
-
const stepRaw = Number(step ?? 1);
|
|
72
|
-
const stepSize = isFiniteNumber(stepRaw) && stepRaw > 0 ? stepRaw : 1;
|
|
73
|
-
const rBtnSize = Math.max(0, parseNumber(buttonSize, tokens.defaults.buttonSize));
|
|
74
|
-
const rInputW = Math.max(0, parseNumber(inputWidth, tokens.defaults.inputWidth));
|
|
75
|
-
const defaultVal = useMemo(() => {
|
|
76
|
-
const raw = props.defaultValue;
|
|
77
|
-
if (raw === null) return null;
|
|
78
|
-
const base = isFiniteNumber(raw) ? raw : 0;
|
|
79
|
-
const fmt = formatNumber(base, integer, decimalLen);
|
|
80
|
-
return autoFixed ? clampValue(fmt, min, max) : fmt;
|
|
81
|
-
}, [autoFixed, decimalLen, integer, max, min, props.defaultValue]);
|
|
82
|
-
const [value, triggerChange] = useControllableValue({
|
|
83
|
-
...props,
|
|
84
|
-
defaultValue: defaultVal
|
|
85
|
-
}, {
|
|
86
|
-
defaultValue: defaultVal
|
|
87
|
-
});
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
valueRef.current = value ?? null;
|
|
90
|
-
}, [value]);
|
|
91
|
-
useImperativeHandle(ref, () => ({
|
|
92
|
-
focus: () => inputRef.current?.focus(),
|
|
93
|
-
blur: () => inputRef.current?.blur()
|
|
94
|
-
}));
|
|
95
|
-
const [isFocused, setIsFocused] = useState(false);
|
|
96
|
-
const [inputText, setInputTextState] = useState(() => numberToString(value, decimalLen));
|
|
97
|
-
const updateInputText = useCallback(text => {
|
|
98
|
-
inputValueRef.current = text;
|
|
99
|
-
setInputTextState(text);
|
|
100
|
-
}, []);
|
|
101
|
-
useEffect(() => {
|
|
102
|
-
if (!isFocused) {
|
|
103
|
-
updateInputText(numberToString(value, decimalLen));
|
|
104
|
-
}
|
|
105
|
-
}, [decimalLen, isFocused, updateInputText, value]);
|
|
106
|
-
const getCurrentNumber = useCallback(() => {
|
|
107
|
-
const current = valueRef.current;
|
|
108
|
-
if (isFiniteNumber(current)) return current;
|
|
109
|
-
return isFiniteNumber(min) ? min : 0;
|
|
110
|
-
}, [min]);
|
|
111
|
-
const isActionDisabled = useCallback(type => {
|
|
112
|
-
if (disabled) return true;
|
|
113
|
-
if (type === 'plus' && disablePlus) return true;
|
|
114
|
-
if (type === 'minus' && disableMinus) return true;
|
|
115
|
-
const current = getCurrentNumber();
|
|
116
|
-
if (type === 'plus' && isFiniteNumber(max) && current >= max) return true;
|
|
117
|
-
if (type === 'minus' && isFiniteNumber(min) && current <= min) return true;
|
|
118
|
-
return false;
|
|
119
|
-
}, [disableMinus, disablePlus, disabled, getCurrentNumber, max, min]);
|
|
120
|
-
const commitValue = useCallback(next => {
|
|
121
|
-
const prev = valueRef.current ?? null;
|
|
122
|
-
if (Object.is(prev, next)) return false;
|
|
123
|
-
valueRef.current = next;
|
|
124
|
-
triggerChange(next, {
|
|
125
|
-
name
|
|
126
|
-
});
|
|
127
|
-
return true;
|
|
128
|
-
}, [name, triggerChange]);
|
|
129
|
-
const normalizeNumber = useCallback(nextRaw => {
|
|
130
|
-
const formatted = formatNumber(nextRaw, integer, decimalLen);
|
|
131
|
-
return autoFixed ? clampValue(formatted, min, max) : formatted;
|
|
132
|
-
}, [autoFixed, decimalLen, integer, max, min]);
|
|
133
|
-
const processValueChange = useCallback((next, committed) => {
|
|
134
|
-
if (changingRef.current) return 'noop';
|
|
135
|
-
const commit = () => {
|
|
136
|
-
const didChange = commitValue(next);
|
|
137
|
-
if (!didChange) return 'noop';
|
|
138
|
-
updateInputText(numberToString(next, decimalLen));
|
|
139
|
-
committed?.(next);
|
|
140
|
-
return 'changed';
|
|
141
|
-
};
|
|
142
|
-
if (!beforeChange) return commit();
|
|
143
|
-
try {
|
|
144
|
-
const result = beforeChange(next);
|
|
145
|
-
if (isPromiseLike(result)) {
|
|
146
|
-
changingRef.current = true;
|
|
147
|
-
setIsChanging(true);
|
|
148
|
-
result.then(allowed => {
|
|
149
|
-
if (allowed === false) {
|
|
150
|
-
updateInputText(numberToString(valueRef.current, decimalLen));
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
;
|
|
154
|
-
commit();
|
|
155
|
-
}).catch(() => commit()).finally(() => {
|
|
156
|
-
changingRef.current = false;
|
|
157
|
-
setIsChanging(false);
|
|
158
|
-
});
|
|
159
|
-
return 'pending';
|
|
160
|
-
}
|
|
161
|
-
;
|
|
162
|
-
if (result === false) {
|
|
163
|
-
updateInputText(numberToString(valueRef.current, decimalLen));
|
|
164
|
-
return 'noop';
|
|
165
|
-
}
|
|
166
|
-
;
|
|
167
|
-
return commit();
|
|
168
|
-
} catch {
|
|
169
|
-
return commit();
|
|
170
|
-
}
|
|
171
|
-
}, [beforeChange, decimalLen, updateInputText, commitValue]);
|
|
172
|
-
const stepOnce = useCallback((type, event, options) => {
|
|
173
|
-
if (changingRef.current) return 'noop';
|
|
174
|
-
const emitOverlimit = options?.emitOverlimit ?? true;
|
|
175
|
-
const emitCallbacks = options?.emitButtonCallbacks ?? Boolean(event);
|
|
176
|
-
if (isActionDisabled(type)) {
|
|
177
|
-
if (emitOverlimit) onOverlimitRef.current?.(type);
|
|
178
|
-
return 'overlimit';
|
|
179
|
-
}
|
|
180
|
-
;
|
|
181
|
-
const current = getCurrentNumber();
|
|
182
|
-
const diff = type === 'plus' ? stepSize : -stepSize;
|
|
183
|
-
const next = normalizeNumber(addNumber(current, diff));
|
|
184
|
-
return processValueChange(next, committedValue => {
|
|
185
|
-
if (!emitCallbacks || !event) return;
|
|
186
|
-
if (type === 'plus') {
|
|
187
|
-
onPlusRef.current?.(event, committedValue);
|
|
188
|
-
} else {
|
|
189
|
-
onMinusRef.current?.(event, committedValue);
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
}, [normalizeNumber, getCurrentNumber, isActionDisabled, processValueChange, stepSize]);
|
|
193
|
-
const clearLongPress = useCallback(() => {
|
|
194
|
-
if (longPressRef.current.delay) {
|
|
195
|
-
clearTimeout(longPressRef.current.delay);
|
|
196
|
-
longPressRef.current.delay = undefined;
|
|
197
|
-
}
|
|
198
|
-
;
|
|
199
|
-
if (longPressRef.current.interval) {
|
|
200
|
-
clearInterval(longPressRef.current.interval);
|
|
201
|
-
longPressRef.current.interval = undefined;
|
|
202
|
-
}
|
|
203
|
-
}, []);
|
|
204
|
-
useEffect(() => clearLongPress(), [clearLongPress]);
|
|
205
|
-
useEffect(() => {
|
|
206
|
-
if (disabled || isChanging || !longPress) {
|
|
207
|
-
clearLongPress();
|
|
208
|
-
}
|
|
209
|
-
}, [isChanging, clearLongPress, disabled, longPress]);
|
|
210
|
-
const startLongPress = useCallback(type => {
|
|
211
|
-
if (!longPress) return;
|
|
212
|
-
if (changingRef.current) return;
|
|
213
|
-
if (isActionDisabled(type)) return;
|
|
214
|
-
clearLongPress();
|
|
215
|
-
longPressRef.current.hadLongPress = false;
|
|
216
|
-
longPressRef.current.delay = setTimeout(() => {
|
|
217
|
-
longPressRef.current.hadLongPress = true;
|
|
218
|
-
const first = stepOnce(type, undefined, {
|
|
219
|
-
emitOverlimit: true,
|
|
220
|
-
emitButtonCallbacks: false
|
|
221
|
-
});
|
|
222
|
-
if (first !== 'changed') {
|
|
223
|
-
clearLongPress();
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
;
|
|
227
|
-
longPressRef.current.interval = setInterval(() => {
|
|
228
|
-
const result = stepOnce(type, undefined, {
|
|
229
|
-
emitOverlimit: true,
|
|
230
|
-
emitButtonCallbacks: false
|
|
231
|
-
});
|
|
232
|
-
if (result !== 'changed') {
|
|
233
|
-
clearLongPress();
|
|
234
|
-
}
|
|
235
|
-
}, LONG_PRESS_INTERVAL);
|
|
236
|
-
}, LONG_PRESS_DELAY);
|
|
237
|
-
}, [clearLongPress, isActionDisabled, longPress, stepOnce]);
|
|
238
|
-
const handlePressOut = useCallback(() => clearLongPress(), [clearLongPress]);
|
|
239
|
-
const handleButtonPress = useCallback((type, event) => {
|
|
240
|
-
if (longPressRef.current.hadLongPress) {
|
|
241
|
-
longPressRef.current.hadLongPress = false;
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
;
|
|
245
|
-
longPressRef.current.hadLongPress = false;
|
|
246
|
-
stepOnce(type, event, {
|
|
247
|
-
emitOverlimit: true,
|
|
248
|
-
emitButtonCallbacks: true
|
|
249
|
-
});
|
|
250
|
-
}, [stepOnce]);
|
|
251
|
-
const currentForCompare = isFiniteNumber(value) ? value : 0;
|
|
252
|
-
const minNumber = isFiniteNumber(min) ? min : undefined;
|
|
253
|
-
const maxNumber = isFiniteNumber(max) ? max : undefined;
|
|
254
|
-
const isDisabledAll = disabled || isChanging;
|
|
255
|
-
const isMinusDisabled = isDisabledAll || disableMinus || minNumber != null && currentForCompare <= minNumber;
|
|
256
|
-
const isPlusDisabled = isDisabledAll || disablePlus || maxNumber != null && currentForCompare >= maxNumber;
|
|
257
|
-
const radius = tokens.radii.default;
|
|
258
|
-
const btnSizeStyle = useMemo(() => ({
|
|
259
|
-
width: rBtnSize,
|
|
260
|
-
height: rBtnSize
|
|
261
|
-
}), [rBtnSize]);
|
|
262
|
-
const inputSizeStyle = useMemo(() => ({
|
|
263
|
-
width: rInputW,
|
|
264
|
-
height: rBtnSize,
|
|
265
|
-
marginHorizontal: tokens.spacing.gap
|
|
266
|
-
}), [rBtnSize, rInputW, tokens.spacing.gap]);
|
|
267
|
-
const getButtonStyle = useCallback((type, state) => {
|
|
268
|
-
const isPlus = type === 'plus';
|
|
269
|
-
const isDisabled = isPlus ? isPlusDisabled : isMinusDisabled;
|
|
270
|
-
if (theme === 'round') {
|
|
271
|
-
const base = [S.btn, btnSizeStyle, {
|
|
272
|
-
borderRadius: rBtnSize / 2,
|
|
273
|
-
opacity: isDisabled ? tokens.opacity.roundDisabled : 1
|
|
274
|
-
}];
|
|
275
|
-
if (isPlus) {
|
|
276
|
-
return [...base, {
|
|
277
|
-
backgroundColor: tokens.colors.roundTheme,
|
|
278
|
-
...(state.pressed && !isDisabled && {
|
|
279
|
-
opacity: tokens.opacity.pressed
|
|
280
|
-
})
|
|
281
|
-
}, buttonStyle];
|
|
282
|
-
}
|
|
283
|
-
;
|
|
284
|
-
return [...base, {
|
|
285
|
-
backgroundColor: tokens.colors.roundThemeBackground,
|
|
286
|
-
...(state.pressed && !isDisabled && {
|
|
287
|
-
opacity: tokens.opacity.pressed
|
|
288
|
-
})
|
|
289
|
-
}, buttonStyle];
|
|
290
|
-
}
|
|
291
|
-
;
|
|
292
|
-
const isLeading = type === 'minus' !== (layoutDir === 'rtl');
|
|
293
|
-
const cornerStyle = isLeading ? {
|
|
294
|
-
borderTopLeftRadius: radius,
|
|
295
|
-
borderBottomLeftRadius: radius
|
|
296
|
-
} : {
|
|
297
|
-
borderTopRightRadius: radius,
|
|
298
|
-
borderBottomRightRadius: radius
|
|
299
|
-
};
|
|
300
|
-
const bgColor = isDisabled ? tokens.colors.buttonDisabledBackground : state.pressed ? tokens.colors.active : tokens.colors.background;
|
|
301
|
-
return [S.btn, btnSizeStyle, cornerStyle, {
|
|
302
|
-
backgroundColor: bgColor
|
|
303
|
-
}, buttonStyle];
|
|
304
|
-
}, [btnSizeStyle, buttonStyle, isMinusDisabled, isPlusDisabled, radius, rBtnSize, theme, layoutDir, tokens.colors.active, tokens.colors.background, tokens.colors.buttonDisabledBackground, tokens.colors.roundTheme, tokens.colors.roundThemeBackground, tokens.opacity.pressed, tokens.opacity.roundDisabled]);
|
|
305
|
-
const getButtonTextStyle = useCallback(type => {
|
|
306
|
-
const isPlus = type === 'plus';
|
|
307
|
-
const isDisabled = isPlus ? isPlusDisabled : isMinusDisabled;
|
|
308
|
-
if (theme === 'round') {
|
|
309
|
-
const color = isPlus ? tokens.colors.roundThemeText : tokens.colors.roundTheme;
|
|
310
|
-
return [S.btnTxt, {
|
|
311
|
-
color,
|
|
312
|
-
fontFamily: tokens.typography.fontFamily,
|
|
313
|
-
fontSize: tokens.typography.fontSize,
|
|
314
|
-
fontWeight: tokens.typography.fontWeight
|
|
315
|
-
}];
|
|
316
|
-
}
|
|
317
|
-
;
|
|
318
|
-
return [S.btnTxt, {
|
|
319
|
-
color: isDisabled ? tokens.colors.buttonDisabledIcon : tokens.colors.buttonIcon,
|
|
320
|
-
fontFamily: tokens.typography.fontFamily,
|
|
321
|
-
fontSize: tokens.typography.fontSize,
|
|
322
|
-
fontWeight: tokens.typography.fontWeight
|
|
323
|
-
}];
|
|
324
|
-
}, [isMinusDisabled, isPlusDisabled, theme, tokens.colors.buttonDisabledIcon, tokens.colors.buttonIcon, tokens.colors.roundTheme, tokens.colors.roundThemeText, tokens.typography.fontFamily, tokens.typography.fontSize, tokens.typography.fontWeight]);
|
|
325
|
-
const handleChangeText = useCallback(text => {
|
|
326
|
-
if (disableInput || disabled || changingRef.current) return;
|
|
327
|
-
updateInputText(text);
|
|
328
|
-
inputPropsRef.current?.onChangeText?.(text);
|
|
329
|
-
const trimmed = text.trim();
|
|
330
|
-
if (trimmed === '') {
|
|
331
|
-
processValueChange(allowEmpty ? null : defaultVal);
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
;
|
|
335
|
-
const num = Number.parseFloat(trimmed);
|
|
336
|
-
if (!Number.isFinite(num)) return;
|
|
337
|
-
processValueChange(normalizeNumber(num));
|
|
338
|
-
}, [allowEmpty, normalizeNumber, changingRef, disableInput, disabled, inputPropsRef, processValueChange, defaultVal, updateInputText]);
|
|
339
|
-
const handleFocus = useCallback(event => {
|
|
340
|
-
if (disableInput) {
|
|
341
|
-
inputRef.current?.blur();
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
;
|
|
345
|
-
setIsFocused(true);
|
|
346
|
-
onFocusRef.current?.(event);
|
|
347
|
-
inputPropsRef.current?.onFocus?.(event);
|
|
348
|
-
}, [disableInput]);
|
|
349
|
-
const handleBlur = useCallback(event => {
|
|
350
|
-
setIsFocused(false);
|
|
351
|
-
if (!changingRef.current) {
|
|
352
|
-
const trimmed = inputValueRef.current.trim();
|
|
353
|
-
if (trimmed === '') {
|
|
354
|
-
processValueChange(allowEmpty ? null : defaultVal);
|
|
355
|
-
} else {
|
|
356
|
-
const num = Number.parseFloat(trimmed);
|
|
357
|
-
if (Number.isFinite(num)) {
|
|
358
|
-
processValueChange(normalizeNumber(num));
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
;
|
|
363
|
-
onBlurRef.current?.(event);
|
|
364
|
-
inputPropsRef.current?.onBlur?.(event);
|
|
365
|
-
}, [allowEmpty, normalizeNumber, processValueChange, defaultVal]);
|
|
366
|
-
const handleInputPressIn = useCallback(event => {
|
|
367
|
-
onClickRef.current?.(event);
|
|
368
|
-
inputPropsRef.current?.onPressIn?.(event);
|
|
369
|
-
}, []);
|
|
370
|
-
const handleMinusPress = useCallback(event => handleButtonPress('minus', event), [handleButtonPress]);
|
|
371
|
-
const handlePlusPress = useCallback(event => handleButtonPress('plus', event), [handleButtonPress]);
|
|
372
|
-
const handleMinusPressIn = useCallback(() => startLongPress('minus'), [startLongPress]);
|
|
373
|
-
const handlePlusPressIn = useCallback(() => startLongPress('plus'), [startLongPress]);
|
|
374
|
-
const getMinusBtnStyle = useCallback(state => getButtonStyle('minus', state), [getButtonStyle]);
|
|
375
|
-
const getPlusBtnStyle = useCallback(state => getButtonStyle('plus', state), [getButtonStyle]);
|
|
376
|
-
const renderMinusBtn = useCallback(() => {
|
|
377
|
-
if (!showMinus) return null;
|
|
378
|
-
return /*#__PURE__*/React.createElement(Pressable, {
|
|
379
|
-
key: "minus",
|
|
380
|
-
testID: "stepper-minus",
|
|
381
|
-
accessibilityRole: "button",
|
|
382
|
-
accessibilityLabel: "minus",
|
|
383
|
-
accessibilityState: {
|
|
384
|
-
disabled: isMinusDisabled
|
|
385
|
-
},
|
|
386
|
-
onPress: handleMinusPress,
|
|
387
|
-
onPressIn: handleMinusPressIn,
|
|
388
|
-
onPressOut: handlePressOut,
|
|
389
|
-
style: getMinusBtnStyle
|
|
390
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
391
|
-
style: getButtonTextStyle('minus')
|
|
392
|
-
}, "-"), theme === 'round' && /*#__PURE__*/React.createElement(View, {
|
|
393
|
-
style: createHairlineView({
|
|
394
|
-
position: 'all',
|
|
395
|
-
color: tokens.colors.roundTheme,
|
|
396
|
-
borderRadius: rBtnSize / 2
|
|
397
|
-
})
|
|
398
|
-
}));
|
|
399
|
-
}, [getButtonTextStyle, getMinusBtnStyle, handleMinusPress, handleMinusPressIn, handlePressOut, isMinusDisabled, showMinus, theme, tokens.colors.roundTheme, rBtnSize]);
|
|
400
|
-
const renderPlusBtn = useCallback(() => {
|
|
401
|
-
if (!showPlus) return null;
|
|
402
|
-
return /*#__PURE__*/React.createElement(Pressable, {
|
|
403
|
-
key: "plus",
|
|
404
|
-
testID: "stepper-plus",
|
|
405
|
-
accessibilityRole: "button",
|
|
406
|
-
accessibilityLabel: "add",
|
|
407
|
-
accessibilityState: {
|
|
408
|
-
disabled: isPlusDisabled
|
|
409
|
-
},
|
|
410
|
-
onPress: handlePlusPress,
|
|
411
|
-
onPressIn: handlePlusPressIn,
|
|
412
|
-
onPressOut: handlePressOut,
|
|
413
|
-
style: getPlusBtnStyle
|
|
414
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
415
|
-
style: getButtonTextStyle('plus')
|
|
416
|
-
}, "+"));
|
|
417
|
-
}, [getButtonTextStyle, getPlusBtnStyle, handlePlusPress, handlePlusPressIn, handlePressOut, isPlusDisabled, showPlus]);
|
|
418
|
-
const inputNode = useMemo(() => {
|
|
419
|
-
if (!showInput) return null;
|
|
420
|
-
const editable = !isDisabledAll && !disableInput;
|
|
421
|
-
const isInputDisabled = isDisabledAll || disableInput;
|
|
422
|
-
const bgColor = theme === 'round' ? tokens.colors.transparent : isInputDisabled ? tokens.colors.inputDisabledBackground : tokens.colors.background;
|
|
423
|
-
const textColor = isInputDisabled ? tokens.colors.inputDisabledText : tokens.colors.inputText;
|
|
424
|
-
const keyboardType = integer ? 'number-pad' : 'decimal-pad';
|
|
425
|
-
return /*#__PURE__*/React.createElement(TextInput, _extends({
|
|
426
|
-
ref: inputRef
|
|
427
|
-
}, inputProps, {
|
|
428
|
-
style: [S.inp, inputSizeStyle, {
|
|
429
|
-
backgroundColor: bgColor,
|
|
430
|
-
color: textColor,
|
|
431
|
-
paddingHorizontal: tokens.spacing.none,
|
|
432
|
-
paddingVertical: tokens.spacing.none
|
|
433
|
-
}, inputStyle],
|
|
434
|
-
value: inputText,
|
|
435
|
-
placeholder: placeholder,
|
|
436
|
-
editable: editable,
|
|
437
|
-
keyboardType: keyboardType,
|
|
438
|
-
onChangeText: handleChangeText,
|
|
439
|
-
onFocus: handleFocus,
|
|
440
|
-
onBlur: handleBlur,
|
|
441
|
-
onPressIn: handleInputPressIn
|
|
442
|
-
}));
|
|
443
|
-
}, [isDisabledAll, disableInput, handleBlur, handleChangeText, handleFocus, handleInputPressIn, inputSizeStyle, inputProps, inputStyle, inputText, integer, placeholder, showInput, theme, tokens.colors.background, tokens.colors.inputDisabledBackground, tokens.colors.inputDisabledText, tokens.colors.inputText, tokens.colors.transparent, tokens.spacing.none]);
|
|
444
|
-
return /*#__PURE__*/React.createElement(View, _extends({}, restProps, {
|
|
445
|
-
style: [S.cnt, style]
|
|
446
|
-
}), renderMinusBtn(), inputNode, renderPlusBtn());
|
|
447
|
-
};
|
|
448
|
-
const S = StyleSheet.create({
|
|
449
|
-
cnt: {
|
|
450
|
-
flexDirection: 'row',
|
|
451
|
-
alignItems: 'center'
|
|
452
|
-
},
|
|
453
|
-
btn: {
|
|
454
|
-
justifyContent: 'center',
|
|
455
|
-
alignItems: 'center'
|
|
456
|
-
},
|
|
457
|
-
btnTxt: {},
|
|
458
|
-
inp: {
|
|
459
|
-
textAlign: 'center'
|
|
460
|
-
}
|
|
461
|
-
});
|
|
462
|
-
const StepperForwardRef = /*#__PURE__*/React.forwardRef(StepperImpl);
|
|
463
|
-
StepperForwardRef.displayName = 'Stepper';
|
|
464
|
-
export const Stepper = /*#__PURE__*/React.memo(StepperForwardRef);
|
|
465
|
-
export default Stepper;
|
|
1
|
+
function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Pressable,StyleSheet,Text,TextInput,View}from"react-native";import{useControllableValue}from"../../hooks";import{parseNumber,addNumber,clampValue,formatNumber,numberToString,parseDecimalLength,isFiniteNumber,isPromiseLike}from"../../utils";import{useDirection}from"../config-provider/useDirection";import{useStepperTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";const LONG_PRESS_DELAY=600,LONG_PRESS_INTERVAL=100,StepperImpl=(e,t)=>{const r=useStepperTokens(e.tokensOverride),n=useDirection(),{min:o,max:s,step:u=1,autoFixed:l=!0,beforeChange:a,integer:i=!1,decimalLength:c,disabled:d=!1,disablePlus:p=!1,disableMinus:m=!1,disableInput:b=!1,allowEmpty:f=!1,showPlus:g=r.defaults.showPlus,showMinus:h=r.defaults.showMinus,showInput:y=r.defaults.showInput,longPress:k=r.defaults.longPress,theme:C=r.defaults.theme,inputWidth:R,buttonSize:T,name:v,placeholder:x,onClick:P,onPlus:N,onMinus:F,onOverlimit:I,onFocus:w,onBlur:D,inputProps:L,inputStyle:E,buttonStyle:B,style:V,...O}=e,[M,z]=useState(!1),_=useRef(!1),W=useRef(N),H=useRef(F),j=useRef(I),A=useRef(w),G=useRef(D),Y=useRef(P),q=useRef(null),J=useRef(null),K=useRef(""),Q=useRef(L),U=useRef({hadLongPress:!1});W.current=N,H.current=F,j.current=I,A.current=w,G.current=D,Y.current=P,Q.current=L;const X=parseDecimalLength(c),Z=Number(u??1),$=isFiniteNumber(Z)&&Z>0?Z:1,ee=Math.max(0,parseNumber(T,r.defaults.buttonSize)),te=Math.max(0,parseNumber(R,r.defaults.inputWidth)),re=useMemo(()=>{const t=e.defaultValue;if(null===t)return null;const r=isFiniteNumber(t)?t:0,n=formatNumber(r,i,X);return l?clampValue(n,o,s):n},[l,X,i,s,o,e.defaultValue]),[ne,oe]=useControllableValue({...e,defaultValue:re},{defaultValue:re});useEffect(()=>{q.current=ne??null},[ne]),useImperativeHandle(t,()=>({focus:()=>J.current?.focus(),blur:()=>J.current?.blur()}));const[se,ue]=useState(!1),[le,ae]=useState(()=>numberToString(ne,X)),ie=useCallback(e=>{K.current=e,ae(e)},[]);useEffect(()=>{se||ie(numberToString(ne,X))},[X,se,ie,ne]);const ce=useCallback(()=>{const e=q.current;return isFiniteNumber(e)?e:isFiniteNumber(o)?o:0},[o]),de=useCallback(e=>{if(d)return!0;if("plus"===e&&p)return!0;if("minus"===e&&m)return!0;const t=ce();return!!("plus"===e&&isFiniteNumber(s)&&t>=s)||!!("minus"===e&&isFiniteNumber(o)&&t<=o)},[m,p,d,ce,s,o]),pe=useCallback(e=>{const t=q.current??null;return!Object.is(t,e)&&(q.current=e,oe(e,{name:v}),!0)},[v,oe]),me=useCallback(e=>{const t=formatNumber(e,i,X);return l?clampValue(t,o,s):t},[l,X,i,s,o]),be=useCallback((e,t)=>{if(_.current)return"noop";const r=()=>pe(e)?(ie(numberToString(e,X)),t?.(e),"changed"):"noop";if(!a)return r();try{const t=a(e);return isPromiseLike(t)?(_.current=!0,z(!0),t.then(e=>{!1!==e?r():ie(numberToString(q.current,X))}).catch(()=>r()).finally(()=>{_.current=!1,z(!1)}),"pending"):!1===t?(ie(numberToString(q.current,X)),"noop"):r()}catch{return r()}},[a,X,ie,pe]),fe=useCallback((e,t,r)=>{if(_.current)return"noop";const n=r?.emitOverlimit??!0,o=r?.emitButtonCallbacks??Boolean(t);if(de(e))return n&&j.current?.(e),"overlimit";const s=ce(),u=me(addNumber(s,"plus"===e?$:-$));return be(u,r=>{o&&t&&("plus"===e?W.current?.(t,r):H.current?.(t,r))})},[me,ce,de,be,$]),ge=useCallback(()=>{U.current.delay&&(clearTimeout(U.current.delay),U.current.delay=void 0),U.current.interval&&(clearInterval(U.current.interval),U.current.interval=void 0)},[]);useEffect(()=>ge(),[ge]),useEffect(()=>{(d||M||!k)&&ge()},[M,ge,d,k]);const he=useCallback(e=>{k&&(_.current||de(e)||(ge(),U.current.hadLongPress=!1,U.current.delay=setTimeout(()=>{U.current.hadLongPress=!0;"changed"===fe(e,void 0,{emitOverlimit:!0,emitButtonCallbacks:!1})?U.current.interval=setInterval(()=>{"changed"!==fe(e,void 0,{emitOverlimit:!0,emitButtonCallbacks:!1})&&ge()},100):ge()},600)))},[ge,de,k,fe]),ye=useCallback(()=>ge(),[ge]),ke=useCallback((e,t)=>{U.current.hadLongPress?U.current.hadLongPress=!1:(U.current.hadLongPress=!1,fe(e,t,{emitOverlimit:!0,emitButtonCallbacks:!0}))},[fe]),Se=isFiniteNumber(ne)?ne:0,Ce=isFiniteNumber(o)?o:void 0,Re=isFiniteNumber(s)?s:void 0,Te=d||M,ve=Te||m||null!=Ce&&Se<=Ce,xe=Te||p||null!=Re&&Se>=Re,Pe=r.radii.default,Ne=useMemo(()=>({width:ee,height:ee}),[ee]),Fe=useMemo(()=>({width:te,height:ee,marginHorizontal:r.spacing.gap}),[ee,te,r.spacing.gap]),Ie=useCallback((e,t)=>{const o="plus"===e,s=o?xe:ve;if("round"===C){const e=[S.btn,Ne,{borderRadius:ee/2,opacity:s?r.opacity.roundDisabled:1}];return o?[...e,{backgroundColor:r.colors.roundTheme,...t.pressed&&!s&&{opacity:r.opacity.pressed}},B]:[...e,{backgroundColor:r.colors.roundThemeBackground,...t.pressed&&!s&&{opacity:r.opacity.pressed}},B]}const u="minus"===e!=("rtl"===n)?{borderTopLeftRadius:Pe,borderBottomLeftRadius:Pe}:{borderTopRightRadius:Pe,borderBottomRightRadius:Pe},l=s?r.colors.buttonDisabledBackground:t.pressed?r.colors.active:r.colors.background;return[S.btn,Ne,u,{backgroundColor:l},B]},[Ne,B,ve,xe,Pe,ee,C,n,r.colors.active,r.colors.background,r.colors.buttonDisabledBackground,r.colors.roundTheme,r.colors.roundThemeBackground,r.opacity.pressed,r.opacity.roundDisabled]),we=useCallback(e=>{const t="plus"===e,n=t?xe:ve;if("round"===C){const e=t?r.colors.roundThemeText:r.colors.roundTheme;return[S.btnTxt,{color:e,fontFamily:r.typography.fontFamily,fontSize:r.typography.fontSize,fontWeight:r.typography.fontWeight}]}return[S.btnTxt,{color:n?r.colors.buttonDisabledIcon:r.colors.buttonIcon,fontFamily:r.typography.fontFamily,fontSize:r.typography.fontSize,fontWeight:r.typography.fontWeight}]},[ve,xe,C,r.colors.buttonDisabledIcon,r.colors.buttonIcon,r.colors.roundTheme,r.colors.roundThemeText,r.typography.fontFamily,r.typography.fontSize,r.typography.fontWeight]),De=useCallback(e=>{if(b||d||_.current)return;ie(e),Q.current?.onChangeText?.(e);const t=e.trim();if(""===t)return void be(f?null:re);const r=Number.parseFloat(t);Number.isFinite(r)&&be(me(r))},[f,me,_,b,d,Q,be,re,ie]),Le=useCallback(e=>{b?J.current?.blur():(ue(!0),A.current?.(e),Q.current?.onFocus?.(e))},[b]),Ee=useCallback(e=>{if(ue(!1),!_.current){const e=K.current.trim();if(""===e)be(f?null:re);else{const t=Number.parseFloat(e);Number.isFinite(t)&&be(me(t))}}G.current?.(e),Q.current?.onBlur?.(e)},[f,me,be,re]),Be=useCallback(e=>{Y.current?.(e),Q.current?.onPressIn?.(e)},[]),Ve=useCallback(e=>ke("minus",e),[ke]),Oe=useCallback(e=>ke("plus",e),[ke]),Me=useCallback(()=>he("minus"),[he]),ze=useCallback(()=>he("plus"),[he]),_e=useCallback(e=>Ie("minus",e),[Ie]),We=useCallback(e=>Ie("plus",e),[Ie]),He=useCallback(()=>h?React.createElement(Pressable,{key:"minus",testID:"stepper-minus",accessibilityRole:"button",accessibilityLabel:"minus",accessibilityState:{disabled:ve},onPress:Ve,onPressIn:Me,onPressOut:ye,style:_e},React.createElement(Text,{style:we("minus")},"-"),"round"===C&&React.createElement(View,{style:createHairlineView({position:"all",color:r.colors.roundTheme,borderRadius:ee/2})})):null,[we,_e,Ve,Me,ye,ve,h,C,r.colors.roundTheme,ee]),je=useCallback(()=>g?React.createElement(Pressable,{key:"plus",testID:"stepper-plus",accessibilityRole:"button",accessibilityLabel:"add",accessibilityState:{disabled:xe},onPress:Oe,onPressIn:ze,onPressOut:ye,style:We},React.createElement(Text,{style:we("plus")},"+")):null,[we,We,Oe,ze,ye,xe,g]),Ae=useMemo(()=>{if(!y)return null;const e=!Te&&!b,t=Te||b,n="round"===C?r.colors.transparent:t?r.colors.inputDisabledBackground:r.colors.background,o=t?r.colors.inputDisabledText:r.colors.inputText,s=i?"number-pad":"decimal-pad";return React.createElement(TextInput,_extends({ref:J},L,{style:[S.inp,Fe,{backgroundColor:n,color:o,paddingHorizontal:r.spacing.none,paddingVertical:r.spacing.none},E],value:le,placeholder:x,editable:e,keyboardType:s,onChangeText:De,onFocus:Le,onBlur:Ee,onPressIn:Be}))},[Te,b,Ee,De,Le,Be,Fe,L,E,le,i,x,y,C,r.colors.background,r.colors.inputDisabledBackground,r.colors.inputDisabledText,r.colors.inputText,r.colors.transparent,r.spacing.none]);return React.createElement(View,_extends({},O,{style:[S.cnt,V]}),He(),Ae,je())},S=StyleSheet.create({cnt:{flexDirection:"row",alignItems:"center"},btn:{justifyContent:"center",alignItems:"center"},btnTxt:{},inp:{textAlign:"center"}}),StepperForwardRef=React.forwardRef(StepperImpl);StepperForwardRef.displayName="Stepper";export const Stepper=React.memo(StepperForwardRef);export default Stepper;
|