@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
|
@@ -4,9 +4,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { YStack } from "tamagui";
|
|
7
|
-
import { Button } from "../../Button";
|
|
8
7
|
import { Form } from "../../Form";
|
|
9
8
|
import { ColorPicker } from "./index";
|
|
9
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
10
10
|
|
|
11
11
|
const meta: Meta<typeof ColorPicker> = {
|
|
12
12
|
title: "Forms/ColorPicker",
|
|
@@ -69,7 +69,7 @@ export const Main: Story = {
|
|
|
69
69
|
helperText="Choose background color"
|
|
70
70
|
/>
|
|
71
71
|
<ColorPicker label="Text Color" name="textColor" helperText="Choose text color" />
|
|
72
|
-
<
|
|
72
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
73
73
|
</YStack>
|
|
74
74
|
</Form>
|
|
75
75
|
);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FZ-8116 (LC-266): on native the Link picker (Combobox) takes the window's
|
|
3
|
+
* size class like Select and ColorPicker do. At regular width (an iPad) it
|
|
4
|
+
* opens over its field with its search inside; at compact width (iPhone,
|
|
5
|
+
* Slide Over) it keeps the bottom sheet.
|
|
6
|
+
*/
|
|
7
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
8
|
+
import { act } from "@testing-library/react";
|
|
9
|
+
import type { ReactNode } from "react";
|
|
10
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
11
|
+
import { authorOptions } from "./authorOptions";
|
|
12
|
+
import { Combobox } from "./index";
|
|
13
|
+
|
|
14
|
+
const screen = vi.hoisted(() => ({ width: 820, height: 1180 }));
|
|
15
|
+
const sheetProps = vi.hoisted(() => [] as unknown[]);
|
|
16
|
+
|
|
17
|
+
vi.mock("tamagui", async (importOriginal) => ({
|
|
18
|
+
...(await importOriginal<typeof import("tamagui")>()),
|
|
19
|
+
isWeb: false,
|
|
20
|
+
}));
|
|
21
|
+
vi.mock("react-native-web", async (importOriginal) => ({
|
|
22
|
+
...(await importOriginal<typeof import("react-native")>()),
|
|
23
|
+
ActionSheetIOS: undefined,
|
|
24
|
+
Modal: ({ children, visible }: { children: ReactNode; visible: boolean }) =>
|
|
25
|
+
visible ? children : null,
|
|
26
|
+
useWindowDimensions: () => ({ ...screen, scale: 2, fontScale: 1 }),
|
|
27
|
+
}));
|
|
28
|
+
vi.mock("../../FloatingPanel", async (importOriginal) => {
|
|
29
|
+
const actual = await importOriginal<typeof import("../../FloatingPanel")>();
|
|
30
|
+
const native = await import("../../FloatingPanel/index.native");
|
|
31
|
+
return {
|
|
32
|
+
...actual,
|
|
33
|
+
FloatingPanel: (props: Parameters<typeof native.FloatingPanel>[0]) => {
|
|
34
|
+
sheetProps.push(props.sheet);
|
|
35
|
+
return <native.FloatingPanel {...props} />;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
vi.useFakeTimers();
|
|
42
|
+
sheetProps.length = 0;
|
|
43
|
+
});
|
|
44
|
+
afterEach(() => {
|
|
45
|
+
vi.restoreAllMocks();
|
|
46
|
+
vi.useRealTimers();
|
|
47
|
+
screen.width = 820;
|
|
48
|
+
screen.height = 1180;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
function tap(target: Element) {
|
|
52
|
+
act(() => {
|
|
53
|
+
target.dispatchEvent(new MouseEvent("mousedown", { bubbles: true, button: 0 }));
|
|
54
|
+
target.dispatchEvent(new MouseEvent("mouseup", { bubbles: true, button: 0 }));
|
|
55
|
+
target.dispatchEvent(new MouseEvent("click", { bubbles: true, button: 0 }));
|
|
56
|
+
});
|
|
57
|
+
act(() => {
|
|
58
|
+
vi.advanceTimersByTime(1);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function open() {
|
|
63
|
+
const view = renderWithProviders(<Combobox options={authorOptions} aria-label="Author" />);
|
|
64
|
+
tap(view.getByRole("button", { name: "Author" }));
|
|
65
|
+
return view;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const regular = () => document.querySelector('[data-testid="floating-panel-regular"]');
|
|
69
|
+
const sheet = () => document.querySelector('[data-testid="floating-panel-sheet"]');
|
|
70
|
+
|
|
71
|
+
describe("Combobox native at regular width (FZ-8116)", () => {
|
|
72
|
+
it("leaves the overlay form to the size class instead of forcing the sheet", () => {
|
|
73
|
+
renderWithProviders(<Combobox options={authorOptions} aria-label="Author" />);
|
|
74
|
+
expect(sheetProps.length).toBeGreaterThan(0);
|
|
75
|
+
expect(sheetProps.every((value) => value !== true)).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("opens over its field on an iPad-wide window", () => {
|
|
79
|
+
open();
|
|
80
|
+
expect(regular()).not.toBeNull();
|
|
81
|
+
expect(sheet()).toBeNull();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it.each([
|
|
85
|
+
["an iPhone", 390, 844],
|
|
86
|
+
["iPad Slide Over", 320, 1180],
|
|
87
|
+
])("keeps the bottom sheet on %s", (_name, width, height) => {
|
|
88
|
+
screen.width = width;
|
|
89
|
+
screen.height = height;
|
|
90
|
+
open();
|
|
91
|
+
expect(regular()).toBeNull();
|
|
92
|
+
expect(sheet()).not.toBeNull();
|
|
93
|
+
});
|
|
94
|
+
});
|
|
@@ -4,11 +4,11 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { XStack, YStack } from "tamagui";
|
|
7
|
-
import { Button } from "../../Button";
|
|
8
7
|
import { Form } from "../../Form";
|
|
9
8
|
import { Combobox, type ComboboxOption } from "./index";
|
|
10
9
|
import { authorOptions } from "./authorOptions";
|
|
11
10
|
import { Text } from "@multiplatform.one/theme";
|
|
11
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
12
12
|
|
|
13
13
|
const meta: Meta<typeof Combobox> = {
|
|
14
14
|
title: "Forms/Combobox",
|
|
@@ -117,7 +117,7 @@ export const Main: StoryObj<typeof Combobox> = {
|
|
|
117
117
|
searchPlaceholder="Type to search..."
|
|
118
118
|
/>
|
|
119
119
|
|
|
120
|
-
<
|
|
120
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
121
121
|
</YStack>
|
|
122
122
|
</Form>
|
|
123
123
|
);
|
|
@@ -2509,7 +2509,9 @@ function NativeComboboxCore({
|
|
|
2509
2509
|
<FloatingPanel
|
|
2510
2510
|
open={open}
|
|
2511
2511
|
onOpenChange={handleOpenChange}
|
|
2512
|
-
sheet
|
|
2512
|
+
// Native leaves the form to the window's size class (FZ-8116): a sheet
|
|
2513
|
+
// when compact, a panel over the field at regular width.
|
|
2514
|
+
sheet={isWeb}
|
|
2513
2515
|
// Search-driven comboboxes open the sheet tall: results stream in as
|
|
2514
2516
|
// the user types, so a content-fit sheet would open as a sliver.
|
|
2515
2517
|
sheetFill={Boolean(onSearch)}
|
|
@@ -14,6 +14,7 @@ import { MonthPicker } from "./MonthPicker";
|
|
|
14
14
|
import { MultiDatePicker } from "./MultiDatePicker";
|
|
15
15
|
import { DatePicker } from "./index";
|
|
16
16
|
import { formatCalendarDate, Text } from "@multiplatform.one/theme";
|
|
17
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
17
18
|
import { TimePicker } from "../TimePicker";
|
|
18
19
|
|
|
19
20
|
const meta: Meta<typeof DatePicker> = {
|
|
@@ -86,7 +87,7 @@ export const Main: Story = {
|
|
|
86
87
|
name={"endDate" as any}
|
|
87
88
|
helperText="Select project end date"
|
|
88
89
|
/>
|
|
89
|
-
<
|
|
90
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
90
91
|
</YStack>
|
|
91
92
|
</Form>
|
|
92
93
|
);
|
|
@@ -4,10 +4,10 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { YStack } from "tamagui";
|
|
7
|
-
import { Button } from "../../Button";
|
|
8
7
|
import { Form } from "../../Form";
|
|
9
8
|
import { DateRangePicker } from "./DateRangePicker";
|
|
10
9
|
import { Text } from "@multiplatform.one/theme";
|
|
10
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
11
11
|
|
|
12
12
|
const meta: Meta<typeof DateRangePicker> = {
|
|
13
13
|
title: "Forms/DateRangePicker",
|
|
@@ -103,7 +103,7 @@ export const FormBound: Story = {
|
|
|
103
103
|
<FormSubscribe selector={(s: any) => [s.values.range]}>
|
|
104
104
|
{([range]: any[]) => <Text>{`form-value:${JSON.stringify(range)}`}</Text>}
|
|
105
105
|
</FormSubscribe>
|
|
106
|
-
<
|
|
106
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
107
107
|
</YStack>
|
|
108
108
|
</Form>
|
|
109
109
|
);
|
|
@@ -8,6 +8,7 @@ import { Button } from "../../Button";
|
|
|
8
8
|
import { Form } from "../../Form";
|
|
9
9
|
import { DatetimePicker } from "./DatetimePicker";
|
|
10
10
|
import { Text } from "@multiplatform.one/theme";
|
|
11
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
11
12
|
|
|
12
13
|
const meta: Meta<typeof DatetimePicker> = {
|
|
13
14
|
title: "Forms/DatetimePicker",
|
|
@@ -170,7 +171,7 @@ export const FormBound: Story = {
|
|
|
170
171
|
</Text>
|
|
171
172
|
)}
|
|
172
173
|
</FormSubscribe>
|
|
173
|
-
<
|
|
174
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
174
175
|
</YStack>
|
|
175
176
|
</Form>
|
|
176
177
|
);
|
|
@@ -2,10 +2,10 @@ import { action } from "@multiplatform.one/storybook";
|
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
3
|
import { useForm } from "@tanstack/react-form";
|
|
4
4
|
import { YStack } from "tamagui";
|
|
5
|
-
import { Button } from "../../Button";
|
|
6
5
|
import { Form } from "../../Form";
|
|
7
6
|
import { MonthPicker } from "./MonthPicker";
|
|
8
7
|
import { Text } from "@multiplatform.one/theme";
|
|
8
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
9
9
|
|
|
10
10
|
const meta: Meta<typeof MonthPicker> = {
|
|
11
11
|
title: "Forms/MonthPicker",
|
|
@@ -104,7 +104,7 @@ export const FormBound: Story = {
|
|
|
104
104
|
<FormSubscribe selector={(s: any) => [s.values.period]}>
|
|
105
105
|
{([period]: any[]) => <Text>{`form-value:${JSON.stringify(period)}`}</Text>}
|
|
106
106
|
</FormSubscribe>
|
|
107
|
-
<
|
|
107
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
108
108
|
</YStack>
|
|
109
109
|
</Form>
|
|
110
110
|
);
|
|
@@ -4,10 +4,10 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { YStack } from "tamagui";
|
|
7
|
-
import { Button } from "../../Button";
|
|
8
7
|
import { Form } from "../../Form";
|
|
9
8
|
import { MultiDatePicker } from "./MultiDatePicker";
|
|
10
9
|
import { Text } from "@multiplatform.one/theme";
|
|
10
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
11
11
|
|
|
12
12
|
const meta: Meta<typeof MultiDatePicker> = {
|
|
13
13
|
title: "Forms/MultiDatePicker",
|
|
@@ -115,7 +115,7 @@ export const FormBound: Story = {
|
|
|
115
115
|
</Text>
|
|
116
116
|
)}
|
|
117
117
|
</FormSubscribe>
|
|
118
|
-
<
|
|
118
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
119
119
|
</YStack>
|
|
120
120
|
</Form>
|
|
121
121
|
);
|
|
@@ -67,7 +67,12 @@ describe("FileUpload", () => {
|
|
|
67
67
|
const result = renderWithProviders(
|
|
68
68
|
<FileUpload existing={{ src: "/files/sprite.png" }} onExistingRemove={remove} />,
|
|
69
69
|
);
|
|
70
|
-
|
|
70
|
+
// LC-260: Replace and Remove are glyphs on the media plate over the image.
|
|
71
|
+
const actions = result.container.querySelector('[data-file-upload="preview-actions"]');
|
|
72
|
+
expect(
|
|
73
|
+
actions?.querySelector('[aria-label="Replace"]')?.getAttribute("data-mp-icon-button"),
|
|
74
|
+
).toBe("media");
|
|
75
|
+
expect(result.container.textContent).not.toContain("Replace");
|
|
71
76
|
expect(result.container.textContent).not.toContain("Choose File");
|
|
72
77
|
expect(result.container.textContent).not.toContain("Drag a file");
|
|
73
78
|
expect(result.container.querySelector('[data-file-upload="preview"] img')).toBeTruthy();
|
|
@@ -344,7 +349,7 @@ describe("FileUpload bento-derived dropzone (MPO-57)", () => {
|
|
|
344
349
|
expect(zone.textContent).toContain("Drag a file into this area");
|
|
345
350
|
});
|
|
346
351
|
|
|
347
|
-
it("renders picked files as in-zone rows: name, bold size line,
|
|
352
|
+
it("renders picked files as in-zone rows: name, bold size line, bare ✕ remove (29 painted, hitSlop 44)", async () => {
|
|
348
353
|
const { container } = renderWithHouseThemes(
|
|
349
354
|
<FileUpload label="Attachment" name="attachment" multiple />,
|
|
350
355
|
);
|
|
@@ -367,14 +372,14 @@ describe("FileUpload bento-derived dropzone (MPO-57)", () => {
|
|
|
367
372
|
expect(sizeLine).toBeTruthy();
|
|
368
373
|
expect(sizeLine.className).toMatch(/_fow-700/);
|
|
369
374
|
|
|
370
|
-
// Remove:
|
|
371
|
-
// with hitSlop restoring the 44 floor (data-mp-press-slop 8 →
|
|
375
|
+
// Remove: LC-176's bare ✕, no fill or border, painted at nestedControl
|
|
376
|
+
// (29) with hitSlop restoring the 44 floor (data-mp-press-slop 8 → 45).
|
|
377
|
+
// The filled $color12 disc it replaced read as a plate on plain content.
|
|
372
378
|
const remove = flist.querySelector('[aria-label="Remove hello.txt"]') as HTMLElement;
|
|
373
379
|
expect(remove).toBeTruthy();
|
|
374
380
|
expect(remove.getAttribute("data-nested-px")).toBe("29");
|
|
375
381
|
expect(remove.getAttribute("data-mp-press-slop")).toBe("8");
|
|
376
|
-
expect(remove.className).toMatch(/_bg-color12/);
|
|
377
|
-
// The inverse ✕ rides inside the disc.
|
|
382
|
+
expect(remove.className).not.toMatch(/_bg-color12/);
|
|
378
383
|
expect(remove.querySelector("svg")).toBeTruthy();
|
|
379
384
|
// The caption is dropped once files exist; the CTA stays.
|
|
380
385
|
expect(zone.textContent).not.toContain("Drag a file into this area");
|
|
@@ -4,9 +4,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { useEffect, useRef, useState } from "react";
|
|
6
6
|
import { YStack } from "tamagui";
|
|
7
|
-
import { Button } from "../../Button";
|
|
8
7
|
import { Form } from "../../Form";
|
|
9
8
|
import { FileUpload } from "./index";
|
|
9
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
10
10
|
|
|
11
11
|
const meta: Meta<typeof FileUpload> = {
|
|
12
12
|
title: "Forms/FileUpload",
|
|
@@ -80,7 +80,7 @@ export const Main: Story = {
|
|
|
80
80
|
helperText: "Upload multiple files",
|
|
81
81
|
} as any)}
|
|
82
82
|
/>
|
|
83
|
-
<
|
|
83
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
84
84
|
</YStack>
|
|
85
85
|
</Form>
|
|
86
86
|
);
|
|
@@ -5,7 +5,8 @@ import type { DeepKeys, DeepValue } from "@tanstack/form-core";
|
|
|
5
5
|
import { type DragEvent, type ReactNode, useCallback, useEffect, useRef, useState } from "react";
|
|
6
6
|
import { useMedia, useProps, type SizeTokens } from "tamagui";
|
|
7
7
|
import { Image, isWeb, Text, XStack, YStack, styled } from "tamagui";
|
|
8
|
-
import { Button } from "../../Button";
|
|
8
|
+
import { Button, IconButton } from "../../Button";
|
|
9
|
+
import { standardActions } from "../../standardActions";
|
|
9
10
|
import { Field, FieldLayout } from "../../fieldLayout";
|
|
10
11
|
import { Skeleton } from "../../Skeleton";
|
|
11
12
|
import {
|
|
@@ -756,25 +757,16 @@ export function FileUpload<
|
|
|
756
757
|
const existingName = existing?.name || fileNameFromSrc(existing?.src ?? "");
|
|
757
758
|
const hasRows = selectedFiles.length > 0 || transfers.length > 0 || showExisting;
|
|
758
759
|
|
|
759
|
-
|
|
760
|
+
// LC-176 ICON-BUTTON: a row's remove is a bare ✕; on an image tile it
|
|
761
|
+
// floats over the picture on the media plate. Painted at nestedControl with
|
|
762
|
+
// hitSlop restoring the 44 floor via `nested` (held exception).
|
|
763
|
+
const renderRemoveDisc = (ariaLabel: string, onPress: () => void, overMedia = false) =>
|
|
760
764
|
canInteract ? (
|
|
761
765
|
<Button
|
|
762
|
-
// Bento remove: a filled $color12 disc with the inverse
|
|
763
|
-
// ✕ — painted at nestedControl (32) with hitSlop
|
|
764
|
-
// restoring the 44 floor via `nested` (held exception);
|
|
765
|
-
// the nested icon step lands the board's 14px ✕.
|
|
766
766
|
nested
|
|
767
|
-
|
|
767
|
+
{...(overMedia ? { plate: "media" as const } : undefined)}
|
|
768
768
|
icon={XIcon}
|
|
769
769
|
aria-label={ariaLabel}
|
|
770
|
-
backgroundColor={formDropzoneColors.removeDisc.background.base}
|
|
771
|
-
color={formDropzoneColors.removeDisc.ink}
|
|
772
|
-
hoverStyle={{
|
|
773
|
-
backgroundColor: formDropzoneColors.removeDisc.background.hover,
|
|
774
|
-
}}
|
|
775
|
-
pressStyle={{
|
|
776
|
-
backgroundColor: formDropzoneColors.removeDisc.background.press,
|
|
777
|
-
}}
|
|
778
770
|
onPress={(e) => {
|
|
779
771
|
e.stopPropagation();
|
|
780
772
|
onPress();
|
|
@@ -782,6 +774,61 @@ export function FileUpload<
|
|
|
782
774
|
/>
|
|
783
775
|
) : null;
|
|
784
776
|
|
|
777
|
+
// LC-260 ICONS-OVER-WORDS: the preview's Replace and Remove are their
|
|
778
|
+
// symbols; over an image they float at its top-right on the LC-176 media
|
|
779
|
+
// plate. While replacing, the one ✕ backs out of the source choices.
|
|
780
|
+
const previewActions = (overMedia: boolean, onValueChange?: (nextValue: TData) => void) => {
|
|
781
|
+
const plate = overMedia ? { plate: "media" as const } : undefined;
|
|
782
|
+
const stop = (event: { stopPropagation: () => void }) => event.stopPropagation();
|
|
783
|
+
if (replacing)
|
|
784
|
+
return (
|
|
785
|
+
<IconButton
|
|
786
|
+
{...plate}
|
|
787
|
+
icon={standardActions.cancel.icon}
|
|
788
|
+
aria-label={t("Cancel replacement")}
|
|
789
|
+
aria-expanded
|
|
790
|
+
onPress={(event) => {
|
|
791
|
+
stop(event);
|
|
792
|
+
transfersRef.current.forEach((item) => item.controller.abort());
|
|
793
|
+
setTransfersAndRef(() => []);
|
|
794
|
+
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
795
|
+
if (isWeb)
|
|
796
|
+
replaceRef.current?.querySelector<HTMLElement>('button, [role="button"]')?.focus();
|
|
797
|
+
setReplacing(false);
|
|
798
|
+
}}
|
|
799
|
+
/>
|
|
800
|
+
);
|
|
801
|
+
return (
|
|
802
|
+
<>
|
|
803
|
+
<IconButton
|
|
804
|
+
{...plate}
|
|
805
|
+
icon={standardActions.replace.icon}
|
|
806
|
+
aria-label={t("Replace")}
|
|
807
|
+
aria-expanded={false}
|
|
808
|
+
onPress={(event) => {
|
|
809
|
+
stop(event);
|
|
810
|
+
setReplacing(true);
|
|
811
|
+
}}
|
|
812
|
+
/>
|
|
813
|
+
{singleFile || onExistingRemove ? (
|
|
814
|
+
<IconButton
|
|
815
|
+
{...plate}
|
|
816
|
+
icon={standardActions.remove.icon}
|
|
817
|
+
aria-label={t("Remove {{name}}", { name: singleFile?.name ?? existingName })}
|
|
818
|
+
onPress={(event) => {
|
|
819
|
+
stop(event);
|
|
820
|
+
transfersRef.current.forEach((item) => item.controller.abort());
|
|
821
|
+
setTransfersAndRef(() => []);
|
|
822
|
+
if (singleFile) handleFileRemove(singleFile, onValueChange);
|
|
823
|
+
else onExistingRemove?.();
|
|
824
|
+
setReplacing(false);
|
|
825
|
+
}}
|
|
826
|
+
/>
|
|
827
|
+
) : null}
|
|
828
|
+
</>
|
|
829
|
+
);
|
|
830
|
+
};
|
|
831
|
+
|
|
785
832
|
const renderFileMeta = (file: File, preview: string | null, extra?: ReactNode) => (
|
|
786
833
|
<XStack flex={1} gap="$2" alignItems="center">
|
|
787
834
|
{preview ? (
|
|
@@ -846,8 +893,10 @@ export function FileUpload<
|
|
|
846
893
|
right={tileRemoveInset}
|
|
847
894
|
zIndex={1}
|
|
848
895
|
>
|
|
849
|
-
{renderRemoveDisc(
|
|
850
|
-
|
|
896
|
+
{renderRemoveDisc(
|
|
897
|
+
t("Remove {{name}}", { name: file.name }),
|
|
898
|
+
() => handleFileRemove(file, onValueChange),
|
|
899
|
+
true,
|
|
851
900
|
)}
|
|
852
901
|
</YStack>
|
|
853
902
|
) : null}
|
|
@@ -1016,22 +1065,37 @@ export function FileUpload<
|
|
|
1016
1065
|
width="100%"
|
|
1017
1066
|
>
|
|
1018
1067
|
{singlePreview ? (
|
|
1019
|
-
<
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1068
|
+
<YStack position="relative" maxWidth="100%">
|
|
1069
|
+
<Image
|
|
1070
|
+
src={singlePreview}
|
|
1071
|
+
alt={singleFile?.name ?? existingName}
|
|
1072
|
+
width="$14"
|
|
1073
|
+
height="$14"
|
|
1074
|
+
maxWidth="100%"
|
|
1075
|
+
objectFit="contain"
|
|
1076
|
+
onLoad={(event) => {
|
|
1077
|
+
if (!isWeb) return;
|
|
1078
|
+
const image = event.currentTarget as unknown as HTMLImageElement;
|
|
1079
|
+
setPixelated(image.naturalWidth > 0 && image.naturalWidth < image.width);
|
|
1080
|
+
}}
|
|
1081
|
+
{...(isWeb && pixelated
|
|
1082
|
+
? { style: { imageRendering: "pixelated" } as any }
|
|
1083
|
+
: {})}
|
|
1084
|
+
/>
|
|
1085
|
+
{canInteract ? (
|
|
1086
|
+
<XStack
|
|
1087
|
+
ref={replaceRef as any}
|
|
1088
|
+
data-file-upload="preview-actions"
|
|
1089
|
+
position="absolute"
|
|
1090
|
+
top={-tileRemoveInset}
|
|
1091
|
+
right={-tileRemoveInset}
|
|
1092
|
+
zIndex={1}
|
|
1093
|
+
{...knobProps.gap}
|
|
1094
|
+
>
|
|
1095
|
+
{previewActions(true, onValueChange)}
|
|
1096
|
+
</XStack>
|
|
1097
|
+
) : null}
|
|
1098
|
+
</YStack>
|
|
1035
1099
|
) : (
|
|
1036
1100
|
<YStack alignItems="center" {...knobProps.gap}>
|
|
1037
1101
|
<FileIcon size={rowGlyphSize} />
|
|
@@ -1041,50 +1105,9 @@ export function FileUpload<
|
|
|
1041
1105
|
</YStack>
|
|
1042
1106
|
)}
|
|
1043
1107
|
</YStack>
|
|
1044
|
-
{canInteract ? (
|
|
1045
|
-
<XStack
|
|
1046
|
-
|
|
1047
|
-
{...knobProps.gap}
|
|
1048
|
-
justifyContent="center"
|
|
1049
|
-
flexWrap="wrap"
|
|
1050
|
-
>
|
|
1051
|
-
<Button
|
|
1052
|
-
size={knobProps.sizeToken}
|
|
1053
|
-
aria-label={replacing ? t("Cancel replacement") : t("Replace")}
|
|
1054
|
-
aria-expanded={replacing}
|
|
1055
|
-
onPress={(event) => {
|
|
1056
|
-
event.stopPropagation();
|
|
1057
|
-
if (replacing) {
|
|
1058
|
-
transfersRef.current.forEach((item) => item.controller.abort());
|
|
1059
|
-
setTransfersAndRef(() => []);
|
|
1060
|
-
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
1061
|
-
if (isWeb)
|
|
1062
|
-
replaceRef.current
|
|
1063
|
-
?.querySelector<HTMLElement>('button, [role="button"]')
|
|
1064
|
-
?.focus();
|
|
1065
|
-
}
|
|
1066
|
-
setReplacing(!replacing);
|
|
1067
|
-
}}
|
|
1068
|
-
>
|
|
1069
|
-
{replacing ? t("Cancel") : t("Replace")}
|
|
1070
|
-
</Button>
|
|
1071
|
-
{singleFile || onExistingRemove ? (
|
|
1072
|
-
<Button
|
|
1073
|
-
size={knobProps.sizeToken}
|
|
1074
|
-
outlined
|
|
1075
|
-
aria-label={t("Remove {{name}}", { name: singleFile?.name ?? existingName })}
|
|
1076
|
-
onPress={(event) => {
|
|
1077
|
-
event.stopPropagation();
|
|
1078
|
-
transfersRef.current.forEach((item) => item.controller.abort());
|
|
1079
|
-
setTransfersAndRef(() => []);
|
|
1080
|
-
if (singleFile) handleFileRemove(singleFile, onValueChange);
|
|
1081
|
-
else onExistingRemove?.();
|
|
1082
|
-
setReplacing(false);
|
|
1083
|
-
}}
|
|
1084
|
-
>
|
|
1085
|
-
{t("Remove")}
|
|
1086
|
-
</Button>
|
|
1087
|
-
) : null}
|
|
1108
|
+
{canInteract && !singlePreview ? (
|
|
1109
|
+
<XStack ref={replaceRef as any} {...knobProps.gap} justifyContent="center">
|
|
1110
|
+
{previewActions(false, onValueChange)}
|
|
1088
1111
|
</XStack>
|
|
1089
1112
|
) : null}
|
|
1090
1113
|
</YStack>
|
|
@@ -1175,6 +1198,7 @@ export function FileUpload<
|
|
|
1175
1198
|
{renderRemoveDisc(
|
|
1176
1199
|
t("Remove {{name}}", { name: existingName }),
|
|
1177
1200
|
onExistingRemove,
|
|
1201
|
+
true,
|
|
1178
1202
|
)}
|
|
1179
1203
|
</YStack>
|
|
1180
1204
|
) : null}
|
|
@@ -15,7 +15,8 @@ import { useCallback, useEffect, useId, useRef, useState } from "react";
|
|
|
15
15
|
import type { LabelProps, SizeTokens } from "tamagui";
|
|
16
16
|
import { ScrollView, Spinner, Text as TamaguiText, View, XStack, YStack, isWeb } from "tamagui";
|
|
17
17
|
import { AdaptivePopup } from "../../AdaptivePopup";
|
|
18
|
-
import { Button } from "../../Button";
|
|
18
|
+
import { Button, IconButton } from "../../Button";
|
|
19
|
+
import { standardActions } from "../../standardActions";
|
|
19
20
|
import { Field, FieldLayout } from "../../fieldLayout";
|
|
20
21
|
import { FloatingPanel, useViewportGtSm } from "../../FloatingPanel";
|
|
21
22
|
import { Input as InputParts } from "../../InputParts";
|
|
@@ -699,12 +700,16 @@ function GeoMapSurface({
|
|
|
699
700
|
{locateError}
|
|
700
701
|
</TamaguiText>
|
|
701
702
|
<XStack gap="$2">
|
|
702
|
-
<
|
|
703
|
-
{
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
703
|
+
<IconButton
|
|
704
|
+
icon={standardActions.retry.icon}
|
|
705
|
+
onPress={onRetryLocate}
|
|
706
|
+
aria-label={t("Retry location")}
|
|
707
|
+
/>
|
|
708
|
+
<IconButton
|
|
709
|
+
icon={standardActions.close.icon}
|
|
710
|
+
onPress={onCloseLocate}
|
|
711
|
+
aria-label={t("Close location")}
|
|
712
|
+
/>
|
|
708
713
|
</XStack>
|
|
709
714
|
</YStack>
|
|
710
715
|
) : null}
|
|
@@ -106,7 +106,7 @@ describe("ImageField", () => {
|
|
|
106
106
|
if (img) fireEvent.error(img);
|
|
107
107
|
});
|
|
108
108
|
expect(result.findTextElement("Image failed to load")).toBeDefined();
|
|
109
|
-
expect(result.
|
|
109
|
+
expect(result.container.querySelector('[aria-label="Remove image"]')).toBeTruthy();
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
it("clears the value from the Remove action", async () => {
|
|
@@ -121,7 +121,7 @@ describe("ImageField", () => {
|
|
|
121
121
|
imageHeight={96}
|
|
122
122
|
/>,
|
|
123
123
|
);
|
|
124
|
-
const remove = result.
|
|
124
|
+
const remove = result.container.querySelector('[aria-label="Remove image"]');
|
|
125
125
|
expect(remove).toBeDefined();
|
|
126
126
|
await act(async () => {
|
|
127
127
|
if (remove) fireEvent.click(remove);
|
|
@@ -197,8 +197,8 @@ describe("ImageField", () => {
|
|
|
197
197
|
);
|
|
198
198
|
const tile = mediaTile(result.container);
|
|
199
199
|
expect(tile).not.toBeNull();
|
|
200
|
-
expect(tile?.
|
|
201
|
-
expect(result.
|
|
200
|
+
expect(tile?.querySelector('[aria-label="Remove image"]')).toBeNull();
|
|
201
|
+
expect(result.container.querySelector('[aria-label="Remove image"]')).toBeTruthy();
|
|
202
202
|
});
|
|
203
203
|
|
|
204
204
|
it("rides the unclamped radius knob including full", () => {
|
|
@@ -231,7 +231,7 @@ describe("ImageField", () => {
|
|
|
231
231
|
</TableCellContext.Provider>,
|
|
232
232
|
);
|
|
233
233
|
expect(mediaTile(result.container)).not.toBeNull();
|
|
234
|
-
expect(result.
|
|
234
|
+
expect(result.container.querySelector('[aria-label="Remove image"]')).toBeFalsy();
|
|
235
235
|
});
|
|
236
236
|
});
|
|
237
237
|
});
|
|
@@ -4,9 +4,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
4
4
|
import { useForm } from "@tanstack/react-form";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { YStack, XStack } from "tamagui";
|
|
7
|
-
import { Button } from "../../Button";
|
|
8
7
|
import { Form } from "../../Form";
|
|
9
8
|
import { ImageField } from "./index";
|
|
9
|
+
import { ActionButton } from "@multiplatform.one/components";
|
|
10
10
|
|
|
11
11
|
const ATTACHED = `data:image/svg+xml;utf8,${encodeURIComponent(
|
|
12
12
|
'<svg xmlns="http://www.w3.org/2000/svg" width="240" height="120"><rect width="240" height="120" fill="#4a90d9"/><circle cx="120" cy="60" r="36" fill="#fff"/></svg>',
|
|
@@ -77,7 +77,7 @@ export const Main: Story = {
|
|
|
77
77
|
objectFit: "contain",
|
|
78
78
|
} as any)}
|
|
79
79
|
/>
|
|
80
|
-
<
|
|
80
|
+
<ActionButton kind="submit" formAction="submit" />
|
|
81
81
|
</YStack>
|
|
82
82
|
</Form>
|
|
83
83
|
);
|