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
|
@@ -5,17 +5,22 @@ import android.text.TextUtils
|
|
|
5
5
|
import android.view.View
|
|
6
6
|
import android.view.ViewParent
|
|
7
7
|
import android.widget.FrameLayout
|
|
8
|
+
import androidx.appcompat.widget.PopupMenu
|
|
8
9
|
import com.facebook.react.bridge.WritableNativeMap
|
|
9
10
|
import com.facebook.react.uimanager.PixelUtil
|
|
10
11
|
import com.facebook.react.uimanager.ReactCompoundViewGroup
|
|
11
12
|
import com.facebook.react.uimanager.StateWrapper
|
|
12
13
|
import com.facebook.react.views.scroll.ReactScrollViewHelper
|
|
14
|
+
import com.google.android.material.R as MaterialR
|
|
13
15
|
import com.google.android.material.button.MaterialButton
|
|
16
|
+
import com.google.android.material.progressindicator.CircularProgressIndicatorSpec
|
|
17
|
+
import com.google.android.material.progressindicator.IndeterminateDrawable
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* A Material 3 Expressive button. Hosts a MaterialButton, rebuilt whenever a
|
|
17
21
|
* prop that the widget reads at construction changes, and reports its
|
|
18
|
-
* intrinsic size to Fabric so the React view wraps its content.
|
|
22
|
+
* intrinsic size to Fabric so the React view wraps its content. It can be a
|
|
23
|
+
* toggle (a checkable MaterialButton) or open a PopupMenu anchored to itself.
|
|
19
24
|
*/
|
|
20
25
|
class PCButtonView(context: Context) :
|
|
21
26
|
FrameLayout(context),
|
|
@@ -38,25 +43,46 @@ class PCButtonView(context: Context) :
|
|
|
38
43
|
var variant: PCExpressive.Variant = PCExpressive.Variant.FILLED
|
|
39
44
|
var size: String = "small"
|
|
40
45
|
var shape: String = "round"
|
|
46
|
+
var iconPosition: String = "leading" // "leading" | "trailing" | "top" | "bottom"
|
|
47
|
+
var cornerRadius: Float = -1f // dp; negative = use shape
|
|
41
48
|
var interactivity: String = "enabled" // "enabled" | "disabled"
|
|
49
|
+
var loading: Boolean = false
|
|
42
50
|
var spokenLabel: String = ""
|
|
43
51
|
var expressive: Boolean = true // android.material: "expressive" | "m3"
|
|
52
|
+
var toggle: Boolean = false // a checkable button, controlled by `selected`
|
|
53
|
+
var controlledSelected: Boolean = false // the `selected` prop
|
|
54
|
+
/** The flattened menu items (see PCMenuSupport); empty = no menu */
|
|
55
|
+
var menuItems: List<PCMenuSupport.Item> = emptyList()
|
|
44
56
|
|
|
45
57
|
// --- Styling (null / empty = Material theme default) ---
|
|
46
58
|
var containerColor: Int? = null
|
|
47
59
|
var foregroundColor: Int? = null
|
|
48
60
|
var rippleColor: Int? = null
|
|
49
61
|
var strokeColor: Int? = null
|
|
62
|
+
var disabledContainerColor: Int? = null
|
|
63
|
+
var disabledForegroundColor: Int? = null
|
|
50
64
|
var labelFontFamily: String = ""
|
|
51
65
|
var labelFontSize: Float = 0f
|
|
52
66
|
var labelFontWeight: String = ""
|
|
53
67
|
var labelFontStyle: String = ""
|
|
68
|
+
var maxFontSizeMultiplier: Float = 0f // < 1 = no cap
|
|
69
|
+
|
|
70
|
+
/** The `haptics` prop: the manager plays it on a press (a toggle's included), showMenu on a pick. */
|
|
71
|
+
var haptics: String = ""
|
|
54
72
|
|
|
55
73
|
// --- Events ---
|
|
56
74
|
var onPress: (() -> Unit)? = null
|
|
75
|
+
var onSelectedChange: ((selected: Boolean) -> Unit)? = null
|
|
76
|
+
var onMenuSelect: ((id: String, title: String) -> Unit)? = null
|
|
77
|
+
var onMenuOpen: (() -> Unit)? = null
|
|
78
|
+
var onMenuClose: (() -> Unit)? = null
|
|
57
79
|
|
|
58
80
|
// --- UI ---
|
|
59
81
|
private var button: MaterialButton? = null
|
|
82
|
+
private var popupMenu: PopupMenu? = null
|
|
83
|
+
|
|
84
|
+
/** Set while the checked state follows `selected`, so it isn't reported. */
|
|
85
|
+
private var syncingChecked = false
|
|
60
86
|
|
|
61
87
|
/** Bumped on every rebuild so late image loads can't touch a stale button. */
|
|
62
88
|
private var rebuildGeneration = 0
|
|
@@ -114,6 +140,22 @@ class PCButtonView(context: Context) :
|
|
|
114
140
|
rebuildUI()
|
|
115
141
|
}
|
|
116
142
|
|
|
143
|
+
fun applyIconPosition(value: String?) {
|
|
144
|
+
val newValue = when (value) {
|
|
145
|
+
"trailing", "top", "bottom" -> value
|
|
146
|
+
else -> "leading"
|
|
147
|
+
}
|
|
148
|
+
if (iconPosition == newValue) return
|
|
149
|
+
iconPosition = newValue
|
|
150
|
+
rebuildUI()
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
fun applyCornerRadius(value: Float) {
|
|
154
|
+
if (cornerRadius == value) return
|
|
155
|
+
cornerRadius = value
|
|
156
|
+
rebuildUI()
|
|
157
|
+
}
|
|
158
|
+
|
|
117
159
|
fun applyInteractivity(value: String?) {
|
|
118
160
|
val newValue = if (value == "disabled") "disabled" else "enabled"
|
|
119
161
|
if (interactivity == newValue) return
|
|
@@ -121,6 +163,12 @@ class PCButtonView(context: Context) :
|
|
|
121
163
|
button?.isEnabled = newValue == "enabled"
|
|
122
164
|
}
|
|
123
165
|
|
|
166
|
+
fun applyLoading(value: Boolean) {
|
|
167
|
+
if (loading == value) return
|
|
168
|
+
loading = value
|
|
169
|
+
rebuildUI()
|
|
170
|
+
}
|
|
171
|
+
|
|
124
172
|
fun applyMaterial(value: String?) {
|
|
125
173
|
val parsed = PCExpressive.parseExpressive(value)
|
|
126
174
|
if (expressive == parsed) return
|
|
@@ -128,6 +176,38 @@ class PCButtonView(context: Context) :
|
|
|
128
176
|
rebuildUI()
|
|
129
177
|
}
|
|
130
178
|
|
|
179
|
+
/**
|
|
180
|
+
* "" (not a toggle) | "true" | "false". The checked state follows it in
|
|
181
|
+
* [syncChecked], once all props of an update are in.
|
|
182
|
+
*/
|
|
183
|
+
fun applySelected(value: String) {
|
|
184
|
+
val newToggle = value.isNotEmpty()
|
|
185
|
+
controlledSelected = value == "true"
|
|
186
|
+
if (toggle == newToggle) return
|
|
187
|
+
toggle = newToggle
|
|
188
|
+
rebuildUI()
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Shows the controlled state. Called after every props update, including
|
|
193
|
+
* the one that follows each onSelectedChange, so a toggle the parent
|
|
194
|
+
* didn't take goes back.
|
|
195
|
+
*/
|
|
196
|
+
fun syncChecked() {
|
|
197
|
+
val b = button ?: return
|
|
198
|
+
if (!b.isCheckable || b.isChecked == controlledSelected) return
|
|
199
|
+
syncingChecked = true
|
|
200
|
+
b.isChecked = controlledSelected
|
|
201
|
+
syncingChecked = false
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
fun applyMenu(value: List<PCMenuSupport.Item>) {
|
|
205
|
+
val hadMenu = menuItems.isNotEmpty()
|
|
206
|
+
menuItems = value
|
|
207
|
+
// A button with a menu isn't checkable
|
|
208
|
+
if (hadMenu != value.isNotEmpty()) rebuildUI()
|
|
209
|
+
}
|
|
210
|
+
|
|
131
211
|
fun applySpokenLabel(value: String) {
|
|
132
212
|
if (spokenLabel == value) return
|
|
133
213
|
spokenLabel = value
|
|
@@ -145,6 +225,13 @@ class PCButtonView(context: Context) :
|
|
|
145
225
|
rebuildUI()
|
|
146
226
|
}
|
|
147
227
|
|
|
228
|
+
fun applyDisabledColors(container: Int?, foreground: Int?) {
|
|
229
|
+
if (disabledContainerColor == container && disabledForegroundColor == foreground) return
|
|
230
|
+
disabledContainerColor = container
|
|
231
|
+
disabledForegroundColor = foreground
|
|
232
|
+
rebuildUI()
|
|
233
|
+
}
|
|
234
|
+
|
|
148
235
|
fun applyLabelStyle(fontFamily: String, fontSize: Float, fontWeight: String, fontStyle: String) {
|
|
149
236
|
if (labelFontFamily == fontFamily && labelFontSize == fontSize &&
|
|
150
237
|
labelFontWeight == fontWeight && labelFontStyle == fontStyle
|
|
@@ -156,6 +243,12 @@ class PCButtonView(context: Context) :
|
|
|
156
243
|
rebuildUI()
|
|
157
244
|
}
|
|
158
245
|
|
|
246
|
+
fun applyMaxFontSizeMultiplier(value: Float) {
|
|
247
|
+
if (maxFontSizeMultiplier == value) return
|
|
248
|
+
maxFontSizeMultiplier = value
|
|
249
|
+
rebuildUI()
|
|
250
|
+
}
|
|
251
|
+
|
|
159
252
|
/** Called by the enclosing FloatingToolbar when its variant changes. */
|
|
160
253
|
fun refreshToolbarStyle() {
|
|
161
254
|
if (toolbarOverlay() != builtToolbarOverlay) rebuildUI()
|
|
@@ -183,6 +276,7 @@ class PCButtonView(context: Context) :
|
|
|
183
276
|
|
|
184
277
|
override fun onDetachedFromWindow() {
|
|
185
278
|
PCNativeTheme.removeListener(nativeThemeListener)
|
|
279
|
+
popupMenu?.dismiss()
|
|
186
280
|
super.onDetachedFromWindow()
|
|
187
281
|
}
|
|
188
282
|
|
|
@@ -221,19 +315,107 @@ class PCButtonView(context: Context) :
|
|
|
221
315
|
if (iconOnly) {
|
|
222
316
|
// Centre the icon instead of leaving it at the start edge
|
|
223
317
|
iconGravity = MaterialButton.ICON_GRAVITY_TEXT_START
|
|
318
|
+
} else {
|
|
319
|
+
when (iconPosition) {
|
|
320
|
+
"trailing" -> iconGravity = MaterialButton.ICON_GRAVITY_TEXT_END
|
|
321
|
+
// Material has no bottom gravity, so bottom puts the icon on top too
|
|
322
|
+
"top", "bottom" -> iconGravity = MaterialButton.ICON_GRAVITY_TEXT_TOP
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
val radius = this@PCButtonView.cornerRadius // MaterialButton has its own cornerRadius
|
|
326
|
+
if (radius >= 0) {
|
|
327
|
+
// A numeric radius overrides the shape (and its press morph)
|
|
328
|
+
shapeAppearanceModel = shapeAppearanceModel.withCornerSize(PixelUtil.toPixelFromDIP(radius))
|
|
329
|
+
}
|
|
330
|
+
// A toggle is a checkable button, which flips itself on click; with a
|
|
331
|
+
// menu the click opens the menu instead
|
|
332
|
+
isCheckable = this@PCButtonView.toggle && menuItems.isEmpty()
|
|
333
|
+
isChecked = isCheckable && controlledSelected
|
|
334
|
+
addOnCheckedChangeListener { _, checked ->
|
|
335
|
+
if (!syncingChecked) onSelectedChange?.invoke(checked)
|
|
336
|
+
}
|
|
337
|
+
setOnClickListener { anchor ->
|
|
338
|
+
if (loading) return@setOnClickListener
|
|
339
|
+
if (menuItems.isNotEmpty()) showMenu(anchor) else onPress?.invoke()
|
|
224
340
|
}
|
|
225
|
-
setOnClickListener { onPress?.invoke() }
|
|
226
341
|
}
|
|
227
342
|
|
|
228
|
-
|
|
343
|
+
// While loading the spinner replaces the icon, so a late image load is dropped
|
|
344
|
+
val showsSpinner = loading
|
|
345
|
+
PCButtonSupport.applyIcon(b, icon, { generation == rebuildGeneration && !showsSpinner }) { requestLayout() }
|
|
229
346
|
PCButtonSupport.applyFont(b, labelFontFamily, labelFontSize, labelFontWeight, labelFontStyle)
|
|
230
|
-
PCButtonSupport.
|
|
231
|
-
|
|
347
|
+
PCButtonSupport.applyMaxFontSizeMultiplier(b, maxFontSizeMultiplier)
|
|
348
|
+
PCButtonSupport.applyColors(
|
|
349
|
+
b, containerColor, foregroundColor, rippleColor, strokeColor, icon.tinted,
|
|
350
|
+
disabledContainerColor, disabledForegroundColor
|
|
351
|
+
)
|
|
352
|
+
// Added before the spinner goes in: once measured, a TextView reads its
|
|
353
|
+
// layout params when its text changes
|
|
232
354
|
addView(b, LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT))
|
|
355
|
+
if (showsSpinner) showSpinner(b)
|
|
233
356
|
button = b
|
|
234
357
|
requestLayout()
|
|
235
358
|
}
|
|
236
359
|
|
|
360
|
+
/**
|
|
361
|
+
* Swaps the label and icon for an indeterminate circular progress indicator
|
|
362
|
+
* at the icon size, keeping the button at its idle size, and ignores presses
|
|
363
|
+
* without the disabled look.
|
|
364
|
+
*/
|
|
365
|
+
private fun showSpinner(b: MaterialButton) {
|
|
366
|
+
val unspecified = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
|
|
367
|
+
b.measure(unspecified, unspecified)
|
|
368
|
+
val idleWidth = b.measuredWidth
|
|
369
|
+
val idleHeight = b.measuredHeight
|
|
370
|
+
|
|
371
|
+
val spec = CircularProgressIndicatorSpec(
|
|
372
|
+
b.context, null, 0, MaterialR.style.Widget_Material3_CircularProgressIndicator_ExtraSmall
|
|
373
|
+
)
|
|
374
|
+
if (b.iconSize > 0) spec.indicatorSize = b.iconSize
|
|
375
|
+
spec.indicatorInset = 0
|
|
376
|
+
spec.indicatorColors = intArrayOf(b.currentTextColor)
|
|
377
|
+
|
|
378
|
+
b.contentDescription = spokenLabel.ifEmpty { label }.ifEmpty { null }
|
|
379
|
+
b.text = ""
|
|
380
|
+
b.iconTint = null
|
|
381
|
+
b.icon = IndeterminateDrawable.createCircularDrawable(b.context, spec)
|
|
382
|
+
b.iconGravity = MaterialButton.ICON_GRAVITY_TEXT_START
|
|
383
|
+
b.iconPadding = 0
|
|
384
|
+
b.minWidth = idleWidth
|
|
385
|
+
b.minimumWidth = idleWidth
|
|
386
|
+
b.minHeight = idleHeight
|
|
387
|
+
b.minimumHeight = idleHeight
|
|
388
|
+
b.isClickable = false
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// ---- Menu ----
|
|
392
|
+
|
|
393
|
+
/** A PopupMenu anchored to the button, built like ContextMenu's. */
|
|
394
|
+
private fun showMenu(anchor: View) {
|
|
395
|
+
if (popupMenu != null) return
|
|
396
|
+
val items = menuItems
|
|
397
|
+
val popup = PopupMenu(context, anchor)
|
|
398
|
+
popupMenu = popup
|
|
399
|
+
val hasIcons = PCMenuSupport.populate(context, popup.menu, items) { popupMenu === popup }
|
|
400
|
+
popup.setForceShowIcon(hasIcons)
|
|
401
|
+
|
|
402
|
+
popup.setOnMenuItemClickListener { menuItem ->
|
|
403
|
+
// Submenu headers open their submenu; they aren't picks
|
|
404
|
+
val item = PCMenuSupport.itemFor(menuItem, items)
|
|
405
|
+
if (item == null || !item.isAction) return@setOnMenuItemClickListener false
|
|
406
|
+
PCHaptics.perform(this, item.haptics.ifEmpty { haptics })
|
|
407
|
+
onMenuSelect?.invoke(item.id, item.title)
|
|
408
|
+
true
|
|
409
|
+
}
|
|
410
|
+
popup.setOnDismissListener {
|
|
411
|
+
if (popupMenu === popup) popupMenu = null
|
|
412
|
+
onMenuClose?.invoke()
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
onMenuOpen?.invoke()
|
|
416
|
+
popup.show()
|
|
417
|
+
}
|
|
418
|
+
|
|
237
419
|
// ---- Layout ----
|
|
238
420
|
|
|
239
421
|
private var manualLayoutPending = false
|
|
@@ -1,7 +1,9 @@
|
|
|
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
|
|
6
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
7
|
import com.facebook.react.uimanager.ReactStylesDiffMap
|
|
6
8
|
import com.facebook.react.uimanager.SimpleViewManager
|
|
7
9
|
import com.facebook.react.uimanager.StateWrapper
|
|
@@ -9,7 +11,6 @@ import com.facebook.react.uimanager.ThemedReactContext
|
|
|
9
11
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
10
12
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
11
13
|
import com.facebook.react.uimanager.events.Event
|
|
12
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
13
14
|
import com.facebook.react.viewmanagers.PCButtonManagerDelegate
|
|
14
15
|
import com.facebook.react.viewmanagers.PCButtonManagerInterface
|
|
15
16
|
import com.platformcomponents.PCButtonSupport.doubleOr
|
|
@@ -49,10 +50,29 @@ class PCButtonViewManager :
|
|
|
49
50
|
|
|
50
51
|
override fun addEventEmitters(reactContext: ThemedReactContext, view: PCButtonView) {
|
|
51
52
|
val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, view.id)
|
|
53
|
+
fun dispatch(name: String, fill: WritableMap.() -> Unit = {}) {
|
|
54
|
+
dispatcher?.dispatchEvent(ButtonEvent(UIManagerHelper.getSurfaceId(view), view.id, name, fill))
|
|
55
|
+
}
|
|
52
56
|
|
|
53
57
|
view.onPress = {
|
|
54
|
-
|
|
58
|
+
PCHaptics.perform(view, view.haptics)
|
|
59
|
+
dispatch("topButtonPress")
|
|
60
|
+
}
|
|
61
|
+
view.onSelectedChange = { selected -> dispatch("topSelectedChange") { putBoolean("selected", selected) } }
|
|
62
|
+
view.onMenuSelect = { id, title ->
|
|
63
|
+
dispatch("topMenuSelect") {
|
|
64
|
+
putString("id", id)
|
|
65
|
+
putString("title", title)
|
|
66
|
+
}
|
|
55
67
|
}
|
|
68
|
+
view.onMenuOpen = { dispatch("topMenuOpen") }
|
|
69
|
+
view.onMenuClose = { dispatch("topMenuClose") }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** The checked state follows `selected` once every prop of an update is in. */
|
|
73
|
+
override fun onAfterUpdateTransaction(view: PCButtonView) {
|
|
74
|
+
super.onAfterUpdateTransaction(view)
|
|
75
|
+
view.syncChecked()
|
|
56
76
|
}
|
|
57
77
|
|
|
58
78
|
override fun setLabel(view: PCButtonView, value: String?) {
|
|
@@ -76,10 +96,25 @@ class PCButtonViewManager :
|
|
|
76
96
|
view.applyShape(value)
|
|
77
97
|
}
|
|
78
98
|
|
|
99
|
+
// "leading" (default) | "trailing"
|
|
100
|
+
override fun setIconPosition(view: PCButtonView, value: String?) {
|
|
101
|
+
view.applyIconPosition(value)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Negative = use shape
|
|
105
|
+
override fun setCornerRadius(view: PCButtonView, value: Double) {
|
|
106
|
+
view.applyCornerRadius(value.toFloat())
|
|
107
|
+
}
|
|
108
|
+
|
|
79
109
|
override fun setInteractivity(view: PCButtonView, value: String?) {
|
|
80
110
|
view.applyInteractivity(value)
|
|
81
111
|
}
|
|
82
112
|
|
|
113
|
+
// "true" | "false"
|
|
114
|
+
override fun setLoading(view: PCButtonView, value: String?) {
|
|
115
|
+
view.applyLoading(value == "true")
|
|
116
|
+
}
|
|
117
|
+
|
|
83
118
|
// Colors arrive already processed by React Native (ARGB ints)
|
|
84
119
|
override fun setColor(view: PCButtonView, value: Int?) {
|
|
85
120
|
view.applyColors(value, view.foregroundColor, view.rippleColor, view.strokeColor)
|
|
@@ -97,6 +132,14 @@ class PCButtonViewManager :
|
|
|
97
132
|
view.applyColors(view.containerColor, view.foregroundColor, view.rippleColor, value)
|
|
98
133
|
}
|
|
99
134
|
|
|
135
|
+
override fun setDisabledColor(view: PCButtonView, value: Int?) {
|
|
136
|
+
view.applyDisabledColors(value, view.disabledForegroundColor)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
override fun setDisabledForegroundColor(view: PCButtonView, value: Int?) {
|
|
140
|
+
view.applyDisabledColors(view.disabledContainerColor, value)
|
|
141
|
+
}
|
|
142
|
+
|
|
100
143
|
// labelStyle: {fontFamily, fontSize, fontWeight, fontStyle}; empty / 0 = default
|
|
101
144
|
override fun setLabelStyle(view: PCButtonView, value: ReadableMap?) {
|
|
102
145
|
view.applyLabelStyle(
|
|
@@ -107,20 +150,55 @@ class PCButtonViewManager :
|
|
|
107
150
|
)
|
|
108
151
|
}
|
|
109
152
|
|
|
153
|
+
// 0 (or below 1) = no cap
|
|
154
|
+
override fun setMaxFontSizeMultiplier(view: PCButtonView, value: Double) {
|
|
155
|
+
view.applyMaxFontSizeMultiplier(value.toFloat())
|
|
156
|
+
}
|
|
157
|
+
|
|
110
158
|
override fun setSpokenLabel(view: PCButtonView, value: String?) {
|
|
111
159
|
view.applySpokenLabel(value ?: "")
|
|
112
160
|
}
|
|
113
161
|
|
|
162
|
+
// "" (none added) | "none" | "selection" | "light" | "medium" | "heavy" | "success" | "warning" | "error"
|
|
163
|
+
override fun setHaptics(view: PCButtonView, value: String?) {
|
|
164
|
+
view.haptics = PCHaptics.configure(view, value)
|
|
165
|
+
}
|
|
166
|
+
|
|
114
167
|
// "expressive" (default) | "m3"
|
|
115
168
|
override fun setAndroidMaterial(view: PCButtonView, value: String?) {
|
|
116
169
|
view.applyMaterial(value)
|
|
117
170
|
}
|
|
118
171
|
|
|
172
|
+
// "" (not a toggle) | "true" | "false"
|
|
173
|
+
override fun setSelected(view: PCButtonView, value: String?) {
|
|
174
|
+
view.applySelected(value ?: "")
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Bumped by JS after every onSelectedChange; the update it causes runs
|
|
178
|
+
// onAfterUpdateTransaction, which shows `selected` again
|
|
179
|
+
override fun setSelectedEventCount(view: PCButtonView, value: Int) {}
|
|
180
|
+
|
|
181
|
+
// menu: the flattened menu items
|
|
182
|
+
override fun setMenu(view: PCButtonView, value: ReadableArray?) {
|
|
183
|
+
view.applyMenu(PCMenuSupport.parseItems(value))
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// ios: symbol effects, iOS only
|
|
187
|
+
override fun setIos(view: PCButtonView, value: ReadableMap?) {}
|
|
188
|
+
|
|
119
189
|
// --- Events ---
|
|
120
|
-
private class
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
190
|
+
private class ButtonEvent(
|
|
191
|
+
surfaceId: Int,
|
|
192
|
+
viewTag: Int,
|
|
193
|
+
private val name: String,
|
|
194
|
+
private val fill: WritableMap.() -> Unit
|
|
195
|
+
) : Event<ButtonEvent>(surfaceId, viewTag) {
|
|
196
|
+
// Every press counts; two quick presses must not merge into one
|
|
197
|
+
override fun canCoalesce(): Boolean = false
|
|
198
|
+
|
|
199
|
+
override fun getEventName(): String = name
|
|
200
|
+
|
|
201
|
+
// Fabric reads the payload from here
|
|
202
|
+
override fun getEventData(): WritableMap = Arguments.createMap().apply(fill)
|
|
125
203
|
}
|
|
126
204
|
}
|