react-native-platform-components 1.4.0 → 1.5.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/PlatformComponents.podspec +1 -1
- package/README.md +33 -31
- package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
- package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
- package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
- package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
- package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
- package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
- package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
- package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
- package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
- package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
- package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
- package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
- package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
- package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
- package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
- package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
- package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
- package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
- package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
- package/android/src/main/res/values/ids.xml +5 -0
- package/android/src/main/res/values/styles.xml +24 -0
- package/ios/PCButton.mm +122 -7
- package/ios/PCButtonGroup.mm +68 -1
- package/ios/PCButtonGroupView.swift +225 -6
- package/ios/PCButtonSupport.swift +181 -10
- package/ios/PCButtonView.swift +297 -14
- package/ios/PCConstants.swift +23 -2
- package/ios/PCContextMenu.mm +28 -110
- package/ios/PCContextMenu.swift +106 -167
- package/ios/PCDatePicker.mm +21 -9
- package/ios/PCDatePickerView.swift +94 -20
- package/ios/PCFloatingActionButton.h +10 -0
- package/ios/PCFloatingActionButton.mm +177 -0
- package/ios/PCFloatingActionButtonView.swift +426 -0
- package/ios/PCFloatingToolbar.mm +27 -0
- package/ios/PCFloatingToolbarView.swift +241 -0
- package/ios/PCHaptics.swift +91 -0
- package/ios/PCImageLoader.swift +76 -12
- package/ios/PCLiquidGlass.mm +36 -0
- package/ios/PCLiquidGlass.swift +221 -114
- package/ios/PCLiquidGlassContainer.h +10 -0
- package/ios/PCLiquidGlassContainer.mm +84 -0
- package/ios/PCLiquidGlassContainer.swift +69 -0
- package/ios/PCMenuItems.h +76 -0
- package/ios/PCMenuSupport.swift +350 -0
- package/ios/PCNavigationRail.h +10 -0
- package/ios/PCNavigationRail.mm +270 -0
- package/ios/PCNavigationRailView.swift +415 -0
- package/ios/PCSegmentedControl.mm +17 -2
- package/ios/PCSegmentedControl.swift +57 -7
- package/ios/PCSelectionMenu.mm +36 -8
- package/ios/PCSelectionMenu.swift +224 -48
- package/ios/PCTabBar.h +10 -0
- package/ios/PCTabBar.mm +285 -0
- package/ios/PCTabBarAccessory.h +10 -0
- package/ios/PCTabBarAccessory.mm +93 -0
- package/ios/PCTabBarAccessoryView.swift +96 -0
- package/ios/PCTabBarView.swift +671 -0
- package/ios/PCTextField.mm +159 -4
- package/ios/PCTextFieldView.swift +603 -57
- package/lib/commonjs/Button.js +73 -1
- package/lib/commonjs/Button.js.map +1 -1
- package/lib/commonjs/ButtonGroup.js +13 -3
- package/lib/commonjs/ButtonGroup.js.map +1 -1
- package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
- package/lib/commonjs/ButtonNativeComponent.ts +119 -3
- package/lib/commonjs/ContextMenu.js +9 -48
- package/lib/commonjs/ContextMenu.js.map +1 -1
- package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
- package/lib/commonjs/DatePicker.js +98 -2
- package/lib/commonjs/DatePicker.js.map +1 -1
- package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
- package/lib/commonjs/FloatingActionButton.js +60 -0
- package/lib/commonjs/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/commonjs/FloatingToolbar.js +9 -1
- package/lib/commonjs/FloatingToolbar.js.map +1 -1
- package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/commonjs/LiquidGlass.js +7 -1
- package/lib/commonjs/LiquidGlass.js.map +1 -1
- package/lib/commonjs/LiquidGlassContainer.js +32 -0
- package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
- package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
- package/lib/commonjs/NavigationRail.js +104 -0
- package/lib/commonjs/NavigationRail.js.map +1 -0
- package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
- package/lib/commonjs/PlatformComponentsProvider.js +18 -0
- package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/SegmentedControl.js +7 -0
- package/lib/commonjs/SegmentedControl.js.map +1 -1
- package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
- package/lib/commonjs/SelectionMenu.js +27 -3
- package/lib/commonjs/SelectionMenu.js.map +1 -1
- package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
- package/lib/commonjs/SplitButton.js +98 -0
- package/lib/commonjs/SplitButton.js.map +1 -0
- package/lib/commonjs/TabBar.js +203 -0
- package/lib/commonjs/TabBar.js.map +1 -0
- package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/commonjs/TabBarNativeComponent.ts +145 -0
- package/lib/commonjs/TextField.js +171 -8
- package/lib/commonjs/TextField.js.map +1 -1
- package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
- package/lib/commonjs/focusRegistry.js +2 -1
- package/lib/commonjs/focusRegistry.js.map +1 -1
- package/lib/commonjs/haptics.js +2 -0
- package/lib/commonjs/haptics.js.map +1 -0
- package/lib/commonjs/icons.js +15 -1
- package/lib/commonjs/icons.js.map +1 -1
- package/lib/commonjs/index.js +77 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +156 -92
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/jest.js +910 -0
- package/lib/commonjs/jest.js.map +1 -0
- package/lib/commonjs/menuItems.js +68 -0
- package/lib/commonjs/menuItems.js.map +1 -0
- package/lib/commonjs/selectionIdentifiers.js +18 -0
- package/lib/commonjs/selectionIdentifiers.js.map +1 -0
- package/lib/commonjs/submitBehavior.js +19 -0
- package/lib/commonjs/submitBehavior.js.map +1 -0
- package/lib/commonjs/tabItems.js +49 -0
- package/lib/commonjs/tabItems.js.map +1 -0
- package/lib/commonjs/web/Button.js +170 -0
- package/lib/commonjs/web/Button.js.map +1 -0
- package/lib/commonjs/web/ButtonGroup.js +119 -0
- package/lib/commonjs/web/ButtonGroup.js.map +1 -0
- package/lib/commonjs/web/DatePicker.js +168 -0
- package/lib/commonjs/web/DatePicker.js.map +1 -0
- package/lib/commonjs/web/DateRangePicker.js +137 -0
- package/lib/commonjs/web/DateRangePicker.js.map +1 -0
- package/lib/commonjs/web/Dialog.js +54 -0
- package/lib/commonjs/web/Dialog.js.map +1 -0
- package/lib/commonjs/web/FloatingActionButton.js +98 -0
- package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/web/Icon.js +34 -0
- package/lib/commonjs/web/Icon.js.map +1 -0
- package/lib/commonjs/web/NativeTheme.js +28 -0
- package/lib/commonjs/web/NativeTheme.js.map +1 -0
- package/lib/commonjs/web/NavigationRail.js +139 -0
- package/lib/commonjs/web/NavigationRail.js.map +1 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/web/SegmentedControl.js +117 -0
- package/lib/commonjs/web/SegmentedControl.js.map +1 -0
- package/lib/commonjs/web/SelectionMenu.js +142 -0
- package/lib/commonjs/web/SelectionMenu.js.map +1 -0
- package/lib/commonjs/web/SplitButton.js +35 -0
- package/lib/commonjs/web/SplitButton.js.map +1 -0
- package/lib/commonjs/web/TabBar.js +131 -0
- package/lib/commonjs/web/TabBar.js.map +1 -0
- package/lib/commonjs/web/TextField.js +322 -0
- package/lib/commonjs/web/TextField.js.map +1 -0
- package/lib/commonjs/web/components.js +36 -0
- package/lib/commonjs/web/components.js.map +1 -0
- package/lib/commonjs/web/containers.js +121 -0
- package/lib/commonjs/web/containers.js.map +1 -0
- package/lib/commonjs/web/dateInput.js +116 -0
- package/lib/commonjs/web/dateInput.js.map +1 -0
- package/lib/commonjs/web/shared.js +192 -0
- package/lib/commonjs/web/shared.js.map +1 -0
- package/lib/commonjs/webComponents.js +6 -0
- package/lib/commonjs/webComponents.js.map +1 -0
- package/lib/module/Button.js +74 -2
- package/lib/module/Button.js.map +1 -1
- package/lib/module/ButtonGroup.js +13 -3
- package/lib/module/ButtonGroup.js.map +1 -1
- package/lib/module/ButtonGroupNativeComponent.ts +74 -4
- package/lib/module/ButtonNativeComponent.ts +119 -3
- package/lib/module/ContextMenu.js +9 -48
- package/lib/module/ContextMenu.js.map +1 -1
- package/lib/module/ContextMenuNativeComponent.ts +47 -49
- package/lib/module/DatePicker.js +98 -4
- package/lib/module/DatePicker.js.map +1 -1
- package/lib/module/DatePickerNativeComponent.ts +19 -2
- package/lib/module/FloatingActionButton.js +53 -0
- package/lib/module/FloatingActionButton.js.map +1 -0
- package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/module/FloatingToolbar.js +9 -1
- package/lib/module/FloatingToolbar.js.map +1 -1
- package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/module/LiquidGlass.js +7 -1
- package/lib/module/LiquidGlass.js.map +1 -1
- package/lib/module/LiquidGlassContainer.js +26 -0
- package/lib/module/LiquidGlassContainer.js.map +1 -0
- package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/module/LiquidGlassNativeComponent.ts +8 -0
- package/lib/module/NavigationRail.js +99 -0
- package/lib/module/NavigationRail.js.map +1 -0
- package/lib/module/NavigationRailNativeComponent.ts +107 -0
- package/lib/module/PlatformComponentsProvider.js +13 -0
- package/lib/module/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/SegmentedControl.js +9 -1
- package/lib/module/SegmentedControl.js.map +1 -1
- package/lib/module/SegmentedControlNativeComponent.ts +11 -0
- package/lib/module/SelectionMenu.js +27 -3
- package/lib/module/SelectionMenu.js.map +1 -1
- package/lib/module/SelectionMenuNativeComponent.ts +26 -4
- package/lib/module/SplitButton.js +91 -0
- package/lib/module/SplitButton.js.map +1 -0
- package/lib/module/TabBar.js +196 -0
- package/lib/module/TabBar.js.map +1 -0
- package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/module/TabBarNativeComponent.ts +145 -0
- package/lib/module/TextField.js +172 -9
- package/lib/module/TextField.js.map +1 -1
- package/lib/module/TextFieldNativeComponent.ts +110 -4
- package/lib/module/focusRegistry.js +1 -0
- package/lib/module/focusRegistry.js.map +1 -1
- package/lib/module/haptics.js +2 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/icons.js +15 -1
- package/lib/module/icons.js.map +1 -1
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +12 -87
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/jest.js +840 -0
- package/lib/module/jest.js.map +1 -0
- package/lib/module/menuItems.js +65 -0
- package/lib/module/menuItems.js.map +1 -0
- package/lib/module/selectionIdentifiers.js +14 -0
- package/lib/module/selectionIdentifiers.js.map +1 -0
- package/lib/module/submitBehavior.js +15 -0
- package/lib/module/submitBehavior.js.map +1 -0
- package/lib/module/tabItems.js +45 -0
- package/lib/module/tabItems.js.map +1 -0
- package/lib/module/web/Button.js +164 -0
- package/lib/module/web/Button.js.map +1 -0
- package/lib/module/web/ButtonGroup.js +113 -0
- package/lib/module/web/ButtonGroup.js.map +1 -0
- package/lib/module/web/DatePicker.js +162 -0
- package/lib/module/web/DatePicker.js.map +1 -0
- package/lib/module/web/DateRangePicker.js +131 -0
- package/lib/module/web/DateRangePicker.js.map +1 -0
- package/lib/module/web/Dialog.js +48 -0
- package/lib/module/web/Dialog.js.map +1 -0
- package/lib/module/web/FloatingActionButton.js +94 -0
- package/lib/module/web/FloatingActionButton.js.map +1 -0
- package/lib/module/web/Icon.js +29 -0
- package/lib/module/web/Icon.js.map +1 -0
- package/lib/module/web/NativeTheme.js +23 -0
- package/lib/module/web/NativeTheme.js.map +1 -0
- package/lib/module/web/NavigationRail.js +133 -0
- package/lib/module/web/NavigationRail.js.map +1 -0
- package/lib/module/web/PlatformComponentsProvider.js +44 -0
- package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/web/SegmentedControl.js +112 -0
- package/lib/module/web/SegmentedControl.js.map +1 -0
- package/lib/module/web/SelectionMenu.js +137 -0
- package/lib/module/web/SelectionMenu.js.map +1 -0
- package/lib/module/web/SplitButton.js +30 -0
- package/lib/module/web/SplitButton.js.map +1 -0
- package/lib/module/web/TabBar.js +126 -0
- package/lib/module/web/TabBar.js.map +1 -0
- package/lib/module/web/TextField.js +316 -0
- package/lib/module/web/TextField.js.map +1 -0
- package/lib/module/web/components.js +33 -0
- package/lib/module/web/components.js.map +1 -0
- package/lib/module/web/containers.js +112 -0
- package/lib/module/web/containers.js.map +1 -0
- package/lib/module/web/dateInput.js +109 -0
- package/lib/module/web/dateInput.js.map +1 -0
- package/lib/module/web/shared.js +179 -0
- package/lib/module/web/shared.js.map +1 -0
- package/lib/module/webComponents.js +4 -0
- package/lib/module/webComponents.js.map +1 -0
- package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/Button.d.ts +111 -3
- package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
- package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
- package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
- package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/icons.d.ts +7 -1
- package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +7 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
- package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/jest.d.ts +139 -0
- package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
- package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
- package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/module/src/Button.d.ts +111 -3
- package/lib/typescript/module/src/Button.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePicker.d.ts +74 -1
- package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SplitButton.d.ts +83 -0
- package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBar.d.ts +144 -0
- package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TextField.d.ts +166 -8
- package/lib/typescript/module/src/TextField.d.ts.map +1 -1
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/haptics.d.ts +20 -0
- package/lib/typescript/module/src/haptics.d.ts.map +1 -0
- package/lib/typescript/module/src/icons.d.ts +7 -1
- package/lib/typescript/module/src/icons.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +7 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.web.d.ts +25 -254
- package/lib/typescript/module/src/index.web.d.ts.map +1 -1
- package/lib/typescript/module/src/jest.d.ts +139 -0
- package/lib/typescript/module/src/jest.d.ts.map +1 -0
- package/lib/typescript/module/src/menuItems.d.ts +100 -0
- package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/module/src/tabItems.d.ts +55 -0
- package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Button.d.ts +9 -0
- package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Icon.d.ts +12 -0
- package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TextField.d.ts +9 -0
- package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/web/components.d.ts +17 -0
- package/lib/typescript/module/src/web/components.d.ts.map +1 -0
- package/lib/typescript/module/src/web/containers.d.ts +24 -0
- package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/module/src/web/shared.d.ts +43 -0
- package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/module/src/webComponents.d.ts +43 -0
- package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
- package/package.json +32 -2
- package/plugin/build/index.d.ts +3 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/react-native.config.js +3 -0
- package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
- package/shared/PCFloatingActionButtonState-custom.h +61 -0
- package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
- package/shared/PCNavigationRailShadowNode-custom.h +42 -0
- package/shared/PCNavigationRailState-custom.h +62 -0
- package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
- package/shared/PCTabBarShadowNode-custom.cpp +54 -0
- package/shared/PCTabBarShadowNode-custom.h +54 -0
- package/shared/PCTabBarState-custom.h +62 -0
- package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
- package/src/Button.tsx +222 -7
- package/src/ButtonGroup.tsx +29 -11
- package/src/ButtonGroupNativeComponent.ts +74 -4
- package/src/ButtonNativeComponent.ts +119 -3
- package/src/ContextMenu.tsx +34 -81
- package/src/ContextMenuNativeComponent.ts +47 -49
- package/src/DatePicker.tsx +182 -4
- package/src/DatePickerNativeComponent.ts +19 -2
- package/src/FloatingActionButton.tsx +121 -0
- package/src/FloatingActionButtonNativeComponent.ts +58 -0
- package/src/FloatingToolbar.tsx +54 -3
- package/src/FloatingToolbarNativeComponent.ts +16 -0
- package/src/LiquidGlass.tsx +24 -1
- package/src/LiquidGlassContainer.tsx +42 -0
- package/src/LiquidGlassContainerNativeComponent.ts +17 -0
- package/src/LiquidGlassNativeComponent.ts +8 -0
- package/src/NavigationRail.tsx +203 -0
- package/src/NavigationRailNativeComponent.ts +107 -0
- package/src/PlatformComponentsProvider.tsx +15 -0
- package/src/SegmentedControl.tsx +31 -1
- package/src/SegmentedControlNativeComponent.ts +11 -0
- package/src/SelectionMenu.tsx +81 -6
- package/src/SelectionMenuNativeComponent.ts +26 -4
- package/src/SplitButton.tsx +198 -0
- package/src/TabBar.tsx +373 -0
- package/src/TabBarAccessoryNativeComponent.ts +19 -0
- package/src/TabBarNativeComponent.ts +145 -0
- package/src/TextField.tsx +428 -14
- package/src/TextFieldNativeComponent.ts +110 -4
- package/src/focusRegistry.ts +1 -0
- package/src/haptics.ts +31 -0
- package/src/icons.ts +28 -1
- package/src/index.tsx +7 -0
- package/src/index.web.tsx +51 -391
- package/src/jest.tsx +958 -0
- package/src/menuItems.ts +152 -0
- package/src/selectionIdentifiers.ts +17 -0
- package/src/submitBehavior.ts +16 -0
- package/src/tabItems.ts +113 -0
- package/src/web/Button.tsx +201 -0
- package/src/web/ButtonGroup.tsx +154 -0
- package/src/web/DatePicker.tsx +204 -0
- package/src/web/DateRangePicker.tsx +135 -0
- package/src/web/Dialog.tsx +54 -0
- package/src/web/FloatingActionButton.tsx +76 -0
- package/src/web/Icon.tsx +33 -0
- package/src/web/NativeTheme.ts +23 -0
- package/src/web/NavigationRail.tsx +148 -0
- package/src/web/PlatformComponentsProvider.tsx +48 -0
- package/src/web/SegmentedControl.tsx +127 -0
- package/src/web/SelectionMenu.tsx +149 -0
- package/src/web/SplitButton.tsx +32 -0
- package/src/web/TabBar.tsx +150 -0
- package/src/web/TextField.tsx +361 -0
- package/src/web/components.tsx +71 -0
- package/src/web/containers.tsx +130 -0
- package/src/web/dateInput.ts +137 -0
- package/src/web/shared.ts +176 -0
- package/src/webComponents.ts +45 -0
- package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
package/src/DatePicker.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// DatePicker.tsx
|
|
2
|
-
import React, { useCallback } from 'react';
|
|
2
|
+
import React, { useCallback, useEffect } from 'react';
|
|
3
3
|
import type { NativeSyntheticEvent, StyleProp, ViewStyle } from 'react-native';
|
|
4
|
-
import { StyleSheet } from 'react-native';
|
|
4
|
+
import { Platform, StyleSheet } from 'react-native';
|
|
5
5
|
|
|
6
6
|
import NativeDatePicker, {
|
|
7
7
|
type DateChangeEvent,
|
|
@@ -16,6 +16,13 @@ import NativeDatePicker, {
|
|
|
16
16
|
|
|
17
17
|
import type { AndroidMaterialMode, Visible } from './sharedTypes';
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Android: how the Material pickers take input. `'text'` opens the date
|
|
21
|
+
* picker on its text field and the time picker on its keyboard entry;
|
|
22
|
+
* `'calendar'` on the calendar and the clock dial. Default: `'calendar'`.
|
|
23
|
+
*/
|
|
24
|
+
export type AndroidDatePickerInputMode = 'calendar' | 'text';
|
|
25
|
+
|
|
19
26
|
export type DatePickerProps = {
|
|
20
27
|
style?: StyleProp<ViewStyle>;
|
|
21
28
|
|
|
@@ -28,16 +35,38 @@ export type DatePickerProps = {
|
|
|
28
35
|
|
|
29
36
|
locale?: string;
|
|
30
37
|
timeZoneName?: string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* What to pick. `'yearAndMonth'` is `UIDatePicker`'s month and year wheels
|
|
41
|
+
* (iOS 17.4+; the date wheels before); Android shows the date picker.
|
|
42
|
+
* `'countDownTimer'` is iOS only (Android shows a date picker).
|
|
43
|
+
*/
|
|
31
44
|
mode?: DatePickerMode;
|
|
32
45
|
presentation?: DatePickerPresentation;
|
|
33
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Forces the 24-hour (`true`) or 12-hour (`false`) clock in the time
|
|
49
|
+
* modes. Default: the device setting. iOS: the picker's locale with that
|
|
50
|
+
* hour cycle. Android: the time picker's clock format.
|
|
51
|
+
*/
|
|
52
|
+
is24Hour?: boolean;
|
|
53
|
+
|
|
34
54
|
/**
|
|
35
55
|
* Modal only. If presentation !== "modal", ignored.
|
|
36
56
|
* Wrapper ergonomics: boolean.
|
|
37
57
|
*/
|
|
38
58
|
visible?: boolean;
|
|
39
59
|
|
|
40
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Called when the selection changes. `confirmed` is true for deliberate
|
|
62
|
+
* selections (see docs). `durationSeconds` is the selected duration in
|
|
63
|
+
* `countDownTimer` mode (iOS, and web's time input); 0 in other modes.
|
|
64
|
+
*/
|
|
65
|
+
onConfirm?: (
|
|
66
|
+
dateTime: Date,
|
|
67
|
+
confirmed: boolean,
|
|
68
|
+
durationSeconds: number
|
|
69
|
+
) => void;
|
|
41
70
|
onClosed?: () => void;
|
|
42
71
|
|
|
43
72
|
/** Test identifier */
|
|
@@ -64,6 +93,8 @@ export type DatePickerProps = {
|
|
|
64
93
|
dialogTitle?: NativeAndroidProps['dialogTitle'];
|
|
65
94
|
positiveButtonTitle?: NativeAndroidProps['positiveButtonTitle'];
|
|
66
95
|
negativeButtonTitle?: NativeAndroidProps['negativeButtonTitle'];
|
|
96
|
+
/** Material pickers only (`material: 'm3'`). */
|
|
97
|
+
inputMode?: AndroidDatePickerInputMode;
|
|
67
98
|
};
|
|
68
99
|
};
|
|
69
100
|
|
|
@@ -97,6 +128,7 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
|
|
|
97
128
|
mode,
|
|
98
129
|
presentation = 'modal',
|
|
99
130
|
visible,
|
|
131
|
+
is24Hour,
|
|
100
132
|
onConfirm,
|
|
101
133
|
onClosed,
|
|
102
134
|
ios,
|
|
@@ -108,7 +140,8 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
|
|
|
108
140
|
|
|
109
141
|
const handleConfirm = useCallback(
|
|
110
142
|
(e: NativeSyntheticEvent<DateChangeEvent>) => {
|
|
111
|
-
|
|
143
|
+
const { timestampMs, confirmed, durationSeconds } = e.nativeEvent;
|
|
144
|
+
onConfirm?.(new Date(timestampMs), confirmed, durationSeconds ?? 0);
|
|
112
145
|
},
|
|
113
146
|
[onConfirm]
|
|
114
147
|
);
|
|
@@ -123,6 +156,7 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
|
|
|
123
156
|
mode,
|
|
124
157
|
locale,
|
|
125
158
|
timeZoneName,
|
|
159
|
+
hourFormat: hourFormat(is24Hour),
|
|
126
160
|
|
|
127
161
|
presentation,
|
|
128
162
|
visible: normalizeVisible(presentation, visible),
|
|
@@ -151,6 +185,7 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
|
|
|
151
185
|
dialogTitle: android.dialogTitle,
|
|
152
186
|
positiveButtonTitle: android.positiveButtonTitle,
|
|
153
187
|
negativeButtonTitle: android.negativeButtonTitle,
|
|
188
|
+
inputMode: android.inputMode,
|
|
154
189
|
}
|
|
155
190
|
: undefined,
|
|
156
191
|
};
|
|
@@ -158,6 +193,149 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
|
|
|
158
193
|
return <NativeDatePicker testID={testID} {...nativeProps} />;
|
|
159
194
|
}
|
|
160
195
|
|
|
196
|
+
function hourFormat(is24Hour: boolean | undefined): string {
|
|
197
|
+
if (is24Hour === undefined) return '';
|
|
198
|
+
return is24Hour ? '24' : '12';
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** A range of days, as `DateRangePicker` reports it. */
|
|
202
|
+
export type DateRange = { startDate: Date; endDate: Date };
|
|
203
|
+
|
|
204
|
+
export type DateRangePickerProps = {
|
|
205
|
+
style?: StyleProp<ViewStyle>;
|
|
206
|
+
|
|
207
|
+
/** First day of the range the picker opens with; `null` for none. */
|
|
208
|
+
startDate?: Date | null;
|
|
209
|
+
|
|
210
|
+
/** Last day of the range the picker opens with; `null` for none. */
|
|
211
|
+
endDate?: Date | null;
|
|
212
|
+
|
|
213
|
+
/** Optional bounds. Use `null` for "unbounded". */
|
|
214
|
+
minDate?: Date | null;
|
|
215
|
+
maxDate?: Date | null;
|
|
216
|
+
|
|
217
|
+
/** Locale of the text-input date format. */
|
|
218
|
+
locale?: string;
|
|
219
|
+
timeZoneName?: string;
|
|
220
|
+
|
|
221
|
+
/** Shows the picker dialog. */
|
|
222
|
+
visible: boolean;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Called with the chosen range when the user confirms it. Both dates are
|
|
226
|
+
* the start (midnight) of their day in `timeZoneName`, or the device time
|
|
227
|
+
* zone; `endDate` is the last day of the range, inclusive.
|
|
228
|
+
*/
|
|
229
|
+
onConfirm?: (range: DateRange) => void;
|
|
230
|
+
|
|
231
|
+
/** Called when the dialog closes, confirmed or not. */
|
|
232
|
+
onClosed?: () => void;
|
|
233
|
+
|
|
234
|
+
/** Test identifier */
|
|
235
|
+
testID?: string;
|
|
236
|
+
|
|
237
|
+
android?: {
|
|
238
|
+
firstDayOfWeek?: NativeAndroidProps['firstDayOfWeek'];
|
|
239
|
+
/** `'text'` opens on the start and end date fields. */
|
|
240
|
+
inputMode?: AndroidDatePickerInputMode;
|
|
241
|
+
dialogTitle?: NativeAndroidProps['dialogTitle'];
|
|
242
|
+
positiveButtonTitle?: NativeAndroidProps['positiveButtonTitle'];
|
|
243
|
+
negativeButtonTitle?: NativeAndroidProps['negativeButtonTitle'];
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Whether `DateRangePicker` shows anything on this platform. iOS has no
|
|
249
|
+
* native date range picker; offer two `DatePicker`s there instead.
|
|
250
|
+
*/
|
|
251
|
+
export const isDateRangePickerSupported: boolean = rangePickerSupported();
|
|
252
|
+
|
|
253
|
+
function rangePickerSupported(): boolean {
|
|
254
|
+
return Platform.OS !== 'ios';
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* A date range picker: Material's `MaterialDatePicker.dateRangePicker()` on
|
|
259
|
+
* Android, a modal dialog. iOS has no native range picker, so it renders
|
|
260
|
+
* nothing there and warns in development (see `isDateRangePickerSupported`).
|
|
261
|
+
*/
|
|
262
|
+
export function DateRangePicker(
|
|
263
|
+
props: DateRangePickerProps
|
|
264
|
+
): React.ReactElement | null {
|
|
265
|
+
const {
|
|
266
|
+
style,
|
|
267
|
+
startDate,
|
|
268
|
+
endDate,
|
|
269
|
+
minDate,
|
|
270
|
+
maxDate,
|
|
271
|
+
locale,
|
|
272
|
+
timeZoneName,
|
|
273
|
+
visible,
|
|
274
|
+
onConfirm,
|
|
275
|
+
onClosed,
|
|
276
|
+
android,
|
|
277
|
+
testID,
|
|
278
|
+
} = props;
|
|
279
|
+
|
|
280
|
+
const supported = rangePickerSupported();
|
|
281
|
+
useEffect(() => {
|
|
282
|
+
if (__DEV__ && visible && !supported) {
|
|
283
|
+
console.warn(
|
|
284
|
+
'DateRangePicker: iOS has no native date range picker, so nothing is ' +
|
|
285
|
+
'shown. Check isDateRangePickerSupported and offer two DatePickers ' +
|
|
286
|
+
'on iOS.'
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
}, [visible, supported]);
|
|
290
|
+
|
|
291
|
+
const handleConfirm = useCallback(
|
|
292
|
+
(e: NativeSyntheticEvent<DateChangeEvent>) => {
|
|
293
|
+
const { timestampMs, endTimestampMs } = e.nativeEvent;
|
|
294
|
+
onConfirm?.({
|
|
295
|
+
startDate: new Date(timestampMs),
|
|
296
|
+
endDate: new Date(endTimestampMs),
|
|
297
|
+
});
|
|
298
|
+
},
|
|
299
|
+
[onConfirm]
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
const handleClosed = useCallback(() => {
|
|
303
|
+
onClosed?.();
|
|
304
|
+
}, [onClosed]);
|
|
305
|
+
|
|
306
|
+
if (!supported) return null;
|
|
307
|
+
|
|
308
|
+
return (
|
|
309
|
+
<NativeDatePicker
|
|
310
|
+
testID={testID}
|
|
311
|
+
style={[styles.picker, style]}
|
|
312
|
+
mode="dateRange"
|
|
313
|
+
presentation="modal"
|
|
314
|
+
visible={visible ? 'open' : 'closed'}
|
|
315
|
+
locale={locale}
|
|
316
|
+
timeZoneName={timeZoneName}
|
|
317
|
+
dateMs={dateToMsOrSentinel(startDate)}
|
|
318
|
+
endDateMs={dateToMsOrSentinel(endDate)}
|
|
319
|
+
minDateMs={dateToMsOrSentinel(minDate)}
|
|
320
|
+
maxDateMs={dateToMsOrSentinel(maxDate)}
|
|
321
|
+
onConfirm={onConfirm ? handleConfirm : undefined}
|
|
322
|
+
onClosed={onClosed ? handleClosed : undefined}
|
|
323
|
+
android={
|
|
324
|
+
android
|
|
325
|
+
? {
|
|
326
|
+
firstDayOfWeek: android.firstDayOfWeek,
|
|
327
|
+
material: 'm3',
|
|
328
|
+
dialogTitle: android.dialogTitle,
|
|
329
|
+
positiveButtonTitle: android.positiveButtonTitle,
|
|
330
|
+
negativeButtonTitle: android.negativeButtonTitle,
|
|
331
|
+
inputMode: android.inputMode,
|
|
332
|
+
}
|
|
333
|
+
: undefined
|
|
334
|
+
}
|
|
335
|
+
/>
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
|
|
161
339
|
const styles = StyleSheet.create({
|
|
162
340
|
picker: {},
|
|
163
341
|
});
|
|
@@ -13,9 +13,20 @@ export type TimestampMs = Double;
|
|
|
13
13
|
export type DateChangeEvent = {
|
|
14
14
|
timestampMs: Double;
|
|
15
15
|
confirmed: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* iOS `countDownTimer` mode: the selected duration in seconds. 0 in every
|
|
18
|
+
* other mode and on Android (which has no countdown picker).
|
|
19
|
+
*/
|
|
20
|
+
durationSeconds: Double;
|
|
21
|
+
/**
|
|
22
|
+
* `dateRange` mode (Android): the last day of the range, with
|
|
23
|
+
* `timestampMs` the first. 0 in every other mode.
|
|
24
|
+
*/
|
|
25
|
+
endTimestampMs: Double;
|
|
16
26
|
};
|
|
17
27
|
|
|
18
|
-
export type DatePickerMode =
|
|
28
|
+
export type DatePickerMode =
|
|
29
|
+
'date' | 'time' | 'dateAndTime' | 'countDownTimer' | 'yearAndMonth';
|
|
19
30
|
export type DatePickerPresentation = 'modal' | 'embedded';
|
|
20
31
|
|
|
21
32
|
export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
|
|
@@ -36,6 +47,7 @@ export type AndroidProps = {
|
|
|
36
47
|
dialogTitle?: string;
|
|
37
48
|
positiveButtonTitle?: string;
|
|
38
49
|
negativeButtonTitle?: string;
|
|
50
|
+
inputMode?: string; // '' | 'calendar' | 'text'
|
|
39
51
|
};
|
|
40
52
|
|
|
41
53
|
export type WebProps = Readonly<{}>;
|
|
@@ -48,15 +60,20 @@ export type MacOSProps = Readonly<{}>;
|
|
|
48
60
|
* (Allows negative timestamps for pre-1970 dates.)
|
|
49
61
|
*/
|
|
50
62
|
export type CommonProps = {
|
|
51
|
-
mode?: string; // DatePickerMode
|
|
63
|
+
mode?: string; // DatePickerMode, or 'dateRange' for DateRangePicker
|
|
52
64
|
|
|
53
65
|
dateMs?: WithDefault<TimestampMs, -9007199254740991>;
|
|
66
|
+
/** `dateRange` mode: the last day of the range (`dateMs` is the first). */
|
|
67
|
+
endDateMs?: WithDefault<TimestampMs, -9007199254740991>;
|
|
54
68
|
minDateMs?: WithDefault<TimestampMs, -9007199254740991>;
|
|
55
69
|
maxDateMs?: WithDefault<TimestampMs, -9007199254740991>;
|
|
56
70
|
|
|
57
71
|
locale?: string;
|
|
58
72
|
timeZoneName?: string;
|
|
59
73
|
|
|
74
|
+
/** '' (device setting) | '12' | '24' */
|
|
75
|
+
hourFormat?: string;
|
|
76
|
+
|
|
60
77
|
/**
|
|
61
78
|
* Only used when presentation === "modal".
|
|
62
79
|
* Defaults should be applied in JS wrapper (recommended).
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// FloatingActionButton.tsx
|
|
2
|
+
import React, { useCallback, useMemo } from 'react';
|
|
3
|
+
import type { ColorValue, ViewProps } from 'react-native';
|
|
4
|
+
|
|
5
|
+
import NativeFloatingActionButton from './FloatingActionButtonNativeComponent';
|
|
6
|
+
import type { Haptics } from './haptics';
|
|
7
|
+
import { resolveIcon, type PlatformIcon } from './icons';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Button size.
|
|
11
|
+
*
|
|
12
|
+
* | Size | Android FAB | Android extended FAB | iOS |
|
|
13
|
+
* | --------- | ------------------------------- | -------------------- | ------------ |
|
|
14
|
+
* | `small` | 40dp small FAB (Material 3) | 56dp small extended | 44pt circle |
|
|
15
|
+
* | `regular` | 56dp FAB | 56dp small extended | 56pt circle |
|
|
16
|
+
* | `medium` | 80dp medium FAB (M3 Expressive) | 80dp medium extended | 80pt circle |
|
|
17
|
+
* | `large` | 96dp large FAB | 96dp large extended | 96pt circle |
|
|
18
|
+
*
|
|
19
|
+
* An extended iOS button is a capsule of the same height.
|
|
20
|
+
*/
|
|
21
|
+
export type FloatingActionButtonSize = 'small' | 'regular' | 'medium' | 'large';
|
|
22
|
+
|
|
23
|
+
export interface FloatingActionButtonProps extends ViewProps {
|
|
24
|
+
/** The icon. See {@link PlatformIcon}. */
|
|
25
|
+
icon: PlatformIcon;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Label shown next to the icon: the extended FAB. Omit for an icon-only
|
|
29
|
+
* button, and give it an `accessibilityLabel`.
|
|
30
|
+
*/
|
|
31
|
+
label?: string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Whether a button with a `label` shows it. Default: `true`. Changing it
|
|
35
|
+
* animates: Android's `extend()` / `shrink()`, a capsule-to-circle
|
|
36
|
+
* animation on iOS. Ignored without a `label`.
|
|
37
|
+
*/
|
|
38
|
+
extended?: boolean;
|
|
39
|
+
|
|
40
|
+
/** Size. Default: `'regular'`. See {@link FloatingActionButtonSize}. */
|
|
41
|
+
size?: FloatingActionButtonSize;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Container color. Android: `backgroundTint` (default: the Material
|
|
45
|
+
* primary container). iOS: `baseBackgroundColor`, the tint of the
|
|
46
|
+
* prominent glass (default: the tint color).
|
|
47
|
+
*/
|
|
48
|
+
color?: ColorValue;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Icon and label color. Android: the icon tint and text color. iOS:
|
|
52
|
+
* `baseForegroundColor`.
|
|
53
|
+
*/
|
|
54
|
+
tintColor?: ColorValue;
|
|
55
|
+
|
|
56
|
+
/** Whether the button is disabled. */
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
|
|
59
|
+
/** Screen-reader label. Defaults to `label`. */
|
|
60
|
+
accessibilityLabel?: string;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Haptic played when the button is pressed. Default: none, like the
|
|
64
|
+
* native buttons. See {@link Haptics}.
|
|
65
|
+
*/
|
|
66
|
+
haptics?: Haptics;
|
|
67
|
+
|
|
68
|
+
/** Called when the button is pressed. */
|
|
69
|
+
onPress?: () => void;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The `nativeID` of the ScrollView (or FlatList) whose scrolling shrinks
|
|
73
|
+
* and extends the button: an extended button shrinks to its icon while
|
|
74
|
+
* the content scrolls down and extends again scrolling up or back at the
|
|
75
|
+
* top. Needs a `label`; `extended={false}` keeps it shrunk.
|
|
76
|
+
*/
|
|
77
|
+
scrollViewNativeID?: string;
|
|
78
|
+
|
|
79
|
+
/** Test identifier */
|
|
80
|
+
testID?: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function FloatingActionButton(
|
|
84
|
+
props: FloatingActionButtonProps
|
|
85
|
+
): React.ReactElement {
|
|
86
|
+
const {
|
|
87
|
+
icon,
|
|
88
|
+
label,
|
|
89
|
+
extended,
|
|
90
|
+
size,
|
|
91
|
+
color,
|
|
92
|
+
tintColor,
|
|
93
|
+
disabled,
|
|
94
|
+
accessibilityLabel,
|
|
95
|
+
haptics,
|
|
96
|
+
onPress,
|
|
97
|
+
scrollViewNativeID,
|
|
98
|
+
...viewProps
|
|
99
|
+
} = props;
|
|
100
|
+
|
|
101
|
+
const nativeIcon = useMemo(() => resolveIcon(icon), [icon]);
|
|
102
|
+
|
|
103
|
+
const handlePress = useCallback(() => onPress?.(), [onPress]);
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<NativeFloatingActionButton
|
|
107
|
+
icon={nativeIcon}
|
|
108
|
+
label={label ?? ''}
|
|
109
|
+
size={size ?? 'regular'}
|
|
110
|
+
extended={extended === false ? 'false' : 'true'}
|
|
111
|
+
color={color}
|
|
112
|
+
foregroundColor={tintColor}
|
|
113
|
+
interactivity={disabled ? 'disabled' : 'enabled'}
|
|
114
|
+
spokenLabel={accessibilityLabel ?? ''}
|
|
115
|
+
scrollViewNativeID={scrollViewNativeID ?? ''}
|
|
116
|
+
haptics={haptics ?? ''}
|
|
117
|
+
onFabPress={onPress ? handlePress : undefined}
|
|
118
|
+
{...viewProps}
|
|
119
|
+
/>
|
|
120
|
+
);
|
|
121
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// FloatingActionButtonNativeComponent.ts
|
|
2
|
+
import type { ColorValue, HostComponent, ViewProps } from 'react-native';
|
|
3
|
+
import { codegenNativeComponent } from 'react-native';
|
|
4
|
+
import type { BubblingEventHandler, Double } from './codegenTypes';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Icon fields, pre-resolved on the JS side (see icons.ts).
|
|
8
|
+
*/
|
|
9
|
+
export type FloatingActionButtonIconProps = Readonly<{
|
|
10
|
+
iconType: string; // '' | 'sfSymbol' | 'drawable' | 'image'
|
|
11
|
+
iconName: string; // SF Symbol (iOS) or drawable resource name (Android)
|
|
12
|
+
iconRequest: string;
|
|
13
|
+
iconUri: string; // Resolved image URI when iconType === 'image'
|
|
14
|
+
iconScale: Double; // Resolved image scale when iconType === 'image'
|
|
15
|
+
iconTinted: string; // 'true' | 'false' — draw the image as a tinted template
|
|
16
|
+
}>;
|
|
17
|
+
|
|
18
|
+
export interface FloatingActionButtonNativeProps extends ViewProps {
|
|
19
|
+
/** The icon. */
|
|
20
|
+
icon?: FloatingActionButtonIconProps;
|
|
21
|
+
|
|
22
|
+
/** Label of the extended button; empty for an icon-only button. */
|
|
23
|
+
label?: string;
|
|
24
|
+
|
|
25
|
+
/** 'small' | 'regular' | 'medium' | 'large' */
|
|
26
|
+
size?: string;
|
|
27
|
+
|
|
28
|
+
/** 'true' | 'false': a button with a label shows it. */
|
|
29
|
+
extended?: string;
|
|
30
|
+
|
|
31
|
+
/** Container color. */
|
|
32
|
+
color?: ColorValue;
|
|
33
|
+
|
|
34
|
+
/** Icon and label color. */
|
|
35
|
+
foregroundColor?: ColorValue;
|
|
36
|
+
|
|
37
|
+
/** 'enabled' | 'disabled' */
|
|
38
|
+
interactivity?: string;
|
|
39
|
+
|
|
40
|
+
/** Screen-reader label, on the native button; empty = the label. */
|
|
41
|
+
spokenLabel?: string;
|
|
42
|
+
|
|
43
|
+
/** nativeID of the ScrollView whose scrolling shrinks and extends the button. */
|
|
44
|
+
scrollViewNativeID?: string;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Haptic played when the button is pressed: '' (none added) | 'none' | 'selection' |
|
|
48
|
+
* 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error'
|
|
49
|
+
*/
|
|
50
|
+
haptics?: string;
|
|
51
|
+
|
|
52
|
+
/** Fired when the button is pressed. */
|
|
53
|
+
onFabPress?: BubblingEventHandler<Readonly<{}>>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default codegenNativeComponent<FloatingActionButtonNativeProps>(
|
|
57
|
+
'PCFloatingActionButton'
|
|
58
|
+
) as HostComponent<FloatingActionButtonNativeProps>;
|
package/src/FloatingToolbar.tsx
CHANGED
|
@@ -17,6 +17,10 @@ export type FloatingToolbarIOSEffect = 'regular' | 'clear';
|
|
|
17
17
|
/** Material 3 color variant of the toolbar on Android. */
|
|
18
18
|
export type FloatingToolbarAndroidVariant = 'standard' | 'vibrant';
|
|
19
19
|
|
|
20
|
+
/** Scroll edge effect under the toolbar on iOS 26. */
|
|
21
|
+
export type FloatingToolbarScrollEdgeEffect =
|
|
22
|
+
'automatic' | 'soft' | 'hard' | 'hidden';
|
|
23
|
+
|
|
20
24
|
export interface FloatingToolbarProps extends ViewProps {
|
|
21
25
|
/**
|
|
22
26
|
* Layout direction of the children. Default: `'horizontal'`.
|
|
@@ -31,6 +35,23 @@ export interface FloatingToolbarProps extends ViewProps {
|
|
|
31
35
|
*/
|
|
32
36
|
color?: ColorValue;
|
|
33
37
|
|
|
38
|
+
/**
|
|
39
|
+
* The `nativeID` of the ScrollView (or FlatList) the toolbar floats over.
|
|
40
|
+
* The toolbar works out which edge of it it sits on (top or bottom for a
|
|
41
|
+
* horizontal toolbar, left or right for a vertical one). Needed by
|
|
42
|
+
* `hideOnScroll` and `ios.scrollEdgeEffect`; on iOS 26 it also gives that
|
|
43
|
+
* edge the scroll edge effect, shaped around the toolbar.
|
|
44
|
+
*/
|
|
45
|
+
scrollViewNativeID?: string;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Slides the toolbar past its edge of the linked ScrollView while the
|
|
49
|
+
* content scrolls down, and back as it scrolls up or reaches the top (the
|
|
50
|
+
* motion of Material's `HideViewOnScrollBehavior`, on both platforms).
|
|
51
|
+
* Needs `scrollViewNativeID`. Default: `false`.
|
|
52
|
+
*/
|
|
53
|
+
hideOnScroll?: boolean;
|
|
54
|
+
|
|
34
55
|
/**
|
|
35
56
|
* iOS-specific configuration
|
|
36
57
|
*/
|
|
@@ -40,6 +61,21 @@ export interface FloatingToolbarProps extends ViewProps {
|
|
|
40
61
|
* Default: `'regular'`.
|
|
41
62
|
*/
|
|
42
63
|
effect?: FloatingToolbarIOSEffect;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* iOS 26: the glass scales and shimmers under a touch
|
|
67
|
+
* (`UIGlassEffect.isInteractive`). Default: `false`.
|
|
68
|
+
*/
|
|
69
|
+
interactive?: boolean;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* iOS 26: the style of the linked ScrollView's edge effect under the
|
|
73
|
+
* toolbar (`UIScrollEdgeEffect`): `'soft'` fades the content out,
|
|
74
|
+
* `'hard'` cuts it off with a dividing line, `'hidden'` turns it off.
|
|
75
|
+
* The ScrollView gets its own values back when the toolbar unlinks.
|
|
76
|
+
* Default: the ScrollView's own (`'automatic'` unless changed).
|
|
77
|
+
*/
|
|
78
|
+
scrollEdgeEffect?: FloatingToolbarScrollEdgeEffect;
|
|
43
79
|
};
|
|
44
80
|
|
|
45
81
|
/**
|
|
@@ -63,12 +99,25 @@ export interface FloatingToolbarProps extends ViewProps {
|
|
|
63
99
|
export function FloatingToolbar(
|
|
64
100
|
props: FloatingToolbarProps
|
|
65
101
|
): React.ReactElement {
|
|
66
|
-
const {
|
|
67
|
-
|
|
102
|
+
const {
|
|
103
|
+
style,
|
|
104
|
+
orientation,
|
|
105
|
+
color,
|
|
106
|
+
scrollViewNativeID,
|
|
107
|
+
hideOnScroll,
|
|
108
|
+
ios,
|
|
109
|
+
android,
|
|
110
|
+
children,
|
|
111
|
+
...viewProps
|
|
112
|
+
} = props;
|
|
68
113
|
|
|
69
114
|
const nativeIos = useMemo(() => {
|
|
70
115
|
if (Platform.OS !== 'ios' || !ios) return undefined;
|
|
71
|
-
return {
|
|
116
|
+
return {
|
|
117
|
+
effect: ios.effect ?? 'regular',
|
|
118
|
+
interactive: ios.interactive ?? false,
|
|
119
|
+
scrollEdgeEffect: ios.scrollEdgeEffect ?? '',
|
|
120
|
+
};
|
|
72
121
|
}, [ios]);
|
|
73
122
|
|
|
74
123
|
const nativeAndroid = useMemo(() => {
|
|
@@ -89,6 +138,8 @@ export function FloatingToolbar(
|
|
|
89
138
|
<NativeFloatingToolbar
|
|
90
139
|
style={mergedStyle}
|
|
91
140
|
color={color}
|
|
141
|
+
scrollViewNativeID={scrollViewNativeID ?? ''}
|
|
142
|
+
hideOnScroll={hideOnScroll ?? false}
|
|
92
143
|
ios={nativeIos}
|
|
93
144
|
android={nativeAndroid}
|
|
94
145
|
{...viewProps}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// FloatingToolbarNativeComponent.ts
|
|
2
2
|
import type { ColorValue, HostComponent, ViewProps } from 'react-native';
|
|
3
3
|
import { codegenNativeComponent } from 'react-native';
|
|
4
|
+
import type { WithDefault } from './codegenTypes';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* iOS-specific configuration.
|
|
@@ -8,6 +9,15 @@ import { codegenNativeComponent } from 'react-native';
|
|
|
8
9
|
export type FloatingToolbarIOSProps = Readonly<{
|
|
9
10
|
/** Glass effect style on iOS 26: 'regular' | 'clear' */
|
|
10
11
|
effect?: string;
|
|
12
|
+
|
|
13
|
+
/** iOS 26: glass that reacts to touches (UIGlassEffect.isInteractive) */
|
|
14
|
+
interactive?: WithDefault<boolean, false>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* iOS 26: the linked scroll view's edge effect under the toolbar:
|
|
18
|
+
* '' (the scroll view's own) | 'automatic' | 'soft' | 'hard' | 'hidden'
|
|
19
|
+
*/
|
|
20
|
+
scrollEdgeEffect?: string;
|
|
11
21
|
}>;
|
|
12
22
|
|
|
13
23
|
/**
|
|
@@ -22,6 +32,12 @@ export interface FloatingToolbarNativeProps extends ViewProps {
|
|
|
22
32
|
/** Container color. Default: the platform's toolbar material. */
|
|
23
33
|
color?: ColorValue;
|
|
24
34
|
|
|
35
|
+
/** nativeID of the ScrollView the toolbar floats over. */
|
|
36
|
+
scrollViewNativeID?: string;
|
|
37
|
+
|
|
38
|
+
/** Slide off the linked ScrollView's edge while its content scrolls down. */
|
|
39
|
+
hideOnScroll?: WithDefault<boolean, false>;
|
|
40
|
+
|
|
25
41
|
ios?: FloatingToolbarIOSProps;
|
|
26
42
|
android?: FloatingToolbarAndroidProps;
|
|
27
43
|
}
|
package/src/LiquidGlass.tsx
CHANGED
|
@@ -15,6 +15,11 @@ export type {
|
|
|
15
15
|
LiquidGlassPressEvent,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Corner shape of the glass: `'capsule'`, `'concentric'`, or a fixed radius.
|
|
20
|
+
*/
|
|
21
|
+
export type LiquidGlassCornerStyle = 'capsule' | 'concentric' | number;
|
|
22
|
+
|
|
18
23
|
function resolveLiquidGlassSupport(): boolean {
|
|
19
24
|
if (Platform.OS !== 'ios') {
|
|
20
25
|
return false;
|
|
@@ -50,6 +55,20 @@ export interface LiquidGlassProps extends ViewProps {
|
|
|
50
55
|
*/
|
|
51
56
|
cornerRadius?: number;
|
|
52
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Corner shape, set through `UIView.cornerConfiguration` on iOS 26.
|
|
60
|
+
* - `'capsule'`: fully rounded short sides that follow the view's size
|
|
61
|
+
* (`.capsule()`). Half the shorter side elsewhere.
|
|
62
|
+
* - `'concentric'`: each corner concentric with the matching corner of the
|
|
63
|
+
* enclosing shape, such as a parent `LiquidGlass` or the screen
|
|
64
|
+
* (`.containerConcentric()`). `cornerRadius` is the minimum on iOS 26
|
|
65
|
+
* and the radius elsewhere.
|
|
66
|
+
* - a number: a fixed radius, the same as `cornerRadius`.
|
|
67
|
+
*
|
|
68
|
+
* Default: `cornerRadius`.
|
|
69
|
+
*/
|
|
70
|
+
cornerStyle?: LiquidGlassCornerStyle;
|
|
71
|
+
|
|
53
72
|
/**
|
|
54
73
|
* iOS-specific props for the glass effect.
|
|
55
74
|
*/
|
|
@@ -123,6 +142,7 @@ export function LiquidGlass(props: LiquidGlassProps): React.ReactElement {
|
|
|
123
142
|
const {
|
|
124
143
|
style,
|
|
125
144
|
cornerRadius = 0,
|
|
145
|
+
cornerStyle,
|
|
126
146
|
ios,
|
|
127
147
|
android,
|
|
128
148
|
children,
|
|
@@ -160,7 +180,10 @@ export function LiquidGlass(props: LiquidGlassProps): React.ReactElement {
|
|
|
160
180
|
return (
|
|
161
181
|
<NativeLiquidGlass
|
|
162
182
|
style={style}
|
|
163
|
-
cornerRadius={
|
|
183
|
+
cornerRadius={
|
|
184
|
+
typeof cornerStyle === 'number' ? cornerStyle : cornerRadius
|
|
185
|
+
}
|
|
186
|
+
cornerStyle={typeof cornerStyle === 'string' ? cornerStyle : ''}
|
|
164
187
|
ios={nativeIos}
|
|
165
188
|
android={nativeAndroid}
|
|
166
189
|
onGlassPress={onPress ? handlePress : undefined}
|