@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
|
@@ -55,6 +55,11 @@
|
|
|
55
55
|
* than OVERLAY_BREAKPOINT (a tablet) it opens at the long-press point, the
|
|
56
56
|
* same free overlay the web draws at the pointer; a phone keeps the sheet,
|
|
57
57
|
* as web does at ≤640.
|
|
58
|
+
*
|
|
59
|
+
* Regular width (FZ-8116, LC-266): on an iPad or any window wider than
|
|
60
|
+
* OVERLAY_BREAKPOINT the sheet is the wrong form. The panel opens over its
|
|
61
|
+
* field the way the web float does (LC-105, LC-112), sized by `widthMode`;
|
|
62
|
+
* compact windows (iPhone, Slide Over) keep the sheet. `sheet` forces it.
|
|
58
63
|
*/
|
|
59
64
|
|
|
60
65
|
import { nativeAnimationConfig, type MotionStop } from "@multiplatform.one/theme";
|
|
@@ -83,27 +88,25 @@ import {
|
|
|
83
88
|
type GestureResponderEvent,
|
|
84
89
|
} from "react-native";
|
|
85
90
|
import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
|
|
86
|
-
import {
|
|
87
|
-
OVERLAY_BREAKPOINT,
|
|
88
|
-
Surface,
|
|
89
|
-
useResolvedKnobs,
|
|
90
|
-
motionDurationMs,
|
|
91
|
-
} from "@multiplatform.one/theme";
|
|
91
|
+
import { Surface, useResolvedKnobs, motionDurationMs } from "@multiplatform.one/theme";
|
|
92
92
|
import { View, YStack } from "tamagui";
|
|
93
93
|
import { useInsideOverlay, useOverlayZIndex } from "../shared/overlayStack";
|
|
94
94
|
import { OverlayWindow } from "../shared/OverlayWindow";
|
|
95
95
|
import { t } from "../shared/t";
|
|
96
|
+
import { overlaySizeClass } from "../shared/overlaySizeClass";
|
|
96
97
|
import { useKeyboardInset } from "../shared/useKeyboardInset";
|
|
97
98
|
import type { FloatingPanelProps } from "./index";
|
|
98
|
-
import { resolveCompactFace } from "./compactFace";
|
|
99
|
+
import { menuMinWidth, resolveCompactFace } from "./compactFace";
|
|
99
100
|
import {
|
|
100
101
|
placeAtPoint,
|
|
102
|
+
placeBesideTrigger,
|
|
101
103
|
placeOverTrigger,
|
|
102
104
|
type PanelBounds,
|
|
103
105
|
type PanelPoint,
|
|
104
106
|
type TriggerRect,
|
|
105
107
|
} from "./pointAnchor";
|
|
106
|
-
import {
|
|
108
|
+
import { RegularPanel } from "./RegularPanel";
|
|
109
|
+
import { panelViewportPadding, resolvePanelWidthMode } from "./useFloatingPanel";
|
|
107
110
|
import { TrailingActionOverlay, TriggerWithTrailingAction } from "./trailingAction";
|
|
108
111
|
|
|
109
112
|
// Re-export the hook + constants so Select / Combobox / external consumers
|
|
@@ -160,6 +163,9 @@ export function FloatingPanel({
|
|
|
160
163
|
triggerRow,
|
|
161
164
|
triggerEcho = true,
|
|
162
165
|
anchorMode,
|
|
166
|
+
sheet,
|
|
167
|
+
widthMode,
|
|
168
|
+
fitContent,
|
|
163
169
|
}: FloatingPanelProps) {
|
|
164
170
|
// The panel floats over the page: it never inherits a painted ancestor.
|
|
165
171
|
const { knobProps } = useResolvedKnobs({ painted: false });
|
|
@@ -202,15 +208,18 @@ export function FloatingPanel({
|
|
|
202
208
|
[disabled, onOpenChange],
|
|
203
209
|
);
|
|
204
210
|
const isContextMenu = openOn === "contextmenu";
|
|
205
|
-
const
|
|
211
|
+
const regular = overlaySizeClass(windowWidth) === "regular";
|
|
212
|
+
const atPoint = isContextMenu && pressPoint !== null && regular;
|
|
206
213
|
const insideOverlay = useInsideOverlay();
|
|
207
214
|
const asMenu = !isContextMenu && resolveCompactFace(compactFace, insideOverlay) === "menu";
|
|
215
|
+
const asRegular = regular && !asMenu && !isContextMenu && sheet !== true;
|
|
216
|
+
const anchored = asMenu || asRegular;
|
|
208
217
|
const triggerRef = useRef<RNView | null>(null);
|
|
209
218
|
const [anchor, setAnchor] = useState<TriggerRect | null>(null);
|
|
210
219
|
// The trigger's window rect, read each time the menu opens: it may have
|
|
211
220
|
// moved (a scrolled sheet) since the last open.
|
|
212
221
|
useLayoutEffect(() => {
|
|
213
|
-
if (!
|
|
222
|
+
if (!anchored || !open) {
|
|
214
223
|
setAnchor(null);
|
|
215
224
|
return;
|
|
216
225
|
}
|
|
@@ -230,7 +239,7 @@ export function FloatingPanel({
|
|
|
230
239
|
return () => {
|
|
231
240
|
live = false;
|
|
232
241
|
};
|
|
233
|
-
}, [
|
|
242
|
+
}, [anchored, open]);
|
|
234
243
|
|
|
235
244
|
const handleBackdropPress = useCallback(() => {
|
|
236
245
|
if (backdropArmed) close();
|
|
@@ -582,11 +591,8 @@ export function FloatingPanel({
|
|
|
582
591
|
<TriggerMenuPanel
|
|
583
592
|
// An attached menu (an icon trigger, no echo row) opens under its
|
|
584
593
|
// trigger instead of over it, the UIMenu pull-down (LC-262).
|
|
585
|
-
anchor={
|
|
586
|
-
|
|
587
|
-
? { ...anchor, y: anchor.y + anchor.height }
|
|
588
|
-
: anchor
|
|
589
|
-
}
|
|
594
|
+
anchor={anchor}
|
|
595
|
+
attach={anchorMode === "attach"}
|
|
590
596
|
bounds={{
|
|
591
597
|
top: topInset + panelViewportPadding,
|
|
592
598
|
left: (safeArea?.left ?? 0) + panelViewportPadding,
|
|
@@ -627,6 +633,32 @@ export function FloatingPanel({
|
|
|
627
633
|
{header}
|
|
628
634
|
{children}
|
|
629
635
|
</PointPanel>
|
|
636
|
+
) : asRegular ? (
|
|
637
|
+
<RegularPanel
|
|
638
|
+
anchor={anchor}
|
|
639
|
+
bounds={{
|
|
640
|
+
top: topInset + panelViewportPadding,
|
|
641
|
+
left: (safeArea?.left ?? 0) + panelViewportPadding,
|
|
642
|
+
right: windowWidth - (safeArea?.right ?? 0) - panelViewportPadding,
|
|
643
|
+
bottom:
|
|
644
|
+
windowHeight -
|
|
645
|
+
Math.max(safeArea?.bottom ?? 0, keyboardInset) -
|
|
646
|
+
panelViewportPadding,
|
|
647
|
+
}}
|
|
648
|
+
widthMode={resolvePanelWidthMode(widthMode, fitContent)}
|
|
649
|
+
echo={triggerEcho ? (triggerRow ?? trigger) : null}
|
|
650
|
+
echoLabel={triggerA11y?.label}
|
|
651
|
+
header={header}
|
|
652
|
+
scrollable={!!scrollable}
|
|
653
|
+
fill={!!sheetFill}
|
|
654
|
+
scrollViewProps={scrollViewProps}
|
|
655
|
+
framePadding={framePadding}
|
|
656
|
+
frameGap={frameGap}
|
|
657
|
+
onBackdropPress={handleBackdropPress}
|
|
658
|
+
onClose={close}
|
|
659
|
+
>
|
|
660
|
+
{children}
|
|
661
|
+
</RegularPanel>
|
|
630
662
|
) : (
|
|
631
663
|
/*
|
|
632
664
|
A plain padded column, not KeyboardAvoidingView: inside a Modal the
|
|
@@ -732,6 +764,7 @@ export function FloatingPanel({
|
|
|
732
764
|
*/
|
|
733
765
|
function TriggerMenuPanel({
|
|
734
766
|
anchor,
|
|
767
|
+
attach = false,
|
|
735
768
|
bounds,
|
|
736
769
|
echo,
|
|
737
770
|
echoLabel,
|
|
@@ -742,6 +775,7 @@ function TriggerMenuPanel({
|
|
|
742
775
|
children,
|
|
743
776
|
}: {
|
|
744
777
|
anchor: TriggerRect | null;
|
|
778
|
+
attach?: boolean;
|
|
745
779
|
bounds: PanelBounds;
|
|
746
780
|
echo: ReactNode;
|
|
747
781
|
echoLabel?: string;
|
|
@@ -755,7 +789,7 @@ function TriggerMenuPanel({
|
|
|
755
789
|
const [size, setSize] = useState<{ width: number; height: number } | null>(null);
|
|
756
790
|
const placement =
|
|
757
791
|
anchor && size
|
|
758
|
-
? placeOverTrigger({
|
|
792
|
+
? (attach ? placeBesideTrigger : placeOverTrigger)({
|
|
759
793
|
trigger: anchor,
|
|
760
794
|
width: size.width,
|
|
761
795
|
height: size.height,
|
|
@@ -782,36 +816,47 @@ function TriggerMenuPanel({
|
|
|
782
816
|
position: "absolute",
|
|
783
817
|
left: placement?.left ?? bounds.left,
|
|
784
818
|
top: placement?.top ?? bounds.top,
|
|
785
|
-
minWidth: anchor?.width ?? 0,
|
|
819
|
+
minWidth: menuMinWidth(anchor?.width ?? 0, bounds.right - bounds.left),
|
|
786
820
|
maxWidth: bounds.right - bounds.left,
|
|
787
821
|
maxHeight: placement?.maxHeight ?? bounds.bottom - bounds.top,
|
|
788
822
|
opacity: placement ? 1 : 0,
|
|
789
823
|
}}
|
|
790
824
|
>
|
|
791
825
|
<YStack
|
|
826
|
+
testID="floating-panel-menu-surface"
|
|
792
827
|
{...knobProps.elevatedSurface}
|
|
793
828
|
flexShrink={1}
|
|
794
829
|
minHeight={0}
|
|
795
|
-
overflow="hidden"
|
|
796
830
|
onAccessibilityEscape={onClose}
|
|
797
831
|
>
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
832
|
+
<YStack
|
|
833
|
+
testID="floating-panel-menu-clip"
|
|
834
|
+
borderRadius={knobProps.elevatedSurface.borderRadius}
|
|
835
|
+
overflow="hidden"
|
|
836
|
+
flexShrink={1}
|
|
837
|
+
minHeight={0}
|
|
838
|
+
>
|
|
839
|
+
{echo != null && anchor && anchor.height > 0 ? (
|
|
840
|
+
<Pressable
|
|
841
|
+
testID="floating-panel-menu-echo"
|
|
842
|
+
onPress={onClose}
|
|
843
|
+
accessibilityRole="button"
|
|
844
|
+
{...(echoLabel ? { accessibilityLabel: echoLabel } : undefined)}
|
|
845
|
+
aria-expanded
|
|
846
|
+
style={{ height: anchor.height, minWidth: anchor.width, justifyContent: "center" }}
|
|
847
|
+
>
|
|
848
|
+
<RNView pointerEvents="none">{echo}</RNView>
|
|
849
|
+
</Pressable>
|
|
850
|
+
) : null}
|
|
851
|
+
<RNScrollView
|
|
852
|
+
style={{ flexGrow: 0, flexShrink: 1 }}
|
|
853
|
+
keyboardShouldPersistTaps="handled"
|
|
806
854
|
>
|
|
807
|
-
<
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
{children}
|
|
813
|
-
</YStack>
|
|
814
|
-
</RNScrollView>
|
|
855
|
+
<YStack padding={framePadding} gap={frameGap}>
|
|
856
|
+
{children}
|
|
857
|
+
</YStack>
|
|
858
|
+
</RNScrollView>
|
|
859
|
+
</YStack>
|
|
815
860
|
</YStack>
|
|
816
861
|
</RNView>
|
|
817
862
|
</RNView>
|
|
@@ -32,6 +32,7 @@ import { OverlayStackProvider, useInsideOverlay, useOverlayZIndex } from "../sha
|
|
|
32
32
|
import { resolveCompactFace, type CompactFace } from "./compactFace";
|
|
33
33
|
import { isNestedPanelAction, type PanelActionEvent } from "./nestedAction";
|
|
34
34
|
import { PanelPortal } from "./PanelPortal";
|
|
35
|
+
import { fixedContainingBlockOrigin } from "./containingBlock";
|
|
35
36
|
import {
|
|
36
37
|
contextMenuPoint,
|
|
37
38
|
placeOverTrigger,
|
|
@@ -246,39 +247,6 @@ function useKeyboardFocusIntoPanel(
|
|
|
246
247
|
}, [open, frameRef, keyboardOpenRef]);
|
|
247
248
|
}
|
|
248
249
|
|
|
249
|
-
/**
|
|
250
|
-
* Viewport origin of the box a `position: fixed` panel is laid out against.
|
|
251
|
-
* The top/left math is in viewport coordinates, which is only right while that
|
|
252
|
-
* box is the viewport. An ancestor with a transform, filter, perspective,
|
|
253
|
-
* paint containment or container query becomes the containing block instead.
|
|
254
|
-
* PanelPortal lifts the panel out of scroll views, but a panel hosted in a
|
|
255
|
-
* transformed dialog still lays out against that dialog. A `display: contents`
|
|
256
|
-
* node has no box, so its computed `contain` (Tamagui's theme span) is ignored.
|
|
257
|
-
*/
|
|
258
|
-
function fixedContainingBlockOrigin(element: HTMLElement): { top: number; left: number } {
|
|
259
|
-
for (let node = element.parentElement; node; node = node.parentElement) {
|
|
260
|
-
const cs = getComputedStyle(node);
|
|
261
|
-
if (cs.display === "contents") continue;
|
|
262
|
-
const set = (value: string | undefined, initial: string) => !!value && value !== initial;
|
|
263
|
-
const captures =
|
|
264
|
-
set(cs.transform, "none") ||
|
|
265
|
-
set(cs.perspective, "none") ||
|
|
266
|
-
set(cs.filter, "none") ||
|
|
267
|
-
set(cs.backdropFilter, "none") ||
|
|
268
|
-
set(cs.containerType, "normal") ||
|
|
269
|
-
/transform|perspective|filter/.test(cs.willChange) ||
|
|
270
|
-
/paint|layout|strict|content/.test(cs.contain);
|
|
271
|
-
if (captures) {
|
|
272
|
-
const rect = node.getBoundingClientRect();
|
|
273
|
-
return {
|
|
274
|
-
top: rect.top + node.clientTop - node.scrollTop,
|
|
275
|
-
left: rect.left + node.clientLeft - node.scrollLeft,
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
return { top: 0, left: 0 };
|
|
280
|
-
}
|
|
281
|
-
|
|
282
250
|
function isRtl(element?: HTMLElement | null): boolean {
|
|
283
251
|
if (!isWeb || typeof document === "undefined") return false;
|
|
284
252
|
const direction = element ? getComputedStyle(element).direction : "";
|
|
@@ -3,6 +3,7 @@ import { describe, expect, it } from "vitest";
|
|
|
3
3
|
import {
|
|
4
4
|
contextMenuPoint,
|
|
5
5
|
placeAtPoint,
|
|
6
|
+
placeBesideTrigger,
|
|
6
7
|
placeOverTrigger,
|
|
7
8
|
pointOpensUp,
|
|
8
9
|
pointPanelLeft,
|
|
@@ -219,3 +220,31 @@ describe("placeOverTrigger (FZ-7830, LC-112 where no sheet may take it)", () =>
|
|
|
219
220
|
expect(placed.left).toBe(10);
|
|
220
221
|
});
|
|
221
222
|
});
|
|
223
|
+
|
|
224
|
+
describe("placeBesideTrigger (FZ-7830 round 3, LC-262: beside the trigger, never over it)", () => {
|
|
225
|
+
const phone: PanelBounds = { top: 57, left: 10, right: 380, bottom: 800 };
|
|
226
|
+
const field = { x: 16, y: 300, width: 358, height: 44 };
|
|
227
|
+
|
|
228
|
+
it("opens under the trigger when it fits", () => {
|
|
229
|
+
const placed = placeBesideTrigger({ trigger: field, width: 200, height: 180, bounds: phone });
|
|
230
|
+
expect(placed).toEqual({ left: 16, top: 344, width: 358, maxHeight: 180, shifted: false });
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it("opens above the trigger when there is more room there, its bottom on the trigger's top", () => {
|
|
234
|
+
const low = { ...field, y: 700 };
|
|
235
|
+
const placed = placeBesideTrigger({ trigger: low, width: 200, height: 220, bounds: phone });
|
|
236
|
+
expect(placed.top + placed.maxHeight).toBe(700);
|
|
237
|
+
expect(placed.maxHeight).toBe(220);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it("never overlaps the trigger, scrolling what does not fit", () => {
|
|
241
|
+
for (const y of [60, 300, 500, 740]) {
|
|
242
|
+
const trigger = { ...field, y };
|
|
243
|
+
const placed = placeBesideTrigger({ trigger, width: 200, height: 2000, bounds: phone });
|
|
244
|
+
const overlaps = placed.top < y + field.height && placed.top + placed.maxHeight > y;
|
|
245
|
+
expect(overlaps, `trigger at ${y}`).toBe(false);
|
|
246
|
+
expect(placed.top).toBeGreaterThanOrEqual(phone.top);
|
|
247
|
+
expect(placed.top + placed.maxHeight).toBeLessThanOrEqual(phone.bottom);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
});
|
|
@@ -172,3 +172,33 @@ export function placeOverTrigger({
|
|
|
172
172
|
shifted: left !== wantLeft || top !== trigger.y,
|
|
173
173
|
};
|
|
174
174
|
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* A menu attached to its trigger (an icon trigger, or a short list inside a
|
|
178
|
+
* sheet, LC-262): under the trigger when it fits, above it when that side has
|
|
179
|
+
* more room, and never over it. What still does not fit scrolls.
|
|
180
|
+
*/
|
|
181
|
+
export function placeBesideTrigger({
|
|
182
|
+
trigger,
|
|
183
|
+
width,
|
|
184
|
+
height,
|
|
185
|
+
bounds,
|
|
186
|
+
rtl = false,
|
|
187
|
+
}: {
|
|
188
|
+
trigger: TriggerRect;
|
|
189
|
+
width: number;
|
|
190
|
+
height: number;
|
|
191
|
+
bounds: PanelBounds;
|
|
192
|
+
rtl?: boolean;
|
|
193
|
+
}): TriggerPlacement {
|
|
194
|
+
const room = Math.max(0, bounds.right - bounds.left);
|
|
195
|
+
const w = Math.min(Math.max(width, trigger.width), room);
|
|
196
|
+
const wantLeft = rtl ? trigger.x + trigger.width - w : trigger.x;
|
|
197
|
+
const left = Math.max(bounds.left, Math.min(wantLeft, bounds.right - w));
|
|
198
|
+
const below = Math.max(0, bounds.bottom - (trigger.y + trigger.height));
|
|
199
|
+
const above = Math.max(0, trigger.y - bounds.top);
|
|
200
|
+
const opensUp = height > below && above > below;
|
|
201
|
+
const maxHeight = Math.min(height, opensUp ? above : below);
|
|
202
|
+
const top = opensUp ? trigger.y - maxHeight : trigger.y + trigger.height;
|
|
203
|
+
return { left, top, width: w, maxHeight, shifted: left !== wantLeft || opensUp };
|
|
204
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { placeRegularPanel } from "./regularPlacement";
|
|
3
|
+
|
|
4
|
+
const bounds = { top: 20, left: 12, right: 808, bottom: 1160 };
|
|
5
|
+
const trigger = { x: 40, y: 300, width: 360, height: 44 };
|
|
6
|
+
|
|
7
|
+
describe("placeRegularPanel (FZ-8116)", () => {
|
|
8
|
+
it("covers the field from its top start corner (LC-105)", () => {
|
|
9
|
+
const p = placeRegularPanel({
|
|
10
|
+
trigger,
|
|
11
|
+
width: 200,
|
|
12
|
+
height: 240,
|
|
13
|
+
bounds,
|
|
14
|
+
widthMode: "at-least-trigger",
|
|
15
|
+
});
|
|
16
|
+
expect(p).toMatchObject({ left: 40, top: 300, width: 360, shifted: false });
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it("is the field's width for match-trigger even when the content is wider", () => {
|
|
20
|
+
const p = placeRegularPanel({
|
|
21
|
+
trigger,
|
|
22
|
+
width: 500,
|
|
23
|
+
height: 240,
|
|
24
|
+
bounds,
|
|
25
|
+
widthMode: "match-trigger",
|
|
26
|
+
});
|
|
27
|
+
expect(p.width).toBe(360);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("is the content's width for fit-content", () => {
|
|
31
|
+
const p = placeRegularPanel({
|
|
32
|
+
trigger,
|
|
33
|
+
width: 300,
|
|
34
|
+
height: 320,
|
|
35
|
+
bounds,
|
|
36
|
+
widthMode: "fit-content",
|
|
37
|
+
});
|
|
38
|
+
expect(p).toMatchObject({ left: 40, width: 300 });
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("hangs a fit-content panel from the field's end edge in RTL", () => {
|
|
42
|
+
const p = placeRegularPanel({
|
|
43
|
+
trigger,
|
|
44
|
+
width: 300,
|
|
45
|
+
height: 320,
|
|
46
|
+
bounds,
|
|
47
|
+
widthMode: "fit-content",
|
|
48
|
+
rtl: true,
|
|
49
|
+
});
|
|
50
|
+
expect(p.left).toBe(40 + 360 - 300);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("slides up inside the bounds near the bottom of the window", () => {
|
|
54
|
+
const low = { ...trigger, y: 1080 };
|
|
55
|
+
const p = placeRegularPanel({
|
|
56
|
+
trigger: low,
|
|
57
|
+
width: 360,
|
|
58
|
+
height: 300,
|
|
59
|
+
bounds,
|
|
60
|
+
widthMode: "at-least-trigger",
|
|
61
|
+
});
|
|
62
|
+
expect(p.top + 300).toBeLessThanOrEqual(bounds.bottom);
|
|
63
|
+
expect(p.shifted).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
placeOverTrigger,
|
|
3
|
+
type PanelBounds,
|
|
4
|
+
type TriggerPlacement,
|
|
5
|
+
type TriggerRect,
|
|
6
|
+
} from "./pointAnchor";
|
|
7
|
+
import type { PanelWidthMode } from "./useFloatingPanel";
|
|
8
|
+
|
|
9
|
+
/** Height of a regular-width panel whose list fills it (`sheetFill`): a search list. */
|
|
10
|
+
export const regularFillHeight = 480;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Where a FloatingPanel opens at regular width (FZ-8116): over its field, the
|
|
14
|
+
* web float's cover-trigger placement (LC-105), at the width its `widthMode`
|
|
15
|
+
* declares. `at-least-trigger` is never narrower than the field,
|
|
16
|
+
* `match-trigger` is the field's width, `fit-content` is the content's own
|
|
17
|
+
* width from the field's start edge.
|
|
18
|
+
*/
|
|
19
|
+
export function placeRegularPanel({
|
|
20
|
+
trigger,
|
|
21
|
+
width,
|
|
22
|
+
height,
|
|
23
|
+
bounds,
|
|
24
|
+
widthMode,
|
|
25
|
+
rtl = false,
|
|
26
|
+
}: {
|
|
27
|
+
trigger: TriggerRect;
|
|
28
|
+
width: number;
|
|
29
|
+
height: number;
|
|
30
|
+
bounds: PanelBounds;
|
|
31
|
+
widthMode: PanelWidthMode;
|
|
32
|
+
rtl?: boolean;
|
|
33
|
+
}): TriggerPlacement {
|
|
34
|
+
if (widthMode === "at-least-trigger") {
|
|
35
|
+
return placeOverTrigger({ trigger, width, height, bounds, rtl });
|
|
36
|
+
}
|
|
37
|
+
const w = widthMode === "match-trigger" ? trigger.width : width;
|
|
38
|
+
const box = { ...trigger, x: rtl ? trigger.x + trigger.width - w : trigger.x, width: w };
|
|
39
|
+
return placeOverTrigger({ trigger: box, width: w, height, bounds, rtl });
|
|
40
|
+
}
|
|
@@ -53,6 +53,7 @@ import { formatFieldError } from "../ErrorSummary";
|
|
|
53
53
|
import type { AnyFormApi } from "../types";
|
|
54
54
|
import { Form, FormActions } from "./index";
|
|
55
55
|
import { H3 } from "@multiplatform.one/theme";
|
|
56
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
56
57
|
|
|
57
58
|
const meta: Meta<typeof Form> = {
|
|
58
59
|
title: "Forms/Form",
|
|
@@ -95,7 +96,7 @@ export const Basic = () => (
|
|
|
95
96
|
<Input label="Username" name="username" required />
|
|
96
97
|
<Input label="Email" name="email" required />
|
|
97
98
|
<FormActions>
|
|
98
|
-
<
|
|
99
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
99
100
|
</FormActions>
|
|
100
101
|
</Form>
|
|
101
102
|
);
|
|
@@ -292,7 +293,7 @@ export const DynamicFields = () => {
|
|
|
292
293
|
})()}
|
|
293
294
|
|
|
294
295
|
<FormActions>
|
|
295
|
-
<
|
|
296
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
296
297
|
</FormActions>
|
|
297
298
|
</Form>
|
|
298
299
|
);
|
|
@@ -313,7 +314,7 @@ export const ReadOnlyAndDisabledSubmit = () => (
|
|
|
313
314
|
<Input label="Read Only" name="readOnlyField" readOnly />
|
|
314
315
|
<Input label="Disabled" name="disabledField" disabled />
|
|
315
316
|
<FormActions>
|
|
316
|
-
<
|
|
317
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
317
318
|
</FormActions>
|
|
318
319
|
</Form>
|
|
319
320
|
);
|
|
@@ -342,7 +343,7 @@ export const InputWithLinkResolver = () => (
|
|
|
342
343
|
linkResolver={(v) => (v ? (`/items/${String(v)}` as any) : null)}
|
|
343
344
|
/>
|
|
344
345
|
<FormActions>
|
|
345
|
-
<
|
|
346
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
346
347
|
</FormActions>
|
|
347
348
|
</Form>
|
|
348
349
|
);
|
|
@@ -999,7 +1000,7 @@ export const Layout = () => (
|
|
|
999
1000
|
</FormSection>
|
|
1000
1001
|
</FormSectionStack>
|
|
1001
1002
|
<FormActions>
|
|
1002
|
-
<
|
|
1003
|
+
<ActionButton kind="save" formAction="submit" />
|
|
1003
1004
|
</FormActions>
|
|
1004
1005
|
</Form>
|
|
1005
1006
|
);
|
|
@@ -86,17 +86,17 @@ describe("Forms/ErrorSummary stories", () => {
|
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
it("FocusesTheFieldOnPress starts clean and raises the summary on submit", () => {
|
|
89
|
-
const { container,
|
|
89
|
+
const { container, getByRole } = mount(FocusesTheFieldOnPress as StoryLike);
|
|
90
90
|
expect(container.querySelector("[data-testid='error-summary']")).toBeNull();
|
|
91
|
-
fireEvent.click(
|
|
91
|
+
fireEvent.click(getByRole("button", { name: "Submit" }));
|
|
92
92
|
const summary = container.querySelector("[data-testid='error-summary']");
|
|
93
93
|
expect(summary).toBeTruthy();
|
|
94
94
|
expect(container.querySelectorAll("a").length).toBe(2);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
it("FocusesTheFieldOnPress links target the ids its fields actually carry", () => {
|
|
98
|
-
const { container,
|
|
99
|
-
fireEvent.click(
|
|
98
|
+
const { container, getByRole } = mount(FocusesTheFieldOnPress as StoryLike);
|
|
99
|
+
fireEvent.click(getByRole("button", { name: "Submit" }));
|
|
100
100
|
const hrefs = Array.from(container.querySelectorAll("a")).map((a) => a.getAttribute("href"));
|
|
101
101
|
expect(hrefs).toEqual(["#email", "#password"]);
|
|
102
102
|
expect(container.querySelector("#email")).toBeTruthy();
|
|
@@ -2,7 +2,8 @@ import { Camera, CameraView, useCameraPermissions } from "expo-camera";
|
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import { StyleSheet } from "react-native";
|
|
4
4
|
import { Text, View, XStack, YStack } from "tamagui";
|
|
5
|
-
import { Button } from "../../Button";
|
|
5
|
+
import { Button, IconButton } from "../../Button";
|
|
6
|
+
import { standardActions } from "../../standardActions";
|
|
6
7
|
import { formCommonColors, formInputColors } from "../../shared/colorRamps";
|
|
7
8
|
import { t } from "../../shared/t";
|
|
8
9
|
import type { BarcodeScannerProps, CameraPreflightResult } from "./scannerTypes";
|
|
@@ -95,8 +96,8 @@ export function BarcodeScanner({
|
|
|
95
96
|
{t("Camera permission denied. Please allow camera access.")}
|
|
96
97
|
</Text>
|
|
97
98
|
<XStack gap="$2">
|
|
98
|
-
<
|
|
99
|
-
|
|
99
|
+
<IconButton
|
|
100
|
+
icon={standardActions.retry.icon}
|
|
100
101
|
onPress={() => {
|
|
101
102
|
setDenied(false);
|
|
102
103
|
requestPermission().then((res) => {
|
|
@@ -104,12 +105,12 @@ export function BarcodeScanner({
|
|
|
104
105
|
});
|
|
105
106
|
}}
|
|
106
107
|
aria-label={t("Retry camera")}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
{t("Close")}
|
|
112
|
-
|
|
108
|
+
/>
|
|
109
|
+
<IconButton
|
|
110
|
+
icon={standardActions.close.icon}
|
|
111
|
+
onPress={onClose}
|
|
112
|
+
aria-label={t("Close scanner")}
|
|
113
|
+
/>
|
|
113
114
|
</XStack>
|
|
114
115
|
</YStack>
|
|
115
116
|
) : !permission?.granted ? (
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef, useState } from "react";
|
|
2
2
|
import { Text, View, XStack, YStack, isWeb } from "tamagui";
|
|
3
|
-
import { Button } from "../../Button";
|
|
3
|
+
import { Button, IconButton } from "../../Button";
|
|
4
|
+
import { standardActions } from "../../standardActions";
|
|
4
5
|
import { queryPermissionState } from "../../shared/capabilityPreflight";
|
|
5
6
|
import { formCommonColors, formInputColors } from "../../shared/colorRamps";
|
|
6
7
|
import { t } from "../../shared/t";
|
|
@@ -173,16 +174,16 @@ export function BarcodeScanner({
|
|
|
173
174
|
{errorMessage}
|
|
174
175
|
</Text>
|
|
175
176
|
<XStack gap="$2">
|
|
176
|
-
<
|
|
177
|
-
|
|
177
|
+
<IconButton
|
|
178
|
+
icon={standardActions.retry.icon}
|
|
178
179
|
onPress={() => setAttempt((a) => a + 1)}
|
|
179
180
|
aria-label={t("Retry camera")}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
{t("Close")}
|
|
185
|
-
|
|
181
|
+
/>
|
|
182
|
+
<IconButton
|
|
183
|
+
icon={standardActions.close.icon}
|
|
184
|
+
onPress={onClose}
|
|
185
|
+
aria-label={t("Close scanner")}
|
|
186
|
+
/>
|
|
186
187
|
</XStack>
|
|
187
188
|
</YStack>
|
|
188
189
|
) : (
|
|
@@ -6,10 +6,10 @@ import { useForm } from "@tanstack/react-form";
|
|
|
6
6
|
import { useState } from "react";
|
|
7
7
|
import { Checkbox as TamaguiCheckbox, XStack, YStack } from "tamagui";
|
|
8
8
|
import { Label } from "../../Label";
|
|
9
|
-
import { Button } from "../../Button";
|
|
10
9
|
import { Form } from "../../Form";
|
|
11
10
|
import { Checkbox, Checkboxes, CheckboxGroup } from "./index";
|
|
12
11
|
import { Paragraph } from "@multiplatform.one/theme";
|
|
12
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
13
13
|
|
|
14
14
|
const meta: Meta<typeof Checkbox> = {
|
|
15
15
|
title: "Forms/Checkbox",
|
|
@@ -54,7 +54,7 @@ export const Main: Story = {
|
|
|
54
54
|
validators={{ onChange: ({ value }) => (!value ? "Terms are required" : undefined) }}
|
|
55
55
|
/>
|
|
56
56
|
<Checkbox label="Subscribe to newsletter" name="newsletter" />
|
|
57
|
-
<
|
|
57
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
58
58
|
</Form>
|
|
59
59
|
);
|
|
60
60
|
};
|
|
@@ -274,7 +274,7 @@ export const CheckboxGroupWithForm: StoryObj = {
|
|
|
274
274
|
helperText="Select required permissions"
|
|
275
275
|
required
|
|
276
276
|
/>
|
|
277
|
-
<
|
|
277
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
278
278
|
</YStack>
|
|
279
279
|
</Form>
|
|
280
280
|
);
|
|
@@ -3,9 +3,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
3
3
|
import { Preset, Paragraph } from "@multiplatform.one/theme";
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { YStack } from "tamagui";
|
|
6
|
-
import { Button } from "../../Button";
|
|
7
6
|
import { Form } from "../../Form";
|
|
8
7
|
import { CheckboxGroup } from "./CheckboxGroup";
|
|
8
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
9
9
|
|
|
10
10
|
const meta: Meta<typeof CheckboxGroup> = {
|
|
11
11
|
title: "Forms/CheckboxGroup",
|
|
@@ -255,7 +255,7 @@ export const RequiredForm: Story = {
|
|
|
255
255
|
]}
|
|
256
256
|
helperText="Submit empty to trigger required error"
|
|
257
257
|
/>
|
|
258
|
-
<
|
|
258
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
259
259
|
</YStack>
|
|
260
260
|
</Form>
|
|
261
261
|
);
|