react-native-platform-components 1.4.0 → 1.6.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.cjs +79 -6
- package/plugin/build/index.d.ts +27 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/plugin/tsconfig.json +2 -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/Button.tsx
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
// Button.tsx
|
|
2
|
-
import React, { useCallback, useMemo } from 'react';
|
|
3
|
-
import type { ColorValue, ViewProps } from 'react-native';
|
|
2
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
3
|
+
import type { ColorValue, NativeSyntheticEvent, ViewProps } from 'react-native';
|
|
4
4
|
|
|
5
|
-
import NativeButton
|
|
5
|
+
import NativeButton, {
|
|
6
|
+
type ButtonMenuSelectEvent,
|
|
7
|
+
type ButtonSelectedChangeEvent,
|
|
8
|
+
} from './ButtonNativeComponent';
|
|
6
9
|
import { resolveIcon, type PlatformIcon } from './icons';
|
|
7
10
|
import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
|
|
11
|
+
import { flattenMenuActions, type ContextMenuAction } from './menuItems';
|
|
12
|
+
import type { Haptics } from './haptics';
|
|
8
13
|
import type { AndroidMaterialStyle } from './sharedTypes';
|
|
9
14
|
|
|
10
15
|
/**
|
|
@@ -17,9 +22,25 @@ import type { AndroidMaterialStyle } from './sharedTypes';
|
|
|
17
22
|
* | `outlined` | Outlined button | `.bordered()` |
|
|
18
23
|
* | `text` | Text button | `.plain()` |
|
|
19
24
|
* | `elevated` | Elevated button | `.gray()` |
|
|
25
|
+
* | `glass` | Filled tonal button | `.glass()` (iOS 26+), else `.gray()` |
|
|
26
|
+
* | `prominentGlass` | Filled button | `.prominentGlass()` (iOS 26+), else `.filled()` |
|
|
27
|
+
* | `clearGlass` | Filled tonal button | `.clearGlass()` (iOS 26+), else `.gray()` |
|
|
28
|
+
* | `prominentClearGlass` | Filled button | `.prominentClearGlass()` (iOS 26+), else `.filled()` |
|
|
29
|
+
*
|
|
30
|
+
* The glass variants are the iOS 26 Liquid Glass buttons; `color` tints
|
|
31
|
+
* the prominent glass and `tintColor` colors the label and icon. Clear glass
|
|
32
|
+
* is more transparent, for buttons over photos and other rich content.
|
|
20
33
|
*/
|
|
21
34
|
export type ButtonVariant =
|
|
22
|
-
|
|
35
|
+
| 'filled'
|
|
36
|
+
| 'tonal'
|
|
37
|
+
| 'outlined'
|
|
38
|
+
| 'text'
|
|
39
|
+
| 'elevated'
|
|
40
|
+
| 'glass'
|
|
41
|
+
| 'prominentGlass'
|
|
42
|
+
| 'clearGlass'
|
|
43
|
+
| 'prominentClearGlass';
|
|
23
44
|
|
|
24
45
|
/**
|
|
25
46
|
* Button size. Material 3 Expressive defines five sizes; iOS maps them onto
|
|
@@ -33,13 +54,31 @@ export type ButtonSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
|
|
|
33
54
|
*/
|
|
34
55
|
export type ButtonShape = 'round' | 'square';
|
|
35
56
|
|
|
57
|
+
/** Where the icon sits relative to the label. */
|
|
58
|
+
export type ButtonIconPosition = 'leading' | 'trailing' | 'top' | 'bottom';
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* An animated SF Symbol effect (iOS 17+). `wiggle`, `rotate` and `breathe`
|
|
62
|
+
* need iOS 18; on earlier versions they do nothing.
|
|
63
|
+
*/
|
|
64
|
+
export type ButtonSymbolEffect =
|
|
65
|
+
'bounce' | 'pulse' | 'variableColor' | 'wiggle' | 'rotate' | 'breathe';
|
|
66
|
+
|
|
36
67
|
export interface ButtonProps extends ViewProps {
|
|
37
68
|
/** Button text. Omit for an icon-only button. */
|
|
38
69
|
label?: string;
|
|
39
70
|
|
|
40
|
-
/** Icon shown
|
|
71
|
+
/** Icon shown next to the label, or alone when there is no label. */
|
|
41
72
|
icon?: PlatformIcon;
|
|
42
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Where the icon sits relative to the label. Default: `'leading'`.
|
|
76
|
+
* iOS: `imagePlacement`. Android: `iconGravity` (`textEnd` for trailing,
|
|
77
|
+
* `textTop` for top). Material has no bottom gravity, so `'bottom'` puts the
|
|
78
|
+
* icon on top on Android.
|
|
79
|
+
*/
|
|
80
|
+
iconPosition?: ButtonIconPosition;
|
|
81
|
+
|
|
43
82
|
/** Emphasis. Default: `'filled'`. See {@link ButtonVariant}. */
|
|
44
83
|
variant?: ButtonVariant;
|
|
45
84
|
|
|
@@ -49,9 +88,24 @@ export interface ButtonProps extends ViewProps {
|
|
|
49
88
|
/** Corner shape. Default: platform default. */
|
|
50
89
|
shape?: ButtonShape;
|
|
51
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Corner radius in points (dp). Overrides `shape` when set.
|
|
93
|
+
* iOS: `background.cornerRadius` with the fixed corner style. Android: the
|
|
94
|
+
* `shapeAppearanceModel` corner size (the press morph is turned off).
|
|
95
|
+
*/
|
|
96
|
+
cornerRadius?: number;
|
|
97
|
+
|
|
52
98
|
/** Whether the button is disabled. */
|
|
53
99
|
disabled?: boolean;
|
|
54
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Shows a native spinner in place of the label and icon, keeping the
|
|
103
|
+
* button's size, and ignores presses. Sets `accessibilityState.busy`.
|
|
104
|
+
* iOS: `UIButton.Configuration.showsActivityIndicator`. Android: a Material
|
|
105
|
+
* circular progress indicator drawn as the button icon.
|
|
106
|
+
*/
|
|
107
|
+
loading?: boolean;
|
|
108
|
+
|
|
55
109
|
/**
|
|
56
110
|
* Container (background) color.
|
|
57
111
|
* Android: `backgroundTint`. iOS: `baseBackgroundColor`.
|
|
@@ -64,15 +118,98 @@ export interface ButtonProps extends ViewProps {
|
|
|
64
118
|
*/
|
|
65
119
|
tintColor?: ColorValue;
|
|
66
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Container color while disabled. Unset keeps the platform's disabled look.
|
|
123
|
+
* iOS: a `configurationUpdateHandler` on `isEnabled`. Android: the disabled
|
|
124
|
+
* state of the `backgroundTint` color state list.
|
|
125
|
+
*/
|
|
126
|
+
disabledColor?: ColorValue;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Label and icon color while disabled. Unset keeps the platform's disabled
|
|
130
|
+
* look. iOS: a `configurationUpdateHandler` on `isEnabled`. Android: the
|
|
131
|
+
* disabled state of the text color and `iconTint` color state lists.
|
|
132
|
+
*/
|
|
133
|
+
disabledTintColor?: ColorValue;
|
|
134
|
+
|
|
67
135
|
/** Label font. */
|
|
68
136
|
labelStyle?: LabelStyle;
|
|
69
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Largest scale the label's font can reach with the system text size
|
|
140
|
+
* (Dynamic Type / font scale), as on `Text`: `undefined` or `0` means no
|
|
141
|
+
* cap; values of 1 or more cap it.
|
|
142
|
+
*/
|
|
143
|
+
maxFontSizeMultiplier?: number;
|
|
144
|
+
|
|
70
145
|
/** Screen-reader label. Defaults to `label`. */
|
|
71
146
|
accessibilityLabel?: string;
|
|
72
147
|
|
|
73
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* Haptic played when the user presses the button, flips a toggle or
|
|
150
|
+
* picks a menu item (not when a menu button opens its menu); not while
|
|
151
|
+
* `loading` or disabled. Default: none, like the native buttons. See
|
|
152
|
+
* {@link Haptics}.
|
|
153
|
+
*/
|
|
154
|
+
haptics?: Haptics;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Called when the button is pressed. A button with a `menu` opens the menu
|
|
158
|
+
* instead.
|
|
159
|
+
*/
|
|
74
160
|
onPress?: () => void;
|
|
75
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Makes the button a toggle, with this as its controlled state. A press
|
|
164
|
+
* calls `onSelectedChange` with the opposite value; the button shows the
|
|
165
|
+
* new state once `selected` changes, and goes back if it doesn't.
|
|
166
|
+
*
|
|
167
|
+
* iOS: `changesSelectionAsPrimaryAction` and `isSelected`, with the
|
|
168
|
+
* configuration's selected look. Android: a checkable `MaterialButton`
|
|
169
|
+
* (`isChecked`), with the Material toggle button colors and shape.
|
|
170
|
+
*/
|
|
171
|
+
selected?: boolean;
|
|
172
|
+
|
|
173
|
+
/** Called when a toggle button is pressed, with the state it asks for. */
|
|
174
|
+
onSelectedChange?: (selected: boolean) => void;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* A menu the button opens when pressed, in place of `onPress`. Same items
|
|
178
|
+
* as ContextMenu: submenus, sections, icons, states and attributes.
|
|
179
|
+
*
|
|
180
|
+
* iOS: `UIButton.menu` with `showsMenuAsPrimaryAction`. Android: a
|
|
181
|
+
* `PopupMenu` anchored to the button.
|
|
182
|
+
*/
|
|
183
|
+
menu?: readonly ContextMenuAction[];
|
|
184
|
+
|
|
185
|
+
/** Called when a menu item is picked, with its id and title. */
|
|
186
|
+
onMenuSelect?: (id: string, title: string) => void;
|
|
187
|
+
|
|
188
|
+
/** Called when the menu opens. */
|
|
189
|
+
onMenuOpen?: () => void;
|
|
190
|
+
|
|
191
|
+
/** Called when the menu closes. */
|
|
192
|
+
onMenuClose?: () => void;
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* iOS-specific configuration
|
|
196
|
+
*/
|
|
197
|
+
ios?: {
|
|
198
|
+
/**
|
|
199
|
+
* Animates the SF Symbol icon (`UIImageView.addSymbolEffect`, iOS 17+;
|
|
200
|
+
* `wiggle`, `rotate` and `breathe` need iOS 18). Without
|
|
201
|
+
* `symbolEffectTrigger` the effect repeats until it is unset. Ignored
|
|
202
|
+
* for image icons and on Android.
|
|
203
|
+
*/
|
|
204
|
+
symbolEffect?: ButtonSymbolEffect;
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Plays `symbolEffect` once each time this value changes, instead of
|
|
208
|
+
* repeating it. The first value doesn't play.
|
|
209
|
+
*/
|
|
210
|
+
symbolEffectTrigger?: number | string;
|
|
211
|
+
};
|
|
212
|
+
|
|
76
213
|
/**
|
|
77
214
|
* Android-specific configuration
|
|
78
215
|
*/
|
|
@@ -99,16 +236,31 @@ export function Button(props: ButtonProps): React.ReactElement {
|
|
|
99
236
|
const {
|
|
100
237
|
label,
|
|
101
238
|
icon,
|
|
239
|
+
iconPosition,
|
|
102
240
|
variant,
|
|
103
241
|
size,
|
|
104
242
|
shape,
|
|
243
|
+
cornerRadius,
|
|
105
244
|
disabled,
|
|
245
|
+
loading,
|
|
106
246
|
color,
|
|
107
247
|
tintColor,
|
|
248
|
+
disabledColor,
|
|
249
|
+
disabledTintColor,
|
|
108
250
|
labelStyle,
|
|
251
|
+
maxFontSizeMultiplier,
|
|
109
252
|
accessibilityLabel,
|
|
253
|
+
haptics,
|
|
110
254
|
onPress,
|
|
255
|
+
selected,
|
|
256
|
+
onSelectedChange,
|
|
257
|
+
menu,
|
|
258
|
+
onMenuSelect,
|
|
259
|
+
onMenuOpen,
|
|
260
|
+
onMenuClose,
|
|
261
|
+
ios,
|
|
111
262
|
android,
|
|
263
|
+
accessibilityState,
|
|
112
264
|
...viewProps
|
|
113
265
|
} = props;
|
|
114
266
|
|
|
@@ -118,26 +270,89 @@ export function Button(props: ButtonProps): React.ReactElement {
|
|
|
118
270
|
[labelStyle]
|
|
119
271
|
);
|
|
120
272
|
|
|
273
|
+
const nativeMenu = useMemo(
|
|
274
|
+
() => (menu ? flattenMenuActions(menu) : []),
|
|
275
|
+
[menu]
|
|
276
|
+
);
|
|
277
|
+
|
|
121
278
|
const handlePress = useCallback(() => {
|
|
279
|
+
if (loading) return;
|
|
122
280
|
onPress?.();
|
|
123
|
-
}, [onPress]);
|
|
281
|
+
}, [onPress, loading]);
|
|
282
|
+
|
|
283
|
+
// Controlled toggle, like React Native's Switch: every press re-renders
|
|
284
|
+
// with a new event count, so native applies `selected` again and a state
|
|
285
|
+
// the parent didn't take goes back.
|
|
286
|
+
const [selectedEventCount, setSelectedEventCount] = useState(0);
|
|
287
|
+
const handleSelectedChange = useCallback(
|
|
288
|
+
(e: NativeSyntheticEvent<ButtonSelectedChangeEvent>) => {
|
|
289
|
+
setSelectedEventCount((count) => count + 1);
|
|
290
|
+
onSelectedChange?.(e.nativeEvent.selected);
|
|
291
|
+
},
|
|
292
|
+
[onSelectedChange]
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
const handleMenuSelect = useCallback(
|
|
296
|
+
(e: NativeSyntheticEvent<ButtonMenuSelectEvent>) => {
|
|
297
|
+
onMenuSelect?.(e.nativeEvent.id, e.nativeEvent.title);
|
|
298
|
+
},
|
|
299
|
+
[onMenuSelect]
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
const handleMenuOpen = useCallback(() => onMenuOpen?.(), [onMenuOpen]);
|
|
303
|
+
const handleMenuClose = useCallback(() => onMenuClose?.(), [onMenuClose]);
|
|
304
|
+
|
|
305
|
+
const nativeIOS = useMemo(
|
|
306
|
+
() => ({
|
|
307
|
+
symbolEffect: ios?.symbolEffect ?? '',
|
|
308
|
+
symbolEffectTrigger:
|
|
309
|
+
ios?.symbolEffectTrigger === undefined
|
|
310
|
+
? ''
|
|
311
|
+
: String(ios.symbolEffectTrigger),
|
|
312
|
+
}),
|
|
313
|
+
[ios?.symbolEffect, ios?.symbolEffectTrigger]
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
const isToggle = selected !== undefined;
|
|
317
|
+
|
|
318
|
+
const mergedAccessibilityState = useMemo(
|
|
319
|
+
() =>
|
|
320
|
+
loading ? { ...accessibilityState, busy: true } : accessibilityState,
|
|
321
|
+
[loading, accessibilityState]
|
|
322
|
+
);
|
|
124
323
|
|
|
125
324
|
return (
|
|
126
325
|
<NativeButton
|
|
127
326
|
label={label ?? ''}
|
|
128
327
|
icon={nativeIcon}
|
|
328
|
+
iconPosition={iconPosition ?? 'leading'}
|
|
129
329
|
variant={variant ?? 'filled'}
|
|
130
330
|
size={size ?? 'small'}
|
|
131
331
|
shape={shape ?? ''}
|
|
332
|
+
cornerRadius={cornerRadius ?? -1}
|
|
132
333
|
interactivity={disabled ? 'disabled' : 'enabled'}
|
|
334
|
+
loading={loading ? 'true' : 'false'}
|
|
133
335
|
color={color}
|
|
134
336
|
foregroundColor={tintColor}
|
|
337
|
+
disabledColor={disabledColor}
|
|
338
|
+
disabledForegroundColor={disabledTintColor}
|
|
135
339
|
androidRippleColor={android?.rippleColor}
|
|
136
340
|
androidStrokeColor={android?.strokeColor}
|
|
137
341
|
androidMaterial={android?.material ?? 'expressive'}
|
|
138
342
|
labelStyle={nativeLabelStyle}
|
|
343
|
+
maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
|
|
139
344
|
spokenLabel={accessibilityLabel ?? ''}
|
|
345
|
+
selected={isToggle ? (selected ? 'true' : 'false') : ''}
|
|
346
|
+
selectedEventCount={selectedEventCount}
|
|
347
|
+
menu={nativeMenu}
|
|
348
|
+
ios={nativeIOS}
|
|
349
|
+
haptics={haptics ?? ''}
|
|
140
350
|
onButtonPress={onPress ? handlePress : undefined}
|
|
351
|
+
onSelectedChange={isToggle ? handleSelectedChange : undefined}
|
|
352
|
+
onMenuSelect={onMenuSelect ? handleMenuSelect : undefined}
|
|
353
|
+
onMenuOpen={onMenuOpen ? handleMenuOpen : undefined}
|
|
354
|
+
onMenuClose={onMenuClose ? handleMenuClose : undefined}
|
|
355
|
+
accessibilityState={mergedAccessibilityState}
|
|
141
356
|
{...viewProps}
|
|
142
357
|
/>
|
|
143
358
|
);
|
package/src/ButtonGroup.tsx
CHANGED
|
@@ -10,6 +10,7 @@ import NativeButtonGroup, {
|
|
|
10
10
|
} from './ButtonGroupNativeComponent';
|
|
11
11
|
import { resolveIcon, type PlatformIcon } from './icons';
|
|
12
12
|
import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
|
|
13
|
+
import type { Haptics } from './haptics';
|
|
13
14
|
import type { AndroidMaterialStyle } from './sharedTypes';
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -21,7 +22,14 @@ import type { AndroidMaterialStyle } from './sharedTypes';
|
|
|
21
22
|
*/
|
|
22
23
|
export type ButtonGroupSelection = 'none' | 'single' | 'multiple';
|
|
23
24
|
|
|
24
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* What happens to buttons that don't fit the group's width.
|
|
27
|
+
*
|
|
28
|
+
* - `none` (default): they are clipped.
|
|
29
|
+
* - `menu`: the trailing ones move into an overflow menu. Android: the
|
|
30
|
+
* `MaterialButtonGroup` overflow menu. iOS: a "…" button with a `UIMenu`.
|
|
31
|
+
* - `wrap`: they wrap onto more rows (Android only; iOS clips them).
|
|
32
|
+
*/
|
|
25
33
|
export type ButtonGroupOverflow = 'none' | 'menu' | 'wrap';
|
|
26
34
|
|
|
27
35
|
export interface ButtonGroupButtonProps {
|
|
@@ -91,6 +99,19 @@ export interface ButtonGroupProps extends ViewProps {
|
|
|
91
99
|
/** Label font. */
|
|
92
100
|
labelStyle?: LabelStyle;
|
|
93
101
|
|
|
102
|
+
/**
|
|
103
|
+
* What happens to buttons that don't fit the group's width. Default:
|
|
104
|
+
* `'none'`. See {@link ButtonGroupOverflow}. A pick from the overflow menu
|
|
105
|
+
* counts as a press of its button (`onPress`, and the selection).
|
|
106
|
+
*/
|
|
107
|
+
overflow?: ButtonGroupOverflow;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Haptic played when a button is pressed, in every selection mode.
|
|
111
|
+
* Default: none, like the native buttons. See {@link Haptics}.
|
|
112
|
+
*/
|
|
113
|
+
haptics?: Haptics;
|
|
114
|
+
|
|
94
115
|
/**
|
|
95
116
|
* Called when a button is pressed, in every selection mode.
|
|
96
117
|
* @param value - The button's value
|
|
@@ -108,11 +129,7 @@ export interface ButtonGroupProps extends ViewProps {
|
|
|
108
129
|
* Android-specific configuration
|
|
109
130
|
*/
|
|
110
131
|
android?: {
|
|
111
|
-
/**
|
|
112
|
-
* What happens to buttons that don't fit: `'none'` (clipped), `'menu'`
|
|
113
|
-
* (moved into an overflow menu) or `'wrap'` (wrapped onto more rows).
|
|
114
|
-
* Default: `'none'`.
|
|
115
|
-
*/
|
|
132
|
+
/** @deprecated Use the cross-platform `overflow` prop. */
|
|
116
133
|
overflow?: ButtonGroupOverflow;
|
|
117
134
|
|
|
118
135
|
/** Ripple color shown while pressing a button. */
|
|
@@ -148,6 +165,8 @@ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
|
|
|
148
165
|
color,
|
|
149
166
|
tintColor,
|
|
150
167
|
labelStyle,
|
|
168
|
+
overflow,
|
|
169
|
+
haptics,
|
|
151
170
|
onPress,
|
|
152
171
|
onSelectionChange,
|
|
153
172
|
android,
|
|
@@ -194,11 +213,8 @@ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
|
|
|
194
213
|
);
|
|
195
214
|
|
|
196
215
|
const nativeAndroid = useMemo(
|
|
197
|
-
() => ({
|
|
198
|
-
|
|
199
|
-
material: android?.material ?? 'expressive',
|
|
200
|
-
}),
|
|
201
|
-
[android]
|
|
216
|
+
() => ({ material: android?.material ?? 'expressive' }),
|
|
217
|
+
[android?.material]
|
|
202
218
|
);
|
|
203
219
|
|
|
204
220
|
const isConnected = connected ?? selectionMode !== 'none';
|
|
@@ -222,6 +238,8 @@ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
|
|
|
222
238
|
androidRippleColor={android?.rippleColor}
|
|
223
239
|
androidStrokeColor={android?.strokeColor}
|
|
224
240
|
labelStyle={nativeLabelStyle}
|
|
241
|
+
overflow={overflow ?? android?.overflow ?? 'none'}
|
|
242
|
+
haptics={haptics ?? ''}
|
|
225
243
|
onButtonPress={onPress ? handlePress : undefined}
|
|
226
244
|
onGroupSelectionChange={
|
|
227
245
|
onSelectionChange ? handleSelectionChange : undefined
|
|
@@ -13,6 +13,7 @@ export type ButtonGroupButton = Readonly<{
|
|
|
13
13
|
disabled: string; // 'enabled' | 'disabled'
|
|
14
14
|
iconType: string; // '' | 'sfSymbol' | 'drawable' | 'image'
|
|
15
15
|
iconName: string; // SF Symbol (iOS) or drawable resource name (Android)
|
|
16
|
+
iconRequest: string;
|
|
16
17
|
iconUri: string; // Resolved image URI when iconType === 'image'
|
|
17
18
|
iconScale: Double; // Resolved image scale when iconType === 'image'
|
|
18
19
|
iconTinted: string; // 'true' | 'false' — draw the image as a tinted template
|
|
@@ -46,13 +47,46 @@ export type ButtonGroupLabelStyleProps = Readonly<{
|
|
|
46
47
|
fontStyle?: string; // 'normal' | 'italic'
|
|
47
48
|
}>;
|
|
48
49
|
|
|
50
|
+
/**
|
|
51
|
+
* One item of the split button's menu, the shape of `ContextMenuItem` (see
|
|
52
|
+
* menuItems.ts). Every field is set; empty strings mean "none" and flags are
|
|
53
|
+
* 'true' | 'false'.
|
|
54
|
+
*/
|
|
55
|
+
export type ButtonGroupMenuItem = Readonly<{
|
|
56
|
+
id: string;
|
|
57
|
+
title: string;
|
|
58
|
+
subtitle: string;
|
|
59
|
+
/** Index of the parent submenu or section; -1 at the top level */
|
|
60
|
+
parent: Int32;
|
|
61
|
+
/** 'action' | 'menu' | 'section' */
|
|
62
|
+
kind: string;
|
|
63
|
+
/** '' | 'sfSymbol' | 'drawable' | 'image' */
|
|
64
|
+
iconType: string;
|
|
65
|
+
iconName: string;
|
|
66
|
+
iconRequest: string;
|
|
67
|
+
iconUri: string;
|
|
68
|
+
iconScale: Double;
|
|
69
|
+
iconTinted: string;
|
|
70
|
+
imageColor: string;
|
|
71
|
+
destructive: string;
|
|
72
|
+
disabled: string;
|
|
73
|
+
keepsMenuPresented: string;
|
|
74
|
+
/** '' | 'off' | 'on' | 'mixed' */
|
|
75
|
+
state: string;
|
|
76
|
+
/** The action's own haptics; '' = the component's */
|
|
77
|
+
haptics: string;
|
|
78
|
+
}>;
|
|
79
|
+
|
|
80
|
+
/** Event emitted when a split button menu item is picked. */
|
|
81
|
+
export type ButtonGroupMenuSelectEvent = Readonly<{
|
|
82
|
+
id: string;
|
|
83
|
+
title: string;
|
|
84
|
+
}>;
|
|
85
|
+
|
|
49
86
|
/**
|
|
50
87
|
* Android-specific configuration.
|
|
51
88
|
*/
|
|
52
89
|
export type ButtonGroupAndroidProps = Readonly<{
|
|
53
|
-
/** What happens to buttons that don't fit: 'none' | 'menu' | 'wrap' */
|
|
54
|
-
overflow?: string;
|
|
55
|
-
|
|
56
90
|
/** Material style: 'm3' | 'expressive' */
|
|
57
91
|
material?: string;
|
|
58
92
|
}>;
|
|
@@ -61,7 +95,10 @@ export interface ButtonGroupNativeProps extends ViewProps {
|
|
|
61
95
|
/** Buttons to display. */
|
|
62
96
|
buttons: ReadonlyArray<ButtonGroupButton>;
|
|
63
97
|
|
|
64
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* 'filled' | 'tonal' | 'outlined' | 'text' | 'elevated' | 'glass' |
|
|
100
|
+
* 'prominentGlass' | 'clearGlass' | 'prominentClearGlass'
|
|
101
|
+
*/
|
|
65
102
|
variant?: string;
|
|
66
103
|
|
|
67
104
|
/** 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' */
|
|
@@ -103,6 +140,30 @@ export interface ButtonGroupNativeProps extends ViewProps {
|
|
|
103
140
|
/** Label font. */
|
|
104
141
|
labelStyle?: ButtonGroupLabelStyleProps;
|
|
105
142
|
|
|
143
|
+
/**
|
|
144
|
+
* What happens to buttons that don't fit: 'none' | 'menu' | 'wrap'
|
|
145
|
+
* ('wrap' is Android only)
|
|
146
|
+
*/
|
|
147
|
+
overflow?: string;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* 'true' | 'false': a split button, the first button joined to a trailing
|
|
151
|
+
* button that opens `menu` (SplitButton).
|
|
152
|
+
*/
|
|
153
|
+
split?: string;
|
|
154
|
+
|
|
155
|
+
/** The split button's menu, flattened (see ButtonGroupMenuItem). */
|
|
156
|
+
menu?: ReadonlyArray<ButtonGroupMenuItem>;
|
|
157
|
+
|
|
158
|
+
/** Screen-reader label of the split button's menu button. */
|
|
159
|
+
menuAccessibilityLabel?: string;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Haptic played when a button is pressed: '' (none added) | 'none' | 'selection' |
|
|
163
|
+
* 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error'
|
|
164
|
+
*/
|
|
165
|
+
haptics?: string;
|
|
166
|
+
|
|
106
167
|
/** Fired when a button is pressed. */
|
|
107
168
|
onButtonPress?: BubblingEventHandler<ButtonGroupPressEvent>;
|
|
108
169
|
|
|
@@ -113,6 +174,15 @@ export interface ButtonGroupNativeProps extends ViewProps {
|
|
|
113
174
|
*/
|
|
114
175
|
onGroupSelectionChange?: BubblingEventHandler<ButtonGroupSelectionEvent>;
|
|
115
176
|
|
|
177
|
+
/** Fired when a split button menu item is picked. */
|
|
178
|
+
onMenuSelect?: BubblingEventHandler<ButtonGroupMenuSelectEvent>;
|
|
179
|
+
|
|
180
|
+
/** Fired when the split button's menu opens. */
|
|
181
|
+
onMenuOpen?: BubblingEventHandler<Readonly<{}>>;
|
|
182
|
+
|
|
183
|
+
/** Fired when the split button's menu closes. */
|
|
184
|
+
onMenuClose?: BubblingEventHandler<Readonly<{}>>;
|
|
185
|
+
|
|
116
186
|
android?: ButtonGroupAndroidProps;
|
|
117
187
|
}
|
|
118
188
|
|