@multiplatform.one/forms 7.66.0 → 7.68.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/dist/cjs/AdaptivePopup/index.cjs +45 -5
- package/dist/cjs/AdaptivePopup/index.native.js +47 -5
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/glass.cjs +30 -0
- package/dist/cjs/Button/glass.native.js +47 -0
- package/dist/cjs/Button/glass.native.js.map +1 -0
- package/dist/cjs/Button/index.cjs +157 -28
- package/dist/cjs/Button/index.native.js +156 -27
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/index.cjs +6 -8
- package/dist/cjs/ContextualSaveBar/index.native.js +6 -8
- package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/cjs/DescriptionList/index.cjs +0 -1
- package/dist/cjs/DescriptionList/index.native.js +0 -1
- package/dist/cjs/DescriptionList/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/RegularPanel.cjs +164 -0
- package/dist/cjs/FloatingPanel/RegularPanel.native.js +169 -0
- package/dist/cjs/FloatingPanel/RegularPanel.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/compactFace.cjs +6 -0
- package/dist/cjs/FloatingPanel/compactFace.native.js +6 -0
- package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/containingBlock.cjs +46 -0
- package/dist/cjs/FloatingPanel/containingBlock.native.js +51 -0
- package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/index.cjs +2 -20
- package/dist/cjs/FloatingPanel/index.native.js +79 -45
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/pointAnchor.cjs +25 -0
- package/dist/cjs/FloatingPanel/pointAnchor.native.js +26 -0
- package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/regularPlacement.cjs +61 -0
- package/dist/cjs/FloatingPanel/regularPlacement.native.js +65 -0
- package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -0
- package/dist/cjs/fields/Barcode/BarcodeScanner.cjs +7 -8
- package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +7 -8
- package/dist/cjs/fields/Barcode/BarcodeScanner.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +1 -1
- package/dist/cjs/fields/Combobox/index.native.js +3 -1
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/index.cjs +83 -60
- package/dist/cjs/fields/FileUpload/index.native.js +96 -73
- package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/index.cjs +7 -8
- package/dist/cjs/fields/Geolocation/index.native.js +7 -8
- package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
- package/dist/cjs/fields/ImageField/index.cjs +4 -6
- package/dist/cjs/fields/ImageField/index.native.js +4 -6
- package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.cjs +5 -0
- package/dist/cjs/fields/Input/index.native.js +5 -0
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/InlineChoices.cjs +3 -2
- package/dist/cjs/fields/Select/InlineChoices.native.js +5 -2
- package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
- package/dist/cjs/fields/Select/SheetPickerRow.cjs +154 -0
- package/dist/cjs/fields/Select/SheetPickerRow.native.js +165 -0
- package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -0
- package/dist/cjs/fields/Select/index.cjs +63 -4
- package/dist/cjs/fields/Select/index.native.js +85 -26
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.cjs +14 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.native.js +15 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.cjs +96 -4
- package/dist/cjs/fields/Slider/index.native.js +103 -5
- package/dist/cjs/fields/Slider/index.native.js.map +1 -1
- package/dist/cjs/fields/Switch/index.cjs +71 -1
- package/dist/cjs/fields/Switch/index.native.js +72 -1
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/cjs/fields/ToggleGroup/index.cjs +67 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js +75 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +54 -47
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +64 -49
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/sheetKeyboard.cjs +54 -0
- package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js +57 -0
- package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -0
- package/dist/cjs/index.cjs +19 -1
- package/dist/cjs/index.native.js +18 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/colorRamps.cjs +0 -8
- package/dist/cjs/shared/colorRamps.native.js +0 -8
- package/dist/cjs/shared/colorRamps.native.js.map +1 -1
- package/dist/cjs/shared/overlaySizeClass.cjs +42 -0
- package/dist/cjs/shared/overlaySizeClass.native.js +45 -0
- package/dist/cjs/shared/overlaySizeClass.native.js.map +1 -0
- package/dist/cjs/shared/sheetNavigation.cjs +76 -0
- package/dist/cjs/shared/sheetNavigation.native.js +129 -0
- package/dist/cjs/shared/sheetNavigation.native.js.map +1 -0
- package/dist/cjs/shared/systemControlModules.cjs +34 -0
- package/dist/cjs/shared/systemControlModules.gnome.cjs +34 -0
- package/dist/cjs/shared/systemControlModules.gnome.native.js +37 -0
- package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -0
- package/dist/cjs/shared/systemControlModules.native.js +77 -0
- package/dist/cjs/shared/systemControlModules.native.js.map +1 -0
- package/dist/cjs/shared/systemControls.cjs +47 -0
- package/dist/cjs/shared/systemControls.native.js +51 -0
- package/dist/cjs/shared/systemControls.native.js.map +1 -0
- package/dist/cjs/standardActions.cjs +117 -0
- package/dist/cjs/standardActions.native.js +120 -0
- package/dist/cjs/standardActions.native.js.map +1 -0
- package/dist/esm/AdaptivePopup/index.mjs +45 -5
- package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js +47 -5
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/glass.mjs +5 -0
- package/dist/esm/Button/glass.mjs.map +1 -0
- package/dist/esm/Button/glass.native.js +19 -0
- package/dist/esm/Button/glass.native.js.map +1 -0
- package/dist/esm/Button/index.mjs +153 -28
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +153 -28
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/index.mjs +7 -9
- package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/esm/ContextualSaveBar/index.native.js +7 -9
- package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/esm/DescriptionList/index.mjs +0 -1
- package/dist/esm/DescriptionList/index.mjs.map +1 -1
- package/dist/esm/DescriptionList/index.native.js +0 -1
- package/dist/esm/DescriptionList/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/RegularPanel.mjs +139 -0
- package/dist/esm/FloatingPanel/RegularPanel.mjs.map +1 -0
- package/dist/esm/FloatingPanel/RegularPanel.native.js +141 -0
- package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -0
- package/dist/esm/FloatingPanel/compactFace.mjs +5 -1
- package/dist/esm/FloatingPanel/compactFace.mjs.map +1 -1
- package/dist/esm/FloatingPanel/compactFace.native.js +5 -1
- package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
- package/dist/esm/FloatingPanel/containingBlock.mjs +21 -0
- package/dist/esm/FloatingPanel/containingBlock.mjs.map +1 -0
- package/dist/esm/FloatingPanel/containingBlock.native.js +23 -0
- package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -0
- package/dist/esm/FloatingPanel/index.mjs +1 -19
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +83 -49
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.mjs +25 -1
- package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js +26 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/esm/FloatingPanel/regularPlacement.mjs +35 -0
- package/dist/esm/FloatingPanel/regularPlacement.mjs.map +1 -0
- package/dist/esm/FloatingPanel/regularPlacement.native.js +36 -0
- package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -0
- package/dist/esm/fields/Barcode/BarcodeScanner.mjs +8 -9
- package/dist/esm/fields/Barcode/BarcodeScanner.mjs.map +1 -1
- package/dist/esm/fields/Barcode/BarcodeScanner.native.js +8 -9
- package/dist/esm/fields/Barcode/BarcodeScanner.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +1 -1
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +3 -1
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/index.mjs +84 -61
- package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js +97 -74
- package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/index.mjs +8 -9
- package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/index.native.js +8 -9
- package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
- package/dist/esm/fields/ImageField/index.mjs +6 -8
- package/dist/esm/fields/ImageField/index.mjs.map +1 -1
- package/dist/esm/fields/ImageField/index.native.js +6 -8
- package/dist/esm/fields/ImageField/index.native.js.map +1 -1
- package/dist/esm/fields/Input/index.mjs +6 -1
- package/dist/esm/fields/Input/index.mjs.map +1 -1
- package/dist/esm/fields/Input/index.native.js +6 -1
- package/dist/esm/fields/Input/index.native.js.map +1 -1
- package/dist/esm/fields/Select/InlineChoices.mjs +3 -2
- package/dist/esm/fields/Select/InlineChoices.mjs.map +1 -1
- package/dist/esm/fields/Select/InlineChoices.native.js +5 -2
- package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
- package/dist/esm/fields/Select/SheetPickerRow.mjs +129 -0
- package/dist/esm/fields/Select/SheetPickerRow.mjs.map +1 -0
- package/dist/esm/fields/Select/SheetPickerRow.native.js +137 -0
- package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -0
- package/dist/esm/fields/Select/index.mjs +64 -5
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +86 -27
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.mjs +12 -1
- package/dist/esm/fields/Select/shouldInlineChoices.mjs.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.native.js +13 -1
- package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.mjs +96 -4
- package/dist/esm/fields/Slider/index.mjs.map +1 -1
- package/dist/esm/fields/Slider/index.native.js +103 -5
- package/dist/esm/fields/Slider/index.native.js.map +1 -1
- package/dist/esm/fields/Switch/index.mjs +71 -1
- package/dist/esm/fields/Switch/index.mjs.map +1 -1
- package/dist/esm/fields/Switch/index.native.js +72 -1
- package/dist/esm/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.mjs +67 -1
- package/dist/esm/fields/ToggleGroup/index.mjs.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.native.js +75 -1
- package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +56 -49
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +66 -51
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/sheetKeyboard.mjs +21 -0
- package/dist/esm/fields/nativeDateTime/sheetKeyboard.mjs.map +1 -0
- package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js +21 -0
- package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -0
- package/dist/esm/index.mjs +5 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +5 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/shared/colorRamps.mjs +0 -8
- package/dist/esm/shared/colorRamps.mjs.map +1 -1
- package/dist/esm/shared/colorRamps.native.js +0 -8
- package/dist/esm/shared/colorRamps.native.js.map +1 -1
- package/dist/esm/shared/overlaySizeClass.mjs +14 -0
- package/dist/esm/shared/overlaySizeClass.mjs.map +1 -0
- package/dist/esm/shared/overlaySizeClass.native.js +14 -0
- package/dist/esm/shared/overlaySizeClass.native.js.map +1 -0
- package/dist/esm/shared/sheetNavigation.mjs +47 -0
- package/dist/esm/shared/sheetNavigation.mjs.map +1 -0
- package/dist/esm/shared/sheetNavigation.native.js +97 -0
- package/dist/esm/shared/sheetNavigation.native.js.map +1 -0
- package/dist/esm/shared/systemControlModules.gnome.mjs +8 -0
- package/dist/esm/shared/systemControlModules.gnome.mjs.map +1 -0
- package/dist/esm/shared/systemControlModules.gnome.native.js +8 -0
- package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -0
- package/dist/esm/shared/systemControlModules.mjs +8 -0
- package/dist/esm/shared/systemControlModules.mjs.map +1 -0
- package/dist/esm/shared/systemControlModules.native.js +47 -0
- package/dist/esm/shared/systemControlModules.native.js.map +1 -0
- package/dist/esm/shared/systemControls.mjs +19 -0
- package/dist/esm/shared/systemControls.mjs.map +1 -0
- package/dist/esm/shared/systemControls.native.js +20 -0
- package/dist/esm/shared/systemControls.native.js.map +1 -0
- package/dist/esm/standardActions.mjs +91 -0
- package/dist/esm/standardActions.mjs.map +1 -0
- package/dist/esm/standardActions.native.js +91 -0
- package/dist/esm/standardActions.native.js.map +1 -0
- package/dist/jsx/AdaptivePopup/index.mjs +45 -5
- package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
- package/dist/jsx/AdaptivePopup/index.native.js +47 -5
- package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
- package/dist/jsx/Button/glass.mjs +5 -0
- package/dist/jsx/Button/glass.mjs.map +1 -0
- package/dist/jsx/Button/glass.native.js +47 -0
- package/dist/jsx/Button/glass.native.js.map +1 -0
- package/dist/jsx/Button/index.mjs +153 -28
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +156 -27
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.mjs +7 -9
- package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.native.js +6 -8
- package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/jsx/DescriptionList/index.mjs +0 -1
- package/dist/jsx/DescriptionList/index.mjs.map +1 -1
- package/dist/jsx/DescriptionList/index.native.js +0 -1
- package/dist/jsx/DescriptionList/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/RegularPanel.mjs +139 -0
- package/dist/jsx/FloatingPanel/RegularPanel.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/RegularPanel.native.js +169 -0
- package/dist/jsx/FloatingPanel/RegularPanel.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/compactFace.mjs +5 -1
- package/dist/jsx/FloatingPanel/compactFace.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/compactFace.native.js +6 -0
- package/dist/jsx/FloatingPanel/compactFace.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/containingBlock.mjs +21 -0
- package/dist/jsx/FloatingPanel/containingBlock.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/containingBlock.native.js +51 -0
- package/dist/jsx/FloatingPanel/containingBlock.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/index.mjs +1 -19
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +79 -45
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/pointAnchor.mjs +25 -1
- package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/pointAnchor.native.js +26 -0
- package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/regularPlacement.mjs +35 -0
- package/dist/jsx/FloatingPanel/regularPlacement.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/regularPlacement.native.js +65 -0
- package/dist/jsx/FloatingPanel/regularPlacement.native.js.map +1 -0
- package/dist/jsx/fields/Barcode/BarcodeScanner.mjs +8 -9
- package/dist/jsx/fields/Barcode/BarcodeScanner.mjs.map +1 -1
- package/dist/jsx/fields/Barcode/BarcodeScanner.native.js +7 -8
- package/dist/jsx/fields/Barcode/BarcodeScanner.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +1 -1
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +3 -1
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/index.mjs +84 -61
- package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/index.native.js +96 -73
- package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/index.mjs +8 -9
- package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/index.native.js +7 -8
- package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
- package/dist/jsx/fields/ImageField/index.mjs +6 -8
- package/dist/jsx/fields/ImageField/index.mjs.map +1 -1
- package/dist/jsx/fields/ImageField/index.native.js +4 -6
- package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
- package/dist/jsx/fields/Input/index.mjs +6 -1
- package/dist/jsx/fields/Input/index.mjs.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +5 -0
- package/dist/jsx/fields/Input/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/InlineChoices.mjs +3 -2
- package/dist/jsx/fields/Select/InlineChoices.mjs.map +1 -1
- package/dist/jsx/fields/Select/InlineChoices.native.js +5 -2
- package/dist/jsx/fields/Select/InlineChoices.native.js.map +1 -1
- package/dist/jsx/fields/Select/SheetPickerRow.mjs +129 -0
- package/dist/jsx/fields/Select/SheetPickerRow.mjs.map +1 -0
- package/dist/jsx/fields/Select/SheetPickerRow.native.js +165 -0
- package/dist/jsx/fields/Select/SheetPickerRow.native.js.map +1 -0
- package/dist/jsx/fields/Select/index.mjs +64 -5
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +85 -26
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.mjs +12 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.mjs.map +1 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.native.js +15 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/jsx/fields/Slider/index.mjs +96 -4
- package/dist/jsx/fields/Slider/index.mjs.map +1 -1
- package/dist/jsx/fields/Slider/index.native.js +103 -5
- package/dist/jsx/fields/Slider/index.native.js.map +1 -1
- package/dist/jsx/fields/Switch/index.mjs +71 -1
- package/dist/jsx/fields/Switch/index.mjs.map +1 -1
- package/dist/jsx/fields/Switch/index.native.js +72 -1
- package/dist/jsx/fields/Switch/index.native.js.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.mjs +67 -1
- package/dist/jsx/fields/ToggleGroup/index.mjs.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js +75 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +56 -49
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +64 -49
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/jsx/fields/nativeDateTime/sheetKeyboard.mjs +21 -0
- package/dist/jsx/fields/nativeDateTime/sheetKeyboard.mjs.map +1 -0
- package/dist/jsx/fields/nativeDateTime/sheetKeyboard.native.js +57 -0
- package/dist/jsx/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -0
- package/dist/jsx/index.js +5 -2
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +5 -2
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +18 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/colorRamps.mjs +0 -8
- package/dist/jsx/shared/colorRamps.mjs.map +1 -1
- package/dist/jsx/shared/colorRamps.native.js +0 -8
- package/dist/jsx/shared/colorRamps.native.js.map +1 -1
- package/dist/jsx/shared/overlaySizeClass.mjs +14 -0
- package/dist/jsx/shared/overlaySizeClass.mjs.map +1 -0
- package/dist/jsx/shared/overlaySizeClass.native.js +45 -0
- package/dist/jsx/shared/overlaySizeClass.native.js.map +1 -0
- package/dist/jsx/shared/sheetNavigation.mjs +47 -0
- package/dist/jsx/shared/sheetNavigation.mjs.map +1 -0
- package/dist/jsx/shared/sheetNavigation.native.js +129 -0
- package/dist/jsx/shared/sheetNavigation.native.js.map +1 -0
- package/dist/jsx/shared/systemControlModules.gnome.mjs +8 -0
- package/dist/jsx/shared/systemControlModules.gnome.mjs.map +1 -0
- package/dist/jsx/shared/systemControlModules.gnome.native.js +37 -0
- package/dist/jsx/shared/systemControlModules.gnome.native.js.map +1 -0
- package/dist/jsx/shared/systemControlModules.mjs +8 -0
- package/dist/jsx/shared/systemControlModules.mjs.map +1 -0
- package/dist/jsx/shared/systemControlModules.native.js +77 -0
- package/dist/jsx/shared/systemControlModules.native.js.map +1 -0
- package/dist/jsx/shared/systemControls.mjs +19 -0
- package/dist/jsx/shared/systemControls.mjs.map +1 -0
- package/dist/jsx/shared/systemControls.native.js +51 -0
- package/dist/jsx/shared/systemControls.native.js.map +1 -0
- package/dist/jsx/standardActions.mjs +91 -0
- package/dist/jsx/standardActions.mjs.map +1 -0
- package/dist/jsx/standardActions.native.js +120 -0
- package/dist/jsx/standardActions.native.js.map +1 -0
- package/package.json +20 -8
- package/src/AdaptivePopup/AdaptivePopup.spec.tsx +44 -0
- package/src/AdaptivePopup/AdaptivePopup.stories.tsx +12 -32
- package/src/AdaptivePopup/index.tsx +65 -13
- package/src/Button/Button.disabledGlyph.spec.tsx +111 -0
- package/src/Button/Button.iconButton.spec.tsx +279 -0
- package/src/Button/Button.stories.tsx +59 -3
- package/src/Button/glass.native.ts +38 -0
- package/src/Button/glass.ts +18 -0
- package/src/Button/index.tsx +272 -40
- package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +3 -1
- package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +2 -2
- package/src/ContextualSaveBar/index.tsx +7 -10
- package/src/ControlGroup/ControlGroup.stories.tsx +3 -2
- package/src/DescriptionList/index.tsx +0 -1
- package/src/ErrorSummary.stories.tsx +2 -1
- package/src/FieldLayout.stories.tsx +3 -2
- package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +73 -3
- package/src/FloatingPanel/FloatingPanel.regularWidth.native.spec.tsx +193 -0
- package/src/FloatingPanel/FloatingPanel.stories.tsx +6 -10
- package/src/FloatingPanel/RegularPanel.tsx +159 -0
- package/src/FloatingPanel/compactFace.spec.ts +24 -1
- package/src/FloatingPanel/compactFace.ts +16 -0
- package/src/FloatingPanel/containingBlock.ts +32 -0
- package/src/FloatingPanel/index.native.tsx +80 -35
- package/src/FloatingPanel/index.tsx +1 -33
- package/src/FloatingPanel/pointAnchor.spec.ts +29 -0
- package/src/FloatingPanel/pointAnchor.ts +30 -0
- package/src/FloatingPanel/regularPlacement.spec.ts +65 -0
- package/src/FloatingPanel/regularPlacement.ts +40 -0
- package/src/Form/Form.stories.tsx +6 -5
- package/src/errorSummaryStories.spec.tsx +4 -4
- package/src/fields/Barcode/BarcodeScanner.native.tsx +10 -9
- package/src/fields/Barcode/BarcodeScanner.tsx +10 -9
- package/src/fields/Checkbox/Checkbox.stories.tsx +3 -3
- package/src/fields/Checkbox/CheckboxGroup.stories.tsx +2 -2
- package/src/fields/ColorPicker/ColorPicker.stories.tsx +2 -2
- package/src/fields/Combobox/Combobox.regularWidth.native.spec.tsx +94 -0
- package/src/fields/Combobox/Combobox.stories.tsx +2 -2
- package/src/fields/Combobox/index.tsx +3 -1
- package/src/fields/DatePicker/DatePicker.stories.tsx +2 -1
- package/src/fields/DatePicker/DateRangePicker.stories.tsx +2 -2
- package/src/fields/DatePicker/DatetimePicker.stories.tsx +2 -1
- package/src/fields/DatePicker/MonthPicker.stories.tsx +2 -2
- package/src/fields/DatePicker/MultiDatePicker.stories.tsx +2 -2
- package/src/fields/FileUpload/FileUpload.spec.tsx +11 -6
- package/src/fields/FileUpload/FileUpload.stories.tsx +2 -2
- package/src/fields/FileUpload/index.tsx +101 -77
- package/src/fields/Geolocation/index.tsx +12 -7
- package/src/fields/ImageField/ImageField.spec.tsx +5 -5
- package/src/fields/ImageField/ImageField.stories.tsx +2 -2
- package/src/fields/ImageField/index.tsx +6 -9
- package/src/fields/Input/Input.formName.spec.tsx +53 -0
- package/src/fields/Input/Input.stories.tsx +2 -2
- package/src/fields/Input/index.tsx +6 -1
- package/src/fields/MentionInput/MentionInput.stories.tsx +2 -1
- package/src/fields/Progress/Progress.stories.tsx +2 -1
- package/src/fields/RadioGroup/RadioGroup.stories.tsx +2 -1
- package/src/fields/Select/InlineChoices.tsx +6 -3
- package/src/fields/Select/SheetPickerRow.tsx +160 -0
- package/src/fields/Select/index.tsx +65 -4
- package/src/fields/Select/shouldInlineChoices.spec.ts +21 -1
- package/src/fields/Select/shouldInlineChoices.ts +26 -0
- package/src/fields/Signature/Signature.stories.tsx +2 -2
- package/src/fields/Slider/Slider.system.native.spec.tsx +168 -0
- package/src/fields/Slider/index.tsx +166 -30
- package/src/fields/Stepper/Stepper.stories.tsx +2 -2
- package/src/fields/Switch/Switch.system.native.spec.tsx +162 -0
- package/src/fields/Switch/index.tsx +98 -0
- package/src/fields/TextArea/TextArea.stories.tsx +2 -2
- package/src/fields/ToggleGroup/ToggleGroup.stories.tsx +2 -2
- package/src/fields/ToggleGroup/ToggleGroup.system.native.spec.tsx +192 -0
- package/src/fields/ToggleGroup/index.tsx +111 -0
- package/src/fields/nativeDateTime/OsDateTimeSheet.presentation.spec.tsx +168 -0
- package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +60 -30
- package/src/fields/nativeDateTime/sheetKeyboard.spec.ts +60 -0
- package/src/fields/nativeDateTime/sheetKeyboard.ts +45 -0
- package/src/index.ts +25 -2
- package/src/shared/colorRamps.ts +1 -11
- package/src/shared/overlaySizeClass.spec.ts +27 -0
- package/src/shared/overlaySizeClass.ts +36 -0
- package/src/shared/sheetNavigation.ts +82 -0
- package/src/shared/systemControlModules.gnome.ts +10 -0
- package/src/shared/systemControlModules.native.spec.ts +52 -0
- package/src/shared/systemControlModules.native.ts +66 -0
- package/src/shared/systemControlModules.ts +10 -0
- package/src/shared/systemControls.ts +70 -0
- package/src/standardActions.ts +96 -0
- package/types/AdaptivePopup/index.d.ts +13 -1
- package/types/AdaptivePopup/index.d.ts.map +1 -1
- package/types/Button/glass.d.ts +15 -0
- package/types/Button/glass.d.ts.map +1 -0
- package/types/Button/glass.native.d.ts +11 -0
- package/types/Button/glass.native.d.ts.map +1 -0
- package/types/Button/index.d.ts +45 -1
- package/types/Button/index.d.ts.map +1 -1
- package/types/ContextualSaveBar/index.d.ts.map +1 -1
- package/types/DescriptionList/index.d.ts.map +1 -1
- package/types/FloatingPanel/RegularPanel.d.ts +29 -0
- package/types/FloatingPanel/RegularPanel.d.ts.map +1 -0
- package/types/FloatingPanel/compactFace.d.ts +12 -0
- package/types/FloatingPanel/compactFace.d.ts.map +1 -1
- package/types/FloatingPanel/containingBlock.d.ts +14 -0
- package/types/FloatingPanel/containingBlock.d.ts.map +1 -0
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +6 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/pointAnchor.d.ts +12 -0
- package/types/FloatingPanel/pointAnchor.d.ts.map +1 -1
- package/types/FloatingPanel/regularPlacement.d.ts +20 -0
- package/types/FloatingPanel/regularPlacement.d.ts.map +1 -0
- package/types/fields/Barcode/BarcodeScanner.d.ts.map +1 -1
- package/types/fields/Barcode/BarcodeScanner.native.d.ts.map +1 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/FileUpload/index.d.ts.map +1 -1
- package/types/fields/Geolocation/index.d.ts.map +1 -1
- package/types/fields/ImageField/index.d.ts.map +1 -1
- package/types/fields/Input/index.d.ts.map +1 -1
- package/types/fields/Select/InlineChoices.d.ts.map +1 -1
- package/types/fields/Select/SheetPickerRow.d.ts +23 -0
- package/types/fields/Select/SheetPickerRow.d.ts.map +1 -0
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Select/shouldInlineChoices.d.ts +15 -0
- package/types/fields/Select/shouldInlineChoices.d.ts.map +1 -1
- package/types/fields/Slider/index.d.ts +7 -1
- package/types/fields/Slider/index.d.ts.map +1 -1
- package/types/fields/Switch/index.d.ts +7 -1
- package/types/fields/Switch/index.d.ts.map +1 -1
- package/types/fields/ToggleGroup/index.d.ts +8 -1
- package/types/fields/ToggleGroup/index.d.ts.map +1 -1
- package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts.map +1 -1
- package/types/fields/nativeDateTime/sheetKeyboard.d.ts +20 -0
- package/types/fields/nativeDateTime/sheetKeyboard.d.ts.map +1 -0
- package/types/index.d.ts +8 -2
- package/types/index.d.ts.map +1 -1
- package/types/shared/colorRamps.d.ts +1 -11
- package/types/shared/colorRamps.d.ts.map +1 -1
- package/types/shared/overlaySizeClass.d.ts +24 -0
- package/types/shared/overlaySizeClass.d.ts.map +1 -0
- package/types/shared/sheetNavigation.d.ts +31 -0
- package/types/shared/sheetNavigation.d.ts.map +1 -0
- package/types/shared/systemControlModules.d.ts +5 -0
- package/types/shared/systemControlModules.d.ts.map +1 -0
- package/types/shared/systemControlModules.gnome.d.ts +5 -0
- package/types/shared/systemControlModules.gnome.d.ts.map +1 -0
- package/types/shared/systemControlModules.native.d.ts +20 -0
- package/types/shared/systemControlModules.native.d.ts.map +1 -0
- package/types/shared/systemControls.d.ts +53 -0
- package/types/shared/systemControls.d.ts.map +1 -0
- package/types/standardActions.d.ts +24 -0
- package/types/standardActions.d.ts.map +1 -0
|
@@ -10,14 +10,28 @@
|
|
|
10
10
|
* does a missing `@react-native-community/datetimepicker` (an optional peer,
|
|
11
11
|
* loaded through `loadDateTimePicker`).
|
|
12
12
|
*/
|
|
13
|
-
import { useCallback, useState } from "react";
|
|
14
|
-
import {
|
|
13
|
+
import { useCallback, useContext, useState } from "react";
|
|
14
|
+
import {
|
|
15
|
+
Modal,
|
|
16
|
+
Pressable,
|
|
17
|
+
StyleSheet,
|
|
18
|
+
useColorScheme,
|
|
19
|
+
useWindowDimensions,
|
|
20
|
+
View as RNView,
|
|
21
|
+
} from "react-native";
|
|
22
|
+
import { platform } from "@multiplatform.one/platform";
|
|
23
|
+
import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
|
|
15
24
|
import { useResolvedKnobs, Text } from "@multiplatform.one/theme";
|
|
16
25
|
import { View, XStack, YStack, useTheme, useThemeName } from "tamagui";
|
|
26
|
+
import { ArrowRightIcon } from "@phosphor-icons/react";
|
|
27
|
+
import { IconButton } from "../../Button";
|
|
28
|
+
import { standardActions } from "../../standardActions";
|
|
17
29
|
import { formCommonColors } from "../../shared/colorRamps";
|
|
18
30
|
import { t } from "../../shared/t";
|
|
19
31
|
import { type DateTimePickerEvent, loadDateTimePicker } from "./dateTimePickerLoader";
|
|
20
32
|
import { osDateTimeIosDisplay } from "./osDateTimeIosDisplay";
|
|
33
|
+
import { datePickerHeight, dateSheetBottomPadding, dateSheetMaxHeight } from "./sheetKeyboard";
|
|
34
|
+
import { useKeyboardInset } from "../../shared/useKeyboardInset";
|
|
21
35
|
|
|
22
36
|
export type OsDateTimeMode = "date" | "time" | "datetime";
|
|
23
37
|
|
|
@@ -52,7 +66,12 @@ export function OsDateTimeSheet({
|
|
|
52
66
|
const themeVariant = useNativePickerScheme();
|
|
53
67
|
const theme = useTheme();
|
|
54
68
|
const accentColor = theme.accentColor?.val;
|
|
55
|
-
const isIOS =
|
|
69
|
+
const isIOS = platform.isIos;
|
|
70
|
+
// MPO-64: the sheet ends ABOVE the keyboard and the picker shrinks to fit.
|
|
71
|
+
const keyboardInset = useKeyboardInset();
|
|
72
|
+
const { height: windowHeight } = useWindowDimensions();
|
|
73
|
+
const topInset = useContext(SafeAreaInsetsContext)?.top ?? initialWindowMetrics?.insets.top ?? 0;
|
|
74
|
+
const maxHeight = dateSheetMaxHeight(windowHeight, keyboardInset, topInset);
|
|
56
75
|
const [showTimePicker, setShowTimePicker] = useState(false);
|
|
57
76
|
const [temp, setTemp] = useState(value);
|
|
58
77
|
const pickerMode: "date" | "time" =
|
|
@@ -148,9 +167,11 @@ export function OsDateTimeSheet({
|
|
|
148
167
|
<Text color={formCommonColors.muted}>
|
|
149
168
|
{t("Date picker unavailable — requires @react-native-community/datetimepicker")}
|
|
150
169
|
</Text>
|
|
151
|
-
<
|
|
152
|
-
|
|
153
|
-
|
|
170
|
+
<IconButton
|
|
171
|
+
icon={standardActions.cancel.icon}
|
|
172
|
+
aria-label={t(standardActions.cancel.label)}
|
|
173
|
+
onPress={onCancel}
|
|
174
|
+
/>
|
|
154
175
|
</YStack>
|
|
155
176
|
</Pressable>
|
|
156
177
|
</Modal>
|
|
@@ -172,37 +193,48 @@ export function OsDateTimeSheet({
|
|
|
172
193
|
|
|
173
194
|
return (
|
|
174
195
|
<Modal transparent animationType="fade" visible={open} onRequestClose={onCancel}>
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
/>
|
|
196
|
+
{/*
|
|
197
|
+
A plain padded column, not KeyboardAvoidingView: inside a Modal the
|
|
198
|
+
latter pads the container while the sheet keeps its own height, so the
|
|
199
|
+
sheet overflows off the top instead of shrinking (MPO-64).
|
|
200
|
+
*/}
|
|
201
|
+
<RNView style={[styles.modalOverlay, { paddingBottom: keyboardInset }]}>
|
|
202
|
+
<Pressable style={StyleSheet.absoluteFill} onPress={onCancel}>
|
|
203
|
+
<View pointerEvents="none" flex={1} backgroundColor="$shadow6" />
|
|
204
|
+
</Pressable>
|
|
185
205
|
<Pressable onPress={(e) => e.stopPropagation()}>
|
|
186
206
|
<YStack
|
|
207
|
+
testID="os-date-time-sheet"
|
|
187
208
|
{...knobProps.elevatedSurface}
|
|
188
209
|
borderBottomLeftRadius={0}
|
|
189
210
|
borderBottomRightRadius={0}
|
|
211
|
+
maxHeight={maxHeight}
|
|
212
|
+
flexShrink={1}
|
|
213
|
+
minHeight={0}
|
|
214
|
+
paddingBottom={dateSheetBottomPadding(keyboardInset, isIOS)}
|
|
190
215
|
>
|
|
191
216
|
<XStack justifyContent="space-between" {...knobProps.panelPadding}>
|
|
192
|
-
<
|
|
193
|
-
|
|
194
|
-
|
|
217
|
+
<IconButton
|
|
218
|
+
icon={standardActions.cancel.icon}
|
|
219
|
+
aria-label={t(standardActions.cancel.label)}
|
|
220
|
+
onPress={onCancel}
|
|
221
|
+
/>
|
|
195
222
|
{mode === "datetime" && !showTimePicker ? (
|
|
196
|
-
<
|
|
197
|
-
|
|
198
|
-
|
|
223
|
+
<IconButton
|
|
224
|
+
icon={ArrowRightIcon}
|
|
225
|
+
aria-label={t("Next")}
|
|
226
|
+
onPress={() => setShowTimePicker(true)}
|
|
227
|
+
/>
|
|
199
228
|
) : (
|
|
200
|
-
<
|
|
201
|
-
|
|
202
|
-
|
|
229
|
+
<IconButton
|
|
230
|
+
icon={standardActions.done.icon}
|
|
231
|
+
plate="primary"
|
|
232
|
+
aria-label={t(standardActions.done.label)}
|
|
233
|
+
onPress={confirm}
|
|
234
|
+
/>
|
|
203
235
|
)}
|
|
204
236
|
</XStack>
|
|
205
|
-
<YStack {...knobProps.panelPadding}>
|
|
237
|
+
<YStack {...knobProps.panelPadding} flexShrink={1} minHeight={0}>
|
|
206
238
|
<DateTimePicker
|
|
207
239
|
value={temp}
|
|
208
240
|
mode={pickerMode}
|
|
@@ -212,12 +244,12 @@ export function OsDateTimeSheet({
|
|
|
212
244
|
onChange={handleIOSChange}
|
|
213
245
|
minimumDate={mode !== "time" ? minDate : undefined}
|
|
214
246
|
maximumDate={mode !== "time" ? maxDate : undefined}
|
|
215
|
-
style={
|
|
247
|
+
style={{ width: "100%", height: datePickerHeight(pickerMode, maxHeight) }}
|
|
216
248
|
/>
|
|
217
249
|
</YStack>
|
|
218
250
|
</YStack>
|
|
219
251
|
</Pressable>
|
|
220
|
-
</
|
|
252
|
+
</RNView>
|
|
221
253
|
</Modal>
|
|
222
254
|
);
|
|
223
255
|
}
|
|
@@ -227,6 +259,4 @@ const styles = StyleSheet.create({
|
|
|
227
259
|
flex: 1,
|
|
228
260
|
justifyContent: "flex-end",
|
|
229
261
|
},
|
|
230
|
-
wheel: { height: 216 },
|
|
231
|
-
calendar: { height: 360 },
|
|
232
262
|
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-64 leftover: the OS date/time iOS sheet must use the same keyboard
|
|
3
|
+
* cap as FloatingPanel / SheetModal. KeyboardAvoidingView cannot shrink a
|
|
4
|
+
* fixed-height calendar, so the cap is the only thing that keeps the sheet
|
|
5
|
+
* above the suggestion strip.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, expect, it } from "vitest";
|
|
8
|
+
import {
|
|
9
|
+
datePickerHeight,
|
|
10
|
+
dateSheetBottomPadding,
|
|
11
|
+
dateSheetMaxHeight,
|
|
12
|
+
DATE_PICKER_CALENDAR_HEIGHT,
|
|
13
|
+
DATE_SHEET_BACKDROP_STRIP,
|
|
14
|
+
DATE_SHEET_MIN_HEIGHT,
|
|
15
|
+
} from "./sheetKeyboard";
|
|
16
|
+
|
|
17
|
+
describe("dateSheetMaxHeight", () => {
|
|
18
|
+
it("uses the 85% detent when the keyboard is down", () => {
|
|
19
|
+
expect(dateSheetMaxHeight(800, 0, 47)).toBe(Math.round(800 * 0.85));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("caps to the space above the keyboard, less the 48pt backdrop strip", () => {
|
|
23
|
+
expect(dateSheetMaxHeight(800, 400, 0)).toBe(800 - 400 - DATE_SHEET_BACKDROP_STRIP);
|
|
24
|
+
expect(dateSheetMaxHeight(800, 400, 0)).toBeLessThan(dateSheetMaxHeight(800, 0, 0));
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("keeps the backdrop strip below the status bar, not inside it", () => {
|
|
28
|
+
const windowHeight = 874;
|
|
29
|
+
const keyboardInset = 335;
|
|
30
|
+
const topInset = 62;
|
|
31
|
+
const sheetTop =
|
|
32
|
+
windowHeight - keyboardInset - dateSheetMaxHeight(windowHeight, keyboardInset, topInset);
|
|
33
|
+
expect(sheetTop - topInset).toBe(DATE_SHEET_BACKDROP_STRIP);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("never collapses below the minimum sheet height", () => {
|
|
37
|
+
expect(dateSheetMaxHeight(800, 700, 47)).toBe(DATE_SHEET_MIN_HEIGHT);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("datePickerHeight", () => {
|
|
42
|
+
it("keeps the calendar grid when the sheet is tall enough", () => {
|
|
43
|
+
expect(datePickerHeight("date", 700)).toBe(DATE_PICKER_CALENDAR_HEIGHT);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("shrinks the calendar so the sheet can sit above the keyboard", () => {
|
|
47
|
+
const maxHeight = dateSheetMaxHeight(800, 400, 47);
|
|
48
|
+
const height = datePickerHeight("date", maxHeight);
|
|
49
|
+
expect(height).toBeLessThan(DATE_PICKER_CALENDAR_HEIGHT);
|
|
50
|
+
expect(height).toBeLessThanOrEqual(maxHeight);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe("dateSheetBottomPadding", () => {
|
|
55
|
+
it("drops the home-indicator inset while the keyboard covers it", () => {
|
|
56
|
+
expect(dateSheetBottomPadding(0, true)).toBe(24);
|
|
57
|
+
expect(dateSheetBottomPadding(336, true)).toBe(8);
|
|
58
|
+
expect(dateSheetBottomPadding(0, false)).toBe(16);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-64 leftover: same keyboard cap as FloatingPanel / SheetModal.
|
|
3
|
+
*
|
|
4
|
+
* The Date iOS sheet used to give the calendar a fixed 360pt height inside a
|
|
5
|
+
* Modal. KeyboardAvoidingView cannot shrink that shape — it pads the container
|
|
6
|
+
* and the sheet overflows off the top. Cap the sheet to the space between the
|
|
7
|
+
* status bar and the keyboard (less a strip of backdrop) and shrink the picker
|
|
8
|
+
* to fit.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const DATE_SHEET_MAX_HEIGHT_RATIO = 0.85;
|
|
12
|
+
export const DATE_SHEET_BACKDROP_STRIP = 48;
|
|
13
|
+
export const DATE_SHEET_MIN_HEIGHT = 180;
|
|
14
|
+
export const DATE_SHEET_CHROME = 96;
|
|
15
|
+
export const DATE_PICKER_CALENDAR_HEIGHT = 360;
|
|
16
|
+
export const DATE_PICKER_WHEEL_HEIGHT = 216;
|
|
17
|
+
const minPickerHeight = 120;
|
|
18
|
+
|
|
19
|
+
export function dateSheetMaxHeight(
|
|
20
|
+
windowHeight: number,
|
|
21
|
+
keyboardInset: number,
|
|
22
|
+
topInset: number,
|
|
23
|
+
): number {
|
|
24
|
+
const available = Math.max(0, windowHeight - keyboardInset);
|
|
25
|
+
return Math.max(
|
|
26
|
+
DATE_SHEET_MIN_HEIGHT,
|
|
27
|
+
Math.round(
|
|
28
|
+
Math.min(
|
|
29
|
+
windowHeight * DATE_SHEET_MAX_HEIGHT_RATIO,
|
|
30
|
+
available - topInset - DATE_SHEET_BACKDROP_STRIP,
|
|
31
|
+
),
|
|
32
|
+
),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Home-indicator clearance; drop it while the keyboard already covers that band. */
|
|
37
|
+
export function dateSheetBottomPadding(keyboardInset: number, isIos: boolean): number {
|
|
38
|
+
if (keyboardInset > 0) return 8;
|
|
39
|
+
return isIos ? 24 : 16;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function datePickerHeight(mode: "date" | "time", maxHeight: number): number {
|
|
43
|
+
const preferred = mode === "time" ? DATE_PICKER_WHEEL_HEIGHT : DATE_PICKER_CALENDAR_HEIGHT;
|
|
44
|
+
return Math.min(preferred, Math.max(minPickerHeight, maxHeight - DATE_SHEET_CHROME));
|
|
45
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -112,8 +112,14 @@ export { formatActionLabel } from "./actionLabel";
|
|
|
112
112
|
export type { ActionLabelParts } from "./actionLabel";
|
|
113
113
|
|
|
114
114
|
// ── Core Primitives ──────────────────────────────────────────
|
|
115
|
-
export {
|
|
116
|
-
|
|
115
|
+
export {
|
|
116
|
+
Button,
|
|
117
|
+
IconButton,
|
|
118
|
+
ICON_BUTTON_GLYPH_PX,
|
|
119
|
+
ICON_BUTTON_NEUTRAL_GLYPH_PX,
|
|
120
|
+
ICON_BUTTON_PRESS_OPACITY,
|
|
121
|
+
} from "./Button";
|
|
122
|
+
export type { ButtonProps, ButtonActionRole, IconButtonProps } from "./Button";
|
|
117
123
|
|
|
118
124
|
export { Input } from "./fields/Input";
|
|
119
125
|
export type { InputProps } from "./fields/Input";
|
|
@@ -425,8 +431,23 @@ export {
|
|
|
425
431
|
withOverlayStack,
|
|
426
432
|
} from "./shared/overlayStack";
|
|
427
433
|
export type { OverlayTier } from "./shared/overlayStack";
|
|
434
|
+
export {
|
|
435
|
+
createSheetNavigationStore,
|
|
436
|
+
SheetNavigationProvider,
|
|
437
|
+
useSheetNavigation,
|
|
438
|
+
useSheetPageOpen,
|
|
439
|
+
useSheetPages,
|
|
440
|
+
} from "./shared/sheetNavigation";
|
|
441
|
+
export type { SheetNavigationStore, SheetPage } from "./shared/sheetNavigation";
|
|
428
442
|
export { OverlayWindow } from "./shared/OverlayWindow";
|
|
429
443
|
export type { OverlayWindowProps } from "./shared/OverlayWindow";
|
|
444
|
+
export {
|
|
445
|
+
SHEET_PANEL_WIDTH,
|
|
446
|
+
overlaySizeClass,
|
|
447
|
+
sheetPanelWidth,
|
|
448
|
+
useOverlaySizeClass,
|
|
449
|
+
} from "./shared/overlaySizeClass";
|
|
450
|
+
export type { OverlaySizeClass } from "./shared/overlaySizeClass";
|
|
430
451
|
|
|
431
452
|
// ── TanStack Form re-exports ─────────────────────────────────
|
|
432
453
|
export {
|
|
@@ -445,3 +466,5 @@ export type {
|
|
|
445
466
|
PickedMedia,
|
|
446
467
|
MediaPickerErrorCode,
|
|
447
468
|
} from "./MediaPicker/types";
|
|
469
|
+
export { standardActions, standardActionWords } from "./standardActions";
|
|
470
|
+
export type { StandardAction, StandardActionKind } from "./standardActions";
|
package/src/shared/colorRamps.ts
CHANGED
|
@@ -101,20 +101,10 @@ export const formCardColors = {
|
|
|
101
101
|
* step (boards media-01..04 measure 1px dashed rgb(77,77,77) light /
|
|
102
102
|
* rgb(133,133,133) dark) — the `$borderColor` hairline tier measured
|
|
103
103
|
* near-invisible as a dash. Picked files ride IN-ZONE rows parted by the
|
|
104
|
-
* same dashed hairline; each row
|
|
105
|
-
* the inverse ✕ ($color1). Disc hover/press step back down the ramp so the
|
|
106
|
-
* dark chrome never flashes the light state-layer fills.
|
|
104
|
+
* same dashed hairline; each row's remove is a bare ✕ (LC-176 ICON-BUTTON).
|
|
107
105
|
*/
|
|
108
106
|
export const formDropzoneColors = {
|
|
109
107
|
border: "$color9",
|
|
110
|
-
removeDisc: {
|
|
111
|
-
background: {
|
|
112
|
-
base: "$color12",
|
|
113
|
-
hover: "$color11",
|
|
114
|
-
press: "$color10",
|
|
115
|
-
},
|
|
116
|
-
ink: "$color1",
|
|
117
|
-
},
|
|
118
108
|
// Attachments / media-01 transfer bar (MPO-55): 11px pill, $color4 track,
|
|
119
109
|
// $color11 fill — the same pair the measured attachments row draws.
|
|
120
110
|
progress: {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { OVERLAY_BREAKPOINT } from "@multiplatform.one/theme";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { SHEET_PANEL_WIDTH, overlaySizeClass, sheetPanelWidth } from "./overlaySizeClass";
|
|
4
|
+
|
|
5
|
+
describe("overlaySizeClass (FZ-8116)", () => {
|
|
6
|
+
it.each([
|
|
7
|
+
["iPad Slide Over", 320, "compact"],
|
|
8
|
+
["iPhone", 390, "compact"],
|
|
9
|
+
["iPhone Pro Max", 440, "compact"],
|
|
10
|
+
["the web pivot itself", OVERLAY_BREAKPOINT, "compact"],
|
|
11
|
+
["iPad mini portrait", 744, "regular"],
|
|
12
|
+
["iPad Air portrait", 820, "regular"],
|
|
13
|
+
["iPad Pro landscape", 1366, "regular"],
|
|
14
|
+
])("%s (%ipt) is %s", (_name, width, expected) => {
|
|
15
|
+
expect(overlaySizeClass(width)).toBe(expected);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
describe("sheetPanelWidth", () => {
|
|
20
|
+
it("caps the panel where the window has room", () => {
|
|
21
|
+
expect(sheetPanelWidth(820)).toBe(SHEET_PANEL_WIDTH);
|
|
22
|
+
expect(sheetPanelWidth(1366)).toBe(SHEET_PANEL_WIDTH);
|
|
23
|
+
});
|
|
24
|
+
it("spans a window narrower than the cap, as the compact sheet does", () => {
|
|
25
|
+
expect(sheetPanelWidth(600)).toBe(600);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { OVERLAY_BREAKPOINT, layoutBreakpoints } from "@multiplatform.one/theme";
|
|
2
|
+
import { useWindowDimensions } from "react-native";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The horizontal size class an overlay presents for (FZ-8116, LC-266). It is
|
|
6
|
+
* read from the window, not the device: an iPad in Slide Over or a narrow
|
|
7
|
+
* Split View is compact, an iPad full screen or a wide Android window is
|
|
8
|
+
* regular. The pivot is the web's, so a native window and a browser at the
|
|
9
|
+
* same width draw the same overlay.
|
|
10
|
+
*
|
|
11
|
+
* - `"compact"`: the bottom sheet (FloatingPanel, SheetModal).
|
|
12
|
+
* - `"regular"`: a FloatingPanel opens over its field (LC-105, LC-112), and a
|
|
13
|
+
* SheetModal is a bottom panel, width-capped and centred, that slides up.
|
|
14
|
+
*/
|
|
15
|
+
export type OverlaySizeClass = "compact" | "regular";
|
|
16
|
+
|
|
17
|
+
export function overlaySizeClass(windowWidth: number): OverlaySizeClass {
|
|
18
|
+
return windowWidth > OVERLAY_BREAKPOINT ? "regular" : "compact";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function useOverlaySizeClass(): OverlaySizeClass {
|
|
22
|
+
return overlaySizeClass(useWindowDimensions().width);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The widest a regular-width sheet panel draws (FZ-8116): a bottom panel that
|
|
27
|
+
* slides up like the compact sheet, centred, never a wall across an iPad.
|
|
28
|
+
* Drover's composer sheets set the number, and it is the overlay pivot's own
|
|
29
|
+
* width (LC-28), so every regular-width window is wider than the panel.
|
|
30
|
+
*/
|
|
31
|
+
export const SHEET_PANEL_WIDTH = layoutBreakpoints.medium;
|
|
32
|
+
|
|
33
|
+
/** The sheet panel's width in a window: the cap, or the whole window below it. */
|
|
34
|
+
export function sheetPanelWidth(windowWidth: number): number {
|
|
35
|
+
return Math.max(0, Math.min(SHEET_PANEL_WIDTH, windowWidth));
|
|
36
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createContext, useContext, useSyncExternalStore, type ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A sheet's own navigation stack (LC-262, FZ-7830 round 3). A long choice list
|
|
5
|
+
* inside a sheet is a Settings row that pushes its checkmark list here, inside
|
|
6
|
+
* the same sheet, instead of floating a menu over the field (HIG: navigation
|
|
7
|
+
* within a sheet). The sheet renders the top page in place of its body, with a
|
|
8
|
+
* back control that pops it.
|
|
9
|
+
*/
|
|
10
|
+
export interface SheetPage {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
content: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface SheetNavigationStore {
|
|
17
|
+
subscribe: (listener: () => void) => () => void;
|
|
18
|
+
getPages: () => readonly SheetPage[];
|
|
19
|
+
has: (id: string) => boolean;
|
|
20
|
+
push: (page: SheetPage) => void;
|
|
21
|
+
update: (page: SheetPage) => void;
|
|
22
|
+
remove: (id: string) => void;
|
|
23
|
+
pop: () => void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function createSheetNavigationStore(): SheetNavigationStore {
|
|
27
|
+
let pages: readonly SheetPage[] = [];
|
|
28
|
+
const listeners = new Set<() => void>();
|
|
29
|
+
const set = (next: readonly SheetPage[]) => {
|
|
30
|
+
pages = next;
|
|
31
|
+
for (const listener of listeners) listener();
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
subscribe(listener) {
|
|
35
|
+
listeners.add(listener);
|
|
36
|
+
return () => listeners.delete(listener);
|
|
37
|
+
},
|
|
38
|
+
getPages: () => pages,
|
|
39
|
+
has: (id) => pages.some((page) => page.id === id),
|
|
40
|
+
push(page) {
|
|
41
|
+
set([...pages.filter((p) => p.id !== page.id), page]);
|
|
42
|
+
},
|
|
43
|
+
update(page) {
|
|
44
|
+
if (!pages.some((p) => p.id === page.id)) return;
|
|
45
|
+
set(pages.map((p) => (p.id === page.id ? page : p)));
|
|
46
|
+
},
|
|
47
|
+
remove(id) {
|
|
48
|
+
if (!pages.some((p) => p.id === id)) return;
|
|
49
|
+
set(pages.filter((p) => p.id !== id));
|
|
50
|
+
},
|
|
51
|
+
pop() {
|
|
52
|
+
if (pages.length) set(pages.slice(0, -1));
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const SheetNavigationContext = createContext<SheetNavigationStore | undefined>(undefined);
|
|
58
|
+
|
|
59
|
+
export const SheetNavigationProvider = SheetNavigationContext.Provider;
|
|
60
|
+
|
|
61
|
+
/** The navigation stack of the sheet this subtree sits in, or undefined outside one. */
|
|
62
|
+
export function useSheetNavigation(): SheetNavigationStore | undefined {
|
|
63
|
+
return useContext(SheetNavigationContext);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const noPages: readonly SheetPage[] = [];
|
|
67
|
+
const noSubscribe = () => () => {};
|
|
68
|
+
|
|
69
|
+
/** The pages pushed on `store`, oldest first. */
|
|
70
|
+
export function useSheetPages(store: SheetNavigationStore | undefined): readonly SheetPage[] {
|
|
71
|
+
return useSyncExternalStore(
|
|
72
|
+
store?.subscribe ?? noSubscribe,
|
|
73
|
+
store ? store.getPages : () => noPages,
|
|
74
|
+
store ? store.getPages : () => noPages,
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Whether the page `id` is on `store`. */
|
|
79
|
+
export function useSheetPageOpen(store: SheetNavigationStore | undefined, id: string): boolean {
|
|
80
|
+
const has = () => store?.has(id) ?? false;
|
|
81
|
+
return useSyncExternalStore(store?.subscribe ?? noSubscribe, has, has);
|
|
82
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SystemSegmentedControlComponent, SystemSliderComponent } from "./systemControls";
|
|
2
|
+
|
|
3
|
+
/** GNOME: the MPO slider and segmented control are the platform form. */
|
|
4
|
+
export function loadSystemSlider(): SystemSliderComponent | null {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function loadSystemSegmentedControl(): SystemSegmentedControlComponent | null {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { loadSystemModule } from "./systemControlModules.native";
|
|
3
|
+
|
|
4
|
+
const SystemView = () => null;
|
|
5
|
+
const registry = (has: (name: string) => boolean) => ({ hasViewManagerConfig: vi.fn(has) });
|
|
6
|
+
|
|
7
|
+
// LC-266 (FZ-8118, FZ-8119). An OTA reaches binaries built before a module
|
|
8
|
+
// was added: the JS is in the bundle but the native view is not, and
|
|
9
|
+
// rendering it would crash. A module counts only when both are there.
|
|
10
|
+
describe("loadSystemModule", () => {
|
|
11
|
+
it("returns the component when the JS and the native view are both present", () => {
|
|
12
|
+
const views = registry(() => true);
|
|
13
|
+
expect(loadSystemModule(() => ({ default: SystemView }), "RNCSlider", views)).toBe(SystemView);
|
|
14
|
+
expect(views.hasViewManagerConfig).toHaveBeenCalledWith("RNCSlider");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("returns null when the binary lacks the native view", () => {
|
|
18
|
+
const views = registry(() => false);
|
|
19
|
+
expect(loadSystemModule(() => ({ default: SystemView }), "RNCSlider", views)).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("returns null when the package is not installed", () => {
|
|
23
|
+
const missing = () => {
|
|
24
|
+
throw new Error("Cannot find module '@react-native-segmented-control/segmented-control'");
|
|
25
|
+
};
|
|
26
|
+
expect(
|
|
27
|
+
loadSystemModule(
|
|
28
|
+
missing,
|
|
29
|
+
"RNCSegmentedControl",
|
|
30
|
+
registry(() => true),
|
|
31
|
+
),
|
|
32
|
+
).toBeNull();
|
|
33
|
+
expect(
|
|
34
|
+
loadSystemModule(
|
|
35
|
+
() => undefined,
|
|
36
|
+
"RNCSegmentedControl",
|
|
37
|
+
registry(() => true),
|
|
38
|
+
),
|
|
39
|
+
).toBeNull();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("returns null when the registry lookup throws", () => {
|
|
43
|
+
const views = registry(() => {
|
|
44
|
+
throw new Error("unstable_hasComponent: Global function is not registered");
|
|
45
|
+
});
|
|
46
|
+
expect(loadSystemModule(() => ({ default: SystemView }), "RNCSlider", views)).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("returns null when the registry has no lookup at all", () => {
|
|
50
|
+
expect(loadSystemModule(() => ({ default: SystemView }), "RNCSlider", {})).toBeNull();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { UIManager } from "react-native";
|
|
2
|
+
import type { SystemSegmentedControlComponent, SystemSliderComponent } from "./systemControls";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The system slider and segmented control are optional native modules: Kitchen
|
|
6
|
+
* Sink ships `@react-native-community/slider`, One does not yet, and neither
|
|
7
|
+
* ships `@react-native-segmented-control/segmented-control`. The JS can be in
|
|
8
|
+
* the bundle while the binary lacks the view (an OTA on an older build), so a
|
|
9
|
+
* module counts only when its native view is registered too. Anything else
|
|
10
|
+
* returns null and the field keeps the MPO control. Each `require` sits inside
|
|
11
|
+
* its own `try` so Metro bundles a missing package as an optional dependency
|
|
12
|
+
* instead of failing the build, as in dateTimePickerLoader.ts (FZ-7357).
|
|
13
|
+
*/
|
|
14
|
+
export interface NativeViewRegistry {
|
|
15
|
+
hasViewManagerConfig?: (name: string) => boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function hasNativeView(name: string, registry: NativeViewRegistry): boolean {
|
|
19
|
+
try {
|
|
20
|
+
return Boolean(registry.hasViewManagerConfig?.(name));
|
|
21
|
+
} catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function loadSystemModule<T>(
|
|
27
|
+
requireModule: () => { default?: T } | undefined,
|
|
28
|
+
viewName: string,
|
|
29
|
+
registry: NativeViewRegistry = UIManager,
|
|
30
|
+
): T | null {
|
|
31
|
+
try {
|
|
32
|
+
const component = requireModule()?.default;
|
|
33
|
+
return component && hasNativeView(viewName, registry) ? component : null;
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let slider: SystemSliderComponent | null | undefined;
|
|
40
|
+
let segmentedControl: SystemSegmentedControlComponent | null | undefined;
|
|
41
|
+
|
|
42
|
+
export function loadSystemSlider(): SystemSliderComponent | null {
|
|
43
|
+
if (slider === undefined) {
|
|
44
|
+
slider = loadSystemModule<SystemSliderComponent>(() => {
|
|
45
|
+
try {
|
|
46
|
+
return require("@react-native-community/slider");
|
|
47
|
+
} catch {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}, "RNCSlider");
|
|
51
|
+
}
|
|
52
|
+
return slider;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function loadSystemSegmentedControl(): SystemSegmentedControlComponent | null {
|
|
56
|
+
if (segmentedControl === undefined) {
|
|
57
|
+
segmentedControl = loadSystemModule<SystemSegmentedControlComponent>(() => {
|
|
58
|
+
try {
|
|
59
|
+
return require("@react-native-segmented-control/segmented-control");
|
|
60
|
+
} catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}, "RNCSegmentedControl");
|
|
64
|
+
}
|
|
65
|
+
return segmentedControl;
|
|
66
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SystemSegmentedControlComponent, SystemSliderComponent } from "./systemControls";
|
|
2
|
+
|
|
3
|
+
/** Web: the MPO slider and segmented control are the platform form. */
|
|
4
|
+
export function loadSystemSlider(): SystemSliderComponent | null {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function loadSystemSegmentedControl(): SystemSegmentedControlComponent | null {
|
|
9
|
+
return null;
|
|
10
|
+
}
|