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
package/ios/PCContextMenu.swift
CHANGED
|
@@ -3,49 +3,6 @@ import UIKit
|
|
|
3
3
|
|
|
4
4
|
private let logger = Logger(subsystem: "com.platformcomponents", category: "ContextMenu")
|
|
5
5
|
|
|
6
|
-
// MARK: - Action model (bridged from ObjC++ as dictionaries)
|
|
7
|
-
|
|
8
|
-
struct PCContextMenuAction {
|
|
9
|
-
let id: String
|
|
10
|
-
let title: String
|
|
11
|
-
let subtitle: String?
|
|
12
|
-
let image: String?
|
|
13
|
-
let imageColor: String?
|
|
14
|
-
let destructive: Bool
|
|
15
|
-
let disabled: Bool
|
|
16
|
-
let hidden: Bool
|
|
17
|
-
let state: String? // "off" | "on" | "mixed"
|
|
18
|
-
let subactions: [PCContextMenuAction]
|
|
19
|
-
|
|
20
|
-
init(from dict: [String: Any]) {
|
|
21
|
-
self.id = (dict["id"] as? String) ?? ""
|
|
22
|
-
self.title = (dict["title"] as? String) ?? ""
|
|
23
|
-
self.subtitle = dict["subtitle"] as? String
|
|
24
|
-
self.image = dict["image"] as? String
|
|
25
|
-
self.imageColor = dict["imageColor"] as? String
|
|
26
|
-
|
|
27
|
-
// Parse attributes
|
|
28
|
-
if let attrs = dict["attributes"] as? [String: Any] {
|
|
29
|
-
self.destructive = (attrs["destructive"] as? String) == "true"
|
|
30
|
-
self.disabled = (attrs["disabled"] as? String) == "true"
|
|
31
|
-
self.hidden = (attrs["hidden"] as? String) == "true"
|
|
32
|
-
} else {
|
|
33
|
-
self.destructive = false
|
|
34
|
-
self.disabled = false
|
|
35
|
-
self.hidden = false
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
self.state = dict["state"] as? String
|
|
39
|
-
|
|
40
|
-
// Parse subactions recursively
|
|
41
|
-
if let subs = dict["subactions"] as? [[String: Any]] {
|
|
42
|
-
self.subactions = subs.map { PCContextMenuAction(from: $0) }
|
|
43
|
-
} else {
|
|
44
|
-
self.subactions = []
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
6
|
// MARK: - Main View
|
|
50
7
|
|
|
51
8
|
@objcMembers
|
|
@@ -55,8 +12,13 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
55
12
|
/// Menu title (shown as header on iOS)
|
|
56
13
|
public var menuTitle: String? { didSet { sync() } }
|
|
57
14
|
|
|
58
|
-
/// ObjC++ sets this as an array of dictionaries
|
|
59
|
-
public var actions: [Any] = [] {
|
|
15
|
+
/// ObjC++ sets this as an array of dictionaries: the flattened menu items
|
|
16
|
+
public var actions: [Any] = [] {
|
|
17
|
+
didSet {
|
|
18
|
+
items = PCMenuSupport.items(from: actions)
|
|
19
|
+
sync()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
60
22
|
|
|
61
23
|
/// "enabled" | "disabled"
|
|
62
24
|
public var interactivity: String = "enabled" {
|
|
@@ -72,21 +34,29 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
72
34
|
/// iOS-specific: enable preview
|
|
73
35
|
public var enablePreview: String = "false"
|
|
74
36
|
|
|
37
|
+
/// The `haptics` prop, played when an action is pressed (an action's own
|
|
38
|
+
/// `haptics` wins)
|
|
39
|
+
public let haptics = PCHaptics()
|
|
40
|
+
|
|
75
41
|
// MARK: - Events back to ObjC++
|
|
76
42
|
|
|
77
43
|
public var onPressAction: ((String, String) -> Void)? // (id, title)
|
|
78
44
|
public var onMenuOpen: (() -> Void)?
|
|
79
45
|
public var onMenuClose: (() -> Void)?
|
|
46
|
+
public var onPreviewPress: (() -> Void)?
|
|
80
47
|
|
|
81
48
|
// MARK: - Internal
|
|
82
49
|
|
|
50
|
+
private var items: [PCMenuItem] = []
|
|
51
|
+
private let menuImages = PCMenuImageState()
|
|
83
52
|
private var contextMenuInteraction: UIContextMenuInteraction?
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
53
|
+
/// Whether the long-press menu is showing, so new actions update it in place.
|
|
54
|
+
private var isMenuVisible = false
|
|
55
|
+
/// The long-press menu last handed to UIKit, to find the showing root.
|
|
56
|
+
private var presentedMenu: UIMenu?
|
|
87
57
|
|
|
88
58
|
// Tap mode: UIButton with UIMenu for tap-to-show
|
|
89
|
-
private var tapMenuButton:
|
|
59
|
+
private var tapMenuButton: PCMenuButton?
|
|
90
60
|
|
|
91
61
|
// MARK: - Init
|
|
92
62
|
|
|
@@ -124,11 +94,23 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
124
94
|
}
|
|
125
95
|
|
|
126
96
|
private func sync() {
|
|
97
|
+
menuImages.retain(icons: items.map(\.icon))
|
|
127
98
|
// Re-setup trigger mode if needed
|
|
128
99
|
updateTrigger()
|
|
129
100
|
// Update tap menu content if in tap mode
|
|
130
101
|
if trigger == "tap" {
|
|
131
102
|
updateTapMenuButton()
|
|
103
|
+
} else if isMenuVisible, let interaction = contextMenuInteraction {
|
|
104
|
+
// An action that keeps the menu presented changed a title or state.
|
|
105
|
+
let menu = buildMenu()
|
|
106
|
+
let oldMenu = presentedMenu
|
|
107
|
+
presentedMenu = menu
|
|
108
|
+
interaction.updateVisibleMenu { visible in
|
|
109
|
+
PCMenuSupport.updatedVisibleMenu(visible, in: menu, replacing: oldMenu)
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
// Start loading image icons now, so they are ready when the menu opens.
|
|
113
|
+
_ = buildMenu()
|
|
132
114
|
}
|
|
133
115
|
}
|
|
134
116
|
|
|
@@ -173,12 +155,13 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
173
155
|
return
|
|
174
156
|
}
|
|
175
157
|
|
|
176
|
-
let button =
|
|
158
|
+
let button = PCMenuButton(type: .system)
|
|
177
159
|
button.backgroundColor = .clear
|
|
178
|
-
button.showsMenuAsPrimaryAction = true
|
|
179
160
|
button.translatesAutoresizingMaskIntoConstraints = false
|
|
180
161
|
// Make button invisible but still tappable
|
|
181
162
|
button.tintColor = .clear
|
|
163
|
+
button.onMenuOpen = { [weak self] in self?.onMenuOpen?() }
|
|
164
|
+
button.onMenuClose = { [weak self] in self?.onMenuClose?() }
|
|
182
165
|
|
|
183
166
|
addSubview(button)
|
|
184
167
|
NSLayoutConstraint.activate([
|
|
@@ -200,15 +183,7 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
200
183
|
|
|
201
184
|
private func updateTapMenuButton() {
|
|
202
185
|
guard let button = tapMenuButton else { return }
|
|
203
|
-
|
|
204
|
-
let actions = parsedActions.filter { !$0.hidden }
|
|
205
|
-
guard !actions.isEmpty else {
|
|
206
|
-
button.menu = nil
|
|
207
|
-
return
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
let menu = buildMenu(from: actions, title: menuTitle)
|
|
211
|
-
button.menu = menu
|
|
186
|
+
button.setMenu(items.isEmpty ? nil : buildMenu())
|
|
212
187
|
}
|
|
213
188
|
|
|
214
189
|
// MARK: - UIContextMenuInteractionDelegate
|
|
@@ -219,19 +194,19 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
219
194
|
) -> UIContextMenuConfiguration? {
|
|
220
195
|
guard interactivity != "disabled" else { return nil }
|
|
221
196
|
|
|
222
|
-
|
|
223
|
-
guard !actions.isEmpty else { return nil }
|
|
197
|
+
guard !items.isEmpty else { return nil }
|
|
224
198
|
|
|
225
|
-
|
|
226
|
-
logger.debug("contextMenuInteraction: creating configuration with \(actionCountStr) actions")
|
|
199
|
+
logger.debug("contextMenuInteraction: creating configuration with \(self.items.count) items")
|
|
227
200
|
|
|
228
201
|
// Use nil previewProvider - we'll use UITargetedPreview via delegate instead
|
|
229
202
|
return UIContextMenuConfiguration(
|
|
230
203
|
identifier: nil,
|
|
231
204
|
previewProvider: nil,
|
|
232
|
-
actionProvider: { [weak self]
|
|
205
|
+
actionProvider: { [weak self] _ in
|
|
233
206
|
guard let self else { return nil }
|
|
234
|
-
|
|
207
|
+
let menu = self.buildMenu()
|
|
208
|
+
self.presentedMenu = menu
|
|
209
|
+
return menu
|
|
235
210
|
}
|
|
236
211
|
)
|
|
237
212
|
}
|
|
@@ -241,50 +216,62 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
241
216
|
return superview
|
|
242
217
|
}
|
|
243
218
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
219
|
+
/// Preview targeted by the highlight and dismissal animations.
|
|
220
|
+
/// With `enablePreview`, the parent component view (which holds the React content)
|
|
221
|
+
/// lifts; otherwise we target self with a zero-size path so iOS does not manipulate
|
|
222
|
+
/// the parent view (which caused white flashes).
|
|
223
|
+
private func targetedPreview() -> UITargetedPreview? {
|
|
248
224
|
let parameters = UIPreviewParameters()
|
|
249
225
|
parameters.backgroundColor = .clear
|
|
250
226
|
|
|
251
|
-
// Check if preview is enabled via the enablePreview prop
|
|
252
227
|
if enablePreview == "true" {
|
|
253
|
-
// Target the parent view (PCContextMenu) which contains the React content
|
|
254
228
|
guard let parentView = getParentComponentView() else {
|
|
255
|
-
logger.debug("
|
|
229
|
+
logger.debug("targetedPreview: no parent found")
|
|
256
230
|
return nil
|
|
257
231
|
}
|
|
258
|
-
let parentType = String(describing: type(of: parentView))
|
|
259
|
-
logger.debug("previewForHighlighting: targeting parent \(parentType)")
|
|
260
232
|
parameters.visiblePath = UIBezierPath(roundedRect: parentView.bounds, cornerRadius: 8)
|
|
261
233
|
return UITargetedPreview(view: parentView, parameters: parameters)
|
|
262
234
|
} else {
|
|
263
|
-
// When preview is disabled, target self with zero-size path
|
|
264
|
-
// This prevents iOS from manipulating the parent view and causing white flashes
|
|
265
|
-
logger.debug("previewForHighlighting: preview disabled, targeting self with zero path")
|
|
266
235
|
parameters.visiblePath = UIBezierPath(rect: .zero)
|
|
267
236
|
return UITargetedPreview(view: self, parameters: parameters)
|
|
268
237
|
}
|
|
269
238
|
}
|
|
270
239
|
|
|
240
|
+
// iOS 16+: per-item preview delegate methods. UIKit prefers these over the
|
|
241
|
+
// deprecated configuration-level ones below when both are implemented.
|
|
242
|
+
|
|
243
|
+
@available(iOS 16.0, *)
|
|
271
244
|
public func contextMenuInteraction(
|
|
272
245
|
_ interaction: UIContextMenuInteraction,
|
|
273
|
-
|
|
246
|
+
configuration: UIContextMenuConfiguration,
|
|
247
|
+
highlightPreviewForItemWithIdentifier identifier: NSCopying
|
|
274
248
|
) -> UITargetedPreview? {
|
|
275
|
-
|
|
276
|
-
|
|
249
|
+
targetedPreview()
|
|
250
|
+
}
|
|
277
251
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
252
|
+
@available(iOS 16.0, *)
|
|
253
|
+
public func contextMenuInteraction(
|
|
254
|
+
_ interaction: UIContextMenuInteraction,
|
|
255
|
+
configuration: UIContextMenuConfiguration,
|
|
256
|
+
dismissalPreviewForItemWithIdentifier identifier: NSCopying
|
|
257
|
+
) -> UITargetedPreview? {
|
|
258
|
+
targetedPreview()
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// iOS 15 fallback (deprecated in iOS 16; not called there when the methods above exist).
|
|
262
|
+
|
|
263
|
+
public func contextMenuInteraction(
|
|
264
|
+
_ interaction: UIContextMenuInteraction,
|
|
265
|
+
previewForHighlightingMenuWithConfiguration configuration: UIContextMenuConfiguration
|
|
266
|
+
) -> UITargetedPreview? {
|
|
267
|
+
targetedPreview()
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
public func contextMenuInteraction(
|
|
271
|
+
_ interaction: UIContextMenuInteraction,
|
|
272
|
+
previewForDismissingMenuWithConfiguration configuration: UIContextMenuConfiguration
|
|
273
|
+
) -> UITargetedPreview? {
|
|
274
|
+
targetedPreview()
|
|
288
275
|
}
|
|
289
276
|
|
|
290
277
|
public func contextMenuInteraction(
|
|
@@ -293,6 +280,8 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
293
280
|
animator: UIContextMenuInteractionAnimating?
|
|
294
281
|
) {
|
|
295
282
|
logger.debug("contextMenuInteraction: willDisplayMenu")
|
|
283
|
+
isMenuVisible = true
|
|
284
|
+
haptics.prepare(in: self)
|
|
296
285
|
onMenuOpen?()
|
|
297
286
|
}
|
|
298
287
|
|
|
@@ -302,88 +291,38 @@ public final class PCContextMenuView: UIView, UIContextMenuInteractionDelegate {
|
|
|
302
291
|
animator: UIContextMenuInteractionAnimating?
|
|
303
292
|
) {
|
|
304
293
|
logger.debug("contextMenuInteraction: willEnd")
|
|
294
|
+
isMenuVisible = false
|
|
305
295
|
onMenuClose?()
|
|
306
296
|
}
|
|
307
297
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
private func buildMenuElement(from action: PCContextMenuAction) -> UIMenuElement? {
|
|
320
|
-
guard !action.hidden else { return nil }
|
|
321
|
-
|
|
322
|
-
// If has subactions, create a submenu
|
|
323
|
-
if !action.subactions.isEmpty {
|
|
324
|
-
let children = action.subactions.compactMap { buildMenuElement(from: $0) }
|
|
325
|
-
return UIMenu(
|
|
326
|
-
title: action.title,
|
|
327
|
-
image: imageForAction(action),
|
|
328
|
-
children: children
|
|
329
|
-
)
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
// Build action attributes
|
|
333
|
-
var attributes: UIMenuElement.Attributes = []
|
|
334
|
-
if action.destructive { attributes.insert(.destructive) }
|
|
335
|
-
if action.disabled { attributes.insert(.disabled) }
|
|
336
|
-
|
|
337
|
-
// Build state
|
|
338
|
-
let state: UIMenuElement.State
|
|
339
|
-
switch action.state {
|
|
340
|
-
case "on": state = .on
|
|
341
|
-
case "mixed": state = .mixed
|
|
342
|
-
default: state = .off
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
let uiAction = UIAction(
|
|
346
|
-
title: action.title,
|
|
347
|
-
subtitle: action.subtitle,
|
|
348
|
-
image: imageForAction(action),
|
|
349
|
-
attributes: attributes,
|
|
350
|
-
state: state
|
|
351
|
-
) { [weak self] _ in
|
|
352
|
-
logger.debug("UIAction selected: id=\(action.id), title=\(action.title)")
|
|
353
|
-
self?.onPressAction?(action.id, action.title)
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
return uiAction
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
private func imageForAction(_ action: PCContextMenuAction) -> UIImage? {
|
|
360
|
-
guard let imageName = action.image, !imageName.isEmpty else { return nil }
|
|
361
|
-
|
|
362
|
-
var image = UIImage(systemName: imageName)
|
|
363
|
-
|
|
364
|
-
// Apply tint color if specified
|
|
365
|
-
if let colorStr = action.imageColor, !colorStr.isEmpty, let color = colorFromString(colorStr) {
|
|
366
|
-
image = image?.withTintColor(color, renderingMode: .alwaysOriginal)
|
|
298
|
+
/// The user tapped the preview. The menu dismisses back to the content,
|
|
299
|
+
/// then `onPreviewPress` fires so the app can open the item.
|
|
300
|
+
public func contextMenuInteraction(
|
|
301
|
+
_ interaction: UIContextMenuInteraction,
|
|
302
|
+
willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration,
|
|
303
|
+
animator: UIContextMenuInteractionCommitAnimating
|
|
304
|
+
) {
|
|
305
|
+
logger.debug("contextMenuInteraction: willPerformPreviewAction")
|
|
306
|
+
animator.preferredCommitStyle = .dismiss
|
|
307
|
+
animator.addCompletion { [weak self] in
|
|
308
|
+
self?.onPreviewPress?()
|
|
367
309
|
}
|
|
368
|
-
|
|
369
|
-
return image
|
|
370
310
|
}
|
|
371
311
|
|
|
372
|
-
|
|
373
|
-
// Support hex colors like "#FF0000" or "FF0000"
|
|
374
|
-
var hex = str.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
375
|
-
if hex.hasPrefix("#") {
|
|
376
|
-
hex = String(hex.dropFirst())
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
guard hex.count == 6, let rgbValue = UInt64(hex, radix: 16) else {
|
|
380
|
-
return nil
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
let r = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0
|
|
384
|
-
let g = CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0
|
|
385
|
-
let b = CGFloat(rgbValue & 0x0000FF) / 255.0
|
|
312
|
+
// MARK: - Menu Building
|
|
386
313
|
|
|
387
|
-
|
|
314
|
+
private func buildMenu() -> UIMenu {
|
|
315
|
+
PCMenuSupport.menu(
|
|
316
|
+
title: menuTitle ?? "",
|
|
317
|
+
items: items,
|
|
318
|
+
imageState: menuImages,
|
|
319
|
+
onImageLoaded: { [weak self] in self?.sync() },
|
|
320
|
+
handler: { [weak self] item in
|
|
321
|
+
logger.debug("UIAction selected: id=\(item.id), title=\(item.title)")
|
|
322
|
+
guard let self else { return }
|
|
323
|
+
self.haptics.perform(in: self, override: item.haptics)
|
|
324
|
+
self.onPressAction?(item.id, item.title)
|
|
325
|
+
}
|
|
326
|
+
)
|
|
388
327
|
}
|
|
389
328
|
}
|
package/ios/PCDatePicker.mm
CHANGED
|
@@ -41,12 +41,18 @@ using namespace facebook::react;
|
|
|
41
41
|
|
|
42
42
|
- (instancetype)initWithFrame:(CGRect)frame {
|
|
43
43
|
if (self = [super initWithFrame:frame]) {
|
|
44
|
+
// Fabric views seed _props with their own defaults: RCTViewComponentView
|
|
45
|
+
// asserts on it in debug builds of React Native core, and the first
|
|
46
|
+
// updateProps would otherwise read the base ViewProps as PCDatePickerProps.
|
|
47
|
+
static const auto defaultProps = std::make_shared<const PCDatePickerProps>();
|
|
48
|
+
_props = defaultProps;
|
|
49
|
+
|
|
44
50
|
_datePickerView = [PCDatePickerView new];
|
|
45
51
|
_datePickerView.translatesAutoresizingMaskIntoConstraints = NO;
|
|
46
52
|
|
|
47
53
|
__weak __typeof(self) weakSelf = self;
|
|
48
54
|
|
|
49
|
-
_datePickerView.onChangeHandler = ^(NSNumber *ms, BOOL confirmed) {
|
|
55
|
+
_datePickerView.onChangeHandler = ^(NSNumber *ms, BOOL confirmed, NSNumber *durationSeconds) {
|
|
50
56
|
__typeof(self) strongSelf = weakSelf;
|
|
51
57
|
if (!strongSelf)
|
|
52
58
|
return;
|
|
@@ -54,6 +60,7 @@ using namespace facebook::react;
|
|
|
54
60
|
PCDatePickerEventEmitter::OnConfirm event{};
|
|
55
61
|
event.timestampMs = ms.doubleValue;
|
|
56
62
|
event.confirmed = confirmed;
|
|
63
|
+
event.durationSeconds = durationSeconds.doubleValue;
|
|
57
64
|
|
|
58
65
|
strongSelf.eventEmitterTyped.onConfirm(event);
|
|
59
66
|
};
|
|
@@ -107,17 +114,9 @@ using namespace facebook::react;
|
|
|
107
114
|
: [NSString stringWithUTF8String:newViewProps.presentation.c_str()];
|
|
108
115
|
|
|
109
116
|
if (![_datePickerView.presentation isEqualToString:newPresentation]) {
|
|
110
|
-
_datePickerView.presentation = newPresentation;
|
|
111
117
|
needsToUpdateMeasurements = YES;
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
// visible: treat only "open" as open; everything else as closed
|
|
115
|
-
BOOL shouldOpen = (newViewProps.visible == "open");
|
|
116
|
-
NSNumber *newOpen = @(shouldOpen);
|
|
117
|
-
if (![_datePickerView.open isEqual:newOpen]) {
|
|
118
|
-
_datePickerView.open = newOpen;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
120
|
// dateMs (sentinel is MIN_SAFE_INTEGER to allow negative timestamps for pre-1970 dates)
|
|
122
121
|
static const double kNoDateSentinel = -9007199254740991.0;
|
|
123
122
|
if (oldViewProps.dateMs != newViewProps.dateMs) {
|
|
@@ -143,6 +142,15 @@ using namespace facebook::react;
|
|
|
143
142
|
: nil;
|
|
144
143
|
}
|
|
145
144
|
|
|
145
|
+
// hourFormat: "" | "12" | "24"
|
|
146
|
+
if (oldViewProps.hourFormat != newViewProps.hourFormat) {
|
|
147
|
+
_datePickerView.hourFormat =
|
|
148
|
+
(!newViewProps.hourFormat.empty())
|
|
149
|
+
? [NSString stringWithUTF8String:newViewProps.hourFormat.c_str()]
|
|
150
|
+
: @"";
|
|
151
|
+
needsToUpdateMeasurements = YES;
|
|
152
|
+
}
|
|
153
|
+
|
|
146
154
|
// time zone
|
|
147
155
|
if (oldViewProps.timeZoneName != newViewProps.timeZoneName) {
|
|
148
156
|
_datePickerView.timeZoneName =
|
|
@@ -199,6 +207,10 @@ using namespace facebook::react;
|
|
|
199
207
|
: @"show";
|
|
200
208
|
}
|
|
201
209
|
|
|
210
|
+
// Opening builds and sizes the popover, so every option must be applied first.
|
|
211
|
+
[_datePickerView configurePresentation:newPresentation
|
|
212
|
+
open:(newViewProps.visible == "open")];
|
|
213
|
+
|
|
202
214
|
if (needsToUpdateMeasurements) {
|
|
203
215
|
[self updateMeasurements];
|
|
204
216
|
}
|