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
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
|
|
3
|
+
/// iOS has no floating action button, so this is the system's prominent
|
|
4
|
+
/// button in a round shape: a `UIButton` with the `.prominentGlass()`
|
|
5
|
+
/// configuration on iOS 26 (`.filled()` before), a circle with the icon, or a
|
|
6
|
+
/// capsule with the icon and the label when extended. Shrinking and extending
|
|
7
|
+
/// animate between the two, following the `extended` prop or a linked
|
|
8
|
+
/// ScrollView.
|
|
9
|
+
///
|
|
10
|
+
/// The button sits at the trailing edge of this view, so it shrinks toward
|
|
11
|
+
/// that edge; the view keeps the extended size until the button has shrunk,
|
|
12
|
+
/// and takes it before the button extends, so a trailing-anchored button
|
|
13
|
+
/// doesn't jump.
|
|
14
|
+
@objcMembers
|
|
15
|
+
public final class PCFloatingActionButtonView: UIView {
|
|
16
|
+
// MARK: - Props (set from ObjC++)
|
|
17
|
+
|
|
18
|
+
public var label: String = "" {
|
|
19
|
+
didSet {
|
|
20
|
+
guard oldValue != label else { return }
|
|
21
|
+
shownExtended = targetExtended
|
|
22
|
+
applyConfiguration()
|
|
23
|
+
updateAccessibilityLabel()
|
|
24
|
+
onNeedsRemeasure?()
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// "small" | "regular" | "medium" | "large"
|
|
29
|
+
public var size: String = "regular" {
|
|
30
|
+
didSet {
|
|
31
|
+
guard oldValue != size else { return }
|
|
32
|
+
applyConfiguration()
|
|
33
|
+
onNeedsRemeasure?()
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// Whether a button with a label shows it
|
|
38
|
+
public var extended: Bool = true {
|
|
39
|
+
didSet { if oldValue != extended { updateExtended(animated: true) } }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/// Container color; nil keeps the configuration's (the tint color)
|
|
43
|
+
public var containerColor: UIColor? {
|
|
44
|
+
didSet { applyConfiguration() }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// Icon and label color; nil keeps the configuration's
|
|
48
|
+
public var foregroundColor: UIColor? {
|
|
49
|
+
didSet { applyConfiguration() }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// "enabled" | "disabled"
|
|
53
|
+
public var interactivity: String = "enabled" {
|
|
54
|
+
didSet { button.isEnabled = interactivity != "disabled" }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// Screen-reader label; empty uses the label
|
|
58
|
+
public var spokenLabel: String = "" {
|
|
59
|
+
didSet { updateAccessibilityLabel() }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// nativeID of the ScrollView whose scrolling shrinks and extends the button
|
|
63
|
+
public var scrollViewNativeID: String = "" {
|
|
64
|
+
didSet {
|
|
65
|
+
guard oldValue != scrollViewNativeID else { return }
|
|
66
|
+
detachScrollView()
|
|
67
|
+
attachScrollView()
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// The `haptics` prop; PCFloatingActionButton.mm plays it on a press
|
|
72
|
+
public let haptics = PCHaptics()
|
|
73
|
+
|
|
74
|
+
// MARK: - Events back to ObjC++
|
|
75
|
+
|
|
76
|
+
public var onPress: (() -> Void)?
|
|
77
|
+
|
|
78
|
+
/// Called when the size the view should take changed, so the Fabric
|
|
79
|
+
/// measurement can be refreshed.
|
|
80
|
+
public var onNeedsRemeasure: (() -> Void)?
|
|
81
|
+
|
|
82
|
+
// MARK: - Internal
|
|
83
|
+
|
|
84
|
+
private let button = UIButton(type: .system)
|
|
85
|
+
|
|
86
|
+
/// Hidden twin in the extended configuration, measured for the extended size.
|
|
87
|
+
private let sizingButton = UIButton(type: .system)
|
|
88
|
+
|
|
89
|
+
private var icon = PCButtonSupport.Icon.none
|
|
90
|
+
private var iconImage: UIImage?
|
|
91
|
+
|
|
92
|
+
/// Bumped on every icon change so late image loads can't apply a stale icon.
|
|
93
|
+
private var iconGeneration = 0
|
|
94
|
+
|
|
95
|
+
/// Shrunk by scrolling down the linked ScrollView.
|
|
96
|
+
private var scrollShrunk = false
|
|
97
|
+
|
|
98
|
+
/// The state the button shows, or is animating to.
|
|
99
|
+
private var shownExtended = false
|
|
100
|
+
|
|
101
|
+
/// A shrink animation is running: the view keeps the extended size.
|
|
102
|
+
private var shrinking = false
|
|
103
|
+
|
|
104
|
+
private weak var observedScrollView: UIScrollView?
|
|
105
|
+
private var scrollObservation: NSKeyValueObservation?
|
|
106
|
+
private var lastOffsetY: CGFloat = 0
|
|
107
|
+
|
|
108
|
+
private var targetExtended: Bool { !label.isEmpty && extended && !scrollShrunk }
|
|
109
|
+
|
|
110
|
+
// MARK: - Init
|
|
111
|
+
|
|
112
|
+
public override init(frame: CGRect) {
|
|
113
|
+
super.init(frame: frame)
|
|
114
|
+
setup()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
public required init?(coder: NSCoder) {
|
|
118
|
+
super.init(coder: coder)
|
|
119
|
+
setup()
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private func setup() {
|
|
123
|
+
// Hidden, but in the hierarchy so it measures with the same traits
|
|
124
|
+
sizingButton.isHidden = true
|
|
125
|
+
sizingButton.isAccessibilityElement = false
|
|
126
|
+
addSubview(sizingButton)
|
|
127
|
+
|
|
128
|
+
// Frame layout: the button's width animates inside this view
|
|
129
|
+
addSubview(button)
|
|
130
|
+
button.addTarget(self, action: #selector(pressed), for: .touchUpInside)
|
|
131
|
+
button.addTarget(self, action: #selector(touchedDown), for: .touchDown)
|
|
132
|
+
applyConfiguration()
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@objc private func pressed() {
|
|
136
|
+
onPress?()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/// Readies the haptic for the press that is likely to follow.
|
|
140
|
+
@objc private func touchedDown() {
|
|
141
|
+
haptics.prepare(in: self)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/// The label stays the spoken name while the button is shrunk.
|
|
145
|
+
private func updateAccessibilityLabel() {
|
|
146
|
+
let spoken = spokenLabel.isEmpty ? label : spokenLabel
|
|
147
|
+
button.accessibilityLabel = spoken.isEmpty ? nil : spoken
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// MARK: - Icon
|
|
151
|
+
|
|
152
|
+
/// Sets the icon from the flat spec fields. Images that are still loading
|
|
153
|
+
/// apply once they arrive.
|
|
154
|
+
public func setIcon(type: String, name: String, request: String, uri: String, scale: CGFloat, tinted: Bool) {
|
|
155
|
+
let next = PCButtonSupport.Icon(type: type, name: name, uri: uri, scale: scale, tinted: tinted, request: request)
|
|
156
|
+
guard next != icon else { return }
|
|
157
|
+
icon = next
|
|
158
|
+
iconGeneration += 1
|
|
159
|
+
let generation = iconGeneration
|
|
160
|
+
|
|
161
|
+
iconImage = PCButtonSupport.image(for: next) { [weak self] image in
|
|
162
|
+
guard let self, self.iconGeneration == generation else { return }
|
|
163
|
+
self.iconImage = image
|
|
164
|
+
self.applyConfiguration()
|
|
165
|
+
self.onNeedsRemeasure?()
|
|
166
|
+
}
|
|
167
|
+
applyConfiguration()
|
|
168
|
+
onNeedsRemeasure?()
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// MARK: - Metrics
|
|
172
|
+
|
|
173
|
+
/// Diameter of the round button, and height of the extended capsule. The
|
|
174
|
+
/// small button keeps the 44pt minimum touch target.
|
|
175
|
+
private var diameter: CGFloat {
|
|
176
|
+
switch size {
|
|
177
|
+
case "small": return 44
|
|
178
|
+
case "medium": return 80
|
|
179
|
+
case "large": return 96
|
|
180
|
+
default: return 56
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private var symbolPointSize: CGFloat {
|
|
185
|
+
switch size {
|
|
186
|
+
case "small": return 17
|
|
187
|
+
case "medium": return 26
|
|
188
|
+
case "large": return 32
|
|
189
|
+
default: return 22
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
private var titleTextStyle: UIFont.TextStyle {
|
|
194
|
+
switch size {
|
|
195
|
+
case "medium": return .title3
|
|
196
|
+
case "large": return .title2
|
|
197
|
+
default: return .headline
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/// Leading and trailing space of the extended capsule, and between icon and label.
|
|
202
|
+
private var horizontalInset: CGFloat {
|
|
203
|
+
switch size {
|
|
204
|
+
case "small": return 16
|
|
205
|
+
case "medium": return 26
|
|
206
|
+
case "large": return 28
|
|
207
|
+
default: return 20
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
private var iconSpacing: CGFloat {
|
|
212
|
+
switch size {
|
|
213
|
+
case "medium": return 12
|
|
214
|
+
case "large": return 16
|
|
215
|
+
default: return 8
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// MARK: - Configuration
|
|
220
|
+
|
|
221
|
+
private func applyConfiguration() {
|
|
222
|
+
button.configuration = makeConfiguration(extended: shownExtended)
|
|
223
|
+
sizingButton.configuration = label.isEmpty ? nil : makeConfiguration(extended: true)
|
|
224
|
+
setNeedsLayout()
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// The prominent button: `.prominentGlass()` on iOS 26, `.filled()` before.
|
|
228
|
+
private func makeConfiguration(extended: Bool) -> UIButton.Configuration {
|
|
229
|
+
var config = PCButtonSupport.configuration(variant: "prominentGlass", selected: false)
|
|
230
|
+
config.cornerStyle = .capsule
|
|
231
|
+
config.image = iconImage
|
|
232
|
+
config.preferredSymbolConfigurationForImage =
|
|
233
|
+
UIImage.SymbolConfiguration(pointSize: symbolPointSize, weight: .semibold)
|
|
234
|
+
let showsLabel = extended && !label.isEmpty
|
|
235
|
+
config.title = showsLabel ? label : nil
|
|
236
|
+
config.titleLineBreakMode = .byTruncatingTail
|
|
237
|
+
config.imagePadding = showsLabel && iconImage != nil ? iconSpacing : 0
|
|
238
|
+
config.contentInsets = showsLabel
|
|
239
|
+
? NSDirectionalEdgeInsets(top: 0, leading: horizontalInset, bottom: 0, trailing: horizontalInset)
|
|
240
|
+
: .zero
|
|
241
|
+
if let containerColor {
|
|
242
|
+
config.baseBackgroundColor = containerColor
|
|
243
|
+
}
|
|
244
|
+
if let foregroundColor {
|
|
245
|
+
config.baseForegroundColor = foregroundColor
|
|
246
|
+
}
|
|
247
|
+
// A semibold title in the size's text style, following Dynamic Type
|
|
248
|
+
let font = UIFont.systemFont(
|
|
249
|
+
ofSize: UIFont.preferredFont(forTextStyle: titleTextStyle).pointSize,
|
|
250
|
+
weight: .semibold
|
|
251
|
+
)
|
|
252
|
+
config.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in
|
|
253
|
+
var outgoing = incoming
|
|
254
|
+
outgoing.font = font
|
|
255
|
+
return outgoing
|
|
256
|
+
}
|
|
257
|
+
return config
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
|
261
|
+
super.traitCollectionDidChange(previousTraitCollection)
|
|
262
|
+
guard previousTraitCollection?.preferredContentSizeCategory != traitCollection.preferredContentSizeCategory
|
|
263
|
+
else { return }
|
|
264
|
+
applyConfiguration()
|
|
265
|
+
onNeedsRemeasure?()
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// MARK: - Shrink and extend
|
|
269
|
+
|
|
270
|
+
private func updateExtended(animated: Bool) {
|
|
271
|
+
let target = targetExtended
|
|
272
|
+
guard target != shownExtended else { return }
|
|
273
|
+
shownExtended = target
|
|
274
|
+
if target {
|
|
275
|
+
// Take the extended size first; the button widens from the trailing edge
|
|
276
|
+
shrinking = false
|
|
277
|
+
onNeedsRemeasure?()
|
|
278
|
+
} else {
|
|
279
|
+
shrinking = true
|
|
280
|
+
}
|
|
281
|
+
guard animated, window != nil else {
|
|
282
|
+
shrinking = false
|
|
283
|
+
applyConfiguration()
|
|
284
|
+
layoutButton()
|
|
285
|
+
onNeedsRemeasure?()
|
|
286
|
+
return
|
|
287
|
+
}
|
|
288
|
+
UIView.animate(
|
|
289
|
+
withDuration: target ? 0.3 : 0.25,
|
|
290
|
+
delay: 0,
|
|
291
|
+
options: [.beginFromCurrentState, .curveEaseInOut, .allowUserInteraction]
|
|
292
|
+
) {
|
|
293
|
+
self.applyConfiguration()
|
|
294
|
+
self.layoutButton()
|
|
295
|
+
self.button.layoutIfNeeded()
|
|
296
|
+
} completion: { _ in
|
|
297
|
+
// A later change may have taken over
|
|
298
|
+
guard !target, !self.shownExtended, self.shrinking else { return }
|
|
299
|
+
self.shrinking = false
|
|
300
|
+
self.onNeedsRemeasure?()
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// MARK: - Scroll link
|
|
305
|
+
|
|
306
|
+
private func attachScrollView() {
|
|
307
|
+
guard observedScrollView == nil, !scrollViewNativeID.isEmpty, let window,
|
|
308
|
+
let scrollView = PCFloatingActionButtonView.scrollView(nativeID: scrollViewNativeID, in: window)
|
|
309
|
+
else { return }
|
|
310
|
+
observedScrollView = scrollView
|
|
311
|
+
lastOffsetY = clampedOffset(scrollView)
|
|
312
|
+
scrollObservation = scrollView.observe(\.contentOffset, options: [.new]) { [weak self] scrollView, _ in
|
|
313
|
+
self?.contentScrolled(scrollView)
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private func detachScrollView() {
|
|
318
|
+
scrollObservation?.invalidate()
|
|
319
|
+
scrollObservation = nil
|
|
320
|
+
observedScrollView = nil
|
|
321
|
+
if scrollShrunk {
|
|
322
|
+
scrollShrunk = false
|
|
323
|
+
updateExtended(animated: window != nil)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/// The offset within the content, so the bounce past either end doesn't
|
|
328
|
+
/// count as scrolling.
|
|
329
|
+
private func clampedOffset(_ scrollView: UIScrollView) -> CGFloat {
|
|
330
|
+
let minY = -scrollView.adjustedContentInset.top
|
|
331
|
+
let maxY = max(minY, scrollView.contentSize.height + scrollView.adjustedContentInset.bottom - scrollView.bounds.height)
|
|
332
|
+
return min(max(scrollView.contentOffset.y, minY), maxY)
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
private func contentScrolled(_ scrollView: UIScrollView) {
|
|
336
|
+
let y = clampedOffset(scrollView)
|
|
337
|
+
let dy = y - lastOffsetY
|
|
338
|
+
lastOffsetY = y
|
|
339
|
+
guard abs(dy) > 0.5 else { return }
|
|
340
|
+
// Shrink scrolling down; extend scrolling up, and always at the top
|
|
341
|
+
let atTop = y <= -scrollView.adjustedContentInset.top + 1
|
|
342
|
+
let shrink = !atTop && dy > 0
|
|
343
|
+
guard shrink != scrollShrunk else { return }
|
|
344
|
+
scrollShrunk = shrink
|
|
345
|
+
updateExtended(animated: true)
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/// The UIScrollView of the React Native view with this nativeID.
|
|
349
|
+
private static func scrollView(nativeID: String, in root: UIView) -> UIScrollView? {
|
|
350
|
+
var match: UIView?
|
|
351
|
+
func find(_ view: UIView) {
|
|
352
|
+
guard match == nil else { return }
|
|
353
|
+
if view.responds(to: NSSelectorFromString("nativeId")),
|
|
354
|
+
view.value(forKey: "nativeId") as? String == nativeID {
|
|
355
|
+
match = view
|
|
356
|
+
return
|
|
357
|
+
}
|
|
358
|
+
view.subviews.forEach(find)
|
|
359
|
+
}
|
|
360
|
+
find(root)
|
|
361
|
+
guard let match else { return nil }
|
|
362
|
+
if let scroll = match as? UIScrollView { return scroll }
|
|
363
|
+
var scroll: UIScrollView?
|
|
364
|
+
func firstScroll(_ view: UIView) {
|
|
365
|
+
guard scroll == nil else { return }
|
|
366
|
+
if let s = view as? UIScrollView { scroll = s; return }
|
|
367
|
+
view.subviews.forEach(firstScroll)
|
|
368
|
+
}
|
|
369
|
+
firstScroll(match)
|
|
370
|
+
return scroll
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
public override func didMoveToWindow() {
|
|
374
|
+
super.didMoveToWindow()
|
|
375
|
+
if window == nil {
|
|
376
|
+
detachScrollView()
|
|
377
|
+
} else {
|
|
378
|
+
attachScrollView()
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// MARK: - Layout
|
|
383
|
+
|
|
384
|
+
/// The extended capsule's size, at least the round button's.
|
|
385
|
+
private var extendedSize: CGSize {
|
|
386
|
+
let fitted = sizingButton.sizeThatFits(
|
|
387
|
+
CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
|
|
388
|
+
)
|
|
389
|
+
return CGSize(width: max(diameter, ceil(fitted.width)), height: max(diameter, ceil(fitted.height)))
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/// The button's size in the state it shows.
|
|
393
|
+
private var buttonSize: CGSize {
|
|
394
|
+
shownExtended ? extendedSize : CGSize(width: diameter, height: diameter)
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
private func layoutButton() {
|
|
398
|
+
let size = buttonSize
|
|
399
|
+
let trailing = effectiveUserInterfaceLayoutDirection == .rightToLeft
|
|
400
|
+
? size.width
|
|
401
|
+
: bounds.width
|
|
402
|
+
button.frame = CGRect(
|
|
403
|
+
x: trailing - size.width,
|
|
404
|
+
y: (bounds.height - size.height) / 2,
|
|
405
|
+
width: size.width,
|
|
406
|
+
height: size.height
|
|
407
|
+
)
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
public override func layoutSubviews() {
|
|
411
|
+
super.layoutSubviews()
|
|
412
|
+
layoutButton()
|
|
413
|
+
// The ScrollView may mount after the button
|
|
414
|
+
attachScrollView()
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
public override var intrinsicContentSize: CGSize {
|
|
418
|
+
sizeForLayout(withConstrainedTo: .zero)
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/// Called by the measuring pipeline: the button's size, or the extended
|
|
422
|
+
/// size while the button shrinks.
|
|
423
|
+
@objc public func sizeForLayout(withConstrainedTo constrainedSize: CGSize) -> CGSize {
|
|
424
|
+
shownExtended || shrinking ? extendedSize : CGSize(width: diameter, height: diameter)
|
|
425
|
+
}
|
|
426
|
+
}
|
package/ios/PCFloatingToolbar.mm
CHANGED
|
@@ -31,6 +31,12 @@ using namespace facebook::react;
|
|
|
31
31
|
|
|
32
32
|
- (instancetype)initWithFrame:(CGRect)frame {
|
|
33
33
|
if (self = [super initWithFrame:frame]) {
|
|
34
|
+
// Fabric views seed _props with their own defaults: RCTViewComponentView
|
|
35
|
+
// asserts on it in debug builds of React Native core, and the first
|
|
36
|
+
// updateProps would otherwise read the base ViewProps as PCFloatingToolbarProps.
|
|
37
|
+
static const auto defaultProps = std::make_shared<const PCFloatingToolbarProps>();
|
|
38
|
+
_props = defaultProps;
|
|
39
|
+
|
|
34
40
|
_view = [[PCFloatingToolbarView alloc] initWithFrame:self.bounds];
|
|
35
41
|
_view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
36
42
|
[self addSubview:_view];
|
|
@@ -47,6 +53,13 @@ using namespace facebook::react;
|
|
|
47
53
|
[childComponentView removeFromSuperview];
|
|
48
54
|
}
|
|
49
55
|
|
|
56
|
+
// While the toolbar is slid away (hideOnScroll), the empty space it left
|
|
57
|
+
// passes touches to the content underneath
|
|
58
|
+
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
|
|
59
|
+
UIView *hit = [super hitTest:point withEvent:event];
|
|
60
|
+
return hit == self && _view.isScrollHidden ? nil : hit;
|
|
61
|
+
}
|
|
62
|
+
|
|
50
63
|
- (void)updateProps:(Props::Shared const &)props
|
|
51
64
|
oldProps:(Props::Shared const &)oldProps {
|
|
52
65
|
const auto &newProps = *std::static_pointer_cast<const PCFloatingToolbarProps>(props);
|
|
@@ -63,6 +76,20 @@ using namespace facebook::react;
|
|
|
63
76
|
if (!prevProps || newIos.effect != oldIos.effect) {
|
|
64
77
|
_view.effectStyle = newIos.effect == "clear" ? @"clear" : @"regular";
|
|
65
78
|
}
|
|
79
|
+
if (!prevProps || newIos.interactive != oldIos.interactive) {
|
|
80
|
+
_view.interactive = newIos.interactive;
|
|
81
|
+
}
|
|
82
|
+
if (!prevProps || newIos.scrollEdgeEffect != oldIos.scrollEdgeEffect) {
|
|
83
|
+
_view.scrollEdgeEffect = [NSString stringWithUTF8String:newIos.scrollEdgeEffect.c_str()];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// The linked ScrollView and hide on scroll
|
|
87
|
+
if (!prevProps || newProps.scrollViewNativeID != prevProps->scrollViewNativeID) {
|
|
88
|
+
_view.scrollViewNativeID = [NSString stringWithUTF8String:newProps.scrollViewNativeID.c_str()];
|
|
89
|
+
}
|
|
90
|
+
if (!prevProps || newProps.hideOnScroll != prevProps->hideOnScroll) {
|
|
91
|
+
_view.hideOnScroll = newProps.hideOnScroll;
|
|
92
|
+
}
|
|
66
93
|
|
|
67
94
|
// android.variant: Android only
|
|
68
95
|
|