react-native-platform-components 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PlatformComponents.podspec +1 -1
- package/README.md +33 -31
- package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
- package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
- package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
- package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
- package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
- package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
- package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
- package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
- package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
- package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
- package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
- package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
- package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
- package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
- package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
- package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
- package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
- package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
- package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
- package/android/src/main/res/values/ids.xml +5 -0
- package/android/src/main/res/values/styles.xml +24 -0
- package/ios/PCButton.mm +122 -7
- package/ios/PCButtonGroup.mm +68 -1
- package/ios/PCButtonGroupView.swift +225 -6
- package/ios/PCButtonSupport.swift +181 -10
- package/ios/PCButtonView.swift +297 -14
- package/ios/PCConstants.swift +23 -2
- package/ios/PCContextMenu.mm +28 -110
- package/ios/PCContextMenu.swift +106 -167
- package/ios/PCDatePicker.mm +21 -9
- package/ios/PCDatePickerView.swift +94 -20
- package/ios/PCFloatingActionButton.h +10 -0
- package/ios/PCFloatingActionButton.mm +177 -0
- package/ios/PCFloatingActionButtonView.swift +426 -0
- package/ios/PCFloatingToolbar.mm +27 -0
- package/ios/PCFloatingToolbarView.swift +241 -0
- package/ios/PCHaptics.swift +91 -0
- package/ios/PCImageLoader.swift +76 -12
- package/ios/PCLiquidGlass.mm +36 -0
- package/ios/PCLiquidGlass.swift +221 -114
- package/ios/PCLiquidGlassContainer.h +10 -0
- package/ios/PCLiquidGlassContainer.mm +84 -0
- package/ios/PCLiquidGlassContainer.swift +69 -0
- package/ios/PCMenuItems.h +76 -0
- package/ios/PCMenuSupport.swift +350 -0
- package/ios/PCNavigationRail.h +10 -0
- package/ios/PCNavigationRail.mm +270 -0
- package/ios/PCNavigationRailView.swift +415 -0
- package/ios/PCSegmentedControl.mm +17 -2
- package/ios/PCSegmentedControl.swift +57 -7
- package/ios/PCSelectionMenu.mm +36 -8
- package/ios/PCSelectionMenu.swift +224 -48
- package/ios/PCTabBar.h +10 -0
- package/ios/PCTabBar.mm +285 -0
- package/ios/PCTabBarAccessory.h +10 -0
- package/ios/PCTabBarAccessory.mm +93 -0
- package/ios/PCTabBarAccessoryView.swift +96 -0
- package/ios/PCTabBarView.swift +671 -0
- package/ios/PCTextField.mm +159 -4
- package/ios/PCTextFieldView.swift +603 -57
- package/lib/commonjs/Button.js +73 -1
- package/lib/commonjs/Button.js.map +1 -1
- package/lib/commonjs/ButtonGroup.js +13 -3
- package/lib/commonjs/ButtonGroup.js.map +1 -1
- package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
- package/lib/commonjs/ButtonNativeComponent.ts +119 -3
- package/lib/commonjs/ContextMenu.js +9 -48
- package/lib/commonjs/ContextMenu.js.map +1 -1
- package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
- package/lib/commonjs/DatePicker.js +98 -2
- package/lib/commonjs/DatePicker.js.map +1 -1
- package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
- package/lib/commonjs/FloatingActionButton.js +60 -0
- package/lib/commonjs/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/commonjs/FloatingToolbar.js +9 -1
- package/lib/commonjs/FloatingToolbar.js.map +1 -1
- package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/commonjs/LiquidGlass.js +7 -1
- package/lib/commonjs/LiquidGlass.js.map +1 -1
- package/lib/commonjs/LiquidGlassContainer.js +32 -0
- package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
- package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
- package/lib/commonjs/NavigationRail.js +104 -0
- package/lib/commonjs/NavigationRail.js.map +1 -0
- package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
- package/lib/commonjs/PlatformComponentsProvider.js +18 -0
- package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/SegmentedControl.js +7 -0
- package/lib/commonjs/SegmentedControl.js.map +1 -1
- package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
- package/lib/commonjs/SelectionMenu.js +27 -3
- package/lib/commonjs/SelectionMenu.js.map +1 -1
- package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
- package/lib/commonjs/SplitButton.js +98 -0
- package/lib/commonjs/SplitButton.js.map +1 -0
- package/lib/commonjs/TabBar.js +203 -0
- package/lib/commonjs/TabBar.js.map +1 -0
- package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/commonjs/TabBarNativeComponent.ts +145 -0
- package/lib/commonjs/TextField.js +171 -8
- package/lib/commonjs/TextField.js.map +1 -1
- package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
- package/lib/commonjs/focusRegistry.js +2 -1
- package/lib/commonjs/focusRegistry.js.map +1 -1
- package/lib/commonjs/haptics.js +2 -0
- package/lib/commonjs/haptics.js.map +1 -0
- package/lib/commonjs/icons.js +15 -1
- package/lib/commonjs/icons.js.map +1 -1
- package/lib/commonjs/index.js +77 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +156 -92
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/jest.js +910 -0
- package/lib/commonjs/jest.js.map +1 -0
- package/lib/commonjs/menuItems.js +68 -0
- package/lib/commonjs/menuItems.js.map +1 -0
- package/lib/commonjs/selectionIdentifiers.js +18 -0
- package/lib/commonjs/selectionIdentifiers.js.map +1 -0
- package/lib/commonjs/submitBehavior.js +19 -0
- package/lib/commonjs/submitBehavior.js.map +1 -0
- package/lib/commonjs/tabItems.js +49 -0
- package/lib/commonjs/tabItems.js.map +1 -0
- package/lib/commonjs/web/Button.js +170 -0
- package/lib/commonjs/web/Button.js.map +1 -0
- package/lib/commonjs/web/ButtonGroup.js +119 -0
- package/lib/commonjs/web/ButtonGroup.js.map +1 -0
- package/lib/commonjs/web/DatePicker.js +168 -0
- package/lib/commonjs/web/DatePicker.js.map +1 -0
- package/lib/commonjs/web/DateRangePicker.js +137 -0
- package/lib/commonjs/web/DateRangePicker.js.map +1 -0
- package/lib/commonjs/web/Dialog.js +54 -0
- package/lib/commonjs/web/Dialog.js.map +1 -0
- package/lib/commonjs/web/FloatingActionButton.js +98 -0
- package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/web/Icon.js +34 -0
- package/lib/commonjs/web/Icon.js.map +1 -0
- package/lib/commonjs/web/NativeTheme.js +28 -0
- package/lib/commonjs/web/NativeTheme.js.map +1 -0
- package/lib/commonjs/web/NavigationRail.js +139 -0
- package/lib/commonjs/web/NavigationRail.js.map +1 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/web/SegmentedControl.js +117 -0
- package/lib/commonjs/web/SegmentedControl.js.map +1 -0
- package/lib/commonjs/web/SelectionMenu.js +142 -0
- package/lib/commonjs/web/SelectionMenu.js.map +1 -0
- package/lib/commonjs/web/SplitButton.js +35 -0
- package/lib/commonjs/web/SplitButton.js.map +1 -0
- package/lib/commonjs/web/TabBar.js +131 -0
- package/lib/commonjs/web/TabBar.js.map +1 -0
- package/lib/commonjs/web/TextField.js +322 -0
- package/lib/commonjs/web/TextField.js.map +1 -0
- package/lib/commonjs/web/components.js +36 -0
- package/lib/commonjs/web/components.js.map +1 -0
- package/lib/commonjs/web/containers.js +121 -0
- package/lib/commonjs/web/containers.js.map +1 -0
- package/lib/commonjs/web/dateInput.js +116 -0
- package/lib/commonjs/web/dateInput.js.map +1 -0
- package/lib/commonjs/web/shared.js +192 -0
- package/lib/commonjs/web/shared.js.map +1 -0
- package/lib/commonjs/webComponents.js +6 -0
- package/lib/commonjs/webComponents.js.map +1 -0
- package/lib/module/Button.js +74 -2
- package/lib/module/Button.js.map +1 -1
- package/lib/module/ButtonGroup.js +13 -3
- package/lib/module/ButtonGroup.js.map +1 -1
- package/lib/module/ButtonGroupNativeComponent.ts +74 -4
- package/lib/module/ButtonNativeComponent.ts +119 -3
- package/lib/module/ContextMenu.js +9 -48
- package/lib/module/ContextMenu.js.map +1 -1
- package/lib/module/ContextMenuNativeComponent.ts +47 -49
- package/lib/module/DatePicker.js +98 -4
- package/lib/module/DatePicker.js.map +1 -1
- package/lib/module/DatePickerNativeComponent.ts +19 -2
- package/lib/module/FloatingActionButton.js +53 -0
- package/lib/module/FloatingActionButton.js.map +1 -0
- package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/module/FloatingToolbar.js +9 -1
- package/lib/module/FloatingToolbar.js.map +1 -1
- package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/module/LiquidGlass.js +7 -1
- package/lib/module/LiquidGlass.js.map +1 -1
- package/lib/module/LiquidGlassContainer.js +26 -0
- package/lib/module/LiquidGlassContainer.js.map +1 -0
- package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/module/LiquidGlassNativeComponent.ts +8 -0
- package/lib/module/NavigationRail.js +99 -0
- package/lib/module/NavigationRail.js.map +1 -0
- package/lib/module/NavigationRailNativeComponent.ts +107 -0
- package/lib/module/PlatformComponentsProvider.js +13 -0
- package/lib/module/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/SegmentedControl.js +9 -1
- package/lib/module/SegmentedControl.js.map +1 -1
- package/lib/module/SegmentedControlNativeComponent.ts +11 -0
- package/lib/module/SelectionMenu.js +27 -3
- package/lib/module/SelectionMenu.js.map +1 -1
- package/lib/module/SelectionMenuNativeComponent.ts +26 -4
- package/lib/module/SplitButton.js +91 -0
- package/lib/module/SplitButton.js.map +1 -0
- package/lib/module/TabBar.js +196 -0
- package/lib/module/TabBar.js.map +1 -0
- package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/module/TabBarNativeComponent.ts +145 -0
- package/lib/module/TextField.js +172 -9
- package/lib/module/TextField.js.map +1 -1
- package/lib/module/TextFieldNativeComponent.ts +110 -4
- package/lib/module/focusRegistry.js +1 -0
- package/lib/module/focusRegistry.js.map +1 -1
- package/lib/module/haptics.js +2 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/icons.js +15 -1
- package/lib/module/icons.js.map +1 -1
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +12 -87
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/jest.js +840 -0
- package/lib/module/jest.js.map +1 -0
- package/lib/module/menuItems.js +65 -0
- package/lib/module/menuItems.js.map +1 -0
- package/lib/module/selectionIdentifiers.js +14 -0
- package/lib/module/selectionIdentifiers.js.map +1 -0
- package/lib/module/submitBehavior.js +15 -0
- package/lib/module/submitBehavior.js.map +1 -0
- package/lib/module/tabItems.js +45 -0
- package/lib/module/tabItems.js.map +1 -0
- package/lib/module/web/Button.js +164 -0
- package/lib/module/web/Button.js.map +1 -0
- package/lib/module/web/ButtonGroup.js +113 -0
- package/lib/module/web/ButtonGroup.js.map +1 -0
- package/lib/module/web/DatePicker.js +162 -0
- package/lib/module/web/DatePicker.js.map +1 -0
- package/lib/module/web/DateRangePicker.js +131 -0
- package/lib/module/web/DateRangePicker.js.map +1 -0
- package/lib/module/web/Dialog.js +48 -0
- package/lib/module/web/Dialog.js.map +1 -0
- package/lib/module/web/FloatingActionButton.js +94 -0
- package/lib/module/web/FloatingActionButton.js.map +1 -0
- package/lib/module/web/Icon.js +29 -0
- package/lib/module/web/Icon.js.map +1 -0
- package/lib/module/web/NativeTheme.js +23 -0
- package/lib/module/web/NativeTheme.js.map +1 -0
- package/lib/module/web/NavigationRail.js +133 -0
- package/lib/module/web/NavigationRail.js.map +1 -0
- package/lib/module/web/PlatformComponentsProvider.js +44 -0
- package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/web/SegmentedControl.js +112 -0
- package/lib/module/web/SegmentedControl.js.map +1 -0
- package/lib/module/web/SelectionMenu.js +137 -0
- package/lib/module/web/SelectionMenu.js.map +1 -0
- package/lib/module/web/SplitButton.js +30 -0
- package/lib/module/web/SplitButton.js.map +1 -0
- package/lib/module/web/TabBar.js +126 -0
- package/lib/module/web/TabBar.js.map +1 -0
- package/lib/module/web/TextField.js +316 -0
- package/lib/module/web/TextField.js.map +1 -0
- package/lib/module/web/components.js +33 -0
- package/lib/module/web/components.js.map +1 -0
- package/lib/module/web/containers.js +112 -0
- package/lib/module/web/containers.js.map +1 -0
- package/lib/module/web/dateInput.js +109 -0
- package/lib/module/web/dateInput.js.map +1 -0
- package/lib/module/web/shared.js +179 -0
- package/lib/module/web/shared.js.map +1 -0
- package/lib/module/webComponents.js +4 -0
- package/lib/module/webComponents.js.map +1 -0
- package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/Button.d.ts +111 -3
- package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
- package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
- package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
- package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/icons.d.ts +7 -1
- package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +7 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
- package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/jest.d.ts +139 -0
- package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
- package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
- package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/module/src/Button.d.ts +111 -3
- package/lib/typescript/module/src/Button.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePicker.d.ts +74 -1
- package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SplitButton.d.ts +83 -0
- package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBar.d.ts +144 -0
- package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TextField.d.ts +166 -8
- package/lib/typescript/module/src/TextField.d.ts.map +1 -1
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/haptics.d.ts +20 -0
- package/lib/typescript/module/src/haptics.d.ts.map +1 -0
- package/lib/typescript/module/src/icons.d.ts +7 -1
- package/lib/typescript/module/src/icons.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +7 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.web.d.ts +25 -254
- package/lib/typescript/module/src/index.web.d.ts.map +1 -1
- package/lib/typescript/module/src/jest.d.ts +139 -0
- package/lib/typescript/module/src/jest.d.ts.map +1 -0
- package/lib/typescript/module/src/menuItems.d.ts +100 -0
- package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/module/src/tabItems.d.ts +55 -0
- package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Button.d.ts +9 -0
- package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Icon.d.ts +12 -0
- package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TextField.d.ts +9 -0
- package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/web/components.d.ts +17 -0
- package/lib/typescript/module/src/web/components.d.ts.map +1 -0
- package/lib/typescript/module/src/web/containers.d.ts +24 -0
- package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/module/src/web/shared.d.ts +43 -0
- package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/module/src/webComponents.d.ts +43 -0
- package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
- package/package.json +32 -2
- package/plugin/build/index.cjs +79 -6
- package/plugin/build/index.d.ts +27 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/plugin/tsconfig.json +2 -1
- package/react-native.config.js +3 -0
- package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
- package/shared/PCFloatingActionButtonState-custom.h +61 -0
- package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
- package/shared/PCNavigationRailShadowNode-custom.h +42 -0
- package/shared/PCNavigationRailState-custom.h +62 -0
- package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
- package/shared/PCTabBarShadowNode-custom.cpp +54 -0
- package/shared/PCTabBarShadowNode-custom.h +54 -0
- package/shared/PCTabBarState-custom.h +62 -0
- package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
- package/src/Button.tsx +222 -7
- package/src/ButtonGroup.tsx +29 -11
- package/src/ButtonGroupNativeComponent.ts +74 -4
- package/src/ButtonNativeComponent.ts +119 -3
- package/src/ContextMenu.tsx +34 -81
- package/src/ContextMenuNativeComponent.ts +47 -49
- package/src/DatePicker.tsx +182 -4
- package/src/DatePickerNativeComponent.ts +19 -2
- package/src/FloatingActionButton.tsx +121 -0
- package/src/FloatingActionButtonNativeComponent.ts +58 -0
- package/src/FloatingToolbar.tsx +54 -3
- package/src/FloatingToolbarNativeComponent.ts +16 -0
- package/src/LiquidGlass.tsx +24 -1
- package/src/LiquidGlassContainer.tsx +42 -0
- package/src/LiquidGlassContainerNativeComponent.ts +17 -0
- package/src/LiquidGlassNativeComponent.ts +8 -0
- package/src/NavigationRail.tsx +203 -0
- package/src/NavigationRailNativeComponent.ts +107 -0
- package/src/PlatformComponentsProvider.tsx +15 -0
- package/src/SegmentedControl.tsx +31 -1
- package/src/SegmentedControlNativeComponent.ts +11 -0
- package/src/SelectionMenu.tsx +81 -6
- package/src/SelectionMenuNativeComponent.ts +26 -4
- package/src/SplitButton.tsx +198 -0
- package/src/TabBar.tsx +373 -0
- package/src/TabBarAccessoryNativeComponent.ts +19 -0
- package/src/TabBarNativeComponent.ts +145 -0
- package/src/TextField.tsx +428 -14
- package/src/TextFieldNativeComponent.ts +110 -4
- package/src/focusRegistry.ts +1 -0
- package/src/haptics.ts +31 -0
- package/src/icons.ts +28 -1
- package/src/index.tsx +7 -0
- package/src/index.web.tsx +51 -391
- package/src/jest.tsx +958 -0
- package/src/menuItems.ts +152 -0
- package/src/selectionIdentifiers.ts +17 -0
- package/src/submitBehavior.ts +16 -0
- package/src/tabItems.ts +113 -0
- package/src/web/Button.tsx +201 -0
- package/src/web/ButtonGroup.tsx +154 -0
- package/src/web/DatePicker.tsx +204 -0
- package/src/web/DateRangePicker.tsx +135 -0
- package/src/web/Dialog.tsx +54 -0
- package/src/web/FloatingActionButton.tsx +76 -0
- package/src/web/Icon.tsx +33 -0
- package/src/web/NativeTheme.ts +23 -0
- package/src/web/NavigationRail.tsx +148 -0
- package/src/web/PlatformComponentsProvider.tsx +48 -0
- package/src/web/SegmentedControl.tsx +127 -0
- package/src/web/SelectionMenu.tsx +149 -0
- package/src/web/SplitButton.tsx +32 -0
- package/src/web/TabBar.tsx +150 -0
- package/src/web/TextField.tsx +361 -0
- package/src/web/components.tsx +71 -0
- package/src/web/containers.tsx +130 -0
- package/src/web/dateInput.ts +137 -0
- package/src/web/shared.ts +176 -0
- package/src/webComponents.ts +45 -0
- package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.platformcomponents
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.ReadableArray
|
|
4
5
|
import com.facebook.react.bridge.ReadableMap
|
|
5
6
|
import com.facebook.react.uimanager.ReactStylesDiffMap
|
|
6
7
|
import com.facebook.react.uimanager.SimpleViewManager
|
|
@@ -59,8 +60,14 @@ class PCTextFieldViewManager :
|
|
|
59
60
|
view.onSubmit = { text ->
|
|
60
61
|
dispatcher?.dispatchEvent(TextEvent(view.id, "topFieldSubmit", text))
|
|
61
62
|
}
|
|
63
|
+
view.onSelectionChange = { start, end ->
|
|
64
|
+
dispatcher?.dispatchEvent(SelectionEvent(view.id, start, end))
|
|
65
|
+
}
|
|
62
66
|
view.onTrailingIconPress = {
|
|
63
|
-
dispatcher?.dispatchEvent(
|
|
67
|
+
dispatcher?.dispatchEvent(EmptyEvent(view.id, "topTrailingIconPress"))
|
|
68
|
+
}
|
|
69
|
+
view.onPress = {
|
|
70
|
+
dispatcher?.dispatchEvent(EmptyEvent(view.id, "topFieldPress"))
|
|
64
71
|
}
|
|
65
72
|
}
|
|
66
73
|
|
|
@@ -147,6 +154,15 @@ class PCTextFieldViewManager :
|
|
|
147
154
|
view.applyMultiline(value == "multiline")
|
|
148
155
|
}
|
|
149
156
|
|
|
157
|
+
override fun setSubmitBehavior(view: PCTextFieldView, value: String?) {
|
|
158
|
+
view.applySubmitBehavior(value ?: "")
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
override fun setKeyboardToolbarItems(view: PCTextFieldView, value: ReadableArray?) {
|
|
162
|
+
// iOS only: Android keyboards have no toolbar; returnKeyType picks the
|
|
163
|
+
// action key, which number pads have too
|
|
164
|
+
}
|
|
165
|
+
|
|
150
166
|
override fun setInteractivity(view: PCTextFieldView, value: String?) {
|
|
151
167
|
view.applyInteractivity(value)
|
|
152
168
|
}
|
|
@@ -181,6 +197,77 @@ class PCTextFieldViewManager :
|
|
|
181
197
|
view.applySpokenLabel(value ?: "")
|
|
182
198
|
}
|
|
183
199
|
|
|
200
|
+
/**
|
|
201
|
+
* testID goes on the EditText, where Espresso types (Detox matches the view
|
|
202
|
+
* tag); the host keeps only React Native's own test-id key, so one id never
|
|
203
|
+
* matches two views.
|
|
204
|
+
*/
|
|
205
|
+
override fun setTestId(view: PCTextFieldView, testId: String?) {
|
|
206
|
+
view.setTag(com.facebook.react.R.id.react_test_id, testId)
|
|
207
|
+
view.applyInputTestID(testId ?: "")
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
override fun setLeadingIconTestID(view: PCTextFieldView, value: String?) {
|
|
211
|
+
view.applyIconAccessibility(value ?: "", view.leadingIconSpokenLabel, view.trailingIconTestID, view.trailingIconSpokenLabel)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
override fun setLeadingIconSpokenLabel(view: PCTextFieldView, value: String?) {
|
|
215
|
+
view.applyIconAccessibility(view.leadingIconTestID, value ?: "", view.trailingIconTestID, view.trailingIconSpokenLabel)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
override fun setTrailingIconTestID(view: PCTextFieldView, value: String?) {
|
|
219
|
+
view.applyIconAccessibility(view.leadingIconTestID, view.leadingIconSpokenLabel, value ?: "", view.trailingIconSpokenLabel)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
override fun setTrailingIconSpokenLabel(view: PCTextFieldView, value: String?) {
|
|
223
|
+
view.applyIconAccessibility(view.leadingIconTestID, view.leadingIconSpokenLabel, view.trailingIconTestID, value ?: "")
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Colors: processed color ints, null when unset
|
|
227
|
+
override fun setActiveColor(view: PCTextFieldView, value: Int?) {
|
|
228
|
+
view.applyColors(value, view.outlineColor, view.errorColor, view.containerColor, view.textColor, view.placeholderTextColor)
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
override fun setOutlineColor(view: PCTextFieldView, value: Int?) {
|
|
232
|
+
view.applyColors(view.activeColor, value, view.errorColor, view.containerColor, view.textColor, view.placeholderTextColor)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
override fun setErrorColor(view: PCTextFieldView, value: Int?) {
|
|
236
|
+
view.applyColors(view.activeColor, view.outlineColor, value, view.containerColor, view.textColor, view.placeholderTextColor)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
override fun setContainerColor(view: PCTextFieldView, value: Int?) {
|
|
240
|
+
view.applyColors(view.activeColor, view.outlineColor, view.errorColor, value, view.textColor, view.placeholderTextColor)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
override fun setTextColor(view: PCTextFieldView, value: Int?) {
|
|
244
|
+
view.applyColors(view.activeColor, view.outlineColor, view.errorColor, view.containerColor, value, view.placeholderTextColor)
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
override fun setPlaceholderTextColor(view: PCTextFieldView, value: Int?) {
|
|
248
|
+
view.applyColors(view.activeColor, view.outlineColor, view.errorColor, view.containerColor, view.textColor, value)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
override fun setMaxFontSizeMultiplier(view: PCTextFieldView, value: Double) {
|
|
252
|
+
view.applyMaxFontSizeMultiplier(value.toFloat())
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
override fun setTextAlign(view: PCTextFieldView, value: String?) {
|
|
256
|
+
view.applyTextAlign(value ?: "")
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
override fun setMinLines(view: PCTextFieldView, value: Int) {
|
|
260
|
+
view.applyLineBounds(value, view.maxLines)
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
override fun setMaxLines(view: PCTextFieldView, value: Int) {
|
|
264
|
+
view.applyLineBounds(view.minLines, value)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
override fun setPressMode(view: PCTextFieldView, value: String?) {
|
|
268
|
+
view.applyPressable(value == "button")
|
|
269
|
+
}
|
|
270
|
+
|
|
184
271
|
override fun setIos(view: PCTextFieldView, value: ReadableMap?) {
|
|
185
272
|
// Android ignores iOS config
|
|
186
273
|
}
|
|
@@ -210,6 +297,10 @@ class PCTextFieldViewManager :
|
|
|
210
297
|
view.setTextFromJS(eventCount, text ?: "")
|
|
211
298
|
}
|
|
212
299
|
|
|
300
|
+
override fun setSelection(view: PCTextFieldView, eventCount: Int, start: Int, end: Int) {
|
|
301
|
+
view.setSelectionFromJS(eventCount, start, end)
|
|
302
|
+
}
|
|
303
|
+
|
|
213
304
|
// --- Events ---
|
|
214
305
|
|
|
215
306
|
private class ChangeEvent(
|
|
@@ -239,8 +330,23 @@ class PCTextFieldViewManager :
|
|
|
239
330
|
}
|
|
240
331
|
}
|
|
241
332
|
|
|
242
|
-
private class
|
|
243
|
-
|
|
333
|
+
private class SelectionEvent(
|
|
334
|
+
surfaceId: Int,
|
|
335
|
+
private val start: Int,
|
|
336
|
+
private val end: Int
|
|
337
|
+
) : Event<SelectionEvent>(surfaceId) {
|
|
338
|
+
override fun getEventName(): String = "topFieldSelectionChange"
|
|
339
|
+
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
340
|
+
val payload = Arguments.createMap().apply {
|
|
341
|
+
putInt("start", start)
|
|
342
|
+
putInt("end", end)
|
|
343
|
+
}
|
|
344
|
+
rctEventEmitter.receiveEvent(viewTag, eventName, payload)
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
private class EmptyEvent(surfaceId: Int, private val name: String) : Event<EmptyEvent>(surfaceId) {
|
|
349
|
+
override fun getEventName(): String = name
|
|
244
350
|
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
245
351
|
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
246
352
|
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
package com.platformcomponents
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
|
+
import android.os.Build
|
|
4
5
|
import android.content.res.Resources
|
|
5
6
|
import android.util.Log
|
|
6
7
|
import android.util.TypedValue
|
|
7
8
|
import android.view.ContextThemeWrapper
|
|
8
9
|
import android.view.View
|
|
9
10
|
import android.view.ViewGroup
|
|
11
|
+
import android.widget.TextView
|
|
10
12
|
import androidx.annotation.AttrRes
|
|
11
13
|
import androidx.appcompat.R as AppCompatR
|
|
12
14
|
import androidx.core.content.res.ResourcesCompat
|
|
@@ -28,6 +30,41 @@ internal object PCThemeSupport {
|
|
|
28
30
|
@Volatile private var warnedMaterial = false
|
|
29
31
|
@Volatile private var warnedAppCompat = false
|
|
30
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Caps [view]'s text size at [maxMultiplier] times its size at the default
|
|
35
|
+
* font scale (React Native's maxFontSizeMultiplier); no-op below 1 or when
|
|
36
|
+
* the system scale is within the cap. The capped size is remembered on the
|
|
37
|
+
* view, so repeated calls leave it alone until something else sets a size.
|
|
38
|
+
*/
|
|
39
|
+
fun capTextSize(view: TextView, maxMultiplier: Float) {
|
|
40
|
+
val resources = view.resources
|
|
41
|
+
val fontScale = resources.configuration.fontScale
|
|
42
|
+
val capped = view.getTag(R.id.pc_capped_text_size) as? Float
|
|
43
|
+
val px = view.textSize
|
|
44
|
+
if (capped != null && capped == px) return
|
|
45
|
+
if (maxMultiplier < 1f || fontScale <= maxMultiplier) return
|
|
46
|
+
val metrics = resources.displayMetrics
|
|
47
|
+
// The size in sp the view was given, undoing the (possibly non-linear) scale
|
|
48
|
+
val sp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
|
49
|
+
TypedValue.deriveDimension(TypedValue.COMPLEX_UNIT_SP, px, metrics)
|
|
50
|
+
} else {
|
|
51
|
+
px / (metrics.density * fontScale)
|
|
52
|
+
}
|
|
53
|
+
val max = sp * metrics.density * maxMultiplier
|
|
54
|
+
if (px <= max) return
|
|
55
|
+
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, max)
|
|
56
|
+
view.setTag(R.id.pc_capped_text_size, view.textSize)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** [capTextSize] for every TextView under [root]. */
|
|
60
|
+
fun capTextSizes(root: View, maxMultiplier: Float) {
|
|
61
|
+
if (maxMultiplier < 1f || root.resources.configuration.fontScale <= maxMultiplier) return
|
|
62
|
+
if (root is TextView) capTextSize(root, maxMultiplier)
|
|
63
|
+
if (root is ViewGroup) {
|
|
64
|
+
for (i in 0 until root.childCount) capTextSizes(root.getChildAt(i), maxMultiplier)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
31
68
|
/** True for Theme.MaterialComponents.* and Theme.Material3.* (and descendants). */
|
|
32
69
|
fun hasMaterialTheme(context: Context): Boolean =
|
|
33
70
|
resolves(context, MaterialR.attr.materialButtonOutlinedStyle) &&
|
|
@@ -20,7 +20,11 @@ class PlatformComponentsViewPackage : BaseReactPackage() {
|
|
|
20
20
|
PCButtonGroupViewManager(),
|
|
21
21
|
PCFloatingToolbarViewManager(),
|
|
22
22
|
PCLiquidGlassViewManager(),
|
|
23
|
+
PCLiquidGlassContainerViewManager(),
|
|
23
24
|
PCTextFieldViewManager(),
|
|
25
|
+
PCTabBarViewManager(),
|
|
26
|
+
PCNavigationRailViewManager(),
|
|
27
|
+
PCFloatingActionButtonViewManager(),
|
|
24
28
|
)
|
|
25
29
|
}
|
|
26
30
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- The Material "search" icon (Apache 2.0), for a TabBar search tab
|
|
3
|
+
given no icon of its own. Tinted by the bar. -->
|
|
4
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
5
|
+
android:width="24dp"
|
|
6
|
+
android:height="24dp"
|
|
7
|
+
android:viewportWidth="24"
|
|
8
|
+
android:viewportHeight="24">
|
|
9
|
+
<path
|
|
10
|
+
android:fillColor="#FF000000"
|
|
11
|
+
android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
|
|
12
|
+
</vector>
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8"?>
|
|
2
2
|
<resources>
|
|
3
|
+
<!-- Select spinner mode before DatePicker constructs its native delegate. -->
|
|
4
|
+
<style name="PCInlineDatePickerThemeOverlay" parent="">
|
|
5
|
+
<item name="android:datePickerStyle">@style/PCInlineDatePicker</item>
|
|
6
|
+
</style>
|
|
7
|
+
<style name="PCInlineDatePicker" parent="@android:style/Widget.Material.DatePicker">
|
|
8
|
+
<item name="android:datePickerMode">spinner</item>
|
|
9
|
+
<item name="android:calendarViewShown">false</item>
|
|
10
|
+
<item name="android:spinnersShown">true</item>
|
|
11
|
+
</style>
|
|
12
|
+
|
|
3
13
|
<!--
|
|
4
14
|
Fallback dialog themes for MaterialDatePicker / MaterialTimePicker when the host
|
|
5
15
|
app theme is not a Material theme (see PCThemeSupport). Each is a full
|
|
@@ -351,4 +361,18 @@
|
|
|
351
361
|
<style name="PCTextField.Filled.Dense">
|
|
352
362
|
<item name="textInputStyle">@style/Widget.Material3.TextInputLayout.FilledBox.Dense</item>
|
|
353
363
|
</style>
|
|
364
|
+
|
|
365
|
+
<!--
|
|
366
|
+
NavigationRail: the Material 3 Expressive rail, the one with the expanded
|
|
367
|
+
state (expand() / collapse()), over any Material 3 app theme.
|
|
368
|
+
-->
|
|
369
|
+
<style name="PCNavigationRailOverlay" parent="">
|
|
370
|
+
<item name="navigationRailStyle">@style/Widget.Material3Expressive.NavigationRailView</item>
|
|
371
|
+
</style>
|
|
372
|
+
<style name="PCNavigationRailOverlay.Expanded">
|
|
373
|
+
<item name="navigationRailStyle">@style/PCNavigationRail.Expanded</item>
|
|
374
|
+
</style>
|
|
375
|
+
<style name="PCNavigationRail.Expanded" parent="Widget.Material3Expressive.NavigationRailView">
|
|
376
|
+
<item name="expanded">true</item>
|
|
377
|
+
</style>
|
|
354
378
|
</resources>
|
package/ios/PCButton.mm
CHANGED
|
@@ -21,8 +21,10 @@
|
|
|
21
21
|
#import "PCButtonComponentDescriptors-custom.h"
|
|
22
22
|
#import "PCButtonShadowNode-custom.h"
|
|
23
23
|
#import "PCButtonState-custom.h"
|
|
24
|
+
#import "PCMenuItems.h"
|
|
24
25
|
|
|
25
26
|
using namespace facebook::react;
|
|
27
|
+
using namespace platformcomponents;
|
|
26
28
|
|
|
27
29
|
namespace {
|
|
28
30
|
static inline NSString *NSStringFromStd(const std::string &s, NSString *fallback) {
|
|
@@ -30,7 +32,7 @@ static inline NSString *NSStringFromStd(const std::string &s, NSString *fallback
|
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
static inline bool IconEqual(const PCButtonIconStruct &a, const PCButtonIconStruct &b) {
|
|
33
|
-
return a.iconType == b.iconType && a.iconName == b.iconName && a.iconUri == b.iconUri &&
|
|
35
|
+
return a.iconType == b.iconType && a.iconName == b.iconName && a.iconRequest == b.iconRequest && a.iconUri == b.iconUri &&
|
|
34
36
|
a.iconScale == b.iconScale && a.iconTinted == b.iconTinted;
|
|
35
37
|
}
|
|
36
38
|
|
|
@@ -42,17 +44,28 @@ static inline bool LabelStyleEqual(
|
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/// Builds the label font from RN-style font props, or nil when every field is
|
|
45
|
-
/// unset so the button keeps the configuration's font.
|
|
46
|
-
|
|
47
|
+
/// unset so the button keeps the configuration's font. Without a fontSize the
|
|
48
|
+
/// size follows Dynamic Type (the body style), capped at maxFontSizeMultiplier
|
|
49
|
+
/// times its default size when that is 1 or more.
|
|
50
|
+
static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style, double maxFontSizeMultiplier) {
|
|
47
51
|
if (style.fontFamily.empty() && style.fontSize <= 0 &&
|
|
48
52
|
style.fontWeight.empty() && style.fontStyle.empty()) {
|
|
49
53
|
return nil;
|
|
50
54
|
}
|
|
51
55
|
// UIButton titles default to the body text style; start there so a lone
|
|
52
56
|
// fontWeight or fontStyle doesn't change the size.
|
|
53
|
-
|
|
57
|
+
UIFont *body = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
|
|
58
|
+
NSNumber *size = style.fontSize > 0 ? @(style.fontSize) : nil;
|
|
59
|
+
if (!size && maxFontSizeMultiplier >= 1) {
|
|
60
|
+
UITraitCollection *defaultTraits =
|
|
61
|
+
[UITraitCollection traitCollectionWithPreferredContentSizeCategory:UIContentSizeCategoryLarge];
|
|
62
|
+
CGFloat baseSize = [UIFont preferredFontForTextStyle:UIFontTextStyleBody
|
|
63
|
+
compatibleWithTraitCollection:defaultTraits].pointSize;
|
|
64
|
+
size = @(MIN(body.pointSize, baseSize * maxFontSizeMultiplier));
|
|
65
|
+
}
|
|
66
|
+
return [RCTFont updateFont:body
|
|
54
67
|
withFamily:NSStringFromStd(style.fontFamily, nil)
|
|
55
|
-
size:
|
|
68
|
+
size:size
|
|
56
69
|
weight:NSStringFromStd(style.fontWeight, nil)
|
|
57
70
|
style:NSStringFromStd(style.fontStyle, nil)
|
|
58
71
|
variant:nil
|
|
@@ -77,6 +90,12 @@ static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style) {
|
|
|
77
90
|
|
|
78
91
|
- (instancetype)initWithFrame:(CGRect)frame {
|
|
79
92
|
if (self = [super initWithFrame:frame]) {
|
|
93
|
+
// Fabric views seed _props with their own defaults: RCTViewComponentView
|
|
94
|
+
// asserts on it in debug builds of React Native core, and the first
|
|
95
|
+
// updateProps would otherwise read the base ViewProps as PCButtonProps.
|
|
96
|
+
static const auto defaultProps = std::make_shared<const PCButtonProps>();
|
|
97
|
+
_props = defaultProps;
|
|
98
|
+
|
|
80
99
|
_view = [PCButtonView new];
|
|
81
100
|
self.contentView = _view;
|
|
82
101
|
|
|
@@ -86,6 +105,8 @@ static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style) {
|
|
|
86
105
|
__typeof(self) strongSelf = weakSelf;
|
|
87
106
|
if (!strongSelf) return;
|
|
88
107
|
|
|
108
|
+
[strongSelf->_view.haptics performIn:strongSelf->_view];
|
|
109
|
+
|
|
89
110
|
auto eventEmitter =
|
|
90
111
|
std::static_pointer_cast<const PCButtonEventEmitter>(strongSelf->_eventEmitter);
|
|
91
112
|
if (!eventEmitter) return;
|
|
@@ -93,6 +114,50 @@ static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style) {
|
|
|
93
114
|
eventEmitter->onButtonPress({});
|
|
94
115
|
};
|
|
95
116
|
|
|
117
|
+
_view.onSelectedChange = ^(BOOL selected) {
|
|
118
|
+
__typeof(self) strongSelf = weakSelf;
|
|
119
|
+
if (!strongSelf) return;
|
|
120
|
+
|
|
121
|
+
auto eventEmitter =
|
|
122
|
+
std::static_pointer_cast<const PCButtonEventEmitter>(strongSelf->_eventEmitter);
|
|
123
|
+
if (!eventEmitter) return;
|
|
124
|
+
|
|
125
|
+
eventEmitter->onSelectedChange({.selected = (bool)selected});
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
_view.onMenuSelect = ^(NSString *itemId, NSString *title) {
|
|
129
|
+
__typeof(self) strongSelf = weakSelf;
|
|
130
|
+
if (!strongSelf) return;
|
|
131
|
+
|
|
132
|
+
auto eventEmitter =
|
|
133
|
+
std::static_pointer_cast<const PCButtonEventEmitter>(strongSelf->_eventEmitter);
|
|
134
|
+
if (!eventEmitter) return;
|
|
135
|
+
|
|
136
|
+
eventEmitter->onMenuSelect({.id = itemId.UTF8String, .title = title.UTF8String});
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
_view.onMenuOpen = ^{
|
|
140
|
+
__typeof(self) strongSelf = weakSelf;
|
|
141
|
+
if (!strongSelf) return;
|
|
142
|
+
|
|
143
|
+
auto eventEmitter =
|
|
144
|
+
std::static_pointer_cast<const PCButtonEventEmitter>(strongSelf->_eventEmitter);
|
|
145
|
+
if (!eventEmitter) return;
|
|
146
|
+
|
|
147
|
+
eventEmitter->onMenuOpen({});
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
_view.onMenuClose = ^{
|
|
151
|
+
__typeof(self) strongSelf = weakSelf;
|
|
152
|
+
if (!strongSelf) return;
|
|
153
|
+
|
|
154
|
+
auto eventEmitter =
|
|
155
|
+
std::static_pointer_cast<const PCButtonEventEmitter>(strongSelf->_eventEmitter);
|
|
156
|
+
if (!eventEmitter) return;
|
|
157
|
+
|
|
158
|
+
eventEmitter->onMenuClose({});
|
|
159
|
+
};
|
|
160
|
+
|
|
96
161
|
_view.onNeedsRemeasure = ^{
|
|
97
162
|
__typeof(self) strongSelf = weakSelf;
|
|
98
163
|
if (!strongSelf) return;
|
|
@@ -116,11 +181,16 @@ static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style) {
|
|
|
116
181
|
const auto &icon = newProps.icon;
|
|
117
182
|
[_view setIconWithType:NSStringFromStd(icon.iconType, @"")
|
|
118
183
|
name:NSStringFromStd(icon.iconName, @"")
|
|
184
|
+
request:NSStringFromStd(icon.iconRequest, @"")
|
|
119
185
|
uri:NSStringFromStd(icon.iconUri, @"")
|
|
120
186
|
scale:icon.iconScale
|
|
121
187
|
tinted:(icon.iconTinted != "false")];
|
|
122
188
|
}
|
|
123
189
|
|
|
190
|
+
if (!prevProps || newProps.iconPosition != prevProps->iconPosition) {
|
|
191
|
+
_view.iconPosition = NSStringFromStd(newProps.iconPosition, @"leading");
|
|
192
|
+
}
|
|
193
|
+
|
|
124
194
|
if (!prevProps || newProps.variant != prevProps->variant) {
|
|
125
195
|
_view.variant = NSStringFromStd(newProps.variant, @"filled");
|
|
126
196
|
}
|
|
@@ -133,10 +203,18 @@ static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style) {
|
|
|
133
203
|
_view.shape = NSStringFromStd(newProps.shape, @"");
|
|
134
204
|
}
|
|
135
205
|
|
|
206
|
+
if (!prevProps || newProps.cornerRadius != prevProps->cornerRadius) {
|
|
207
|
+
_view.cornerRadius = newProps.cornerRadius;
|
|
208
|
+
}
|
|
209
|
+
|
|
136
210
|
if (!prevProps || newProps.interactivity != prevProps->interactivity) {
|
|
137
211
|
_view.interactivity = NSStringFromStd(newProps.interactivity, @"enabled");
|
|
138
212
|
}
|
|
139
213
|
|
|
214
|
+
if (!prevProps || newProps.loading != prevProps->loading) {
|
|
215
|
+
_view.loading = newProps.loading == "true";
|
|
216
|
+
}
|
|
217
|
+
|
|
140
218
|
// Colors arrive as SharedColor (already processed by React Native)
|
|
141
219
|
if (!prevProps || newProps.color != prevProps->color) {
|
|
142
220
|
_view.containerColor = RCTUIColorFromSharedColor(newProps.color);
|
|
@@ -146,15 +224,52 @@ static UIFont *FontFromLabelStyle(const PCButtonLabelStyleStruct &style) {
|
|
|
146
224
|
_view.foregroundColor = RCTUIColorFromSharedColor(newProps.foregroundColor);
|
|
147
225
|
}
|
|
148
226
|
|
|
227
|
+
if (!prevProps || newProps.disabledColor != prevProps->disabledColor) {
|
|
228
|
+
_view.disabledContainerColor = RCTUIColorFromSharedColor(newProps.disabledColor);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (!prevProps || newProps.disabledForegroundColor != prevProps->disabledForegroundColor) {
|
|
232
|
+
_view.disabledForegroundColor = RCTUIColorFromSharedColor(newProps.disabledForegroundColor);
|
|
233
|
+
}
|
|
234
|
+
|
|
149
235
|
// labelStyle: {fontFamily, fontSize, fontWeight, fontStyle}
|
|
150
|
-
if (!prevProps || !LabelStyleEqual(newProps.labelStyle, prevProps->labelStyle)
|
|
151
|
-
|
|
236
|
+
if (!prevProps || !LabelStyleEqual(newProps.labelStyle, prevProps->labelStyle) ||
|
|
237
|
+
newProps.maxFontSizeMultiplier != prevProps->maxFontSizeMultiplier) {
|
|
238
|
+
_view.labelFont = FontFromLabelStyle(newProps.labelStyle, newProps.maxFontSizeMultiplier);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (!prevProps || newProps.maxFontSizeMultiplier != prevProps->maxFontSizeMultiplier) {
|
|
242
|
+
_view.maxFontSizeMultiplier = newProps.maxFontSizeMultiplier;
|
|
152
243
|
}
|
|
153
244
|
|
|
154
245
|
if (!prevProps || newProps.spokenLabel != prevProps->spokenLabel) {
|
|
155
246
|
_view.spokenLabel = NSStringFromStd(newProps.spokenLabel, @"");
|
|
156
247
|
}
|
|
157
248
|
|
|
249
|
+
// selected: '' (not a toggle) | 'true' | 'false'. Applied again after
|
|
250
|
+
// every onSelectedChange (selectedEventCount), so a toggle JS didn't take
|
|
251
|
+
// goes back.
|
|
252
|
+
if (!prevProps || newProps.selected != prevProps->selected ||
|
|
253
|
+
newProps.selectedEventCount != prevProps->selectedEventCount) {
|
|
254
|
+
[_view syncSelected:NSStringFromStd(newProps.selected, @"")];
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// menu: the flattened menu items
|
|
258
|
+
if (!prevProps || !PCMenuItemsEqual(newProps.menu, prevProps->menu)) {
|
|
259
|
+
_view.menuItems = PCMenuItemsToArray(newProps.menu);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// ios: {symbolEffect, symbolEffectTrigger}
|
|
263
|
+
if (!prevProps || newProps.ios.symbolEffect != prevProps->ios.symbolEffect ||
|
|
264
|
+
newProps.ios.symbolEffectTrigger != prevProps->ios.symbolEffectTrigger) {
|
|
265
|
+
[_view setSymbolEffect:NSStringFromStd(newProps.ios.symbolEffect, @"")
|
|
266
|
+
trigger:NSStringFromStd(newProps.ios.symbolEffectTrigger, @"")];
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (!prevProps || newProps.haptics != prevProps->haptics) {
|
|
270
|
+
_view.haptics.kind = NSStringFromStd(newProps.haptics, @"");
|
|
271
|
+
}
|
|
272
|
+
|
|
158
273
|
// androidRippleColor / androidStrokeColor: Android only
|
|
159
274
|
|
|
160
275
|
[super updateProps:props oldProps:oldProps];
|
package/ios/PCButtonGroup.mm
CHANGED
|
@@ -21,8 +21,10 @@
|
|
|
21
21
|
#import "PCButtonGroupComponentDescriptors-custom.h"
|
|
22
22
|
#import "PCButtonGroupShadowNode-custom.h"
|
|
23
23
|
#import "PCButtonGroupState-custom.h"
|
|
24
|
+
#import "PCMenuItems.h"
|
|
24
25
|
|
|
25
26
|
using namespace facebook::react;
|
|
27
|
+
using namespace platformcomponents;
|
|
26
28
|
|
|
27
29
|
namespace {
|
|
28
30
|
static inline bool ButtonsEqual(
|
|
@@ -35,7 +37,7 @@ static inline bool ButtonsEqual(
|
|
|
35
37
|
if (a[i].disabled != b[i].disabled) return false;
|
|
36
38
|
if (a[i].iconType != b[i].iconType) return false;
|
|
37
39
|
if (a[i].iconName != b[i].iconName) return false;
|
|
38
|
-
if (a[i].iconUri != b[i].iconUri) return false;
|
|
40
|
+
if (a[i].iconRequest != b[i].iconRequest || a[i].iconUri != b[i].iconUri) return false;
|
|
39
41
|
if (a[i].iconScale != b[i].iconScale) return false;
|
|
40
42
|
if (a[i].iconTinted != b[i].iconTinted) return false;
|
|
41
43
|
if (a[i].accessibilityLabel != b[i].accessibilityLabel) return false;
|
|
@@ -96,6 +98,12 @@ static UIFont *FontFromLabelStyle(const PCButtonGroupLabelStyleStruct &style) {
|
|
|
96
98
|
|
|
97
99
|
- (instancetype)initWithFrame:(CGRect)frame {
|
|
98
100
|
if (self = [super initWithFrame:frame]) {
|
|
101
|
+
// Fabric views seed _props with their own defaults: RCTViewComponentView
|
|
102
|
+
// asserts on it in debug builds of React Native core, and the first
|
|
103
|
+
// updateProps would otherwise read the base ViewProps as PCButtonGroupProps.
|
|
104
|
+
static const auto defaultProps = std::make_shared<const PCButtonGroupProps>();
|
|
105
|
+
_props = defaultProps;
|
|
106
|
+
|
|
99
107
|
_view = [PCButtonGroupView new];
|
|
100
108
|
self.contentView = _view;
|
|
101
109
|
|
|
@@ -105,6 +113,8 @@ static UIFont *FontFromLabelStyle(const PCButtonGroupLabelStyleStruct &style) {
|
|
|
105
113
|
__typeof(self) strongSelf = weakSelf;
|
|
106
114
|
if (!strongSelf) return;
|
|
107
115
|
|
|
116
|
+
[strongSelf->_view.haptics performIn:strongSelf->_view];
|
|
117
|
+
|
|
108
118
|
auto eventEmitter =
|
|
109
119
|
std::static_pointer_cast<const PCButtonGroupEventEmitter>(strongSelf->_eventEmitter);
|
|
110
120
|
if (!eventEmitter) return;
|
|
@@ -131,6 +141,39 @@ static UIFont *FontFromLabelStyle(const PCButtonGroupLabelStyleStruct &style) {
|
|
|
131
141
|
eventEmitter->onGroupSelectionChange(payload);
|
|
132
142
|
};
|
|
133
143
|
|
|
144
|
+
_view.onMenuSelect = ^(NSString *itemId, NSString *title) {
|
|
145
|
+
__typeof(self) strongSelf = weakSelf;
|
|
146
|
+
if (!strongSelf) return;
|
|
147
|
+
|
|
148
|
+
auto eventEmitter =
|
|
149
|
+
std::static_pointer_cast<const PCButtonGroupEventEmitter>(strongSelf->_eventEmitter);
|
|
150
|
+
if (!eventEmitter) return;
|
|
151
|
+
|
|
152
|
+
eventEmitter->onMenuSelect({.id = itemId.UTF8String, .title = title.UTF8String});
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
_view.onMenuOpen = ^{
|
|
156
|
+
__typeof(self) strongSelf = weakSelf;
|
|
157
|
+
if (!strongSelf) return;
|
|
158
|
+
|
|
159
|
+
auto eventEmitter =
|
|
160
|
+
std::static_pointer_cast<const PCButtonGroupEventEmitter>(strongSelf->_eventEmitter);
|
|
161
|
+
if (!eventEmitter) return;
|
|
162
|
+
|
|
163
|
+
eventEmitter->onMenuOpen({});
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
_view.onMenuClose = ^{
|
|
167
|
+
__typeof(self) strongSelf = weakSelf;
|
|
168
|
+
if (!strongSelf) return;
|
|
169
|
+
|
|
170
|
+
auto eventEmitter =
|
|
171
|
+
std::static_pointer_cast<const PCButtonGroupEventEmitter>(strongSelf->_eventEmitter);
|
|
172
|
+
if (!eventEmitter) return;
|
|
173
|
+
|
|
174
|
+
eventEmitter->onMenuClose({});
|
|
175
|
+
};
|
|
176
|
+
|
|
134
177
|
_view.onNeedsRemeasure = ^{
|
|
135
178
|
__typeof(self) strongSelf = weakSelf;
|
|
136
179
|
if (!strongSelf) return;
|
|
@@ -145,6 +188,11 @@ static UIFont *FontFromLabelStyle(const PCButtonGroupLabelStyleStruct &style) {
|
|
|
145
188
|
const auto &newProps = *std::static_pointer_cast<const PCButtonGroupProps>(props);
|
|
146
189
|
const auto prevProps = std::static_pointer_cast<const PCButtonGroupProps>(oldProps);
|
|
147
190
|
|
|
191
|
+
// split: 'true' | 'false'. Before the buttons, which it shapes.
|
|
192
|
+
if (!prevProps || newProps.split != prevProps->split) {
|
|
193
|
+
_view.split = (newProps.split == "true");
|
|
194
|
+
}
|
|
195
|
+
|
|
148
196
|
// buttons: [{label, value, disabled, iconType, iconName, iconUri, iconScale,
|
|
149
197
|
// iconTinted, accessibilityLabel}]
|
|
150
198
|
if (!prevProps || !ButtonsEqual(newProps.buttons, prevProps->buttons)) {
|
|
@@ -156,6 +204,7 @@ static UIFont *FontFromLabelStyle(const PCButtonGroupLabelStyleStruct &style) {
|
|
|
156
204
|
@"disabled": NSStringFromStd(button.disabled, @"enabled"),
|
|
157
205
|
@"iconType": NSStringFromStd(button.iconType, @""),
|
|
158
206
|
@"iconName": NSStringFromStd(button.iconName, @""),
|
|
207
|
+
@"iconRequest": NSStringFromStd(button.iconRequest, @""),
|
|
159
208
|
@"iconUri": NSStringFromStd(button.iconUri, @""),
|
|
160
209
|
@"iconScale": @(button.iconScale),
|
|
161
210
|
@"iconTinted": NSStringFromStd(button.iconTinted, @"true"),
|
|
@@ -215,6 +264,24 @@ static UIFont *FontFromLabelStyle(const PCButtonGroupLabelStyleStruct &style) {
|
|
|
215
264
|
_view.labelFont = FontFromLabelStyle(newProps.labelStyle);
|
|
216
265
|
}
|
|
217
266
|
|
|
267
|
+
// overflow: 'none' | 'menu' | 'wrap' (Android only)
|
|
268
|
+
if (!prevProps || newProps.overflow != prevProps->overflow) {
|
|
269
|
+
_view.overflow = NSStringFromStd(newProps.overflow, @"none");
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// menu: the split button's flattened menu items
|
|
273
|
+
if (!prevProps || !PCMenuItemsEqual(newProps.menu, prevProps->menu)) {
|
|
274
|
+
_view.menuItems = PCMenuItemsToArray(newProps.menu);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (!prevProps || newProps.menuAccessibilityLabel != prevProps->menuAccessibilityLabel) {
|
|
278
|
+
_view.menuAccessibilityLabel = NSStringFromStd(newProps.menuAccessibilityLabel, @"");
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (!prevProps || newProps.haptics != prevProps->haptics) {
|
|
282
|
+
_view.haptics.kind = NSStringFromStd(newProps.haptics, @"");
|
|
283
|
+
}
|
|
284
|
+
|
|
218
285
|
// androidRippleColor / androidStrokeColor / android: Android only
|
|
219
286
|
|
|
220
287
|
[super updateProps:props oldProps:oldProps];
|