react-native-platform-components 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PlatformComponents.podspec +1 -1
- package/README.md +33 -31
- package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
- package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
- package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
- package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
- package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
- package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
- package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
- package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
- package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
- package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
- package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
- package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
- package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
- package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
- package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
- package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
- package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
- package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
- package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
- package/android/src/main/res/values/ids.xml +5 -0
- package/android/src/main/res/values/styles.xml +24 -0
- package/ios/PCButton.mm +122 -7
- package/ios/PCButtonGroup.mm +68 -1
- package/ios/PCButtonGroupView.swift +225 -6
- package/ios/PCButtonSupport.swift +181 -10
- package/ios/PCButtonView.swift +297 -14
- package/ios/PCConstants.swift +23 -2
- package/ios/PCContextMenu.mm +28 -110
- package/ios/PCContextMenu.swift +106 -167
- package/ios/PCDatePicker.mm +21 -9
- package/ios/PCDatePickerView.swift +94 -20
- package/ios/PCFloatingActionButton.h +10 -0
- package/ios/PCFloatingActionButton.mm +177 -0
- package/ios/PCFloatingActionButtonView.swift +426 -0
- package/ios/PCFloatingToolbar.mm +27 -0
- package/ios/PCFloatingToolbarView.swift +241 -0
- package/ios/PCHaptics.swift +91 -0
- package/ios/PCImageLoader.swift +76 -12
- package/ios/PCLiquidGlass.mm +36 -0
- package/ios/PCLiquidGlass.swift +221 -114
- package/ios/PCLiquidGlassContainer.h +10 -0
- package/ios/PCLiquidGlassContainer.mm +84 -0
- package/ios/PCLiquidGlassContainer.swift +69 -0
- package/ios/PCMenuItems.h +76 -0
- package/ios/PCMenuSupport.swift +350 -0
- package/ios/PCNavigationRail.h +10 -0
- package/ios/PCNavigationRail.mm +270 -0
- package/ios/PCNavigationRailView.swift +415 -0
- package/ios/PCSegmentedControl.mm +17 -2
- package/ios/PCSegmentedControl.swift +57 -7
- package/ios/PCSelectionMenu.mm +36 -8
- package/ios/PCSelectionMenu.swift +224 -48
- package/ios/PCTabBar.h +10 -0
- package/ios/PCTabBar.mm +285 -0
- package/ios/PCTabBarAccessory.h +10 -0
- package/ios/PCTabBarAccessory.mm +93 -0
- package/ios/PCTabBarAccessoryView.swift +96 -0
- package/ios/PCTabBarView.swift +671 -0
- package/ios/PCTextField.mm +159 -4
- package/ios/PCTextFieldView.swift +603 -57
- package/lib/commonjs/Button.js +73 -1
- package/lib/commonjs/Button.js.map +1 -1
- package/lib/commonjs/ButtonGroup.js +13 -3
- package/lib/commonjs/ButtonGroup.js.map +1 -1
- package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
- package/lib/commonjs/ButtonNativeComponent.ts +119 -3
- package/lib/commonjs/ContextMenu.js +9 -48
- package/lib/commonjs/ContextMenu.js.map +1 -1
- package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
- package/lib/commonjs/DatePicker.js +98 -2
- package/lib/commonjs/DatePicker.js.map +1 -1
- package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
- package/lib/commonjs/FloatingActionButton.js +60 -0
- package/lib/commonjs/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/commonjs/FloatingToolbar.js +9 -1
- package/lib/commonjs/FloatingToolbar.js.map +1 -1
- package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/commonjs/LiquidGlass.js +7 -1
- package/lib/commonjs/LiquidGlass.js.map +1 -1
- package/lib/commonjs/LiquidGlassContainer.js +32 -0
- package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
- package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
- package/lib/commonjs/NavigationRail.js +104 -0
- package/lib/commonjs/NavigationRail.js.map +1 -0
- package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
- package/lib/commonjs/PlatformComponentsProvider.js +18 -0
- package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/SegmentedControl.js +7 -0
- package/lib/commonjs/SegmentedControl.js.map +1 -1
- package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
- package/lib/commonjs/SelectionMenu.js +27 -3
- package/lib/commonjs/SelectionMenu.js.map +1 -1
- package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
- package/lib/commonjs/SplitButton.js +98 -0
- package/lib/commonjs/SplitButton.js.map +1 -0
- package/lib/commonjs/TabBar.js +203 -0
- package/lib/commonjs/TabBar.js.map +1 -0
- package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/commonjs/TabBarNativeComponent.ts +145 -0
- package/lib/commonjs/TextField.js +171 -8
- package/lib/commonjs/TextField.js.map +1 -1
- package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
- package/lib/commonjs/focusRegistry.js +2 -1
- package/lib/commonjs/focusRegistry.js.map +1 -1
- package/lib/commonjs/haptics.js +2 -0
- package/lib/commonjs/haptics.js.map +1 -0
- package/lib/commonjs/icons.js +15 -1
- package/lib/commonjs/icons.js.map +1 -1
- package/lib/commonjs/index.js +77 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +156 -92
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/jest.js +910 -0
- package/lib/commonjs/jest.js.map +1 -0
- package/lib/commonjs/menuItems.js +68 -0
- package/lib/commonjs/menuItems.js.map +1 -0
- package/lib/commonjs/selectionIdentifiers.js +18 -0
- package/lib/commonjs/selectionIdentifiers.js.map +1 -0
- package/lib/commonjs/submitBehavior.js +19 -0
- package/lib/commonjs/submitBehavior.js.map +1 -0
- package/lib/commonjs/tabItems.js +49 -0
- package/lib/commonjs/tabItems.js.map +1 -0
- package/lib/commonjs/web/Button.js +170 -0
- package/lib/commonjs/web/Button.js.map +1 -0
- package/lib/commonjs/web/ButtonGroup.js +119 -0
- package/lib/commonjs/web/ButtonGroup.js.map +1 -0
- package/lib/commonjs/web/DatePicker.js +168 -0
- package/lib/commonjs/web/DatePicker.js.map +1 -0
- package/lib/commonjs/web/DateRangePicker.js +137 -0
- package/lib/commonjs/web/DateRangePicker.js.map +1 -0
- package/lib/commonjs/web/Dialog.js +54 -0
- package/lib/commonjs/web/Dialog.js.map +1 -0
- package/lib/commonjs/web/FloatingActionButton.js +98 -0
- package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/web/Icon.js +34 -0
- package/lib/commonjs/web/Icon.js.map +1 -0
- package/lib/commonjs/web/NativeTheme.js +28 -0
- package/lib/commonjs/web/NativeTheme.js.map +1 -0
- package/lib/commonjs/web/NavigationRail.js +139 -0
- package/lib/commonjs/web/NavigationRail.js.map +1 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/web/SegmentedControl.js +117 -0
- package/lib/commonjs/web/SegmentedControl.js.map +1 -0
- package/lib/commonjs/web/SelectionMenu.js +142 -0
- package/lib/commonjs/web/SelectionMenu.js.map +1 -0
- package/lib/commonjs/web/SplitButton.js +35 -0
- package/lib/commonjs/web/SplitButton.js.map +1 -0
- package/lib/commonjs/web/TabBar.js +131 -0
- package/lib/commonjs/web/TabBar.js.map +1 -0
- package/lib/commonjs/web/TextField.js +322 -0
- package/lib/commonjs/web/TextField.js.map +1 -0
- package/lib/commonjs/web/components.js +36 -0
- package/lib/commonjs/web/components.js.map +1 -0
- package/lib/commonjs/web/containers.js +121 -0
- package/lib/commonjs/web/containers.js.map +1 -0
- package/lib/commonjs/web/dateInput.js +116 -0
- package/lib/commonjs/web/dateInput.js.map +1 -0
- package/lib/commonjs/web/shared.js +192 -0
- package/lib/commonjs/web/shared.js.map +1 -0
- package/lib/commonjs/webComponents.js +6 -0
- package/lib/commonjs/webComponents.js.map +1 -0
- package/lib/module/Button.js +74 -2
- package/lib/module/Button.js.map +1 -1
- package/lib/module/ButtonGroup.js +13 -3
- package/lib/module/ButtonGroup.js.map +1 -1
- package/lib/module/ButtonGroupNativeComponent.ts +74 -4
- package/lib/module/ButtonNativeComponent.ts +119 -3
- package/lib/module/ContextMenu.js +9 -48
- package/lib/module/ContextMenu.js.map +1 -1
- package/lib/module/ContextMenuNativeComponent.ts +47 -49
- package/lib/module/DatePicker.js +98 -4
- package/lib/module/DatePicker.js.map +1 -1
- package/lib/module/DatePickerNativeComponent.ts +19 -2
- package/lib/module/FloatingActionButton.js +53 -0
- package/lib/module/FloatingActionButton.js.map +1 -0
- package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/module/FloatingToolbar.js +9 -1
- package/lib/module/FloatingToolbar.js.map +1 -1
- package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/module/LiquidGlass.js +7 -1
- package/lib/module/LiquidGlass.js.map +1 -1
- package/lib/module/LiquidGlassContainer.js +26 -0
- package/lib/module/LiquidGlassContainer.js.map +1 -0
- package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/module/LiquidGlassNativeComponent.ts +8 -0
- package/lib/module/NavigationRail.js +99 -0
- package/lib/module/NavigationRail.js.map +1 -0
- package/lib/module/NavigationRailNativeComponent.ts +107 -0
- package/lib/module/PlatformComponentsProvider.js +13 -0
- package/lib/module/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/SegmentedControl.js +9 -1
- package/lib/module/SegmentedControl.js.map +1 -1
- package/lib/module/SegmentedControlNativeComponent.ts +11 -0
- package/lib/module/SelectionMenu.js +27 -3
- package/lib/module/SelectionMenu.js.map +1 -1
- package/lib/module/SelectionMenuNativeComponent.ts +26 -4
- package/lib/module/SplitButton.js +91 -0
- package/lib/module/SplitButton.js.map +1 -0
- package/lib/module/TabBar.js +196 -0
- package/lib/module/TabBar.js.map +1 -0
- package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/module/TabBarNativeComponent.ts +145 -0
- package/lib/module/TextField.js +172 -9
- package/lib/module/TextField.js.map +1 -1
- package/lib/module/TextFieldNativeComponent.ts +110 -4
- package/lib/module/focusRegistry.js +1 -0
- package/lib/module/focusRegistry.js.map +1 -1
- package/lib/module/haptics.js +2 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/icons.js +15 -1
- package/lib/module/icons.js.map +1 -1
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +12 -87
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/jest.js +840 -0
- package/lib/module/jest.js.map +1 -0
- package/lib/module/menuItems.js +65 -0
- package/lib/module/menuItems.js.map +1 -0
- package/lib/module/selectionIdentifiers.js +14 -0
- package/lib/module/selectionIdentifiers.js.map +1 -0
- package/lib/module/submitBehavior.js +15 -0
- package/lib/module/submitBehavior.js.map +1 -0
- package/lib/module/tabItems.js +45 -0
- package/lib/module/tabItems.js.map +1 -0
- package/lib/module/web/Button.js +164 -0
- package/lib/module/web/Button.js.map +1 -0
- package/lib/module/web/ButtonGroup.js +113 -0
- package/lib/module/web/ButtonGroup.js.map +1 -0
- package/lib/module/web/DatePicker.js +162 -0
- package/lib/module/web/DatePicker.js.map +1 -0
- package/lib/module/web/DateRangePicker.js +131 -0
- package/lib/module/web/DateRangePicker.js.map +1 -0
- package/lib/module/web/Dialog.js +48 -0
- package/lib/module/web/Dialog.js.map +1 -0
- package/lib/module/web/FloatingActionButton.js +94 -0
- package/lib/module/web/FloatingActionButton.js.map +1 -0
- package/lib/module/web/Icon.js +29 -0
- package/lib/module/web/Icon.js.map +1 -0
- package/lib/module/web/NativeTheme.js +23 -0
- package/lib/module/web/NativeTheme.js.map +1 -0
- package/lib/module/web/NavigationRail.js +133 -0
- package/lib/module/web/NavigationRail.js.map +1 -0
- package/lib/module/web/PlatformComponentsProvider.js +44 -0
- package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/web/SegmentedControl.js +112 -0
- package/lib/module/web/SegmentedControl.js.map +1 -0
- package/lib/module/web/SelectionMenu.js +137 -0
- package/lib/module/web/SelectionMenu.js.map +1 -0
- package/lib/module/web/SplitButton.js +30 -0
- package/lib/module/web/SplitButton.js.map +1 -0
- package/lib/module/web/TabBar.js +126 -0
- package/lib/module/web/TabBar.js.map +1 -0
- package/lib/module/web/TextField.js +316 -0
- package/lib/module/web/TextField.js.map +1 -0
- package/lib/module/web/components.js +33 -0
- package/lib/module/web/components.js.map +1 -0
- package/lib/module/web/containers.js +112 -0
- package/lib/module/web/containers.js.map +1 -0
- package/lib/module/web/dateInput.js +109 -0
- package/lib/module/web/dateInput.js.map +1 -0
- package/lib/module/web/shared.js +179 -0
- package/lib/module/web/shared.js.map +1 -0
- package/lib/module/webComponents.js +4 -0
- package/lib/module/webComponents.js.map +1 -0
- package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/Button.d.ts +111 -3
- package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
- package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
- package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
- package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/icons.d.ts +7 -1
- package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +7 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
- package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/jest.d.ts +139 -0
- package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
- package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
- package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/module/src/Button.d.ts +111 -3
- package/lib/typescript/module/src/Button.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePicker.d.ts +74 -1
- package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SplitButton.d.ts +83 -0
- package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBar.d.ts +144 -0
- package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TextField.d.ts +166 -8
- package/lib/typescript/module/src/TextField.d.ts.map +1 -1
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/haptics.d.ts +20 -0
- package/lib/typescript/module/src/haptics.d.ts.map +1 -0
- package/lib/typescript/module/src/icons.d.ts +7 -1
- package/lib/typescript/module/src/icons.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +7 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.web.d.ts +25 -254
- package/lib/typescript/module/src/index.web.d.ts.map +1 -1
- package/lib/typescript/module/src/jest.d.ts +139 -0
- package/lib/typescript/module/src/jest.d.ts.map +1 -0
- package/lib/typescript/module/src/menuItems.d.ts +100 -0
- package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/module/src/tabItems.d.ts +55 -0
- package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Button.d.ts +9 -0
- package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Icon.d.ts +12 -0
- package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TextField.d.ts +9 -0
- package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/web/components.d.ts +17 -0
- package/lib/typescript/module/src/web/components.d.ts.map +1 -0
- package/lib/typescript/module/src/web/containers.d.ts +24 -0
- package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/module/src/web/shared.d.ts +43 -0
- package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/module/src/webComponents.d.ts +43 -0
- package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
- package/package.json +32 -2
- package/plugin/build/index.d.ts +3 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/react-native.config.js +3 -0
- package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
- package/shared/PCFloatingActionButtonState-custom.h +61 -0
- package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
- package/shared/PCNavigationRailShadowNode-custom.h +42 -0
- package/shared/PCNavigationRailState-custom.h +62 -0
- package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
- package/shared/PCTabBarShadowNode-custom.cpp +54 -0
- package/shared/PCTabBarShadowNode-custom.h +54 -0
- package/shared/PCTabBarState-custom.h +62 -0
- package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
- package/src/Button.tsx +222 -7
- package/src/ButtonGroup.tsx +29 -11
- package/src/ButtonGroupNativeComponent.ts +74 -4
- package/src/ButtonNativeComponent.ts +119 -3
- package/src/ContextMenu.tsx +34 -81
- package/src/ContextMenuNativeComponent.ts +47 -49
- package/src/DatePicker.tsx +182 -4
- package/src/DatePickerNativeComponent.ts +19 -2
- package/src/FloatingActionButton.tsx +121 -0
- package/src/FloatingActionButtonNativeComponent.ts +58 -0
- package/src/FloatingToolbar.tsx +54 -3
- package/src/FloatingToolbarNativeComponent.ts +16 -0
- package/src/LiquidGlass.tsx +24 -1
- package/src/LiquidGlassContainer.tsx +42 -0
- package/src/LiquidGlassContainerNativeComponent.ts +17 -0
- package/src/LiquidGlassNativeComponent.ts +8 -0
- package/src/NavigationRail.tsx +203 -0
- package/src/NavigationRailNativeComponent.ts +107 -0
- package/src/PlatformComponentsProvider.tsx +15 -0
- package/src/SegmentedControl.tsx +31 -1
- package/src/SegmentedControlNativeComponent.ts +11 -0
- package/src/SelectionMenu.tsx +81 -6
- package/src/SelectionMenuNativeComponent.ts +26 -4
- package/src/SplitButton.tsx +198 -0
- package/src/TabBar.tsx +373 -0
- package/src/TabBarAccessoryNativeComponent.ts +19 -0
- package/src/TabBarNativeComponent.ts +145 -0
- package/src/TextField.tsx +428 -14
- package/src/TextFieldNativeComponent.ts +110 -4
- package/src/focusRegistry.ts +1 -0
- package/src/haptics.ts +31 -0
- package/src/icons.ts +28 -1
- package/src/index.tsx +7 -0
- package/src/index.web.tsx +51 -391
- package/src/jest.tsx +958 -0
- package/src/menuItems.ts +152 -0
- package/src/selectionIdentifiers.ts +17 -0
- package/src/submitBehavior.ts +16 -0
- package/src/tabItems.ts +113 -0
- package/src/web/Button.tsx +201 -0
- package/src/web/ButtonGroup.tsx +154 -0
- package/src/web/DatePicker.tsx +204 -0
- package/src/web/DateRangePicker.tsx +135 -0
- package/src/web/Dialog.tsx +54 -0
- package/src/web/FloatingActionButton.tsx +76 -0
- package/src/web/Icon.tsx +33 -0
- package/src/web/NativeTheme.ts +23 -0
- package/src/web/NavigationRail.tsx +148 -0
- package/src/web/PlatformComponentsProvider.tsx +48 -0
- package/src/web/SegmentedControl.tsx +127 -0
- package/src/web/SelectionMenu.tsx +149 -0
- package/src/web/SplitButton.tsx +32 -0
- package/src/web/TabBar.tsx +150 -0
- package/src/web/TextField.tsx +361 -0
- package/src/web/components.tsx +71 -0
- package/src/web/containers.tsx +130 -0
- package/src/web/dateInput.ts +137 -0
- package/src/web/shared.ts +176 -0
- package/src/webComponents.ts +45 -0
- package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
package com.platformcomponents
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.widget.FrameLayout
|
|
6
|
+
import androidx.core.view.ViewCompat
|
|
7
|
+
import com.facebook.react.bridge.WritableNativeMap
|
|
8
|
+
import com.facebook.react.uimanager.PixelUtil
|
|
9
|
+
import com.facebook.react.uimanager.ReactCompoundViewGroup
|
|
10
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
11
|
+
import com.facebook.react.uimanager.util.ReactFindViewUtil
|
|
12
|
+
import com.facebook.react.views.scroll.ReactScrollViewHelper
|
|
13
|
+
import com.google.android.material.bottomnavigation.BottomNavigationView
|
|
14
|
+
import com.platformcomponents.PCNavigationBarSupport.Indicator
|
|
15
|
+
import com.platformcomponents.PCNavigationBarSupport.Item
|
|
16
|
+
import com.platformcomponents.PCNavigationBarSupport.LabelFont
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A Material 3 navigation bar (BottomNavigationView): icons over (or beside)
|
|
20
|
+
* labels, the active indicator, badges. Selection is controlled from JS; a
|
|
21
|
+
* press reports the tab and whether it was already selected.
|
|
22
|
+
*
|
|
23
|
+
* The bar is rebuilt for every prop that Material only reads at construction
|
|
24
|
+
* or when the menu is inflated; it keeps no state of its own besides the
|
|
25
|
+
* props, so a rebuild is invisible.
|
|
26
|
+
*/
|
|
27
|
+
class PCTabBarView(context: Context) :
|
|
28
|
+
FrameLayout(context),
|
|
29
|
+
ReactScrollViewHelper.HasStateWrapper,
|
|
30
|
+
ReactCompoundViewGroup {
|
|
31
|
+
|
|
32
|
+
// --- State Wrapper for Fabric state updates ---
|
|
33
|
+
override var stateWrapper: StateWrapper? = null
|
|
34
|
+
private var lastReportedHeight: Float = -1f
|
|
35
|
+
|
|
36
|
+
// --- Props ---
|
|
37
|
+
var tabs: List<Item> = emptyList()
|
|
38
|
+
var selectedValue: String = ""
|
|
39
|
+
var labelVisibility: String = "auto"
|
|
40
|
+
var activeTintColor: Int? = null
|
|
41
|
+
var inactiveTintColor: Int? = null
|
|
42
|
+
var barColor: Int? = null
|
|
43
|
+
var badgeBackgroundColor: Int? = null
|
|
44
|
+
var badgeTextColor: Int? = null
|
|
45
|
+
var indicatorColor: Int? = null
|
|
46
|
+
var rippleColor: Int? = null
|
|
47
|
+
var labelFont: LabelFont = LabelFont()
|
|
48
|
+
var indicator: Indicator = Indicator()
|
|
49
|
+
var itemLayout: String = "" // "" | "vertical" | "horizontal" | "auto"
|
|
50
|
+
var minimizeBehavior: String = "" // "" | "automatic" | "never" | "onScrollDown" | "onScrollUp"
|
|
51
|
+
var scrollViewNativeID: String = ""
|
|
52
|
+
var accessoryID: String = "" // nativeID of the accessory view above the bar
|
|
53
|
+
|
|
54
|
+
/** The `haptics` prop; the manager plays it with the user's action (see PCHaptics). */
|
|
55
|
+
var haptics: String = ""
|
|
56
|
+
|
|
57
|
+
// --- Events ---
|
|
58
|
+
var onTabPress: ((index: Int, value: String, reselected: Boolean) -> Unit)? = null
|
|
59
|
+
|
|
60
|
+
// --- UI (declared before init: rebuildUI() runs from it) ---
|
|
61
|
+
private var bar: BottomNavigationView? = null
|
|
62
|
+
private var suppressCallbacks = false
|
|
63
|
+
|
|
64
|
+
/** Bumped on every rebuild so late image loads can't touch a stale bar. */
|
|
65
|
+
private var rebuildGeneration = 0
|
|
66
|
+
|
|
67
|
+
// --- Native theme ---
|
|
68
|
+
// Widgets read theme colors when they are created, so the bar is rebuilt
|
|
69
|
+
// when the native theme changes (brand color, light/dark switch).
|
|
70
|
+
private var builtThemeVersion = PCNativeTheme.version
|
|
71
|
+
private val nativeThemeListener = PCNativeTheme.Listener {
|
|
72
|
+
PCThemeSupport.clearColorStateListCaches(this)
|
|
73
|
+
rebuildUI()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
init {
|
|
77
|
+
rebuildUI()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ---- Public apply* (called by manager) ----
|
|
81
|
+
|
|
82
|
+
fun applyTabs(value: List<Item>) {
|
|
83
|
+
if (tabs == value) return
|
|
84
|
+
tabs = value
|
|
85
|
+
rebuildUI()
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
fun applySelectedValue(value: String) {
|
|
89
|
+
if (selectedValue == value) return
|
|
90
|
+
selectedValue = value
|
|
91
|
+
updateSelection()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
fun applyLabelVisibility(value: String?) {
|
|
95
|
+
val next = value ?: "auto"
|
|
96
|
+
if (labelVisibility == next) return
|
|
97
|
+
labelVisibility = next
|
|
98
|
+
bar?.labelVisibilityMode = PCNavigationBarSupport.labelVisibilityMode(labelVisibility)
|
|
99
|
+
requestLayout()
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
fun applyColors(active: Int?, inactive: Int?, background: Int?, indicator: Int?, ripple: Int?) {
|
|
103
|
+
if (activeTintColor == active && inactiveTintColor == inactive && barColor == background &&
|
|
104
|
+
indicatorColor == indicator && rippleColor == ripple
|
|
105
|
+
) return
|
|
106
|
+
activeTintColor = active
|
|
107
|
+
inactiveTintColor = inactive
|
|
108
|
+
barColor = background
|
|
109
|
+
indicatorColor = indicator
|
|
110
|
+
rippleColor = ripple
|
|
111
|
+
// The theme's colors are only known on a fresh bar
|
|
112
|
+
rebuildUI()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fun applyBadgeColors(background: Int?, text: Int?) {
|
|
116
|
+
if (badgeBackgroundColor == background && badgeTextColor == text) return
|
|
117
|
+
badgeBackgroundColor = background
|
|
118
|
+
badgeTextColor = text
|
|
119
|
+
bar?.let { PCNavigationBarSupport.applyBadges(it, tabs, badgeBackgroundColor, badgeTextColor) }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
fun applyLabelFont(value: LabelFont) {
|
|
123
|
+
if (labelFont == value) return
|
|
124
|
+
labelFont = value
|
|
125
|
+
rebuildUI()
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
fun applyIndicator(value: Indicator) {
|
|
129
|
+
if (indicator == value) return
|
|
130
|
+
indicator = value
|
|
131
|
+
// Back to the theme's indicator for the fields left unset
|
|
132
|
+
rebuildUI()
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
fun applyItemLayout(value: String) {
|
|
136
|
+
if (itemLayout == value) return
|
|
137
|
+
itemLayout = value
|
|
138
|
+
bar?.let { PCNavigationBarSupport.applyItemLayout(it, itemLayout, width) }
|
|
139
|
+
requestLayout()
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
fun applyAccessoryID(value: String) {
|
|
143
|
+
if (accessoryID == value) return
|
|
144
|
+
if (barHidden) setBarHidden(false)
|
|
145
|
+
accessoryID = value
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// ---- Hide on scroll ----
|
|
149
|
+
// Android has no minimized tab bar; the Material behavior is the bar
|
|
150
|
+
// sliding away while the content scrolls (HideBottomViewOnScrollBehavior),
|
|
151
|
+
// with its timings. The host view moves, so React Native's touch targeting
|
|
152
|
+
// follows it and the content underneath takes the touches.
|
|
153
|
+
|
|
154
|
+
private var watchedScrollView: View? = null
|
|
155
|
+
private var barHidden = false
|
|
156
|
+
private val scrollViewFinder = object : ReactFindViewUtil.OnViewFoundListener {
|
|
157
|
+
override fun getNativeId(): String = scrollViewNativeID
|
|
158
|
+
override fun onViewFound(view: View) = watch(view)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
fun applyMinimize(behavior: String, nativeID: String) {
|
|
162
|
+
if (minimizeBehavior == behavior && scrollViewNativeID == nativeID) return
|
|
163
|
+
val targetChanged = scrollViewNativeID != nativeID
|
|
164
|
+
minimizeBehavior = behavior
|
|
165
|
+
scrollViewNativeID = nativeID
|
|
166
|
+
if (!hidesOnScroll) setBarHidden(false)
|
|
167
|
+
if (targetChanged || watchedScrollView == null) findScrollView()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private val hidesOnScroll: Boolean
|
|
171
|
+
get() = minimizeBehavior == "automatic" || minimizeBehavior == "onScrollDown" || minimizeBehavior == "onScrollUp"
|
|
172
|
+
|
|
173
|
+
/** The ScrollView with scrollViewNativeID, now or once it mounts. */
|
|
174
|
+
private fun findScrollView() {
|
|
175
|
+
unwatch()
|
|
176
|
+
ReactFindViewUtil.removeViewListener(scrollViewFinder)
|
|
177
|
+
if (scrollViewNativeID.isEmpty() || !isAttachedToWindow) return
|
|
178
|
+
val found = ReactFindViewUtil.findView(rootView, scrollViewNativeID)
|
|
179
|
+
if (found != null) watch(found) else ReactFindViewUtil.addViewListener(scrollViewFinder)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private fun watch(view: View) {
|
|
183
|
+
ReactFindViewUtil.removeViewListener(scrollViewFinder)
|
|
184
|
+
unwatch()
|
|
185
|
+
watchedScrollView = view
|
|
186
|
+
view.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> onContentScrolled(scrollY, scrollY - oldScrollY) }
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private fun unwatch() {
|
|
190
|
+
watchedScrollView?.setOnScrollChangeListener(null)
|
|
191
|
+
watchedScrollView = null
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private fun onContentScrolled(scrollY: Int, dy: Int) {
|
|
195
|
+
if (!hidesOnScroll || dy == 0) return
|
|
196
|
+
val scrollingDown = dy > 0
|
|
197
|
+
// Back at the top the bar always shows
|
|
198
|
+
val hide = scrollY > 0 && if (minimizeBehavior == "onScrollUp") !scrollingDown else scrollingDown
|
|
199
|
+
setBarHidden(hide)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** The accessory view above the bar (TabBar's `accessory`), if any. */
|
|
203
|
+
private fun accessoryView(): View? =
|
|
204
|
+
if (accessoryID.isEmpty() || !isAttachedToWindow) null
|
|
205
|
+
else ReactFindViewUtil.findView(rootView, accessoryID)
|
|
206
|
+
|
|
207
|
+
private fun setBarHidden(hide: Boolean) {
|
|
208
|
+
if (barHidden == hide) return
|
|
209
|
+
barHidden = hide
|
|
210
|
+
// An accessory above the bar slides away with it, as one bottom group
|
|
211
|
+
val accessory = accessoryView()
|
|
212
|
+
val distance = height + (accessory?.height ?: 0)
|
|
213
|
+
for (view in listOfNotNull(this, accessory)) {
|
|
214
|
+
view.animate().cancel()
|
|
215
|
+
view.animate()
|
|
216
|
+
.translationY(if (hide) distance.toFloat() else 0f)
|
|
217
|
+
.setDuration(if (hide) 175L else 225L)
|
|
218
|
+
.setInterpolator(
|
|
219
|
+
if (hide) android.view.animation.AccelerateInterpolator() else android.view.animation.DecelerateInterpolator()
|
|
220
|
+
)
|
|
221
|
+
.start()
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ---- Touch ----
|
|
226
|
+
|
|
227
|
+
// The tab views carry the menu item ids, which React Native's touch handling
|
|
228
|
+
// would take for React tags. Claim the touch for this view; the tabs still
|
|
229
|
+
// receive it natively.
|
|
230
|
+
override fun interceptsTouchEvent(touchX: Float, touchY: Float): Boolean = true
|
|
231
|
+
|
|
232
|
+
override fun reactTagForTouch(touchX: Float, touchY: Float): Int = id
|
|
233
|
+
|
|
234
|
+
// ---- Lifecycle ----
|
|
235
|
+
|
|
236
|
+
override fun onAttachedToWindow() {
|
|
237
|
+
super.onAttachedToWindow()
|
|
238
|
+
PCNativeTheme.addListener(nativeThemeListener)
|
|
239
|
+
PCNativeTheme.attach(context)
|
|
240
|
+
if (builtThemeVersion != PCNativeTheme.version) nativeThemeListener.onNativeThemeChanged()
|
|
241
|
+
if (hidesOnScroll && watchedScrollView == null) findScrollView()
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
override fun onDetachedFromWindow() {
|
|
245
|
+
ReactFindViewUtil.removeViewListener(scrollViewFinder)
|
|
246
|
+
unwatch()
|
|
247
|
+
PCNativeTheme.removeListener(nativeThemeListener)
|
|
248
|
+
super.onDetachedFromWindow()
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// ---- UI Building ----
|
|
252
|
+
|
|
253
|
+
private fun rebuildUI() {
|
|
254
|
+
builtThemeVersion = PCNativeTheme.version
|
|
255
|
+
removeAllViews()
|
|
256
|
+
rebuildGeneration += 1
|
|
257
|
+
val generation = rebuildGeneration
|
|
258
|
+
|
|
259
|
+
// Material widgets need a Material theme; fall back to Material 3 defaults instead of crashing.
|
|
260
|
+
val base = PCThemeSupport.materialContext(context, "TabBar")
|
|
261
|
+
val b = BottomNavigationView(base).apply {
|
|
262
|
+
layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
|
|
263
|
+
labelVisibilityMode = PCNavigationBarSupport.labelVisibilityMode(labelVisibility)
|
|
264
|
+
}
|
|
265
|
+
// The bar pads itself for the system navigation bar when it sits at the
|
|
266
|
+
// bottom of the window; here it is a control inside the app's layout,
|
|
267
|
+
// which handles safe areas itself
|
|
268
|
+
ViewCompat.setOnApplyWindowInsetsListener(b, null)
|
|
269
|
+
b.setPadding(0, 0, 0, 0)
|
|
270
|
+
|
|
271
|
+
PCNavigationBarSupport.applyColors(b, activeTintColor, inactiveTintColor, indicatorColor, rippleColor, barColor)
|
|
272
|
+
PCNavigationBarSupport.populateMenu(b, tabs, isCurrent = { generation == rebuildGeneration }) {
|
|
273
|
+
requestLayout()
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
PCNavigationBarSupport.applyIndicator(b, indicator)
|
|
277
|
+
PCNavigationBarSupport.applyItemLayout(b, itemLayout, width)
|
|
278
|
+
// Select or reselect is decided against selectedValue: with no tab
|
|
279
|
+
// selected the widget still counts its last one as selected
|
|
280
|
+
b.setOnItemSelectedListener { item ->
|
|
281
|
+
if (!suppressCallbacks) report(item.itemId - 1)
|
|
282
|
+
// Controlled: the selection follows selectedValue once JS updates it
|
|
283
|
+
post { updateSelection() }
|
|
284
|
+
true
|
|
285
|
+
}
|
|
286
|
+
b.setOnItemReselectedListener { item ->
|
|
287
|
+
if (!suppressCallbacks) report(item.itemId - 1)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
addView(b)
|
|
291
|
+
bar = b
|
|
292
|
+
PCNavigationBarSupport.applyBadges(b, tabs, badgeBackgroundColor, badgeTextColor)
|
|
293
|
+
updateSelection()
|
|
294
|
+
PCNavigationBarSupport.applyTestIDsAndFonts(b, tabs, labelFont)
|
|
295
|
+
requestLayout()
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
private fun report(index: Int) {
|
|
299
|
+
if (index !in tabs.indices) return
|
|
300
|
+
val value = tabs[index].value
|
|
301
|
+
onTabPress?.invoke(index, value, value == selectedValue)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
private fun updateSelection() {
|
|
305
|
+
val b = bar ?: return
|
|
306
|
+
val index = tabs.indexOfFirst { it.value == selectedValue }
|
|
307
|
+
suppressCallbacks = true
|
|
308
|
+
val group = b.menu
|
|
309
|
+
if (index in 0 until minOf(tabs.size, b.maxItemCount)) {
|
|
310
|
+
group.setGroupCheckable(android.view.Menu.NONE, true, true)
|
|
311
|
+
val id = PCNavigationBarSupport.itemId(index)
|
|
312
|
+
if (b.selectedItemId != id) b.selectedItemId = id
|
|
313
|
+
} else {
|
|
314
|
+
// No selection: nothing is checked, so no tab shows the indicator
|
|
315
|
+
group.setGroupCheckable(android.view.Menu.NONE, false, true)
|
|
316
|
+
}
|
|
317
|
+
suppressCallbacks = false
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// ---- Layout ----
|
|
321
|
+
|
|
322
|
+
private var manualLayoutPending = false
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* React Native's root view ignores requestLayout after the initial pass, so
|
|
326
|
+
* a native view that changes its own subtree later has to measure and lay
|
|
327
|
+
* itself out. Coalesced to one pass per frame.
|
|
328
|
+
*/
|
|
329
|
+
override fun requestLayout() {
|
|
330
|
+
super.requestLayout()
|
|
331
|
+
if (!manualLayoutPending) {
|
|
332
|
+
manualLayoutPending = true
|
|
333
|
+
post { runManualLayout() }
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
private fun runManualLayout() {
|
|
338
|
+
manualLayoutPending = false
|
|
339
|
+
if (width == 0 || height == 0) return
|
|
340
|
+
measure(
|
|
341
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
342
|
+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
343
|
+
)
|
|
344
|
+
layout(left, top, right, bottom)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
348
|
+
val b = bar
|
|
349
|
+
if (b == null) {
|
|
350
|
+
setMeasuredDimension(0, 0)
|
|
351
|
+
return
|
|
352
|
+
}
|
|
353
|
+
val width = MeasureSpec.getSize(widthMeasureSpec).let {
|
|
354
|
+
if (it > 0) it else (PCConstants.FALLBACK_WIDTH_DP * resources.displayMetrics.density).toInt()
|
|
355
|
+
}
|
|
356
|
+
PCNavigationBarSupport.applyItemLayout(b, itemLayout, width)
|
|
357
|
+
b.measure(
|
|
358
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
359
|
+
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
|
|
360
|
+
)
|
|
361
|
+
// Keep the bar's natural height even before Yoga has caught up
|
|
362
|
+
setMeasuredDimension(width, b.measuredHeight)
|
|
363
|
+
reportHeight(b.measuredHeight)
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
|
367
|
+
val b = bar ?: return
|
|
368
|
+
b.layout(0, 0, right - left, b.measuredHeight)
|
|
369
|
+
// Material creates the label views as tabs are added; style any new ones
|
|
370
|
+
PCNavigationBarSupport.applyTestIDsAndFonts(b, tabs, labelFont)
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/** Reports the intrinsic height to Fabric; the width is left to Yoga. */
|
|
374
|
+
fun reportIntrinsicSize() {
|
|
375
|
+
val b = bar ?: return
|
|
376
|
+
val width = if (width > 0) width else (PCConstants.FALLBACK_WIDTH_DP * resources.displayMetrics.density).toInt()
|
|
377
|
+
PCNavigationBarSupport.applyItemLayout(b, itemLayout, width)
|
|
378
|
+
b.measure(
|
|
379
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
380
|
+
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
|
|
381
|
+
)
|
|
382
|
+
reportHeight(b.measuredHeight)
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
private fun reportHeight(heightPx: Int) {
|
|
386
|
+
val wrapper = stateWrapper ?: return
|
|
387
|
+
val heightDp = PixelUtil.toDIPFromPixel(heightPx.toFloat())
|
|
388
|
+
if (heightDp == lastReportedHeight) return
|
|
389
|
+
lastReportedHeight = heightDp
|
|
390
|
+
wrapper.updateState(
|
|
391
|
+
WritableNativeMap().apply {
|
|
392
|
+
putDouble("width", 0.0)
|
|
393
|
+
putDouble("height", heightDp.toDouble())
|
|
394
|
+
}
|
|
395
|
+
)
|
|
396
|
+
}
|
|
397
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
package com.platformcomponents
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.ReadableArray
|
|
5
|
+
import com.facebook.react.bridge.ReadableMap
|
|
6
|
+
import com.facebook.react.bridge.WritableMap
|
|
7
|
+
import com.facebook.react.uimanager.ReactStylesDiffMap
|
|
8
|
+
import com.facebook.react.uimanager.SimpleViewManager
|
|
9
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
10
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
11
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
12
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
13
|
+
import com.facebook.react.uimanager.events.Event
|
|
14
|
+
import com.facebook.react.viewmanagers.PCTabBarManagerDelegate
|
|
15
|
+
import com.facebook.react.viewmanagers.PCTabBarManagerInterface
|
|
16
|
+
import com.platformcomponents.PCButtonSupport.doubleOr
|
|
17
|
+
import com.platformcomponents.PCButtonSupport.stringOr
|
|
18
|
+
|
|
19
|
+
class PCTabBarViewManager :
|
|
20
|
+
SimpleViewManager<PCTabBarView>(),
|
|
21
|
+
PCTabBarManagerInterface<PCTabBarView> {
|
|
22
|
+
|
|
23
|
+
private val delegate: ViewManagerDelegate<PCTabBarView> = PCTabBarManagerDelegate(this)
|
|
24
|
+
|
|
25
|
+
override fun getName(): String = "PCTabBar"
|
|
26
|
+
|
|
27
|
+
override fun getDelegate(): ViewManagerDelegate<PCTabBarView> = delegate
|
|
28
|
+
|
|
29
|
+
override fun createViewInstance(reactContext: ThemedReactContext): PCTabBarView =
|
|
30
|
+
PCTabBarView(reactContext)
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Pass the StateWrapper to the view so it can update Fabric state with its
|
|
34
|
+
* natural height, and report it right away so the first layout already fits.
|
|
35
|
+
*/
|
|
36
|
+
override fun updateState(
|
|
37
|
+
view: PCTabBarView,
|
|
38
|
+
props: ReactStylesDiffMap,
|
|
39
|
+
stateWrapper: StateWrapper
|
|
40
|
+
): Any? {
|
|
41
|
+
view.stateWrapper = stateWrapper
|
|
42
|
+
view.reportIntrinsicSize()
|
|
43
|
+
return null
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
override fun addEventEmitters(reactContext: ThemedReactContext, view: PCTabBarView) {
|
|
47
|
+
// Looked up per press, with the view's surface: a bar mounted inside
|
|
48
|
+
// another native container (a FloatingToolbar) lost its events when the
|
|
49
|
+
// dispatcher was taken at creation
|
|
50
|
+
view.onTabPress = { index, value, reselected ->
|
|
51
|
+
PCHaptics.perform(view, view.haptics)
|
|
52
|
+
UIManagerHelper.getEventDispatcherForReactTag(reactContext, view.id)?.dispatchEvent(
|
|
53
|
+
TabPressEvent(UIManagerHelper.getSurfaceId(view), view.id, index, value, reselected)
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// --- Props ---
|
|
59
|
+
|
|
60
|
+
override fun setItems(view: PCTabBarView, value: ReadableArray?) {
|
|
61
|
+
view.applyTabs(PCNavigationBarSupport.parseItems(value))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
override fun setSelectedValue(view: PCTabBarView, value: String?) {
|
|
65
|
+
view.applySelectedValue(value ?: "")
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
override fun setLabelVisibility(view: PCTabBarView, value: String?) {
|
|
69
|
+
view.applyLabelVisibility(value)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Colors arrive already processed by React Native (ARGB ints)
|
|
73
|
+
override fun setActiveTintColor(view: PCTabBarView, value: Int?) {
|
|
74
|
+
view.applyColors(value, view.inactiveTintColor, view.barColor, view.indicatorColor, view.rippleColor)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
override fun setInactiveTintColor(view: PCTabBarView, value: Int?) {
|
|
78
|
+
view.applyColors(view.activeTintColor, value, view.barColor, view.indicatorColor, view.rippleColor)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
override fun setBarColor(view: PCTabBarView, value: Int?) {
|
|
82
|
+
view.applyColors(view.activeTintColor, view.inactiveTintColor, value, view.indicatorColor, view.rippleColor)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
override fun setAndroidIndicatorColor(view: PCTabBarView, value: Int?) {
|
|
86
|
+
view.applyColors(view.activeTintColor, view.inactiveTintColor, view.barColor, value, view.rippleColor)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
override fun setAndroidRippleColor(view: PCTabBarView, value: Int?) {
|
|
90
|
+
view.applyColors(view.activeTintColor, view.inactiveTintColor, view.barColor, view.indicatorColor, value)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
override fun setBadgeBackgroundColor(view: PCTabBarView, value: Int?) {
|
|
94
|
+
view.applyBadgeColors(value, view.badgeTextColor)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
override fun setBadgeTextColor(view: PCTabBarView, value: Int?) {
|
|
98
|
+
view.applyBadgeColors(view.badgeBackgroundColor, value)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// labelStyle: {fontFamily, fontSize, fontWeight, fontStyle}; empty / 0 = default
|
|
102
|
+
override fun setLabelStyle(view: PCTabBarView, value: ReadableMap?) {
|
|
103
|
+
view.applyLabelFont(
|
|
104
|
+
view.labelFont.copy(
|
|
105
|
+
family = value?.stringOr("fontFamily", "") ?: "",
|
|
106
|
+
size = value?.doubleOr("fontSize", 0.0)?.toFloat() ?: 0f,
|
|
107
|
+
weight = value?.stringOr("fontWeight", "") ?: "",
|
|
108
|
+
style = value?.stringOr("fontStyle", "") ?: ""
|
|
109
|
+
)
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Active indicator: 'true' | 'false' ('' = shown), shape, size in dp
|
|
114
|
+
override fun setAndroidIndicator(view: PCTabBarView, value: String?) {
|
|
115
|
+
view.applyIndicator(view.indicator.copy(enabled = value != "false"))
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
override fun setAndroidIndicatorShape(view: PCTabBarView, value: String?) {
|
|
119
|
+
view.applyIndicator(view.indicator.copy(shape = value ?: ""))
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
override fun setAndroidIndicatorCornerRadius(view: PCTabBarView, value: Double) {
|
|
123
|
+
view.applyIndicator(view.indicator.copy(cornerRadius = value.toFloat()))
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
override fun setAndroidIndicatorWidth(view: PCTabBarView, value: Double) {
|
|
127
|
+
view.applyIndicator(view.indicator.copy(width = value.toFloat()))
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
override fun setAndroidIndicatorHeight(view: PCTabBarView, value: Double) {
|
|
131
|
+
view.applyIndicator(view.indicator.copy(height = value.toFloat()))
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// '' | 'vertical' | 'horizontal' | 'auto'
|
|
135
|
+
override fun setAndroidItemLayout(view: PCTabBarView, value: String?) {
|
|
136
|
+
view.applyItemLayout(value ?: "")
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// The accessory view above the bar, by nativeID: it slides away with the bar
|
|
140
|
+
override fun setAccessoryID(view: PCTabBarView, value: String?) {
|
|
141
|
+
view.applyAccessoryID(value ?: "")
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// "" (none added) | "none" | "selection" | "light" | "medium" | "heavy" | "success" | "warning" | "error"
|
|
145
|
+
override fun setHaptics(view: PCTabBarView, value: String?) {
|
|
146
|
+
view.haptics = PCHaptics.configure(view, value)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
override fun setMinimizeBehavior(view: PCTabBarView, value: String?) {
|
|
150
|
+
view.applyMinimize(value ?: "", view.scrollViewNativeID)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
override fun setScrollViewNativeID(view: PCTabBarView, value: String?) {
|
|
154
|
+
view.applyMinimize(view.minimizeBehavior, value ?: "")
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
override fun setMaxFontSizeMultiplier(view: PCTabBarView, value: Double) {
|
|
158
|
+
view.applyLabelFont(view.labelFont.copy(maxFontSizeMultiplier = value.toFloat()))
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// --- Events ---
|
|
162
|
+
|
|
163
|
+
private class TabPressEvent(
|
|
164
|
+
surfaceId: Int,
|
|
165
|
+
viewTag: Int,
|
|
166
|
+
private val index: Int,
|
|
167
|
+
private val value: String,
|
|
168
|
+
private val reselected: Boolean
|
|
169
|
+
) : Event<TabPressEvent>(surfaceId, viewTag) {
|
|
170
|
+
// Every press counts; two quick presses must not merge into one
|
|
171
|
+
override fun canCoalesce(): Boolean = false
|
|
172
|
+
|
|
173
|
+
override fun getEventName(): String = "topTabPress"
|
|
174
|
+
|
|
175
|
+
// Fabric reads the payload from here
|
|
176
|
+
override fun getEventData(): WritableMap = Arguments.createMap().apply {
|
|
177
|
+
putInt("index", index)
|
|
178
|
+
putString("value", value)
|
|
179
|
+
putString("reselected", if (reselected) "true" else "false")
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|