react-native-platform-components 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PlatformComponents.podspec +1 -1
- package/README.md +33 -31
- package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
- package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
- package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
- package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
- package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
- package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
- package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
- package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
- package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
- package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
- package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
- package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
- package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
- package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
- package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
- package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
- package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
- package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
- package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
- package/android/src/main/res/values/ids.xml +5 -0
- package/android/src/main/res/values/styles.xml +24 -0
- package/ios/PCButton.mm +122 -7
- package/ios/PCButtonGroup.mm +68 -1
- package/ios/PCButtonGroupView.swift +225 -6
- package/ios/PCButtonSupport.swift +181 -10
- package/ios/PCButtonView.swift +297 -14
- package/ios/PCConstants.swift +23 -2
- package/ios/PCContextMenu.mm +28 -110
- package/ios/PCContextMenu.swift +106 -167
- package/ios/PCDatePicker.mm +21 -9
- package/ios/PCDatePickerView.swift +94 -20
- package/ios/PCFloatingActionButton.h +10 -0
- package/ios/PCFloatingActionButton.mm +177 -0
- package/ios/PCFloatingActionButtonView.swift +426 -0
- package/ios/PCFloatingToolbar.mm +27 -0
- package/ios/PCFloatingToolbarView.swift +241 -0
- package/ios/PCHaptics.swift +91 -0
- package/ios/PCImageLoader.swift +76 -12
- package/ios/PCLiquidGlass.mm +36 -0
- package/ios/PCLiquidGlass.swift +221 -114
- package/ios/PCLiquidGlassContainer.h +10 -0
- package/ios/PCLiquidGlassContainer.mm +84 -0
- package/ios/PCLiquidGlassContainer.swift +69 -0
- package/ios/PCMenuItems.h +76 -0
- package/ios/PCMenuSupport.swift +350 -0
- package/ios/PCNavigationRail.h +10 -0
- package/ios/PCNavigationRail.mm +270 -0
- package/ios/PCNavigationRailView.swift +415 -0
- package/ios/PCSegmentedControl.mm +17 -2
- package/ios/PCSegmentedControl.swift +57 -7
- package/ios/PCSelectionMenu.mm +36 -8
- package/ios/PCSelectionMenu.swift +224 -48
- package/ios/PCTabBar.h +10 -0
- package/ios/PCTabBar.mm +285 -0
- package/ios/PCTabBarAccessory.h +10 -0
- package/ios/PCTabBarAccessory.mm +93 -0
- package/ios/PCTabBarAccessoryView.swift +96 -0
- package/ios/PCTabBarView.swift +671 -0
- package/ios/PCTextField.mm +159 -4
- package/ios/PCTextFieldView.swift +603 -57
- package/lib/commonjs/Button.js +73 -1
- package/lib/commonjs/Button.js.map +1 -1
- package/lib/commonjs/ButtonGroup.js +13 -3
- package/lib/commonjs/ButtonGroup.js.map +1 -1
- package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
- package/lib/commonjs/ButtonNativeComponent.ts +119 -3
- package/lib/commonjs/ContextMenu.js +9 -48
- package/lib/commonjs/ContextMenu.js.map +1 -1
- package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
- package/lib/commonjs/DatePicker.js +98 -2
- package/lib/commonjs/DatePicker.js.map +1 -1
- package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
- package/lib/commonjs/FloatingActionButton.js +60 -0
- package/lib/commonjs/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/commonjs/FloatingToolbar.js +9 -1
- package/lib/commonjs/FloatingToolbar.js.map +1 -1
- package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/commonjs/LiquidGlass.js +7 -1
- package/lib/commonjs/LiquidGlass.js.map +1 -1
- package/lib/commonjs/LiquidGlassContainer.js +32 -0
- package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
- package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
- package/lib/commonjs/NavigationRail.js +104 -0
- package/lib/commonjs/NavigationRail.js.map +1 -0
- package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
- package/lib/commonjs/PlatformComponentsProvider.js +18 -0
- package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/SegmentedControl.js +7 -0
- package/lib/commonjs/SegmentedControl.js.map +1 -1
- package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
- package/lib/commonjs/SelectionMenu.js +27 -3
- package/lib/commonjs/SelectionMenu.js.map +1 -1
- package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
- package/lib/commonjs/SplitButton.js +98 -0
- package/lib/commonjs/SplitButton.js.map +1 -0
- package/lib/commonjs/TabBar.js +203 -0
- package/lib/commonjs/TabBar.js.map +1 -0
- package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/commonjs/TabBarNativeComponent.ts +145 -0
- package/lib/commonjs/TextField.js +171 -8
- package/lib/commonjs/TextField.js.map +1 -1
- package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
- package/lib/commonjs/focusRegistry.js +2 -1
- package/lib/commonjs/focusRegistry.js.map +1 -1
- package/lib/commonjs/haptics.js +2 -0
- package/lib/commonjs/haptics.js.map +1 -0
- package/lib/commonjs/icons.js +15 -1
- package/lib/commonjs/icons.js.map +1 -1
- package/lib/commonjs/index.js +77 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +156 -92
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/jest.js +910 -0
- package/lib/commonjs/jest.js.map +1 -0
- package/lib/commonjs/menuItems.js +68 -0
- package/lib/commonjs/menuItems.js.map +1 -0
- package/lib/commonjs/selectionIdentifiers.js +18 -0
- package/lib/commonjs/selectionIdentifiers.js.map +1 -0
- package/lib/commonjs/submitBehavior.js +19 -0
- package/lib/commonjs/submitBehavior.js.map +1 -0
- package/lib/commonjs/tabItems.js +49 -0
- package/lib/commonjs/tabItems.js.map +1 -0
- package/lib/commonjs/web/Button.js +170 -0
- package/lib/commonjs/web/Button.js.map +1 -0
- package/lib/commonjs/web/ButtonGroup.js +119 -0
- package/lib/commonjs/web/ButtonGroup.js.map +1 -0
- package/lib/commonjs/web/DatePicker.js +168 -0
- package/lib/commonjs/web/DatePicker.js.map +1 -0
- package/lib/commonjs/web/DateRangePicker.js +137 -0
- package/lib/commonjs/web/DateRangePicker.js.map +1 -0
- package/lib/commonjs/web/Dialog.js +54 -0
- package/lib/commonjs/web/Dialog.js.map +1 -0
- package/lib/commonjs/web/FloatingActionButton.js +98 -0
- package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/web/Icon.js +34 -0
- package/lib/commonjs/web/Icon.js.map +1 -0
- package/lib/commonjs/web/NativeTheme.js +28 -0
- package/lib/commonjs/web/NativeTheme.js.map +1 -0
- package/lib/commonjs/web/NavigationRail.js +139 -0
- package/lib/commonjs/web/NavigationRail.js.map +1 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/web/SegmentedControl.js +117 -0
- package/lib/commonjs/web/SegmentedControl.js.map +1 -0
- package/lib/commonjs/web/SelectionMenu.js +142 -0
- package/lib/commonjs/web/SelectionMenu.js.map +1 -0
- package/lib/commonjs/web/SplitButton.js +35 -0
- package/lib/commonjs/web/SplitButton.js.map +1 -0
- package/lib/commonjs/web/TabBar.js +131 -0
- package/lib/commonjs/web/TabBar.js.map +1 -0
- package/lib/commonjs/web/TextField.js +322 -0
- package/lib/commonjs/web/TextField.js.map +1 -0
- package/lib/commonjs/web/components.js +36 -0
- package/lib/commonjs/web/components.js.map +1 -0
- package/lib/commonjs/web/containers.js +121 -0
- package/lib/commonjs/web/containers.js.map +1 -0
- package/lib/commonjs/web/dateInput.js +116 -0
- package/lib/commonjs/web/dateInput.js.map +1 -0
- package/lib/commonjs/web/shared.js +192 -0
- package/lib/commonjs/web/shared.js.map +1 -0
- package/lib/commonjs/webComponents.js +6 -0
- package/lib/commonjs/webComponents.js.map +1 -0
- package/lib/module/Button.js +74 -2
- package/lib/module/Button.js.map +1 -1
- package/lib/module/ButtonGroup.js +13 -3
- package/lib/module/ButtonGroup.js.map +1 -1
- package/lib/module/ButtonGroupNativeComponent.ts +74 -4
- package/lib/module/ButtonNativeComponent.ts +119 -3
- package/lib/module/ContextMenu.js +9 -48
- package/lib/module/ContextMenu.js.map +1 -1
- package/lib/module/ContextMenuNativeComponent.ts +47 -49
- package/lib/module/DatePicker.js +98 -4
- package/lib/module/DatePicker.js.map +1 -1
- package/lib/module/DatePickerNativeComponent.ts +19 -2
- package/lib/module/FloatingActionButton.js +53 -0
- package/lib/module/FloatingActionButton.js.map +1 -0
- package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/module/FloatingToolbar.js +9 -1
- package/lib/module/FloatingToolbar.js.map +1 -1
- package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
- package/lib/module/LiquidGlass.js +7 -1
- package/lib/module/LiquidGlass.js.map +1 -1
- package/lib/module/LiquidGlassContainer.js +26 -0
- package/lib/module/LiquidGlassContainer.js.map +1 -0
- package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/module/LiquidGlassNativeComponent.ts +8 -0
- package/lib/module/NavigationRail.js +99 -0
- package/lib/module/NavigationRail.js.map +1 -0
- package/lib/module/NavigationRailNativeComponent.ts +107 -0
- package/lib/module/PlatformComponentsProvider.js +13 -0
- package/lib/module/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/SegmentedControl.js +9 -1
- package/lib/module/SegmentedControl.js.map +1 -1
- package/lib/module/SegmentedControlNativeComponent.ts +11 -0
- package/lib/module/SelectionMenu.js +27 -3
- package/lib/module/SelectionMenu.js.map +1 -1
- package/lib/module/SelectionMenuNativeComponent.ts +26 -4
- package/lib/module/SplitButton.js +91 -0
- package/lib/module/SplitButton.js.map +1 -0
- package/lib/module/TabBar.js +196 -0
- package/lib/module/TabBar.js.map +1 -0
- package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/module/TabBarNativeComponent.ts +145 -0
- package/lib/module/TextField.js +172 -9
- package/lib/module/TextField.js.map +1 -1
- package/lib/module/TextFieldNativeComponent.ts +110 -4
- package/lib/module/focusRegistry.js +1 -0
- package/lib/module/focusRegistry.js.map +1 -1
- package/lib/module/haptics.js +2 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/icons.js +15 -1
- package/lib/module/icons.js.map +1 -1
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +12 -87
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/jest.js +840 -0
- package/lib/module/jest.js.map +1 -0
- package/lib/module/menuItems.js +65 -0
- package/lib/module/menuItems.js.map +1 -0
- package/lib/module/selectionIdentifiers.js +14 -0
- package/lib/module/selectionIdentifiers.js.map +1 -0
- package/lib/module/submitBehavior.js +15 -0
- package/lib/module/submitBehavior.js.map +1 -0
- package/lib/module/tabItems.js +45 -0
- package/lib/module/tabItems.js.map +1 -0
- package/lib/module/web/Button.js +164 -0
- package/lib/module/web/Button.js.map +1 -0
- package/lib/module/web/ButtonGroup.js +113 -0
- package/lib/module/web/ButtonGroup.js.map +1 -0
- package/lib/module/web/DatePicker.js +162 -0
- package/lib/module/web/DatePicker.js.map +1 -0
- package/lib/module/web/DateRangePicker.js +131 -0
- package/lib/module/web/DateRangePicker.js.map +1 -0
- package/lib/module/web/Dialog.js +48 -0
- package/lib/module/web/Dialog.js.map +1 -0
- package/lib/module/web/FloatingActionButton.js +94 -0
- package/lib/module/web/FloatingActionButton.js.map +1 -0
- package/lib/module/web/Icon.js +29 -0
- package/lib/module/web/Icon.js.map +1 -0
- package/lib/module/web/NativeTheme.js +23 -0
- package/lib/module/web/NativeTheme.js.map +1 -0
- package/lib/module/web/NavigationRail.js +133 -0
- package/lib/module/web/NavigationRail.js.map +1 -0
- package/lib/module/web/PlatformComponentsProvider.js +44 -0
- package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/web/SegmentedControl.js +112 -0
- package/lib/module/web/SegmentedControl.js.map +1 -0
- package/lib/module/web/SelectionMenu.js +137 -0
- package/lib/module/web/SelectionMenu.js.map +1 -0
- package/lib/module/web/SplitButton.js +30 -0
- package/lib/module/web/SplitButton.js.map +1 -0
- package/lib/module/web/TabBar.js +126 -0
- package/lib/module/web/TabBar.js.map +1 -0
- package/lib/module/web/TextField.js +316 -0
- package/lib/module/web/TextField.js.map +1 -0
- package/lib/module/web/components.js +33 -0
- package/lib/module/web/components.js.map +1 -0
- package/lib/module/web/containers.js +112 -0
- package/lib/module/web/containers.js.map +1 -0
- package/lib/module/web/dateInput.js +109 -0
- package/lib/module/web/dateInput.js.map +1 -0
- package/lib/module/web/shared.js +179 -0
- package/lib/module/web/shared.js.map +1 -0
- package/lib/module/webComponents.js +4 -0
- package/lib/module/webComponents.js.map +1 -0
- package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/Button.d.ts +111 -3
- package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
- package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
- package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
- package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/icons.d.ts +7 -1
- package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +7 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
- package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/jest.d.ts +139 -0
- package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
- package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
- package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/module/src/Button.d.ts +111 -3
- package/lib/typescript/module/src/Button.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
- package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePicker.d.ts +74 -1
- package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
- package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SplitButton.d.ts +83 -0
- package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBar.d.ts +144 -0
- package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TextField.d.ts +166 -8
- package/lib/typescript/module/src/TextField.d.ts.map +1 -1
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/haptics.d.ts +20 -0
- package/lib/typescript/module/src/haptics.d.ts.map +1 -0
- package/lib/typescript/module/src/icons.d.ts +7 -1
- package/lib/typescript/module/src/icons.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +7 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.web.d.ts +25 -254
- package/lib/typescript/module/src/index.web.d.ts.map +1 -1
- package/lib/typescript/module/src/jest.d.ts +139 -0
- package/lib/typescript/module/src/jest.d.ts.map +1 -0
- package/lib/typescript/module/src/menuItems.d.ts +100 -0
- package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/module/src/tabItems.d.ts +55 -0
- package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Button.d.ts +9 -0
- package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Icon.d.ts +12 -0
- package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TextField.d.ts +9 -0
- package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/web/components.d.ts +17 -0
- package/lib/typescript/module/src/web/components.d.ts.map +1 -0
- package/lib/typescript/module/src/web/containers.d.ts +24 -0
- package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/module/src/web/shared.d.ts +43 -0
- package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/module/src/webComponents.d.ts +43 -0
- package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
- package/package.json +32 -2
- package/plugin/build/index.d.ts +3 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/react-native.config.js +3 -0
- package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
- package/shared/PCFloatingActionButtonState-custom.h +61 -0
- package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
- package/shared/PCNavigationRailShadowNode-custom.h +42 -0
- package/shared/PCNavigationRailState-custom.h +62 -0
- package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
- package/shared/PCTabBarShadowNode-custom.cpp +54 -0
- package/shared/PCTabBarShadowNode-custom.h +54 -0
- package/shared/PCTabBarState-custom.h +62 -0
- package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
- package/src/Button.tsx +222 -7
- package/src/ButtonGroup.tsx +29 -11
- package/src/ButtonGroupNativeComponent.ts +74 -4
- package/src/ButtonNativeComponent.ts +119 -3
- package/src/ContextMenu.tsx +34 -81
- package/src/ContextMenuNativeComponent.ts +47 -49
- package/src/DatePicker.tsx +182 -4
- package/src/DatePickerNativeComponent.ts +19 -2
- package/src/FloatingActionButton.tsx +121 -0
- package/src/FloatingActionButtonNativeComponent.ts +58 -0
- package/src/FloatingToolbar.tsx +54 -3
- package/src/FloatingToolbarNativeComponent.ts +16 -0
- package/src/LiquidGlass.tsx +24 -1
- package/src/LiquidGlassContainer.tsx +42 -0
- package/src/LiquidGlassContainerNativeComponent.ts +17 -0
- package/src/LiquidGlassNativeComponent.ts +8 -0
- package/src/NavigationRail.tsx +203 -0
- package/src/NavigationRailNativeComponent.ts +107 -0
- package/src/PlatformComponentsProvider.tsx +15 -0
- package/src/SegmentedControl.tsx +31 -1
- package/src/SegmentedControlNativeComponent.ts +11 -0
- package/src/SelectionMenu.tsx +81 -6
- package/src/SelectionMenuNativeComponent.ts +26 -4
- package/src/SplitButton.tsx +198 -0
- package/src/TabBar.tsx +373 -0
- package/src/TabBarAccessoryNativeComponent.ts +19 -0
- package/src/TabBarNativeComponent.ts +145 -0
- package/src/TextField.tsx +428 -14
- package/src/TextFieldNativeComponent.ts +110 -4
- package/src/focusRegistry.ts +1 -0
- package/src/haptics.ts +31 -0
- package/src/icons.ts +28 -1
- package/src/index.tsx +7 -0
- package/src/index.web.tsx +51 -391
- package/src/jest.tsx +958 -0
- package/src/menuItems.ts +152 -0
- package/src/selectionIdentifiers.ts +17 -0
- package/src/submitBehavior.ts +16 -0
- package/src/tabItems.ts +113 -0
- package/src/web/Button.tsx +201 -0
- package/src/web/ButtonGroup.tsx +154 -0
- package/src/web/DatePicker.tsx +204 -0
- package/src/web/DateRangePicker.tsx +135 -0
- package/src/web/Dialog.tsx +54 -0
- package/src/web/FloatingActionButton.tsx +76 -0
- package/src/web/Icon.tsx +33 -0
- package/src/web/NativeTheme.ts +23 -0
- package/src/web/NavigationRail.tsx +148 -0
- package/src/web/PlatformComponentsProvider.tsx +48 -0
- package/src/web/SegmentedControl.tsx +127 -0
- package/src/web/SelectionMenu.tsx +149 -0
- package/src/web/SplitButton.tsx +32 -0
- package/src/web/TabBar.tsx +150 -0
- package/src/web/TextField.tsx +361 -0
- package/src/web/components.tsx +71 -0
- package/src/web/containers.tsx +130 -0
- package/src/web/dateInput.ts +137 -0
- package/src/web/shared.ts +176 -0
- package/src/webComponents.ts +45 -0
- package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
|
@@ -3,7 +3,12 @@ package com.platformcomponents
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.content.res.ColorStateList
|
|
5
5
|
import android.graphics.Color
|
|
6
|
+
import android.view.View
|
|
7
|
+
import android.view.ViewTreeObserver
|
|
8
|
+
import android.view.animation.AccelerateInterpolator
|
|
9
|
+
import android.view.animation.DecelerateInterpolator
|
|
6
10
|
import androidx.core.content.res.ResourcesCompat
|
|
11
|
+
import com.facebook.react.uimanager.util.ReactFindViewUtil
|
|
7
12
|
import com.google.android.material.R as MaterialR
|
|
8
13
|
import com.google.android.material.color.MaterialColors
|
|
9
14
|
import com.google.android.material.floatingtoolbar.FloatingToolbarLayout
|
|
@@ -40,6 +45,27 @@ class PCFloatingToolbarView(context: Context) :
|
|
|
40
45
|
applyColors()
|
|
41
46
|
}
|
|
42
47
|
|
|
48
|
+
// --- Linked scroll view ---
|
|
49
|
+
var scrollViewNativeID: String = ""
|
|
50
|
+
var hideOnScroll: Boolean = false
|
|
51
|
+
private var watchedScrollView: View? = null
|
|
52
|
+
private var watchedObserver: ViewTreeObserver? = null
|
|
53
|
+
private var lastScrollY = 0
|
|
54
|
+
private var scrollHidden = false
|
|
55
|
+
private val scrollViewFinder = object : ReactFindViewUtil.OnViewFoundListener {
|
|
56
|
+
override fun getNativeId(): String = scrollViewNativeID
|
|
57
|
+
override fun onViewFound(view: View) = watch(view)
|
|
58
|
+
}
|
|
59
|
+
// A tree observer rather than the view's own scroll listener, which a
|
|
60
|
+
// TabBar linked to the same ScrollView would replace
|
|
61
|
+
private val scrollListener = ViewTreeObserver.OnScrollChangedListener {
|
|
62
|
+
val view = watchedScrollView ?: return@OnScrollChangedListener
|
|
63
|
+
val scrollY = view.scrollY
|
|
64
|
+
val dy = scrollY - lastScrollY
|
|
65
|
+
lastScrollY = scrollY
|
|
66
|
+
onContentScrolled(scrollY, dy)
|
|
67
|
+
}
|
|
68
|
+
|
|
43
69
|
init {
|
|
44
70
|
clipChildren = false
|
|
45
71
|
clipToPadding = false
|
|
@@ -87,13 +113,119 @@ class PCFloatingToolbarView(context: Context) :
|
|
|
87
113
|
}
|
|
88
114
|
}
|
|
89
115
|
|
|
116
|
+
// ---- Hide on scroll ----
|
|
117
|
+
// Material's HideViewOnScrollBehavior only works in a CoordinatorLayout,
|
|
118
|
+
// which a React Native screen doesn't have. The toolbar does its motion
|
|
119
|
+
// itself, as TabBar does: it slides past its edge of the linked ScrollView
|
|
120
|
+
// (175 ms out, 225 ms back) while the content scrolls down, and returns as
|
|
121
|
+
// it scrolls up or reaches the top. The host view moves, so React Native's
|
|
122
|
+
// touch targeting follows it and the content underneath takes the touches.
|
|
123
|
+
|
|
124
|
+
fun applyScrollViewNativeID(value: String) {
|
|
125
|
+
if (scrollViewNativeID == value) return
|
|
126
|
+
scrollViewNativeID = value
|
|
127
|
+
findScrollView()
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
fun applyHideOnScroll(value: Boolean) {
|
|
131
|
+
if (hideOnScroll == value) return
|
|
132
|
+
hideOnScroll = value
|
|
133
|
+
if (!value) setScrollHidden(false)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** The ScrollView with scrollViewNativeID, now or once it mounts. */
|
|
137
|
+
private fun findScrollView() {
|
|
138
|
+
unwatch()
|
|
139
|
+
ReactFindViewUtil.removeViewListener(scrollViewFinder)
|
|
140
|
+
if (scrollViewNativeID.isEmpty() || !isAttachedToWindow) return
|
|
141
|
+
val found = ReactFindViewUtil.findView(rootView, scrollViewNativeID)
|
|
142
|
+
if (found != null) watch(found) else ReactFindViewUtil.addViewListener(scrollViewFinder)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private fun watch(view: View) {
|
|
146
|
+
ReactFindViewUtil.removeViewListener(scrollViewFinder)
|
|
147
|
+
unwatch()
|
|
148
|
+
watchedScrollView = view
|
|
149
|
+
lastScrollY = view.scrollY
|
|
150
|
+
watchedObserver = view.viewTreeObserver.also { it.addOnScrollChangedListener(scrollListener) }
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private fun unwatch() {
|
|
154
|
+
watchedObserver?.takeIf { it.isAlive }?.removeOnScrollChangedListener(scrollListener)
|
|
155
|
+
watchedObserver = null
|
|
156
|
+
watchedScrollView = null
|
|
157
|
+
if (scrollHidden) {
|
|
158
|
+
scrollHidden = false
|
|
159
|
+
animate().cancel()
|
|
160
|
+
translationX = 0f
|
|
161
|
+
translationY = 0f
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private fun onContentScrolled(scrollY: Int, dy: Int) {
|
|
166
|
+
if (!hideOnScroll || dy == 0) return
|
|
167
|
+
// Back at the top the toolbar always shows
|
|
168
|
+
setScrollHidden(scrollY > 0 && dy > 0)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private fun setScrollHidden(hide: Boolean) {
|
|
172
|
+
if (scrollHidden == hide) return
|
|
173
|
+
scrollHidden = hide
|
|
174
|
+
val (dx, dy) = if (hide) hiddenTranslation() else 0f to 0f
|
|
175
|
+
animate().cancel()
|
|
176
|
+
animate()
|
|
177
|
+
.translationX(dx)
|
|
178
|
+
.translationY(dy)
|
|
179
|
+
.setDuration(if (hide) 175L else 225L)
|
|
180
|
+
.setInterpolator(if (hide) AccelerateInterpolator() else DecelerateInterpolator())
|
|
181
|
+
.start()
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* How far to move to get past the linked edge: top or bottom for a
|
|
186
|
+
* horizontal toolbar, left or right for a vertical one, from the toolbar to
|
|
187
|
+
* that edge of the ScrollView plus the elevation shadow, and at least the
|
|
188
|
+
* toolbar's own size.
|
|
189
|
+
*/
|
|
190
|
+
private fun hiddenTranslation(): Pair<Float, Float> {
|
|
191
|
+
val scrollView = watchedScrollView ?: return 0f to 0f
|
|
192
|
+
val here = IntArray(2).also { getLocationInWindow(it) }
|
|
193
|
+
val there = IntArray(2).also { scrollView.getLocationInWindow(it) }
|
|
194
|
+
// Where the toolbar sits without the translation it may have
|
|
195
|
+
val left = here[0] - translationX
|
|
196
|
+
val top = here[1] - translationY
|
|
197
|
+
val right = left + width
|
|
198
|
+
val bottom = top + height
|
|
199
|
+
val scrollLeft = there[0].toFloat()
|
|
200
|
+
val scrollTop = there[1].toFloat()
|
|
201
|
+
val scrollRight = scrollLeft + scrollView.width
|
|
202
|
+
val scrollBottom = scrollTop + scrollView.height
|
|
203
|
+
val shadow = elevation
|
|
204
|
+
return if (width >= height) {
|
|
205
|
+
if (top + bottom < scrollTop + scrollBottom) {
|
|
206
|
+
0f to minOf(scrollTop - bottom - shadow, -height.toFloat())
|
|
207
|
+
} else {
|
|
208
|
+
0f to maxOf(scrollBottom - top + shadow, height.toFloat())
|
|
209
|
+
}
|
|
210
|
+
} else {
|
|
211
|
+
if (left + right < scrollLeft + scrollRight) {
|
|
212
|
+
minOf(scrollLeft - right - shadow, -width.toFloat()) to 0f
|
|
213
|
+
} else {
|
|
214
|
+
maxOf(scrollRight - left + shadow, width.toFloat()) to 0f
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
90
219
|
override fun onAttachedToWindow() {
|
|
91
220
|
super.onAttachedToWindow()
|
|
92
221
|
PCNativeTheme.addListener(nativeThemeListener)
|
|
93
222
|
PCNativeTheme.attach(context)
|
|
223
|
+
if (watchedScrollView == null) findScrollView()
|
|
94
224
|
}
|
|
95
225
|
|
|
96
226
|
override fun onDetachedFromWindow() {
|
|
227
|
+
ReactFindViewUtil.removeViewListener(scrollViewFinder)
|
|
228
|
+
unwatch()
|
|
97
229
|
PCNativeTheme.removeListener(nativeThemeListener)
|
|
98
230
|
super.onDetachedFromWindow()
|
|
99
231
|
}
|
|
@@ -37,6 +37,14 @@ class PCFloatingToolbarViewManager :
|
|
|
37
37
|
view.applyColor(value)
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
override fun setScrollViewNativeID(view: PCFloatingToolbarView, value: String?) {
|
|
41
|
+
view.applyScrollViewNativeID(value ?: "")
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override fun setHideOnScroll(view: PCFloatingToolbarView, value: Boolean) {
|
|
45
|
+
view.applyHideOnScroll(value)
|
|
46
|
+
}
|
|
47
|
+
|
|
40
48
|
override fun setIos(view: PCFloatingToolbarView, value: ReadableMap?) {
|
|
41
49
|
// iOS props are ignored on Android
|
|
42
50
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
package com.platformcomponents
|
|
2
|
+
|
|
3
|
+
import android.os.Build
|
|
4
|
+
import android.view.HapticFeedbackConstants
|
|
5
|
+
import android.view.View
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The shared `haptics` prop: `View.performHapticFeedback` with the matching
|
|
9
|
+
* `HapticFeedbackConstants`, played when a control reports the user's action.
|
|
10
|
+
* The system touch-feedback setting applies (no ignore flags are passed).
|
|
11
|
+
*/
|
|
12
|
+
object PCHaptics {
|
|
13
|
+
/**
|
|
14
|
+
* Applies a `haptics` value to [view]: "none" turns off the haptics the view
|
|
15
|
+
* plays itself (such as a long press), anything else turns them back on.
|
|
16
|
+
* Returns the value for the view to keep ("" when unset).
|
|
17
|
+
*/
|
|
18
|
+
fun configure(view: View, value: String?): String {
|
|
19
|
+
val kind = value ?: ""
|
|
20
|
+
view.isHapticFeedbackEnabled = kind != "none"
|
|
21
|
+
return kind
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Plays [kind] on [view]; "" and "none" play nothing. */
|
|
25
|
+
fun perform(view: View, kind: String) {
|
|
26
|
+
val constant = constantFor(kind) ?: return
|
|
27
|
+
view.performHapticFeedback(constant)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The feedback constant for a `haptics` value, with fallbacks below the API level that added it. */
|
|
31
|
+
fun constantFor(kind: String): Int? = when (kind) {
|
|
32
|
+
"selection" ->
|
|
33
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) HapticFeedbackConstants.SEGMENT_TICK
|
|
34
|
+
else HapticFeedbackConstants.CLOCK_TICK
|
|
35
|
+
"light" -> HapticFeedbackConstants.CONTEXT_CLICK
|
|
36
|
+
"medium" -> HapticFeedbackConstants.VIRTUAL_KEY
|
|
37
|
+
"heavy" -> HapticFeedbackConstants.LONG_PRESS
|
|
38
|
+
"success" ->
|
|
39
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) HapticFeedbackConstants.CONFIRM
|
|
40
|
+
else HapticFeedbackConstants.VIRTUAL_KEY
|
|
41
|
+
"warning", "error" ->
|
|
42
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) HapticFeedbackConstants.REJECT
|
|
43
|
+
else HapticFeedbackConstants.LONG_PRESS
|
|
44
|
+
else -> null
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -13,6 +13,8 @@ import android.util.LruCache
|
|
|
13
13
|
import java.net.HttpURLConnection
|
|
14
14
|
import java.net.URL
|
|
15
15
|
import java.util.concurrent.Executors
|
|
16
|
+
import org.json.JSONArray
|
|
17
|
+
import org.json.JSONObject
|
|
16
18
|
import kotlin.math.roundToInt
|
|
17
19
|
|
|
18
20
|
/**
|
|
@@ -30,6 +32,9 @@ object PCImageLoader {
|
|
|
30
32
|
private val executor = Executors.newFixedThreadPool(2)
|
|
31
33
|
private val mainHandler = Handler(Looper.getMainLooper())
|
|
32
34
|
private val cache = LruCache<String, Bitmap>(32)
|
|
35
|
+
private val cacheLock = Any()
|
|
36
|
+
private var nextGeneration = 0L
|
|
37
|
+
private val generations = mutableMapOf<String, Long>()
|
|
33
38
|
|
|
34
39
|
/**
|
|
35
40
|
* Loads [uri] and delivers the bitmap on the main thread. [scale] is the
|
|
@@ -38,37 +43,67 @@ object PCImageLoader {
|
|
|
38
43
|
*
|
|
39
44
|
* Cached images are delivered synchronously.
|
|
40
45
|
*/
|
|
41
|
-
fun load(context: Context, uri: String, scale: Float, callback: (Bitmap?) -> Unit) {
|
|
42
|
-
val
|
|
43
|
-
|
|
46
|
+
fun load(context: Context, uri: String, scale: Float, request: String = "", callback: (Bitmap?) -> Unit) {
|
|
47
|
+
val options = try { if (request.isEmpty()) JSONObject() else JSONObject(request) }
|
|
48
|
+
catch (_: Exception) { callback(null); return }
|
|
49
|
+
val policy = options.optString("cache", "default")
|
|
50
|
+
options.remove("cache")
|
|
51
|
+
val key = JSONArray().put(uri).put(scale.toDouble()).put(options).toString()
|
|
52
|
+
val cached = if (policy == "reload") null else cache.get(key)
|
|
53
|
+
cached?.let {
|
|
44
54
|
callback(it)
|
|
45
55
|
return
|
|
46
56
|
}
|
|
57
|
+
if (policy == "only-if-cached") { callback(null); return }
|
|
58
|
+
val generation = synchronized(cacheLock) {
|
|
59
|
+
nextGeneration += 1
|
|
60
|
+
generations[key] = nextGeneration
|
|
61
|
+
nextGeneration
|
|
62
|
+
}
|
|
47
63
|
|
|
48
64
|
val appContext = context.applicationContext
|
|
49
65
|
executor.execute {
|
|
66
|
+
var canCache = true
|
|
50
67
|
val bitmap = try {
|
|
51
|
-
decode(appContext, uri)
|
|
68
|
+
decode(appContext, uri, options) { canCache = it }
|
|
52
69
|
} catch (e: Exception) {
|
|
53
|
-
|
|
70
|
+
// Image URIs may carry credentials or signed query parameters.
|
|
71
|
+
Log.w(TAG, "Failed to load image (${e.javaClass.simpleName})")
|
|
54
72
|
null
|
|
55
73
|
}
|
|
56
74
|
if (bitmap != null) {
|
|
57
75
|
bitmap.density = (scale.coerceAtLeast(0.01f) * DisplayMetrics.DENSITY_DEFAULT).roundToInt()
|
|
58
|
-
|
|
76
|
+
}
|
|
77
|
+
synchronized(cacheLock) {
|
|
78
|
+
if (generations[key] == generation) {
|
|
79
|
+
if (bitmap != null && canCache) cache.put(key, bitmap) else cache.remove(key)
|
|
80
|
+
generations.remove(key)
|
|
81
|
+
}
|
|
59
82
|
}
|
|
60
83
|
mainHandler.post { callback(bitmap) }
|
|
61
84
|
}
|
|
62
85
|
}
|
|
63
86
|
|
|
64
|
-
private fun decode(context: Context, uri: String): Bitmap? {
|
|
87
|
+
private fun decode(context: Context, uri: String, options: JSONObject, cacheable: (Boolean) -> Unit): Bitmap? {
|
|
65
88
|
val parsed = Uri.parse(uri)
|
|
66
89
|
return when (parsed.scheme?.lowercase()) {
|
|
67
90
|
"http", "https" -> {
|
|
68
91
|
val connection = URL(uri).openConnection() as HttpURLConnection
|
|
69
92
|
connection.connectTimeout = TIMEOUT_MS
|
|
70
93
|
connection.readTimeout = TIMEOUT_MS
|
|
94
|
+
connection.useCaches = false
|
|
95
|
+
connection.instanceFollowRedirects = options.length() == 0
|
|
96
|
+
connection.requestMethod = options.optString("method", "GET")
|
|
97
|
+
options.optJSONObject("headers")?.let { headers ->
|
|
98
|
+
for (name in headers.keys()) connection.setRequestProperty(name, headers.getString(name))
|
|
99
|
+
}
|
|
71
100
|
try {
|
|
101
|
+
if (options.has("body")) {
|
|
102
|
+
connection.doOutput = true
|
|
103
|
+
connection.outputStream.use { it.write(options.getString("body").toByteArray(Charsets.UTF_8)) }
|
|
104
|
+
}
|
|
105
|
+
if (connection.responseCode !in 200..299) return null
|
|
106
|
+
cacheable(!connection.getHeaderField("Cache-Control").orEmpty().contains("no-store", ignoreCase = true))
|
|
72
107
|
connection.inputStream.use { BitmapFactory.decodeStream(it) }
|
|
73
108
|
} finally {
|
|
74
109
|
connection.disconnect()
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.platformcomponents
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Android implementation of LiquidGlassContainer.
|
|
8
|
+
*
|
|
9
|
+
* Glass containers are an iOS 26 feature, so on Android this is a plain
|
|
10
|
+
* container: React lays out the children, and `spacing` has no effect.
|
|
11
|
+
*/
|
|
12
|
+
class PCLiquidGlassContainerView(context: Context) : ViewGroup(context) {
|
|
13
|
+
|
|
14
|
+
init {
|
|
15
|
+
clipChildren = false
|
|
16
|
+
clipToPadding = false
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// ---- Layout ----
|
|
20
|
+
// Fabric sizes this view and positions its children.
|
|
21
|
+
|
|
22
|
+
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
23
|
+
setMeasuredDimension(
|
|
24
|
+
MeasureSpec.getSize(widthMeasureSpec),
|
|
25
|
+
MeasureSpec.getSize(heightMeasureSpec)
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
|
30
|
+
// No-op: Fabric lays out the children
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
package com.platformcomponents
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
4
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
5
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
6
|
+
import com.facebook.react.viewmanagers.PCLiquidGlassContainerManagerDelegate
|
|
7
|
+
import com.facebook.react.viewmanagers.PCLiquidGlassContainerManagerInterface
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Android ViewManager for LiquidGlassContainer: a plain container, since
|
|
11
|
+
* glass containers are iOS 26 only.
|
|
12
|
+
*/
|
|
13
|
+
class PCLiquidGlassContainerViewManager :
|
|
14
|
+
ViewGroupManager<PCLiquidGlassContainerView>(),
|
|
15
|
+
PCLiquidGlassContainerManagerInterface<PCLiquidGlassContainerView> {
|
|
16
|
+
|
|
17
|
+
private val delegate: ViewManagerDelegate<PCLiquidGlassContainerView> =
|
|
18
|
+
PCLiquidGlassContainerManagerDelegate(this)
|
|
19
|
+
|
|
20
|
+
override fun getName(): String = "PCLiquidGlassContainer"
|
|
21
|
+
|
|
22
|
+
override fun getDelegate(): ViewManagerDelegate<PCLiquidGlassContainerView> = delegate
|
|
23
|
+
|
|
24
|
+
override fun createViewInstance(reactContext: ThemedReactContext): PCLiquidGlassContainerView {
|
|
25
|
+
return PCLiquidGlassContainerView(reactContext)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
override fun setSpacing(view: PCLiquidGlassContainerView, value: Float) {
|
|
29
|
+
// Glass merging is iOS only
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -24,6 +24,13 @@ class PCLiquidGlassView(context: Context) : FrameLayout(context) {
|
|
|
24
24
|
updateBackground()
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/** "capsule" rounds to half the shorter side; anything else uses cornerRadius. */
|
|
28
|
+
var cornerStyle: String = ""
|
|
29
|
+
set(value) {
|
|
30
|
+
field = value
|
|
31
|
+
updateBackground()
|
|
32
|
+
}
|
|
33
|
+
|
|
27
34
|
var fallbackBackgroundColor: String? = null
|
|
28
35
|
set(value) {
|
|
29
36
|
field = value
|
|
@@ -36,17 +43,22 @@ class PCLiquidGlassView(context: Context) : FrameLayout(context) {
|
|
|
36
43
|
clipToPadding = false
|
|
37
44
|
}
|
|
38
45
|
|
|
46
|
+
private fun cornerRadiusPx(): Float =
|
|
47
|
+
if (cornerStyle == "capsule") minOf(width, height) / 2f
|
|
48
|
+
else cornerRadius * resources.displayMetrics.density
|
|
49
|
+
|
|
39
50
|
private fun updateBackground() {
|
|
40
51
|
val bgColor = fallbackBackgroundColor?.let { ColorParser.parse(it) }
|
|
52
|
+
val radius = cornerRadiusPx()
|
|
41
53
|
|
|
42
|
-
if (
|
|
54
|
+
if (radius > 0 || bgColor != null) {
|
|
43
55
|
val drawable = GradientDrawable().apply {
|
|
44
56
|
shape = GradientDrawable.RECTANGLE
|
|
45
|
-
cornerRadii = FloatArray(8) {
|
|
57
|
+
cornerRadii = FloatArray(8) { radius }
|
|
46
58
|
setColor(bgColor ?: Color.TRANSPARENT)
|
|
47
59
|
}
|
|
48
60
|
background = drawable
|
|
49
|
-
clipToOutline =
|
|
61
|
+
clipToOutline = radius > 0
|
|
50
62
|
outlineProvider = android.view.ViewOutlineProvider.BACKGROUND
|
|
51
63
|
} else {
|
|
52
64
|
background = null
|
|
@@ -54,10 +66,24 @@ class PCLiquidGlassView(context: Context) : FrameLayout(context) {
|
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
68
|
|
|
57
|
-
|
|
69
|
+
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
|
70
|
+
super.onSizeChanged(w, h, oldw, oldh)
|
|
71
|
+
// A capsule follows the size
|
|
72
|
+
if (cornerStyle == "capsule") updateBackground()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ---- Layout ----
|
|
76
|
+
// Fabric sizes this view and positions its children; FrameLayout must not
|
|
77
|
+
// re-measure or re-position them against its own gravity.
|
|
58
78
|
|
|
59
79
|
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
60
|
-
|
|
61
|
-
|
|
80
|
+
setMeasuredDimension(
|
|
81
|
+
MeasureSpec.getSize(widthMeasureSpec),
|
|
82
|
+
MeasureSpec.getSize(heightMeasureSpec)
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
|
87
|
+
// No-op: Fabric lays out the children
|
|
62
88
|
}
|
|
63
89
|
}
|
|
@@ -37,6 +37,10 @@ class PCLiquidGlassViewManager :
|
|
|
37
37
|
view.cornerRadius = value
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
override fun setCornerStyle(view: PCLiquidGlassView, value: String?) {
|
|
41
|
+
view.cornerStyle = value ?: ""
|
|
42
|
+
}
|
|
43
|
+
|
|
40
44
|
override fun setIos(view: PCLiquidGlassView, value: ReadableMap?) {
|
|
41
45
|
// iOS props are ignored on Android
|
|
42
46
|
}
|