react-native-platform-components 1.3.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 +47 -51
- package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +664 -0
- package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +241 -0
- package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +159 -0
- package/android/src/main/java/com/platformcomponents/PCButtonView.kt +527 -0
- package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +204 -0
- 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 +112 -0
- 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 +247 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +73 -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 +35 -17
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +20 -3
- 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 +1393 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +354 -0
- package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
- package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +8 -0
- package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
- package/android/src/main/res/values/attrs.xml +13 -0
- package/android/src/main/res/values/ids.xml +5 -0
- package/android/src/main/res/values/styles.xml +207 -0
- package/ios/PCButton.h +10 -0
- package/ios/PCButton.mm +311 -0
- package/ios/PCButtonGroup.h +10 -0
- package/ios/PCButtonGroup.mm +323 -0
- package/ios/PCButtonGroupView.swift +473 -0
- package/ios/PCButtonSupport.swift +312 -0
- package/ios/PCButtonView.swift +438 -0
- 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.h +10 -0
- package/ios/PCFloatingToolbar.mm +103 -0
- package/ios/PCFloatingToolbarView.swift +336 -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.h +10 -0
- package/ios/PCTextField.mm +546 -0
- package/ios/PCTextFieldView.swift +1558 -0
- package/lib/commonjs/Button.js +149 -0
- package/lib/commonjs/Button.js.map +1 -0
- package/lib/commonjs/ButtonGroup.js +109 -0
- package/lib/commonjs/ButtonGroup.js.map +1 -0
- package/lib/commonjs/ButtonGroupNativeComponent.ts +191 -0
- package/lib/commonjs/ButtonNativeComponent.ts +192 -0
- 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 +77 -0
- package/lib/commonjs/FloatingToolbar.js.map +1 -0
- package/lib/commonjs/FloatingToolbarNativeComponent.ts +47 -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 +18 -85
- package/lib/commonjs/SegmentedControl.js.map +1 -1
- package/lib/commonjs/SegmentedControlNativeComponent.ts +14 -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 +358 -0
- package/lib/commonjs/TextField.js.map +1 -0
- package/lib/commonjs/TextFieldNativeComponent.ts +324 -0
- package/lib/commonjs/focusRegistry.js +79 -0
- package/lib/commonjs/focusRegistry.js.map +1 -0
- package/lib/commonjs/haptics.js +2 -0
- package/lib/commonjs/haptics.js.map +1 -0
- package/lib/commonjs/icons.js +106 -0
- package/lib/commonjs/icons.js.map +1 -0
- package/lib/commonjs/index.js +143 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +157 -63
- 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/labelStyle.js +27 -0
- package/lib/commonjs/labelStyle.js.map +1 -0
- package/lib/commonjs/menuItems.js +68 -0
- package/lib/commonjs/menuItems.js.map +1 -0
- package/lib/commonjs/reactNativeInternals.d.js +2 -0
- package/lib/commonjs/reactNativeInternals.d.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 +142 -0
- package/lib/module/Button.js.map +1 -0
- package/lib/module/ButtonGroup.js +102 -0
- package/lib/module/ButtonGroup.js.map +1 -0
- package/lib/module/ButtonGroupNativeComponent.ts +191 -0
- package/lib/module/ButtonNativeComponent.ts +192 -0
- 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 +70 -0
- package/lib/module/FloatingToolbar.js.map +1 -0
- package/lib/module/FloatingToolbarNativeComponent.ts +47 -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 +18 -85
- package/lib/module/SegmentedControl.js.map +1 -1
- package/lib/module/SegmentedControlNativeComponent.ts +14 -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 +352 -0
- package/lib/module/TextField.js.map +1 -0
- package/lib/module/TextFieldNativeComponent.ts +324 -0
- package/lib/module/focusRegistry.js +75 -0
- package/lib/module/focusRegistry.js.map +1 -0
- package/lib/module/haptics.js +2 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/icons.js +101 -0
- package/lib/module/icons.js.map +1 -0
- package/lib/module/index.js +13 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +12 -59
- 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/labelStyle.js +23 -0
- package/lib/module/labelStyle.js.map +1 -0
- package/lib/module/menuItems.js +65 -0
- package/lib/module/menuItems.js.map +1 -0
- package/lib/module/reactNativeInternals.d.js +2 -0
- package/lib/module/reactNativeInternals.d.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 +184 -0
- package/lib/typescript/commonjs/src/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts +117 -0
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +154 -0
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +148 -0
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -0
- 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 +75 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +36 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
- 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 +35 -47
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +11 -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 +332 -0
- package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +240 -0
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/focusRegistry.d.ts +13 -0
- package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -0
- 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 +58 -0
- package/lib/typescript/commonjs/src/icons.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +13 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.web.d.ts +25 -133
- 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/labelStyle.d.ts +20 -0
- package/lib/typescript/commonjs/src/labelStyle.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/sharedTypes.d.ts +6 -1
- package/lib/typescript/commonjs/src/sharedTypes.d.ts.map +1 -1
- 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 +184 -0
- package/lib/typescript/module/src/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/ButtonGroup.d.ts +117 -0
- package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +154 -0
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts +148 -0
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -0
- 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 +75 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +36 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
- 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 +35 -47
- package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +11 -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 +332 -0
- package/lib/typescript/module/src/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +240 -0
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/focusRegistry.d.ts +13 -0
- package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -0
- 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 +58 -0
- package/lib/typescript/module/src/icons.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +13 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.web.d.ts +25 -133
- 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/labelStyle.d.ts +20 -0
- package/lib/typescript/module/src/labelStyle.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/sharedTypes.d.ts +6 -1
- package/lib/typescript/module/src/sharedTypes.d.ts.map +1 -1
- 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 +55 -4
- package/plugin/build/index.d.ts +3 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/react-native.config.js +6 -0
- package/shared/PCButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCButtonGroupComponentDescriptors-custom.h +22 -0
- package/shared/PCButtonGroupShadowNode-custom.cpp +48 -0
- package/shared/PCButtonGroupShadowNode-custom.h +55 -0
- package/shared/PCButtonGroupState-custom.h +61 -0
- package/shared/PCButtonShadowNode-custom.cpp +48 -0
- package/shared/PCButtonShadowNode-custom.h +55 -0
- package/shared/PCButtonState-custom.h +61 -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/PCTextFieldComponentDescriptors-custom.h +22 -0
- package/shared/PCTextFieldShadowNode-custom.cpp +47 -0
- package/shared/PCTextFieldShadowNode-custom.h +55 -0
- package/shared/PCTextFieldState-custom.h +61 -0
- package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +6 -0
- package/src/Button.tsx +359 -0
- package/src/ButtonGroup.tsx +251 -0
- package/src/ButtonGroupNativeComponent.ts +191 -0
- package/src/ButtonNativeComponent.ts +192 -0
- 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 +164 -0
- package/src/FloatingToolbarNativeComponent.ts +47 -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 +57 -119
- package/src/SegmentedControlNativeComponent.ts +14 -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 +908 -0
- package/src/TextFieldNativeComponent.ts +324 -0
- package/src/focusRegistry.ts +90 -0
- package/src/haptics.ts +31 -0
- package/src/icons.ts +143 -0
- package/src/index.tsx +13 -0
- package/src/index.web.tsx +53 -199
- package/src/jest.tsx +958 -0
- package/src/labelStyle.ts +36 -0
- package/src/menuItems.ts +152 -0
- package/src/reactNativeInternals.d.ts +22 -0
- package/src/selectionIdentifiers.ts +17 -0
- package/src/sharedTypes.ts +7 -1
- 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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// labelStyle.ts
|
|
2
|
+
//
|
|
3
|
+
// Label font props shared by SegmentedControl, Button and ButtonGroup.
|
|
4
|
+
import type { TextStyle } from 'react-native';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Font for a control's labels. Each field falls back to the platform default.
|
|
8
|
+
*/
|
|
9
|
+
export interface LabelStyle {
|
|
10
|
+
fontFamily?: string;
|
|
11
|
+
fontSize?: number;
|
|
12
|
+
fontWeight?: TextStyle['fontWeight'];
|
|
13
|
+
fontStyle?: 'normal' | 'italic';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** The flat font fields the native specs expect; empty / 0 = default. */
|
|
17
|
+
export type NativeLabelStyle = {
|
|
18
|
+
fontFamily: string;
|
|
19
|
+
fontSize: number;
|
|
20
|
+
fontWeight: string;
|
|
21
|
+
fontStyle: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** Normalizes a label font for native; `undefined` keeps the platform font. */
|
|
25
|
+
export function normalizeLabelStyle(
|
|
26
|
+
labelStyle: LabelStyle | undefined
|
|
27
|
+
): NativeLabelStyle | undefined {
|
|
28
|
+
if (!labelStyle) return undefined;
|
|
29
|
+
return {
|
|
30
|
+
fontFamily: labelStyle.fontFamily ?? '',
|
|
31
|
+
fontSize: labelStyle.fontSize ?? 0,
|
|
32
|
+
fontWeight:
|
|
33
|
+
labelStyle.fontWeight === undefined ? '' : String(labelStyle.fontWeight),
|
|
34
|
+
fontStyle: labelStyle.fontStyle ?? '',
|
|
35
|
+
};
|
|
36
|
+
}
|
package/src/menuItems.ts
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// menuItems.ts
|
|
2
|
+
//
|
|
3
|
+
// The menu item shape of the library. ContextMenu takes a tree of these
|
|
4
|
+
// actions; native receives them flattened into one list in which each item
|
|
5
|
+
// points at its parent, so menus nest to any depth without a recursive codegen
|
|
6
|
+
// type. Components that show a native menu share this shape and
|
|
7
|
+
// `flattenMenuActions`.
|
|
8
|
+
import type { Haptics } from './haptics';
|
|
9
|
+
import { resolveIcon, type PlatformIcon } from './icons';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Attributes for a menu action.
|
|
13
|
+
*/
|
|
14
|
+
export interface ContextMenuActionAttributes {
|
|
15
|
+
/** Whether the action is destructive (red styling) */
|
|
16
|
+
destructive?: boolean;
|
|
17
|
+
/** Whether the action is disabled (grayed out) */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** Whether the action is hidden */
|
|
20
|
+
hidden?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Keeps the menu open after the action is pressed, for steppers and toggles
|
|
23
|
+
* that update in place (change the action's `title` or `state` in
|
|
24
|
+
* `onPressAction` and the open menu updates).
|
|
25
|
+
*
|
|
26
|
+
* iOS 16+: `UIMenuElement.Attributes.keepsMenuPresented`. Ignored on older
|
|
27
|
+
* iOS and on Android, where the popup closes on every press.
|
|
28
|
+
*/
|
|
29
|
+
keepsMenuPresented?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A single action in a menu. An action with `subactions` is a submenu, or an
|
|
34
|
+
* inline section with `displayInline`.
|
|
35
|
+
*/
|
|
36
|
+
export interface ContextMenuAction {
|
|
37
|
+
/** Unique identifier returned in callbacks */
|
|
38
|
+
id: string;
|
|
39
|
+
/** Display title. For an inline section: its header (iOS only; may be empty). */
|
|
40
|
+
title: string;
|
|
41
|
+
/** Secondary text (iOS only) */
|
|
42
|
+
subtitle?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Icon. A string is an SF Symbol or asset catalog name on iOS and a
|
|
45
|
+
* drawable resource name on Android. See {@link PlatformIcon} for image
|
|
46
|
+
* sources (`require(...)`, `{ uri }`) and per-platform icons.
|
|
47
|
+
*/
|
|
48
|
+
image?: PlatformIcon;
|
|
49
|
+
/** Tint color for the icon (hex string, e.g. `'#FF3B30'`) */
|
|
50
|
+
imageColor?: string;
|
|
51
|
+
/** Action attributes */
|
|
52
|
+
attributes?: ContextMenuActionAttributes;
|
|
53
|
+
/** Checkmark state */
|
|
54
|
+
state?: 'off' | 'on' | 'mixed';
|
|
55
|
+
/**
|
|
56
|
+
* Haptic played when this action is picked, in place of the component's
|
|
57
|
+
* `haptics` (`'none'` plays nothing). Unset uses the component's. See
|
|
58
|
+
* {@link Haptics}.
|
|
59
|
+
*/
|
|
60
|
+
haptics?: Haptics;
|
|
61
|
+
/** Nested actions: a submenu, or an inline section with `displayInline` */
|
|
62
|
+
subactions?: readonly ContextMenuAction[];
|
|
63
|
+
/**
|
|
64
|
+
* Shows `subactions` inline, as a section set off by separators, instead of
|
|
65
|
+
* as a submenu.
|
|
66
|
+
*
|
|
67
|
+
* - iOS: `UIMenu(options: .displayInline)`; a non-empty `title` is the
|
|
68
|
+
* section header.
|
|
69
|
+
* - Android: a menu group with group dividers; the title is not shown.
|
|
70
|
+
*/
|
|
71
|
+
displayInline?: boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* One menu item as native receives it. Every field is set; empty strings
|
|
76
|
+
* mean "none" and flags are `'true' | 'false'`. Components declare the same
|
|
77
|
+
* shape in their codegen spec.
|
|
78
|
+
*/
|
|
79
|
+
export type NativeMenuItem = {
|
|
80
|
+
id: string;
|
|
81
|
+
title: string;
|
|
82
|
+
subtitle: string;
|
|
83
|
+
/** Index of the parent submenu or section in the list; -1 at the top level */
|
|
84
|
+
parent: number;
|
|
85
|
+
/** 'action' | 'menu' | 'section' */
|
|
86
|
+
kind: string;
|
|
87
|
+
/** '' | 'sfSymbol' | 'drawable' | 'image' */
|
|
88
|
+
iconType: string;
|
|
89
|
+
iconName: string;
|
|
90
|
+
iconRequest: string;
|
|
91
|
+
iconUri: string;
|
|
92
|
+
iconScale: number;
|
|
93
|
+
iconTinted: string;
|
|
94
|
+
imageColor: string;
|
|
95
|
+
destructive: string;
|
|
96
|
+
disabled: string;
|
|
97
|
+
keepsMenuPresented: string;
|
|
98
|
+
/** '' | 'off' | 'on' | 'mixed' */
|
|
99
|
+
state: string;
|
|
100
|
+
/** The action's own haptics; '' = the component's */
|
|
101
|
+
haptics: string;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const flag = (value: boolean | undefined) => (value ? 'true' : 'false');
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Flattens an action tree into the list native expects, depth first: a
|
|
108
|
+
* submenu or section comes before its children, which point back at it
|
|
109
|
+
* through `parent`. Hidden actions (and their children) are dropped here, so
|
|
110
|
+
* native never sees them.
|
|
111
|
+
*/
|
|
112
|
+
export function flattenMenuActions(
|
|
113
|
+
actions: readonly ContextMenuAction[]
|
|
114
|
+
): NativeMenuItem[] {
|
|
115
|
+
const items: NativeMenuItem[] = [];
|
|
116
|
+
|
|
117
|
+
const visit = (list: readonly ContextMenuAction[], parent: number) => {
|
|
118
|
+
for (const action of list) {
|
|
119
|
+
const attributes = action.attributes;
|
|
120
|
+
if (attributes?.hidden) continue;
|
|
121
|
+
|
|
122
|
+
const children = action.subactions ?? [];
|
|
123
|
+
const kind =
|
|
124
|
+
children.length === 0
|
|
125
|
+
? 'action'
|
|
126
|
+
: action.displayInline
|
|
127
|
+
? 'section'
|
|
128
|
+
: 'menu';
|
|
129
|
+
|
|
130
|
+
const index = items.length;
|
|
131
|
+
items.push({
|
|
132
|
+
id: action.id,
|
|
133
|
+
title: action.title,
|
|
134
|
+
subtitle: action.subtitle ?? '',
|
|
135
|
+
parent,
|
|
136
|
+
kind,
|
|
137
|
+
...resolveIcon(action.image),
|
|
138
|
+
imageColor: action.imageColor ?? '',
|
|
139
|
+
destructive: flag(attributes?.destructive),
|
|
140
|
+
disabled: flag(attributes?.disabled),
|
|
141
|
+
keepsMenuPresented: flag(attributes?.keepsMenuPresented),
|
|
142
|
+
state: action.state ?? '',
|
|
143
|
+
haptics: action.haptics ?? '',
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
if (kind !== 'action') visit(children, index);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
visit(actions, -1);
|
|
151
|
+
return items;
|
|
152
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// reactNativeInternals.d.ts
|
|
2
|
+
//
|
|
3
|
+
// React Native's focus registry for text inputs. `Keyboard.dismiss()`, a
|
|
4
|
+
// ScrollView's `keyboardShouldPersistTaps` and `KeyboardAvoidingView` all act
|
|
5
|
+
// on the input registered here, so TextField registers itself like the core
|
|
6
|
+
// TextInput does. The module is a stable internal (it has kept this shape
|
|
7
|
+
// since 0.63), but it is not part of the strict API's type exports, hence this
|
|
8
|
+
// declaration.
|
|
9
|
+
declare module 'react-native/Libraries/Components/TextInput/TextInputState' {
|
|
10
|
+
type HostInput = object;
|
|
11
|
+
|
|
12
|
+
const TextInputState: {
|
|
13
|
+
currentlyFocusedInput(): HostInput | null | undefined;
|
|
14
|
+
focusInput(input: HostInput | null | undefined): void;
|
|
15
|
+
blurInput(input: HostInput | null | undefined): void;
|
|
16
|
+
registerInput(input: HostInput): void;
|
|
17
|
+
unregisterInput(input: HostInput): void;
|
|
18
|
+
isTextInput(input: HostInput): boolean;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default TextInputState;
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Diagnose identifiers reserved by the native selection protocol. */
|
|
2
|
+
export function warnSelectionIdentifiers(
|
|
3
|
+
component: 'SelectionMenu' | 'SegmentedControl',
|
|
4
|
+
values: readonly string[]
|
|
5
|
+
): void {
|
|
6
|
+
if (!__DEV__) return;
|
|
7
|
+
const seen = new Set<string>();
|
|
8
|
+
for (const [index, value] of values.entries()) {
|
|
9
|
+
if (value === '' || seen.has(value)) {
|
|
10
|
+
console.warn(
|
|
11
|
+
`react-native-platform-components: ${component} requires unique, non-empty ` +
|
|
12
|
+
`identifiers; item ${index} has ${value === '' ? 'an empty' : 'a duplicate'} identifier.`
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
seen.add(value);
|
|
16
|
+
}
|
|
17
|
+
}
|
package/src/sharedTypes.ts
CHANGED
|
@@ -7,9 +7,15 @@ export type Visible = 'open' | 'closed';
|
|
|
7
7
|
/** Shared presentation mode for pickers/menus. */
|
|
8
8
|
export type Presentation = 'modal' | 'embedded';
|
|
9
9
|
|
|
10
|
-
/** Shared Material preference (Android). */
|
|
10
|
+
/** Shared Material preference (Android): the platform widget or the Material one. */
|
|
11
11
|
export type AndroidMaterialMode = 'system' | 'm3';
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Shared Material style for the Material-only components (Android):
|
|
15
|
+
* Material 3, or Material 3 Expressive (the default).
|
|
16
|
+
*/
|
|
17
|
+
export type AndroidMaterialStyle = 'm3' | 'expressive';
|
|
18
|
+
|
|
13
19
|
/** Common event empty payload type. */
|
|
14
20
|
export type EmptyEvent = Readonly<{}>;
|
|
15
21
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// submitBehavior.ts
|
|
2
|
+
import type { TextFieldSubmitBehavior } from './TextField';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The return key behavior of a field: `submitBehavior` if set, else
|
|
6
|
+
* `'newline'` for multi-line fields and `'blurAndSubmit'` otherwise. A
|
|
7
|
+
* single-line field has no newline to insert, so `'newline'` blurs and
|
|
8
|
+
* submits there, as on `TextInput`.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveSubmitBehavior(
|
|
11
|
+
submitBehavior: TextFieldSubmitBehavior | undefined,
|
|
12
|
+
multiline: boolean | undefined
|
|
13
|
+
): TextFieldSubmitBehavior {
|
|
14
|
+
if (multiline) return submitBehavior ?? 'newline';
|
|
15
|
+
return submitBehavior === 'submit' ? 'submit' : 'blurAndSubmit';
|
|
16
|
+
}
|
package/src/tabItems.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// tabItems.ts
|
|
2
|
+
//
|
|
3
|
+
// The tab model of TabBar, and its flattening into the fields the native
|
|
4
|
+
// specs take. Kept apart from the bar so other navigation components can
|
|
5
|
+
// share it.
|
|
6
|
+
import type { TabBarItem as NativeItem } from './TabBarNativeComponent';
|
|
7
|
+
import { resolveIcon, type PlatformIcon } from './icons';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A system tab item on iOS (`UITabBarItem.SystemItem`), with the system's
|
|
11
|
+
* localized title and icon.
|
|
12
|
+
*/
|
|
13
|
+
export type TabBarSystemItem =
|
|
14
|
+
| 'bookmarks'
|
|
15
|
+
| 'contacts'
|
|
16
|
+
| 'downloads'
|
|
17
|
+
| 'favorites'
|
|
18
|
+
| 'featured'
|
|
19
|
+
| 'history'
|
|
20
|
+
| 'more'
|
|
21
|
+
| 'mostRecent'
|
|
22
|
+
| 'mostViewed'
|
|
23
|
+
| 'recents'
|
|
24
|
+
| 'search'
|
|
25
|
+
| 'topRated';
|
|
26
|
+
|
|
27
|
+
export interface TabBarItemProps {
|
|
28
|
+
/**
|
|
29
|
+
* Tab label. Also the screen-reader label unless `accessibilityLabel` is
|
|
30
|
+
* set. iOS system items (`role: 'search'`, `systemItem`) show the system's
|
|
31
|
+
* title instead.
|
|
32
|
+
*/
|
|
33
|
+
label: string;
|
|
34
|
+
|
|
35
|
+
/** Unique value returned in callbacks. */
|
|
36
|
+
value: string;
|
|
37
|
+
|
|
38
|
+
/** Tab icon. See {@link PlatformIcon}. */
|
|
39
|
+
icon?: PlatformIcon;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Icon of the selected tab, e.g. the filled variant of an SF Symbol
|
|
43
|
+
* (`house.fill`). Defaults to `icon`.
|
|
44
|
+
*/
|
|
45
|
+
selectedIcon?: PlatformIcon;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Badge on the tab, e.g. an unread count. Numbers are shown as-is; an
|
|
49
|
+
* empty string shows a dot; `undefined` hides the badge.
|
|
50
|
+
*/
|
|
51
|
+
badge?: string | number;
|
|
52
|
+
|
|
53
|
+
/** Whether the tab can be selected. */
|
|
54
|
+
disabled?: boolean;
|
|
55
|
+
|
|
56
|
+
/** Screen-reader label. Defaults to `label`. */
|
|
57
|
+
accessibilityLabel?: string;
|
|
58
|
+
|
|
59
|
+
/** Test identifier of the tab, for E2E taps. */
|
|
60
|
+
testID?: string;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* `'search'`: the app's search tab.
|
|
64
|
+
*
|
|
65
|
+
* - iOS: the system search item, with its localized title and magnifying
|
|
66
|
+
* glass. iOS 26 sets it apart from the other tabs, as its own glass
|
|
67
|
+
* circle at the end of the bar.
|
|
68
|
+
* - Android: a regular tab, with a search icon unless `icon` is set.
|
|
69
|
+
*/
|
|
70
|
+
role?: 'search';
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* iOS: a system item (`UITabBarItem.SystemItem`) with the system's
|
|
74
|
+
* localized title and icon, in place of `label` and `icon`. Android
|
|
75
|
+
* has no system items and shows `label` and `icon`.
|
|
76
|
+
*/
|
|
77
|
+
systemItem?: TabBarSystemItem;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Material and iOS tab bars show at most five tabs on a phone. */
|
|
81
|
+
export const MAX_TAB_ITEMS = 5;
|
|
82
|
+
|
|
83
|
+
/** The tabs as the native specs take them, at most `max`. */
|
|
84
|
+
export function toNativeTabItems(
|
|
85
|
+
items: readonly TabBarItemProps[],
|
|
86
|
+
max: number = MAX_TAB_ITEMS
|
|
87
|
+
): NativeItem[] {
|
|
88
|
+
return items.slice(0, max).map((item) => {
|
|
89
|
+
const icon = resolveIcon(item.icon);
|
|
90
|
+
const selected = resolveIcon(item.selectedIcon);
|
|
91
|
+
return {
|
|
92
|
+
label: item.label,
|
|
93
|
+
value: item.value,
|
|
94
|
+
disabled: item.disabled ? 'disabled' : 'enabled',
|
|
95
|
+
...icon,
|
|
96
|
+
selectedIconType: selected.iconType,
|
|
97
|
+
selectedIconName: selected.iconName,
|
|
98
|
+
selectedIconRequest: selected.iconRequest,
|
|
99
|
+
selectedIconUri: selected.iconUri,
|
|
100
|
+
selectedIconScale: selected.iconScale,
|
|
101
|
+
selectedIconTinted: selected.iconTinted,
|
|
102
|
+
badge:
|
|
103
|
+
item.badge === undefined || item.badge === null
|
|
104
|
+
? ''
|
|
105
|
+
: // An empty badge is a dot; native tells it from none by a space
|
|
106
|
+
String(item.badge) || ' ',
|
|
107
|
+
accessibilityLabel: item.accessibilityLabel ?? '',
|
|
108
|
+
testID: item.testID ?? '',
|
|
109
|
+
role: item.role ?? '',
|
|
110
|
+
systemItem: item.systemItem ?? '',
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// web/Button.tsx
|
|
2
|
+
import React, { useEffect, useRef } from 'react';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
|
|
5
|
+
import type { ButtonProps } from '../Button';
|
|
6
|
+
import { Icon } from './Icon';
|
|
7
|
+
import {
|
|
8
|
+
BUTTON_BASE,
|
|
9
|
+
BUTTON_SIZES,
|
|
10
|
+
buttonColors,
|
|
11
|
+
cssColor,
|
|
12
|
+
cssFont,
|
|
13
|
+
usePrimaryColor,
|
|
14
|
+
warnOnce,
|
|
15
|
+
} from './shared';
|
|
16
|
+
|
|
17
|
+
/** The Web Animations API surface the spinner uses (no DOM lib here). */
|
|
18
|
+
type AnimatableElement = {
|
|
19
|
+
animate?: (
|
|
20
|
+
keyframes: object[],
|
|
21
|
+
options: { duration: number; iterations: number }
|
|
22
|
+
) => { cancel: () => void };
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A `<button>`, styled after the Material 3 button variants. A toggle
|
|
27
|
+
* (`selected`) sets `aria-pressed` and takes the filled look when selected.
|
|
28
|
+
* Browsers have no native menu, so a button with a `menu` calls `onPress`.
|
|
29
|
+
*/
|
|
30
|
+
export function Button(props: ButtonProps): React.ReactElement {
|
|
31
|
+
const {
|
|
32
|
+
label,
|
|
33
|
+
icon,
|
|
34
|
+
iconPosition = 'leading',
|
|
35
|
+
variant = 'filled',
|
|
36
|
+
size = 'small',
|
|
37
|
+
shape = 'round',
|
|
38
|
+
cornerRadius,
|
|
39
|
+
disabled,
|
|
40
|
+
loading,
|
|
41
|
+
color,
|
|
42
|
+
tintColor,
|
|
43
|
+
disabledColor,
|
|
44
|
+
disabledTintColor,
|
|
45
|
+
labelStyle,
|
|
46
|
+
// Browsers scale text with page zoom, which has no cap
|
|
47
|
+
maxFontSizeMultiplier: _maxFontSizeMultiplier,
|
|
48
|
+
accessibilityLabel,
|
|
49
|
+
onPress,
|
|
50
|
+
selected,
|
|
51
|
+
onSelectedChange,
|
|
52
|
+
menu,
|
|
53
|
+
onMenuSelect: _onMenuSelect,
|
|
54
|
+
onMenuOpen: _onMenuOpen,
|
|
55
|
+
onMenuClose: _onMenuClose,
|
|
56
|
+
// SF Symbols don't exist on the web
|
|
57
|
+
ios: _ios,
|
|
58
|
+
android,
|
|
59
|
+
style,
|
|
60
|
+
...viewProps
|
|
61
|
+
} = props;
|
|
62
|
+
|
|
63
|
+
if (menu && menu.length > 0) {
|
|
64
|
+
warnOnce(
|
|
65
|
+
'Button.menu',
|
|
66
|
+
'Button menus have no web implementation; the button calls onPress instead. ' +
|
|
67
|
+
'See https://jarx-concepts.github.io/react-native-platform-components/guides/web'
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const isToggle = selected !== undefined;
|
|
72
|
+
const primary = usePrimaryColor();
|
|
73
|
+
const metrics = BUTTON_SIZES[size] ?? BUTTON_SIZES.small!;
|
|
74
|
+
// A toggle is filled when selected; a filled toggle is tonal when not, as
|
|
75
|
+
// Material's toggle buttons are
|
|
76
|
+
const look = !isToggle
|
|
77
|
+
? variant
|
|
78
|
+
: selected
|
|
79
|
+
? 'filled'
|
|
80
|
+
: variant === 'filled'
|
|
81
|
+
? 'tonal'
|
|
82
|
+
: variant;
|
|
83
|
+
const colors = buttonColors(
|
|
84
|
+
look,
|
|
85
|
+
primary,
|
|
86
|
+
isToggle && selected ? undefined : cssColor(color),
|
|
87
|
+
isToggle && selected ? undefined : cssColor(tintColor)
|
|
88
|
+
);
|
|
89
|
+
const vertical = iconPosition === 'top' || iconPosition === 'bottom';
|
|
90
|
+
const direction = (
|
|
91
|
+
{
|
|
92
|
+
leading: 'row',
|
|
93
|
+
trailing: 'row-reverse',
|
|
94
|
+
top: 'column',
|
|
95
|
+
bottom: 'column-reverse',
|
|
96
|
+
} as const
|
|
97
|
+
)[iconPosition];
|
|
98
|
+
|
|
99
|
+
const handleClick = () => {
|
|
100
|
+
if (isToggle) onSelectedChange?.(!selected);
|
|
101
|
+
onPress?.();
|
|
102
|
+
};
|
|
103
|
+
// Custom disabled colors replace the default faded look.
|
|
104
|
+
const customDisabled =
|
|
105
|
+
disabled &&
|
|
106
|
+
(disabledColor !== undefined || disabledTintColor !== undefined);
|
|
107
|
+
if (disabled) {
|
|
108
|
+
if (disabledColor !== undefined) {
|
|
109
|
+
colors.backgroundColor = cssColor(disabledColor);
|
|
110
|
+
}
|
|
111
|
+
if (disabledTintColor !== undefined) {
|
|
112
|
+
colors.color = cssColor(disabledTintColor);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const iconElement = (
|
|
117
|
+
<Icon icon={icon} color={colors.color as string | undefined} />
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
// The Web Animations API spins the indicator without a stylesheet.
|
|
121
|
+
const spinnerRef = useRef<AnimatableElement | null>(null);
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
const spinner = spinnerRef.current;
|
|
124
|
+
if (!loading || !spinner?.animate) return undefined;
|
|
125
|
+
const animation = spinner.animate(
|
|
126
|
+
[{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }],
|
|
127
|
+
{ duration: 800, iterations: Infinity }
|
|
128
|
+
);
|
|
129
|
+
return () => animation.cancel();
|
|
130
|
+
}, [loading]);
|
|
131
|
+
const spinnerSize = Math.round(metrics.fontSize * 1.3);
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<View {...viewProps} style={[{ alignSelf: 'flex-start' }, style]}>
|
|
135
|
+
<button
|
|
136
|
+
type="button"
|
|
137
|
+
disabled={disabled}
|
|
138
|
+
aria-label={accessibilityLabel ?? label}
|
|
139
|
+
aria-busy={loading || undefined}
|
|
140
|
+
aria-pressed={isToggle ? !!selected : undefined}
|
|
141
|
+
onClick={loading ? undefined : handleClick}
|
|
142
|
+
style={{
|
|
143
|
+
...BUTTON_BASE,
|
|
144
|
+
...colors,
|
|
145
|
+
// An icon above or below the label makes the button taller
|
|
146
|
+
...(vertical
|
|
147
|
+
? { minHeight: metrics.height, gap: 4 }
|
|
148
|
+
: { height: metrics.height }),
|
|
149
|
+
minWidth: metrics.height,
|
|
150
|
+
padding: label ? `${vertical ? 8 : 0}px ${metrics.padding}px` : 0,
|
|
151
|
+
flexDirection: direction,
|
|
152
|
+
borderRadius:
|
|
153
|
+
cornerRadius ?? (shape === 'square' ? 12 : metrics.height / 2),
|
|
154
|
+
fontSize: metrics.fontSize,
|
|
155
|
+
opacity: disabled && !customDisabled ? 0.38 : 1,
|
|
156
|
+
cursor: disabled || loading ? 'default' : 'pointer',
|
|
157
|
+
position: 'relative',
|
|
158
|
+
...cssFont(labelStyle),
|
|
159
|
+
}}
|
|
160
|
+
>
|
|
161
|
+
{!loading && iconElement}
|
|
162
|
+
{!loading && label}
|
|
163
|
+
{loading && (
|
|
164
|
+
<>
|
|
165
|
+
{/* Hidden, not removed, so the button keeps its width */}
|
|
166
|
+
<span
|
|
167
|
+
style={{
|
|
168
|
+
display: 'inline-flex',
|
|
169
|
+
alignItems: 'center',
|
|
170
|
+
gap: BUTTON_BASE.gap,
|
|
171
|
+
flexDirection: 'inherit',
|
|
172
|
+
visibility: 'hidden',
|
|
173
|
+
}}
|
|
174
|
+
>
|
|
175
|
+
{iconElement}
|
|
176
|
+
{label}
|
|
177
|
+
</span>
|
|
178
|
+
<span
|
|
179
|
+
ref={(element) => {
|
|
180
|
+
spinnerRef.current = element as unknown as AnimatableElement;
|
|
181
|
+
}}
|
|
182
|
+
aria-hidden
|
|
183
|
+
style={{
|
|
184
|
+
position: 'absolute',
|
|
185
|
+
top: '50%',
|
|
186
|
+
left: '50%',
|
|
187
|
+
width: spinnerSize,
|
|
188
|
+
height: spinnerSize,
|
|
189
|
+
margin: -spinnerSize / 2,
|
|
190
|
+
boxSizing: 'border-box',
|
|
191
|
+
borderRadius: '50%',
|
|
192
|
+
border: `2px solid ${colors.color ?? 'currentColor'}`,
|
|
193
|
+
borderTopColor: 'transparent',
|
|
194
|
+
}}
|
|
195
|
+
/>
|
|
196
|
+
</>
|
|
197
|
+
)}
|
|
198
|
+
</button>
|
|
199
|
+
</View>
|
|
200
|
+
);
|
|
201
|
+
}
|