@multiplatform.one/forms 7.11.0 → 7.15.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/README.md +1 -1
- package/dist/cjs/AdaptivePopup/index.cjs +0 -10
- package/dist/cjs/AdaptivePopup/index.native.js +0 -10
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/index.cjs +6 -3
- package/dist/cjs/Button/index.native.js +6 -3
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.cjs +2 -11
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +2 -11
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/index.cjs +12 -10
- package/dist/cjs/ContextualSaveBar/index.native.js +12 -19
- package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/index.cjs +24 -12
- package/dist/cjs/FieldDisplay/index.native.js +25 -13
- package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/PanelPortal.cjs +145 -0
- package/dist/cjs/FloatingPanel/PanelPortal.native.js +43 -0
- package/dist/cjs/FloatingPanel/PanelPortal.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/index.cjs +115 -67
- package/dist/cjs/FloatingPanel/index.native.js +67 -12
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +4 -2
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +4 -2
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/cjs/Form/index.cjs +2 -1
- package/dist/cjs/Form/index.native.js +2 -1
- package/dist/cjs/Form/index.native.js.map +1 -1
- package/dist/cjs/Form/submissionController.cjs +74 -0
- package/dist/cjs/Form/submissionController.native.js +99 -0
- package/dist/cjs/Form/submissionController.native.js.map +1 -0
- package/dist/cjs/InputParts/index.cjs +66 -12
- package/dist/cjs/InputParts/index.native.js +72 -12
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Wheel/index.cjs +0 -2
- package/dist/cjs/Wheel/index.native.js +0 -2
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/BarcodePreview.cjs +18 -15
- package/dist/cjs/fields/Barcode/BarcodePreview.native.js +21 -18
- package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/qr.native.js +34 -34
- package/dist/cjs/fields/Checkbox/Checkbox.cjs +1 -3
- package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -3
- package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxBox.cjs +2 -3
- package/dist/cjs/fields/Checkbox/CheckboxBox.native.js +2 -3
- package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/index.cjs +2 -0
- package/dist/cjs/fields/ColorPicker/index.native.js +2 -0
- package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/parts.cjs +1 -0
- package/dist/cjs/fields/ColorPicker/parts.native.js +1 -0
- package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +206 -200
- package/dist/cjs/fields/Combobox/index.native.js +214 -208
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DateRangePicker.cjs +7 -7
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +7 -7
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MultiDatePicker.cjs +6 -4
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +6 -4
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.cjs +5 -3
- package/dist/cjs/fields/Duration/index.native.js +5 -3
- package/dist/cjs/fields/Duration/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/index.cjs +10 -8
- package/dist/cjs/fields/FileUpload/index.native.js +10 -8
- package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/nativePickerLoader.cjs +7 -2
- package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js +7 -2
- package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/GeolocationMap.cjs +3 -0
- package/dist/cjs/fields/Geolocation/geocoderContext.cjs +71 -0
- package/dist/cjs/fields/Geolocation/geocoderContext.native.js +75 -0
- package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -0
- package/dist/cjs/fields/Geolocation/index.cjs +72 -82
- package/dist/cjs/fields/Geolocation/index.native.js +72 -82
- package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/photonGeocoder.cjs +138 -0
- package/dist/cjs/fields/Geolocation/photonGeocoder.native.js +179 -0
- package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -0
- package/dist/cjs/fields/Input/index.cjs +7 -5
- package/dist/cjs/fields/Input/index.native.js +7 -5
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/MentionInput/index.cjs +118 -112
- package/dist/cjs/fields/MentionInput/index.native.js +130 -124
- package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
- package/dist/cjs/fields/OTPInput/index.cjs +11 -8
- package/dist/cjs/fields/OTPInput/index.native.js +11 -8
- package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/index.cjs +9 -6
- package/dist/cjs/fields/PhoneInput/index.native.js +9 -6
- package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/phone.cjs +6 -5
- package/dist/cjs/fields/PhoneInput/phone.native.js +7 -6
- package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/regionNames.cjs +274 -0
- package/dist/cjs/fields/PhoneInput/regionNames.native.js +277 -0
- package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -0
- package/dist/cjs/fields/RadioGroup/index.cjs +2 -6
- package/dist/cjs/fields/RadioGroup/index.native.js +2 -6
- package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +10 -8
- package/dist/cjs/fields/SearchInput/index.native.js +10 -8
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +20 -17
- package/dist/cjs/fields/Select/index.native.js +20 -17
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Signature/index.cjs +10 -9
- package/dist/cjs/fields/Signature/index.native.js +10 -9
- package/dist/cjs/fields/Signature/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.cjs +21 -15
- package/dist/cjs/fields/Slider/index.native.js +21 -17
- package/dist/cjs/fields/Slider/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/jumpMotion.cjs +2 -2
- package/dist/cjs/fields/Slider/jumpMotion.native.js +2 -1
- package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/index.cjs +25 -6
- package/dist/cjs/fields/Stepper/index.native.js +25 -6
- package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
- package/dist/cjs/fields/Switch/footprint.cjs +54 -0
- package/dist/cjs/fields/Switch/footprint.native.js +57 -0
- package/dist/cjs/fields/Switch/footprint.native.js.map +1 -0
- package/dist/cjs/fields/Switch/index.cjs +60 -43
- package/dist/cjs/fields/Switch/index.native.js +60 -50
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/cjs/fields/TextArea/index.cjs +6 -3
- package/dist/cjs/fields/TextArea/index.native.js +6 -3
- package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/catalog.cjs +1 -0
- package/dist/cjs/fields/TimePicker/catalog.native.js +1 -0
- package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/parts.cjs +5 -0
- package/dist/cjs/fields/TimePicker/parts.native.js +7 -0
- package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/cjs/index.cjs +12 -0
- package/dist/cjs/index.native.js +12 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/panelPortal.cjs +52 -0
- package/dist/cjs/shared/panelPortal.native.js +65 -0
- package/dist/cjs/shared/panelPortal.native.js.map +1 -0
- package/dist/cjs/shared/pressSlopProps.cjs +16 -11
- package/dist/cjs/shared/pressSlopProps.native.js +18 -12
- package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
- package/dist/cjs/shared/utils.cjs +2 -2
- package/dist/cjs/shared/utils.native.js +3 -2
- package/dist/cjs/shared/utils.native.js.map +1 -1
- package/dist/cjs/themedPrimitives.cjs +15 -2
- package/dist/cjs/themedPrimitives.native.js +16 -3
- package/dist/cjs/themedPrimitives.native.js.map +1 -1
- package/dist/esm/AdaptivePopup/index.mjs +0 -10
- package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js +0 -10
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +6 -3
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +6 -3
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.mjs +3 -12
- package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.mjs.map +1 -1
- package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js +3 -12
- package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/index.mjs +13 -11
- package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/esm/ContextualSaveBar/index.native.js +13 -20
- package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/esm/FieldDisplay/index.mjs +24 -12
- package/dist/esm/FieldDisplay/index.mjs.map +1 -1
- package/dist/esm/FieldDisplay/index.native.js +25 -13
- package/dist/esm/FieldDisplay/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/PanelPortal.mjs +119 -0
- package/dist/esm/FloatingPanel/PanelPortal.mjs.map +1 -0
- package/dist/esm/FloatingPanel/PanelPortal.native.js +14 -0
- package/dist/esm/FloatingPanel/PanelPortal.native.js.map +1 -0
- package/dist/esm/FloatingPanel/index.mjs +117 -69
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +68 -13
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs +4 -2
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +4 -2
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/Form/index.mjs +2 -1
- package/dist/esm/Form/index.mjs.map +1 -1
- package/dist/esm/Form/index.native.js +2 -1
- package/dist/esm/Form/index.native.js.map +1 -1
- package/dist/esm/Form/submissionController.mjs +49 -0
- package/dist/esm/Form/submissionController.mjs.map +1 -0
- package/dist/esm/Form/submissionController.native.js +71 -0
- package/dist/esm/Form/submissionController.native.js.map +1 -0
- package/dist/esm/InputParts/index.mjs +67 -13
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +73 -13
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Wheel/index.mjs +0 -2
- package/dist/esm/Wheel/index.mjs.map +1 -1
- package/dist/esm/Wheel/index.native.js +0 -2
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/fields/Barcode/BarcodePreview.mjs +19 -16
- package/dist/esm/fields/Barcode/BarcodePreview.mjs.map +1 -1
- package/dist/esm/fields/Barcode/BarcodePreview.native.js +22 -19
- package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/esm/fields/Barcode/qr.native.js +34 -34
- package/dist/esm/fields/Checkbox/Checkbox.mjs +2 -4
- package/dist/esm/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/Checkbox.native.js +2 -4
- package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxBox.mjs +3 -4
- package/dist/esm/fields/Checkbox/CheckboxBox.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxBox.native.js +3 -4
- package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/index.mjs +2 -0
- package/dist/esm/fields/ColorPicker/index.mjs.map +1 -1
- package/dist/esm/fields/ColorPicker/index.native.js +2 -0
- package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.mjs +1 -0
- package/dist/esm/fields/ColorPicker/parts.mjs.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.native.js +1 -0
- package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +197 -191
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +205 -199
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.mjs +5 -5
- package/dist/esm/fields/DatePicker/DateRangePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js +5 -5
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.mjs +3 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js +3 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.mjs +3 -1
- package/dist/esm/fields/Duration/index.mjs.map +1 -1
- package/dist/esm/fields/Duration/index.native.js +3 -1
- package/dist/esm/fields/Duration/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/index.mjs +5 -3
- package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js +5 -3
- package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/nativePickerLoader.mjs +7 -3
- package/dist/esm/fields/FileUpload/nativePickerLoader.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/nativePickerLoader.native.js +7 -3
- package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.mjs +3 -0
- package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/geocoderContext.mjs +44 -0
- package/dist/esm/fields/Geolocation/geocoderContext.mjs.map +1 -0
- package/dist/esm/fields/Geolocation/geocoderContext.native.js +45 -0
- package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -0
- package/dist/esm/fields/Geolocation/index.mjs +73 -83
- package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/index.native.js +73 -83
- package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/photonGeocoder.mjs +112 -0
- package/dist/esm/fields/Geolocation/photonGeocoder.mjs.map +1 -0
- package/dist/esm/fields/Geolocation/photonGeocoder.native.js +150 -0
- package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -0
- package/dist/esm/fields/Input/index.mjs +3 -1
- package/dist/esm/fields/Input/index.mjs.map +1 -1
- package/dist/esm/fields/Input/index.native.js +3 -1
- package/dist/esm/fields/Input/index.native.js.map +1 -1
- package/dist/esm/fields/MentionInput/index.mjs +115 -109
- package/dist/esm/fields/MentionInput/index.mjs.map +1 -1
- package/dist/esm/fields/MentionInput/index.native.js +127 -121
- package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
- package/dist/esm/fields/OTPInput/index.mjs +7 -4
- package/dist/esm/fields/OTPInput/index.mjs.map +1 -1
- package/dist/esm/fields/OTPInput/index.native.js +7 -4
- package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/index.mjs +6 -3
- package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js +6 -3
- package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/phone.mjs +6 -5
- package/dist/esm/fields/PhoneInput/phone.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/phone.native.js +7 -6
- package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/regionNames.mjs +249 -0
- package/dist/esm/fields/PhoneInput/regionNames.mjs.map +1 -0
- package/dist/esm/fields/PhoneInput/regionNames.native.js +249 -0
- package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -0
- package/dist/esm/fields/RadioGroup/index.mjs +3 -7
- package/dist/esm/fields/RadioGroup/index.mjs.map +1 -1
- package/dist/esm/fields/RadioGroup/index.native.js +3 -7
- package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.mjs +5 -3
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +5 -3
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +10 -7
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +10 -7
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Signature/index.mjs +7 -6
- package/dist/esm/fields/Signature/index.mjs.map +1 -1
- package/dist/esm/fields/Signature/index.native.js +7 -6
- package/dist/esm/fields/Signature/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.mjs +10 -4
- package/dist/esm/fields/Slider/index.mjs.map +1 -1
- package/dist/esm/fields/Slider/index.native.js +10 -6
- package/dist/esm/fields/Slider/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/jumpMotion.mjs +2 -2
- package/dist/esm/fields/Slider/jumpMotion.mjs.map +1 -1
- package/dist/esm/fields/Slider/jumpMotion.native.js +2 -1
- package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/esm/fields/Stepper/index.mjs +24 -5
- package/dist/esm/fields/Stepper/index.mjs.map +1 -1
- package/dist/esm/fields/Stepper/index.native.js +24 -5
- package/dist/esm/fields/Stepper/index.native.js.map +1 -1
- package/dist/esm/fields/Switch/footprint.mjs +29 -0
- package/dist/esm/fields/Switch/footprint.mjs.map +1 -0
- package/dist/esm/fields/Switch/footprint.native.js +29 -0
- package/dist/esm/fields/Switch/footprint.native.js.map +1 -0
- package/dist/esm/fields/Switch/index.mjs +44 -27
- package/dist/esm/fields/Switch/index.mjs.map +1 -1
- package/dist/esm/fields/Switch/index.native.js +44 -34
- package/dist/esm/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/fields/TextArea/index.mjs +6 -3
- package/dist/esm/fields/TextArea/index.mjs.map +1 -1
- package/dist/esm/fields/TextArea/index.native.js +6 -3
- package/dist/esm/fields/TextArea/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.mjs +1 -0
- package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.native.js +1 -0
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.mjs +5 -0
- package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js +7 -0
- package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/esm/index.mjs +6 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +6 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/shared/panelPortal.mjs +24 -0
- package/dist/esm/shared/panelPortal.mjs.map +1 -0
- package/dist/esm/shared/panelPortal.native.js +34 -0
- package/dist/esm/shared/panelPortal.native.js.map +1 -0
- package/dist/esm/shared/pressSlopProps.mjs +16 -12
- package/dist/esm/shared/pressSlopProps.mjs.map +1 -1
- package/dist/esm/shared/pressSlopProps.native.js +18 -13
- package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
- package/dist/esm/shared/utils.mjs +2 -2
- package/dist/esm/shared/utils.mjs.map +1 -1
- package/dist/esm/shared/utils.native.js +3 -2
- package/dist/esm/shared/utils.native.js.map +1 -1
- package/dist/esm/themedPrimitives.mjs +16 -3
- package/dist/esm/themedPrimitives.mjs.map +1 -1
- package/dist/esm/themedPrimitives.native.js +17 -4
- package/dist/esm/themedPrimitives.native.js.map +1 -1
- package/dist/jsx/AdaptivePopup/index.mjs +0 -10
- package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
- package/dist/jsx/AdaptivePopup/index.native.js +0 -10
- package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +6 -3
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +6 -3
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.mjs +3 -12
- package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.native.js +2 -11
- package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.mjs +13 -11
- package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.native.js +12 -19
- package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/jsx/FieldDisplay/index.mjs +24 -12
- package/dist/jsx/FieldDisplay/index.mjs.map +1 -1
- package/dist/jsx/FieldDisplay/index.native.js +25 -13
- package/dist/jsx/FieldDisplay/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/PanelPortal.mjs +119 -0
- package/dist/jsx/FloatingPanel/PanelPortal.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/PanelPortal.native.js +43 -0
- package/dist/jsx/FloatingPanel/PanelPortal.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/index.mjs +117 -69
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +67 -12
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +4 -2
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +4 -2
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/jsx/Form/index.mjs +2 -1
- package/dist/jsx/Form/index.mjs.map +1 -1
- package/dist/jsx/Form/index.native.js +2 -1
- package/dist/jsx/Form/index.native.js.map +1 -1
- package/dist/jsx/Form/submissionController.mjs +49 -0
- package/dist/jsx/Form/submissionController.mjs.map +1 -0
- package/dist/jsx/Form/submissionController.native.js +99 -0
- package/dist/jsx/Form/submissionController.native.js.map +1 -0
- package/dist/jsx/InputParts/index.mjs +67 -13
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +72 -12
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/Wheel/index.mjs +0 -2
- package/dist/jsx/Wheel/index.mjs.map +1 -1
- package/dist/jsx/Wheel/index.native.js +0 -2
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/BarcodePreview.mjs +19 -16
- package/dist/jsx/fields/Barcode/BarcodePreview.mjs.map +1 -1
- package/dist/jsx/fields/Barcode/BarcodePreview.native.js +21 -18
- package/dist/jsx/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/qr.native.js +34 -34
- package/dist/jsx/fields/Checkbox/Checkbox.mjs +2 -4
- package/dist/jsx/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/Checkbox.native.js +1 -3
- package/dist/jsx/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxBox.mjs +3 -4
- package/dist/jsx/fields/Checkbox/CheckboxBox.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxBox.native.js +2 -3
- package/dist/jsx/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/jsx/fields/ColorPicker/index.mjs +2 -0
- package/dist/jsx/fields/ColorPicker/index.mjs.map +1 -1
- package/dist/jsx/fields/ColorPicker/index.native.js +2 -0
- package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/jsx/fields/ColorPicker/parts.mjs +1 -0
- package/dist/jsx/fields/ColorPicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/ColorPicker/parts.native.js +1 -0
- package/dist/jsx/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +197 -191
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +214 -208
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.mjs +5 -5
- package/dist/jsx/fields/DatePicker/DateRangePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +7 -7
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs +3 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +6 -4
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/jsx/fields/Duration/index.mjs +3 -1
- package/dist/jsx/fields/Duration/index.mjs.map +1 -1
- package/dist/jsx/fields/Duration/index.native.js +5 -3
- package/dist/jsx/fields/Duration/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/index.mjs +5 -3
- package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/index.native.js +10 -8
- package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/nativePickerLoader.mjs +7 -3
- package/dist/jsx/fields/FileUpload/nativePickerLoader.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/nativePickerLoader.native.js +7 -2
- package/dist/jsx/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.mjs +3 -0
- package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/geocoderContext.mjs +44 -0
- package/dist/jsx/fields/Geolocation/geocoderContext.mjs.map +1 -0
- package/dist/jsx/fields/Geolocation/geocoderContext.native.js +75 -0
- package/dist/jsx/fields/Geolocation/geocoderContext.native.js.map +1 -0
- package/dist/jsx/fields/Geolocation/index.mjs +73 -83
- package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/index.native.js +72 -82
- package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/photonGeocoder.mjs +112 -0
- package/dist/jsx/fields/Geolocation/photonGeocoder.mjs.map +1 -0
- package/dist/jsx/fields/Geolocation/photonGeocoder.native.js +179 -0
- package/dist/jsx/fields/Geolocation/photonGeocoder.native.js.map +1 -0
- package/dist/jsx/fields/Input/index.mjs +3 -1
- package/dist/jsx/fields/Input/index.mjs.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +7 -5
- package/dist/jsx/fields/Input/index.native.js.map +1 -1
- package/dist/jsx/fields/MentionInput/index.mjs +115 -109
- package/dist/jsx/fields/MentionInput/index.mjs.map +1 -1
- package/dist/jsx/fields/MentionInput/index.native.js +130 -124
- package/dist/jsx/fields/MentionInput/index.native.js.map +1 -1
- package/dist/jsx/fields/OTPInput/index.mjs +7 -4
- package/dist/jsx/fields/OTPInput/index.mjs.map +1 -1
- package/dist/jsx/fields/OTPInput/index.native.js +11 -8
- package/dist/jsx/fields/OTPInput/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.mjs +6 -3
- package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.native.js +9 -6
- package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/phone.mjs +6 -5
- package/dist/jsx/fields/PhoneInput/phone.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/phone.native.js +7 -6
- package/dist/jsx/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/regionNames.mjs +249 -0
- package/dist/jsx/fields/PhoneInput/regionNames.mjs.map +1 -0
- package/dist/jsx/fields/PhoneInput/regionNames.native.js +277 -0
- package/dist/jsx/fields/PhoneInput/regionNames.native.js.map +1 -0
- package/dist/jsx/fields/RadioGroup/index.mjs +3 -7
- package/dist/jsx/fields/RadioGroup/index.mjs.map +1 -1
- package/dist/jsx/fields/RadioGroup/index.native.js +2 -6
- package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +5 -3
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +10 -8
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +10 -7
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +20 -17
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Signature/index.mjs +7 -6
- package/dist/jsx/fields/Signature/index.mjs.map +1 -1
- package/dist/jsx/fields/Signature/index.native.js +10 -9
- package/dist/jsx/fields/Signature/index.native.js.map +1 -1
- package/dist/jsx/fields/Slider/index.mjs +10 -4
- package/dist/jsx/fields/Slider/index.mjs.map +1 -1
- package/dist/jsx/fields/Slider/index.native.js +21 -17
- package/dist/jsx/fields/Slider/index.native.js.map +1 -1
- package/dist/jsx/fields/Slider/jumpMotion.mjs +2 -2
- package/dist/jsx/fields/Slider/jumpMotion.mjs.map +1 -1
- package/dist/jsx/fields/Slider/jumpMotion.native.js +2 -1
- package/dist/jsx/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/jsx/fields/Stepper/index.mjs +24 -5
- package/dist/jsx/fields/Stepper/index.mjs.map +1 -1
- package/dist/jsx/fields/Stepper/index.native.js +25 -6
- package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
- package/dist/jsx/fields/Switch/footprint.mjs +29 -0
- package/dist/jsx/fields/Switch/footprint.mjs.map +1 -0
- package/dist/jsx/fields/Switch/footprint.native.js +57 -0
- package/dist/jsx/fields/Switch/footprint.native.js.map +1 -0
- package/dist/jsx/fields/Switch/index.mjs +44 -27
- package/dist/jsx/fields/Switch/index.mjs.map +1 -1
- package/dist/jsx/fields/Switch/index.native.js +60 -50
- package/dist/jsx/fields/Switch/index.native.js.map +1 -1
- package/dist/jsx/fields/TextArea/index.mjs +6 -3
- package/dist/jsx/fields/TextArea/index.mjs.map +1 -1
- package/dist/jsx/fields/TextArea/index.native.js +6 -3
- package/dist/jsx/fields/TextArea/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.mjs +1 -0
- package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.native.js +1 -0
- package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.mjs +5 -0
- package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js +7 -0
- package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/jsx/index.js +6 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +6 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +12 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/panelPortal.mjs +24 -0
- package/dist/jsx/shared/panelPortal.mjs.map +1 -0
- package/dist/jsx/shared/panelPortal.native.js +65 -0
- package/dist/jsx/shared/panelPortal.native.js.map +1 -0
- package/dist/jsx/shared/pressSlopProps.mjs +16 -12
- package/dist/jsx/shared/pressSlopProps.mjs.map +1 -1
- package/dist/jsx/shared/pressSlopProps.native.js +18 -12
- package/dist/jsx/shared/pressSlopProps.native.js.map +1 -1
- package/dist/jsx/shared/utils.mjs +2 -2
- package/dist/jsx/shared/utils.mjs.map +1 -1
- package/dist/jsx/shared/utils.native.js +3 -2
- package/dist/jsx/shared/utils.native.js.map +1 -1
- package/dist/jsx/themedPrimitives.mjs +16 -3
- package/dist/jsx/themedPrimitives.mjs.map +1 -1
- package/dist/jsx/themedPrimitives.native.js +16 -3
- package/dist/jsx/themedPrimitives.native.js.map +1 -1
- package/package.json +15 -11
- package/src/AdaptivePopup/AdaptivePopup.spec.tsx +2 -3
- package/src/AdaptivePopup/index.tsx +11 -10
- package/src/Button/Button.borderLadder.spec.tsx +82 -0
- package/src/Button/Button.labelInk.spec.tsx +4 -1
- package/src/Button/Button.radiusLaw.spec.tsx +153 -0
- package/src/Button/index.tsx +6 -3
- package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +24 -0
- package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +37 -1
- package/src/ContextualSaveBar/UnsavedChangesDialog.tsx +3 -11
- package/src/ContextualSaveBar/index.tsx +17 -11
- package/src/ErrorSummary.stories.tsx +20 -11
- package/src/FieldDisplay/FieldDisplay.spec.tsx +47 -2
- package/src/FieldDisplay/index.tsx +21 -13
- package/src/FloatingPanel/FloatingPanel.detentLayout.spec.tsx +148 -0
- package/src/FloatingPanel/FloatingPanel.spec.tsx +140 -1
- package/src/FloatingPanel/FloatingPanel.stories.tsx +86 -1
- package/src/FloatingPanel/PanelPortal.native.tsx +15 -0
- package/src/FloatingPanel/PanelPortal.tsx +149 -0
- package/src/FloatingPanel/index.native.tsx +96 -19
- package/src/FloatingPanel/index.tsx +172 -86
- package/src/FloatingPanel/panelPortal.spec.tsx +142 -0
- package/src/FloatingPanel/panelWidthContract.spec.ts +17 -5
- package/src/FloatingPanel/touchRecipeHydration.spec.tsx +82 -0
- package/src/FloatingPanel/useFloatingPanel.ts +5 -2
- package/src/FloatingPanel/viewportHydration.spec.tsx +118 -0
- package/src/Form/index.tsx +2 -1
- package/src/Form/submission.spec.tsx +148 -0
- package/src/Form/submissionController.spec.ts +73 -0
- package/src/Form/submissionController.ts +59 -0
- package/src/Form/submissionDiscard.spec.tsx +41 -0
- package/src/Form/submissionPaths.spec.tsx +214 -0
- package/src/InputParts/index.tsx +48 -12
- package/src/Label/Label.stories.tsx +27 -11
- package/src/Wheel/Wheel.spec.tsx +9 -2
- package/src/Wheel/index.tsx +0 -2
- package/src/fieldFamilyStories.radius.spec.tsx +48 -0
- package/src/fields/Barcode/BarcodePreview.spec.tsx +32 -12
- package/src/fields/Barcode/BarcodePreview.stories.tsx +5 -4
- package/src/fields/Barcode/BarcodePreview.tsx +31 -25
- package/src/fields/Checkbox/Checkbox.native.spec.tsx +92 -0
- package/src/fields/Checkbox/Checkbox.stories.tsx +1 -0
- package/src/fields/Checkbox/Checkbox.tsx +2 -2
- package/src/fields/Checkbox/CheckboxBox.spec.tsx +13 -13
- package/src/fields/Checkbox/CheckboxBox.tsx +7 -1
- package/src/fields/ColorPicker/index.tsx +6 -1
- package/src/fields/ColorPicker/parts.tsx +1 -0
- package/src/fields/Combobox/Combobox.spec.tsx +85 -55
- package/src/fields/Combobox/index.tsx +259 -240
- package/src/fields/DatePicker/DateRangePicker.tsx +5 -3
- package/src/fields/DatePicker/MultiDatePicker.tsx +3 -1
- package/src/fields/Duration/index.tsx +3 -1
- package/src/fields/FileUpload/index.tsx +13 -3
- package/src/fields/FileUpload/nativePickerLoader.spec.ts +34 -0
- package/src/fields/FileUpload/nativePickerLoader.ts +11 -2
- package/src/fields/Geolocation/Geolocation.spec.tsx +165 -4
- package/src/fields/Geolocation/Geolocation.stories.tsx +110 -26
- package/src/fields/Geolocation/GeolocationMap.tsx +3 -0
- package/src/fields/Geolocation/geocoderContext.tsx +56 -0
- package/src/fields/Geolocation/index.tsx +75 -80
- package/src/fields/Geolocation/photonGeocoder.spec.ts +214 -0
- package/src/fields/Geolocation/photonGeocoder.ts +150 -0
- package/src/fields/Input/index.tsx +3 -1
- package/src/fields/MentionInput/MentionInput.spec.tsx +41 -30
- package/src/fields/MentionInput/index.tsx +128 -119
- package/src/fields/OTPInput/index.tsx +7 -4
- package/src/fields/PhoneInput/PhoneInput.spec.tsx +63 -0
- package/src/fields/PhoneInput/index.tsx +13 -8
- package/src/fields/PhoneInput/phone.native.spec.ts +32 -0
- package/src/fields/PhoneInput/phone.ts +5 -2
- package/src/fields/PhoneInput/regionNames.ts +250 -0
- package/src/fields/RadioGroup/RadioGroup.stories.tsx +4 -3
- package/src/fields/RadioGroup/index.tsx +3 -2
- package/src/fields/Rating/StarInk.native.spec.tsx +1 -1
- package/src/fields/SearchInput/index.tsx +4 -3
- package/src/fields/Select/Select.spec.tsx +36 -29
- package/src/fields/Select/index.tsx +14 -5
- package/src/fields/Signature/index.tsx +7 -3
- package/src/fields/Slider/index.tsx +14 -4
- package/src/fields/Slider/jumpMotion.ts +6 -2
- package/src/fields/Stepper/Stepper.spec.tsx +30 -0
- package/src/fields/Stepper/index.tsx +34 -4
- package/src/fields/Switch/Switch.footprint.native.spec.tsx +58 -0
- package/src/fields/Switch/Switch.footprint.spec.tsx +79 -0
- package/src/fields/Switch/Switch.radius.spec.tsx +37 -6
- package/src/fields/Switch/footprint.ts +45 -0
- package/src/fields/Switch/index.tsx +46 -49
- package/src/fields/TextArea/TextArea.spec.tsx +30 -1
- package/src/fields/TextArea/index.tsx +6 -3
- package/src/fields/TimePicker/TimePicker.native.spec.tsx +48 -0
- package/src/fields/TimePicker/catalog.tsx +1 -0
- package/src/fields/TimePicker/parts.tsx +4 -0
- package/src/fields/ToggleGroup/ToggleGroup.spec.tsx +17 -8
- package/src/fields/pickerShellPadding.spec.tsx +54 -0
- package/src/index.ts +8 -0
- package/src/shared/panelPortal.ts +36 -0
- package/src/shared/pressSlopProps.spec.ts +27 -1
- package/src/shared/pressSlopProps.ts +26 -17
- package/src/shared/utils.ts +2 -2
- package/src/themedPrimitives.tsx +16 -3
- package/types/AdaptivePopup/index.d.ts.map +1 -1
- package/types/Button/index.d.ts.map +1 -1
- package/types/ContextualSaveBar/UnsavedChangesDialog.d.ts.map +1 -1
- package/types/ContextualSaveBar/index.d.ts.map +1 -1
- package/types/FieldDisplay/index.d.ts.map +1 -1
- package/types/FloatingPanel/PanelPortal.d.ts +24 -0
- package/types/FloatingPanel/PanelPortal.d.ts.map +1 -0
- package/types/FloatingPanel/PanelPortal.native.d.ts +9 -0
- package/types/FloatingPanel/PanelPortal.native.d.ts.map +1 -0
- package/types/FloatingPanel/index.d.ts +0 -5
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
- package/types/Form/index.d.ts.map +1 -1
- package/types/Form/submissionController.d.ts +21 -0
- package/types/Form/submissionController.d.ts.map +1 -0
- package/types/InputParts/index.d.ts +34 -2
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/Wheel/index.d.ts.map +1 -1
- package/types/fields/Barcode/BarcodePreview.d.ts +7 -3
- package/types/fields/Barcode/BarcodePreview.d.ts.map +1 -1
- package/types/fields/Checkbox/CheckboxBox.d.ts +5 -0
- package/types/fields/Checkbox/CheckboxBox.d.ts.map +1 -1
- package/types/fields/ColorPicker/index.d.ts.map +1 -1
- package/types/fields/ColorPicker/parts.d.ts +2 -0
- package/types/fields/ColorPicker/parts.d.ts.map +1 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/DatePicker/DateRangePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/MultiDatePicker.d.ts.map +1 -1
- package/types/fields/Duration/index.d.ts.map +1 -1
- package/types/fields/FileUpload/index.d.ts.map +1 -1
- package/types/fields/FileUpload/nativePickerLoader.d.ts +8 -0
- package/types/fields/FileUpload/nativePickerLoader.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
- package/types/fields/Geolocation/geocoderContext.d.ts +24 -0
- package/types/fields/Geolocation/geocoderContext.d.ts.map +1 -0
- package/types/fields/Geolocation/index.d.ts +2 -1
- package/types/fields/Geolocation/index.d.ts.map +1 -1
- package/types/fields/Geolocation/photonGeocoder.d.ts +46 -0
- package/types/fields/Geolocation/photonGeocoder.d.ts.map +1 -0
- package/types/fields/Input/index.d.ts +19 -1
- package/types/fields/Input/index.d.ts.map +1 -1
- package/types/fields/MentionInput/index.d.ts.map +1 -1
- package/types/fields/OTPInput/index.d.ts +1 -1
- package/types/fields/OTPInput/index.d.ts.map +1 -1
- package/types/fields/PhoneInput/index.d.ts.map +1 -1
- package/types/fields/PhoneInput/phone.d.ts.map +1 -1
- package/types/fields/PhoneInput/regionNames.d.ts +2 -0
- package/types/fields/PhoneInput/regionNames.d.ts.map +1 -0
- package/types/fields/RadioGroup/index.d.ts.map +1 -1
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Signature/index.d.ts.map +1 -1
- package/types/fields/Slider/index.d.ts.map +1 -1
- package/types/fields/Slider/jumpMotion.d.ts +1 -1
- package/types/fields/Slider/jumpMotion.d.ts.map +1 -1
- package/types/fields/Stepper/index.d.ts +6 -0
- package/types/fields/Stepper/index.d.ts.map +1 -1
- package/types/fields/Switch/footprint.d.ts +12 -0
- package/types/fields/Switch/footprint.d.ts.map +1 -0
- package/types/fields/Switch/index.d.ts.map +1 -1
- package/types/fields/TextArea/index.d.ts.map +1 -1
- package/types/fields/TimePicker/catalog.d.ts.map +1 -1
- package/types/fields/TimePicker/parts.d.ts.map +1 -1
- package/types/index.d.ts +8 -0
- package/types/index.d.ts.map +1 -1
- package/types/shared/panelPortal.d.ts +13 -0
- package/types/shared/panelPortal.d.ts.map +1 -0
- package/types/shared/pressSlopProps.d.ts +9 -2
- package/types/shared/pressSlopProps.d.ts.map +1 -1
- package/types/shared/utils.d.ts +1 -1
- package/types/shared/utils.d.ts.map +1 -1
- package/types/themedPrimitives.d.ts +48 -1
- package/types/themedPrimitives.d.ts.map +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useTouchSurface } from "@multiplatform.one/theme";
|
|
1
2
|
import type { ReactNode } from "react";
|
|
2
3
|
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
4
|
import type { AnyFormApi } from "../../types";
|
|
@@ -24,8 +25,8 @@ import {
|
|
|
24
25
|
borderRadiusMap,
|
|
25
26
|
contrastRatio,
|
|
26
27
|
ensureFocusVisibleRing,
|
|
27
|
-
isTouchSurface,
|
|
28
28
|
normalizeToHex,
|
|
29
|
+
radiusResolutionProps,
|
|
29
30
|
relativeLuminance,
|
|
30
31
|
resolveRadiusClass,
|
|
31
32
|
sizeRecipeForToken,
|
|
@@ -33,6 +34,7 @@ import {
|
|
|
33
34
|
wasKeyboardFocus,
|
|
34
35
|
ensureKeyboardModalityTracking,
|
|
35
36
|
type BorderRadius,
|
|
37
|
+
type RadiusResolutionDeclaration,
|
|
36
38
|
} from "@multiplatform.one/theme";
|
|
37
39
|
import { commitImmediateField } from "../../ContextualSaveBar/commitImmediateField";
|
|
38
40
|
import { useFormSaveMode } from "../../Form";
|
|
@@ -48,7 +50,9 @@ import {
|
|
|
48
50
|
useFormField,
|
|
49
51
|
useResolvedValidators,
|
|
50
52
|
} from "../../shared/utils";
|
|
53
|
+
import { pressSlopProps } from "../../shared/pressSlopProps";
|
|
51
54
|
import { useIsInTableCell } from "../../shared/tableCellContext";
|
|
55
|
+
import { switchFootprint, type SwitchFootprint } from "./footprint";
|
|
52
56
|
|
|
53
57
|
/** Pointer travel (px) before a gesture counts as thumb-drag instead of click. */
|
|
54
58
|
const SWITCH_DRAG_INTENT_PX = 10;
|
|
@@ -56,14 +60,6 @@ const SWITCH_DRAG_INTENT_PX = 10;
|
|
|
56
60
|
/** Minimum pressable height for the switch inside table cells (SP-FIXED). */
|
|
57
61
|
const SWITCH_CELL_TARGET_HEIGHT = 44;
|
|
58
62
|
|
|
59
|
-
/**
|
|
60
|
-
* Apple / Material 3 / Polaris: the thumb floats inside the track (≈2px
|
|
61
|
-
* gutter), never flush to the rim. Shrinks on tiny sizes so the handle
|
|
62
|
-
* stays ≥10px.
|
|
63
|
-
*/
|
|
64
|
-
const switchThumbInset = (trackInner: number) =>
|
|
65
|
-
Math.min(2, Math.max(0, Math.floor((trackInner - 10) / 2)));
|
|
66
|
-
|
|
67
63
|
/** `animation=none` resolves to undefined — do not fall back to `quick`. */
|
|
68
64
|
const resolveSwitchMotion = (token: string | undefined) =>
|
|
69
65
|
token && token !== "none" ? token : "none";
|
|
@@ -94,25 +90,14 @@ const stripOutlineFromState = (props?: Record<string, any>) => {
|
|
|
94
90
|
// ─── Switch internals ─────────────────────────────────────────────────────────
|
|
95
91
|
|
|
96
92
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* the 1px hairline track border; the component passes exact frameProps with
|
|
103
|
-
* the live knob borderWidth. Touch keeps the DESKTOP recipe for the painted
|
|
104
|
-
* track (a 44px-tall painted switch is not a control anyone ships) and
|
|
105
|
-
* restores the 44 floor on the PRESSABLE frame via grown-target mode below.
|
|
93
|
+
* The painted track is `switchFootprint` of the recipe height (LC-91), never
|
|
94
|
+
* the recipe height itself. The styled fallbacks assume the 1px hairline
|
|
95
|
+
* track border; the component passes exact frameProps with the live knob
|
|
96
|
+
* borderWidth. The 44 press floor lands on the PRESSABLE frame (grown-target
|
|
97
|
+
* mode on touch and in cells, press slop on a fine pointer), never on paint.
|
|
106
98
|
*/
|
|
107
99
|
const SWITCH_TRACK_BORDER_FALLBACK = 1;
|
|
108
100
|
|
|
109
|
-
const getSwitchTrackHeight = (val: SizeTokens) => sizeRecipeForToken(String(val)).height;
|
|
110
|
-
|
|
111
|
-
const getSwitchThumbHeight = (
|
|
112
|
-
val: SizeTokens,
|
|
113
|
-
borderWidth: number = SWITCH_TRACK_BORDER_FALLBACK,
|
|
114
|
-
) => getSwitchTrackHeight(val) - borderWidth * 2;
|
|
115
|
-
|
|
116
101
|
const resolveRadiusValue = (radius: unknown) => {
|
|
117
102
|
if (typeof radius === "number") return radius;
|
|
118
103
|
if (typeof radius !== "string") return undefined;
|
|
@@ -200,8 +185,8 @@ const SwitchThumbStyled = styled(View, {
|
|
|
200
185
|
|
|
201
186
|
size: {
|
|
202
187
|
"...size": (val) => {
|
|
203
|
-
const
|
|
204
|
-
return { height:
|
|
188
|
+
const { thumbSize } = switchFootprint(String(val), SWITCH_TRACK_BORDER_FALLBACK);
|
|
189
|
+
return { height: thumbSize, width: thumbSize };
|
|
205
190
|
},
|
|
206
191
|
},
|
|
207
192
|
} as const,
|
|
@@ -246,9 +231,11 @@ const SwitchFrameStyled = styled(View, {
|
|
|
246
231
|
|
|
247
232
|
size: {
|
|
248
233
|
"...size": (val) => {
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
234
|
+
const { trackHeight, trackWidth } = switchFootprint(
|
|
235
|
+
String(val),
|
|
236
|
+
SWITCH_TRACK_BORDER_FALLBACK,
|
|
237
|
+
);
|
|
238
|
+
return { height: trackHeight, minHeight: trackHeight, width: trackWidth };
|
|
252
239
|
},
|
|
253
240
|
},
|
|
254
241
|
} as const,
|
|
@@ -369,7 +356,7 @@ type SwitchControlProps = {
|
|
|
369
356
|
hasError?: boolean;
|
|
370
357
|
id: string;
|
|
371
358
|
sizeToken: SizeTokens;
|
|
372
|
-
|
|
359
|
+
footprint: SwitchFootprint;
|
|
373
360
|
thumbRadius: number;
|
|
374
361
|
transition?: string;
|
|
375
362
|
frameProps: Record<string, any>;
|
|
@@ -410,6 +397,8 @@ type SwitchControlProps = {
|
|
|
410
397
|
pressStyle?: Record<string, any>;
|
|
411
398
|
focusStyle?: Record<string, any>;
|
|
412
399
|
};
|
|
400
|
+
/** BINARY declaration for the thumb and the cell track; absent under a radius override. */
|
|
401
|
+
radiusResolution?: RadiusResolutionDeclaration;
|
|
413
402
|
};
|
|
414
403
|
|
|
415
404
|
function SwitchControl({
|
|
@@ -422,7 +411,7 @@ function SwitchControl({
|
|
|
422
411
|
hasError,
|
|
423
412
|
id,
|
|
424
413
|
sizeToken,
|
|
425
|
-
|
|
414
|
+
footprint,
|
|
426
415
|
thumbRadius,
|
|
427
416
|
transition,
|
|
428
417
|
frameProps,
|
|
@@ -442,6 +431,7 @@ function SwitchControl({
|
|
|
442
431
|
ariaLabel,
|
|
443
432
|
ariaLabelledBy,
|
|
444
433
|
cellTrack,
|
|
434
|
+
radiusResolution,
|
|
445
435
|
}: SwitchControlProps) {
|
|
446
436
|
if (isWeb) {
|
|
447
437
|
ensureKeyboardModalityTracking();
|
|
@@ -451,11 +441,8 @@ function SwitchControl({
|
|
|
451
441
|
const outlined = knobProps.outlined;
|
|
452
442
|
const trackOffFill = outlined ? "transparent" : formSwitchColors.track.off;
|
|
453
443
|
const trackOffBorder = formControlColors.boundary;
|
|
454
|
-
const thumbInset =
|
|
455
|
-
const thumbSize = thumbHeight - thumbInset * 2;
|
|
444
|
+
const { thumbInset, thumbSize, travel: dragDistance } = footprint;
|
|
456
445
|
const motion = resolveSwitchMotion(transition);
|
|
457
|
-
// Travel distance for a 2:1 track (inner width − thumb − gutters = thumb height).
|
|
458
|
-
const dragDistance = thumbHeight;
|
|
459
446
|
const [dragX, setDragX] = useState<number | null>(null);
|
|
460
447
|
// Hold snapped thumb until the controlled `checked` prop catches up (avoids flash).
|
|
461
448
|
const [snapChecked, setSnapChecked] = useState<boolean | null>(null);
|
|
@@ -677,6 +664,7 @@ function SwitchControl({
|
|
|
677
664
|
y={-cellTrack.height / 2}
|
|
678
665
|
height={cellTrack.height}
|
|
679
666
|
borderRadius={cellTrack.borderRadius}
|
|
667
|
+
{...radiusResolution}
|
|
680
668
|
borderWidth={cellTrack.borderWidth}
|
|
681
669
|
borderColor={displayChecked ? formSwitchColors.track.on : trackOffBorder}
|
|
682
670
|
backgroundColor={displayChecked ? formSwitchColors.track.on : trackOffFill}
|
|
@@ -693,6 +681,7 @@ function SwitchControl({
|
|
|
693
681
|
{rightIcon && <StyledSwitch.Icon placement="right">{rightIcon}</StyledSwitch.Icon>}
|
|
694
682
|
<StyledSwitch.Thumb
|
|
695
683
|
borderRadius={thumbRadius}
|
|
684
|
+
{...radiusResolution}
|
|
696
685
|
width={thumbSize}
|
|
697
686
|
height={thumbSize}
|
|
698
687
|
// Own position so drag can override Tamagui's initialChecked alignSelf/x math.
|
|
@@ -791,6 +780,7 @@ export function Switch({
|
|
|
791
780
|
compact,
|
|
792
781
|
minTargetHeight,
|
|
793
782
|
}: SwitchProps) {
|
|
783
|
+
const hydrationTouch = useTouchSurface();
|
|
794
784
|
// Canonical `onChange` and the alias `onCheckedChange` both fire; standalone
|
|
795
785
|
// (formless) callers get real toggling from either name.
|
|
796
786
|
const handleValueChange = (val: boolean) => {
|
|
@@ -817,12 +807,12 @@ export function Switch({
|
|
|
817
807
|
|
|
818
808
|
// Coordinated geometry (LC-10): ONE size token drives the control (track,
|
|
819
809
|
// thumb) AND the row slot, so an explicit `size` prop can never make the
|
|
820
|
-
// control outgrow its own row.
|
|
821
|
-
//
|
|
810
|
+
// control outgrow its own row. The row is the recipe height (LC-75); the
|
|
811
|
+
// track is the platform switch's fraction of it (LC-91).
|
|
822
812
|
const sizeToken = (size ?? knobProps.sizeToken) as SizeTokens;
|
|
823
813
|
const borderWidth = knobProps.borderRadius.borderWidth ?? 1;
|
|
824
|
-
const
|
|
825
|
-
const trackHeight
|
|
814
|
+
const footprint = switchFootprint(String(sizeToken), borderWidth);
|
|
815
|
+
const { trackHeight, trackWidth } = footprint;
|
|
826
816
|
// Grown-target mode (SP-FIXED): table cells always grow the pressable
|
|
827
817
|
// frame to 44px; standalone consumers opt in via `minTargetHeight`; touch
|
|
828
818
|
// surfaces get the LC-77 44px floor on the PRESSABLE frame while the
|
|
@@ -833,7 +823,7 @@ export function Switch({
|
|
|
833
823
|
? SWITCH_CELL_TARGET_HEIGHT
|
|
834
824
|
: minTargetHeight !== undefined
|
|
835
825
|
? Math.max(minTargetHeight, trackHeight)
|
|
836
|
-
:
|
|
826
|
+
: hydrationTouch && trackHeight < TOUCH_HEIGHT_FLOOR
|
|
837
827
|
? TOUCH_HEIGHT_FLOOR
|
|
838
828
|
: undefined;
|
|
839
829
|
const grownTarget = targetHeight !== undefined;
|
|
@@ -848,8 +838,7 @@ export function Switch({
|
|
|
848
838
|
) => {
|
|
849
839
|
const overrideRadius = (switchProps as any)?.borderRadius;
|
|
850
840
|
const radiusStop = resolveSwitchRadiusStop(pointy, knobProps.borderRadius.borderRadius);
|
|
851
|
-
const
|
|
852
|
-
const thumbPaintedHeight = thumbHeight - thumbInset * 2;
|
|
841
|
+
const thumbPaintedHeight = footprint.thumbSize;
|
|
853
842
|
const trackRadius =
|
|
854
843
|
overrideRadius != null
|
|
855
844
|
? (resolveRadiusValue(overrideRadius) ?? 1000)
|
|
@@ -859,11 +848,17 @@ export function Switch({
|
|
|
859
848
|
? (resolveRadiusValue(overrideRadius) ?? 1000)
|
|
860
849
|
: resolveRadiusClass("BINARY", radiusStop, { heightPx: thumbPaintedHeight });
|
|
861
850
|
|
|
851
|
+
const radiusResolution = overrideRadius == null ? radiusResolutionProps("BINARY") : undefined;
|
|
862
852
|
let frameProps: Record<string, any> = {
|
|
863
853
|
borderRadius: overrideRadius ?? trackRadius,
|
|
864
|
-
height:
|
|
865
|
-
minHeight:
|
|
866
|
-
width:
|
|
854
|
+
height: trackHeight,
|
|
855
|
+
minHeight: trackHeight,
|
|
856
|
+
width: trackWidth,
|
|
857
|
+
...pressSlopProps(
|
|
858
|
+
trackHeight,
|
|
859
|
+
!grownTarget,
|
|
860
|
+
trackWidth >= TOUCH_HEIGHT_FLOOR ? "vertical" : "both",
|
|
861
|
+
),
|
|
867
862
|
};
|
|
868
863
|
|
|
869
864
|
// Grown-target mode (SP-FIXED): grow the pressable frame (44px in cells,
|
|
@@ -944,12 +939,14 @@ export function Switch({
|
|
|
944
939
|
} else if (switchChecked) {
|
|
945
940
|
frameProps = {
|
|
946
941
|
...frameProps,
|
|
942
|
+
...radiusResolution,
|
|
947
943
|
backgroundColor: formSwitchColors.track.on,
|
|
948
944
|
borderColor: formSwitchColors.track.on,
|
|
949
945
|
};
|
|
950
946
|
} else {
|
|
951
947
|
frameProps = {
|
|
952
948
|
...frameProps,
|
|
949
|
+
...radiusResolution,
|
|
953
950
|
backgroundColor: knobProps.outlined ? "transparent" : formSwitchColors.track.off,
|
|
954
951
|
borderColor: formControlColors.boundary,
|
|
955
952
|
};
|
|
@@ -980,7 +977,7 @@ export function Switch({
|
|
|
980
977
|
hasError={hasError}
|
|
981
978
|
id={id}
|
|
982
979
|
sizeToken={sizeToken}
|
|
983
|
-
|
|
980
|
+
footprint={footprint}
|
|
984
981
|
thumbRadius={thumbRadius}
|
|
985
982
|
transition={resolveSwitchMotion(knobProps.transition as string | undefined)}
|
|
986
983
|
frameProps={frameProps}
|
|
@@ -989,6 +986,7 @@ export function Switch({
|
|
|
989
986
|
rightIcon={rightIcon}
|
|
990
987
|
inputSurface={grownTarget ? {} : knobProps.inputSurface}
|
|
991
988
|
cellTrack={cellTrack}
|
|
989
|
+
radiusResolution={radiusResolution}
|
|
992
990
|
accessibilityLabel={
|
|
993
991
|
typeof label === "string" ? `${label}${required ? " *" : ""}` : ariaLabel
|
|
994
992
|
}
|
|
@@ -1017,7 +1015,7 @@ export function Switch({
|
|
|
1017
1015
|
|
|
1018
1016
|
if (elevationWrapperProps.elevation && !grownTarget) {
|
|
1019
1017
|
return (
|
|
1020
|
-
<View {...elevationWrapperProps} borderRadius={trackRadius}>
|
|
1018
|
+
<View {...elevationWrapperProps} borderRadius={trackRadius} {...radiusResolution}>
|
|
1021
1019
|
{switchElement}
|
|
1022
1020
|
</View>
|
|
1023
1021
|
);
|
|
@@ -1033,7 +1031,6 @@ export function Switch({
|
|
|
1033
1031
|
// deterministic px label width — never % inside this auto-width row
|
|
1034
1032
|
// (%-width collapses and overflows the next sibling).
|
|
1035
1033
|
const skeletonStop = resolveSwitchRadiusStop(pointy, knobProps.borderRadius.borderRadius);
|
|
1036
|
-
const trackWidth = thumbHeight * 2 + borderWidth * 2;
|
|
1037
1034
|
return (
|
|
1038
1035
|
<FieldLayout id={id} size={size} knobProps={knobProps} compactSpacing>
|
|
1039
1036
|
<XStack {...knobProps.gap} alignItems="center" height={sizeToken}>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useForm } from "@tanstack/react-form";
|
|
2
2
|
import { act, fireEvent, waitFor } from "@testing-library/react";
|
|
3
3
|
import { Preset } from "@multiplatform.one/theme";
|
|
4
|
-
import { YStack } from "tamagui";
|
|
4
|
+
import { Theme, YStack } from "tamagui";
|
|
5
5
|
import { describe, expect, it, vi } from "vitest";
|
|
6
6
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
7
7
|
import { Form } from "../../Form";
|
|
@@ -406,6 +406,18 @@ describe("TextArea", () => {
|
|
|
406
406
|
expect(fullClasses.join(" ")).not.toMatch(/t-radius-12/);
|
|
407
407
|
});
|
|
408
408
|
|
|
409
|
+
it("declares the cap on the painted box with the knob stops it resolved", () => {
|
|
410
|
+
const result = renderWithProviders(
|
|
411
|
+
<Preset overrides={{ borderRadius: "full", space: "small" }}>
|
|
412
|
+
<TextArea label="Notes" defaultValue="x" />
|
|
413
|
+
</Preset>,
|
|
414
|
+
);
|
|
415
|
+
const box = result.container.querySelector("textarea")?.closest(".mp-composite-ring");
|
|
416
|
+
expect(box?.getAttribute("data-constraint-container")).toBe("TextArea");
|
|
417
|
+
expect(box?.getAttribute("data-radius-knob")).toBe("full");
|
|
418
|
+
expect(box?.getAttribute("data-space-knob")).toBe("small");
|
|
419
|
+
});
|
|
420
|
+
|
|
409
421
|
it("caps large under space=small at the padding px", () => {
|
|
410
422
|
const result = renderWithProviders(
|
|
411
423
|
<Preset overrides={{ borderRadius: "large", space: "small" }}>
|
|
@@ -414,6 +426,23 @@ describe("TextArea", () => {
|
|
|
414
426
|
);
|
|
415
427
|
expect(boxRadiusClasses(result.container as HTMLElement)).toEqual(["_btlr-13px"]);
|
|
416
428
|
});
|
|
429
|
+
|
|
430
|
+
it("caps full at the padding px in both schemes, never at the $4 clamp", () => {
|
|
431
|
+
for (const scheme of ["light", "dark"] as const) {
|
|
432
|
+
const ui = (
|
|
433
|
+
<Preset overrides={{ borderRadius: "full", space: "medium" }}>
|
|
434
|
+
<TextArea label="Notes" defaultValue="x" />
|
|
435
|
+
</Preset>
|
|
436
|
+
);
|
|
437
|
+
const result = renderWithProviders(
|
|
438
|
+
scheme === "dark" ? <Theme name="dark">{ui}</Theme> : ui,
|
|
439
|
+
);
|
|
440
|
+
const classes = boxRadiusClasses(result.container as HTMLElement);
|
|
441
|
+
expect(classes, scheme).toEqual(["_btlr-18px"]);
|
|
442
|
+
expect(classes.join(" "), scheme).not.toMatch(/t-radius-(4|12)/);
|
|
443
|
+
result.unmount();
|
|
444
|
+
}
|
|
445
|
+
});
|
|
417
446
|
});
|
|
418
447
|
|
|
419
448
|
describe("LC-20 skeleton mirrors anatomy", () => {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { containerCapProps, useTouchSurface } from "@multiplatform.one/theme";
|
|
1
2
|
import type { ComponentProps, Ref, RefObject, ReactNode } from "react";
|
|
2
3
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
4
|
import type { AnyFormApi } from "../../types";
|
|
@@ -89,6 +90,7 @@ export function TextArea({
|
|
|
89
90
|
skeleton,
|
|
90
91
|
compact,
|
|
91
92
|
}: TextAreaProps) {
|
|
93
|
+
const hydrationTouch = useTouchSurface();
|
|
92
94
|
const { resolvedForm, knobProps, id } = useFormField({ form: formProp, id: idProp, compact });
|
|
93
95
|
const resolvedValidators = useResolvedValidators(required, validators, label, name);
|
|
94
96
|
const theme = useTheme();
|
|
@@ -100,8 +102,8 @@ export function TextArea({
|
|
|
100
102
|
const [autoHeight, setAutoHeight] = useState<number | undefined>(undefined);
|
|
101
103
|
|
|
102
104
|
const resolvedSize = (size ?? knobProps.sizeToken) as SizeTokens;
|
|
103
|
-
const minHeightPx = getFieldHeight(resolvedSize, minRows || 3);
|
|
104
|
-
const maxHeightPx = getFieldHeight(resolvedSize, maxRows);
|
|
105
|
+
const minHeightPx = getFieldHeight(resolvedSize, minRows || 3, hydrationTouch);
|
|
106
|
+
const maxHeightPx = getFieldHeight(resolvedSize, maxRows, hydrationTouch);
|
|
105
107
|
// Polaris/GOV.UK: a declared limit always surfaces a live count. Explicit
|
|
106
108
|
// `showCount={false}` ejects.
|
|
107
109
|
const showCharacterCount = showCount ?? maxLength != null;
|
|
@@ -215,7 +217,7 @@ export function TextArea({
|
|
|
215
217
|
| "hidden",
|
|
216
218
|
}
|
|
217
219
|
: numberOfLines
|
|
218
|
-
? { numberOfLines, minHeight: getFieldHeight(resolvedSize, numberOfLines) }
|
|
220
|
+
? { numberOfLines, minHeight: getFieldHeight(resolvedSize, numberOfLines, hydrationTouch) }
|
|
219
221
|
: { numberOfLines: minRows, minHeight: minHeightPx };
|
|
220
222
|
|
|
221
223
|
const isControlled = value !== undefined;
|
|
@@ -242,6 +244,7 @@ export function TextArea({
|
|
|
242
244
|
width="100%"
|
|
243
245
|
alignItems="stretch"
|
|
244
246
|
{...knobProps.containerRadius}
|
|
247
|
+
{...containerCapProps("TextArea", knobProps.borderRadius.borderRadius, knobProps.space)}
|
|
245
248
|
cursor={disabled ? "not-allowed" : "text"}
|
|
246
249
|
theme={hasError ? "red" : undefined}
|
|
247
250
|
// LC-40: Box owns the disabled chrome wash (value text stays >= AA);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { fireEvent } from "@testing-library/react";
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { TimePicker } from "./index.native";
|
|
5
|
+
|
|
6
|
+
vi.mock("tamagui", async (importOriginal) => ({
|
|
7
|
+
...(await importOriginal<typeof import("tamagui")>()),
|
|
8
|
+
isWeb: false,
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
vi.mock("../nativeDateTime/OsDateTimeSheet", () => ({
|
|
12
|
+
OsDateTimeSheet: ({ open, onConfirm }: { open: boolean; onConfirm: (date: Date) => void }) =>
|
|
13
|
+
open ? (
|
|
14
|
+
<div role="dialog" aria-label="OS time">
|
|
15
|
+
<button onClick={() => onConfirm(new Date(2026, 2, 5, 14, 30))}>Confirm OS time</button>
|
|
16
|
+
</div>
|
|
17
|
+
) : null,
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
const paintedBox = (result: ReturnType<typeof renderWithProviders>) =>
|
|
21
|
+
result.getByTestId("time-picker-glyph").parentElement as HTMLElement;
|
|
22
|
+
|
|
23
|
+
describe("native TimePicker trigger (MPO-363)", () => {
|
|
24
|
+
it("paints the empty trigger across the row with its placeholder", () => {
|
|
25
|
+
const result = renderWithProviders(<TimePicker />);
|
|
26
|
+
expect(getComputedStyle(result.getByRole("button", { name: "Time" })).width).toBe("100%");
|
|
27
|
+
const box = paintedBox(result);
|
|
28
|
+
expect(getComputedStyle(box).flexGrow).toBe("1");
|
|
29
|
+
expect(getComputedStyle(box).minWidth).toBe("0px");
|
|
30
|
+
expect(box.querySelector("input")?.placeholder).toBe("Select time");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("leaves the tap to the native press owner", () => {
|
|
34
|
+
const result = renderWithProviders(<TimePicker />);
|
|
35
|
+
expect(getComputedStyle(result.getByTestId("time-picker-trigger")).pointerEvents).toBe("none");
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("renders a picked time inside the same full-row box", () => {
|
|
39
|
+
const onChange = vi.fn();
|
|
40
|
+
const result = renderWithProviders(<TimePicker onChange={onChange} />);
|
|
41
|
+
fireEvent.click(result.getByRole("button", { name: "Time" }));
|
|
42
|
+
fireEvent.click(result.getByRole("button", { name: "Confirm OS time" }));
|
|
43
|
+
expect(onChange).toHaveBeenCalledExactlyOnceWith("14:30");
|
|
44
|
+
const box = paintedBox(result);
|
|
45
|
+
expect(getComputedStyle(box).flexGrow).toBe("1");
|
|
46
|
+
expect(box.querySelector("input")?.value).toBe("2:30 PM");
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -150,9 +150,13 @@ export function TimePickerInputTrigger({
|
|
|
150
150
|
width="100%"
|
|
151
151
|
cursor={disabled ? "not-allowed" : "pointer"}
|
|
152
152
|
data-testid="time-picker-trigger"
|
|
153
|
+
pointerEvents={isWeb ? undefined : "none"}
|
|
153
154
|
>
|
|
154
155
|
<InputParts.Box
|
|
155
156
|
theme={error ? "red" : undefined}
|
|
157
|
+
// Yoga has no intrinsic TextInput width: without this the empty
|
|
158
|
+
// trigger collapses to its clock glyph on native (MPO-363).
|
|
159
|
+
{...(isWeb ? undefined : { flex: 1, minWidth: 0 })}
|
|
156
160
|
elevation={undefined}
|
|
157
161
|
onPress={isWeb && !disabled ? onOpen : undefined}
|
|
158
162
|
{...(disabled ? { opacity: 0.5, pointerEvents: "none" as const } : undefined)}
|
|
@@ -3,6 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
3
3
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
4
4
|
import {
|
|
5
5
|
MIN_PRESS_TARGET,
|
|
6
|
+
Preset,
|
|
6
7
|
createThemesBuilder,
|
|
7
8
|
defaultAccentTheme,
|
|
8
9
|
defaultBaseTheme,
|
|
@@ -301,9 +302,13 @@ describe("ToggleGroup", () => {
|
|
|
301
302
|
return wrapper;
|
|
302
303
|
}
|
|
303
304
|
|
|
305
|
+
// The wrapper only exists to carry a shadow, and the default stop paints
|
|
306
|
+
// none on a control since MPO-96, so these render at elevation medium.
|
|
304
307
|
it("lays the wrapper out as a row so the segment's zero flex-basis sizes width, not height", () => {
|
|
305
308
|
const { container } = renderWithHouseThemes(
|
|
306
|
-
<
|
|
309
|
+
<Preset overrides={{ elevation: "medium" }}>
|
|
310
|
+
<ToggleGroup label="Alignment" options={options} defaultValue="left" />
|
|
311
|
+
</Preset>,
|
|
307
312
|
);
|
|
308
313
|
const segments = [...container.querySelectorAll("[data-state]")] as HTMLElement[];
|
|
309
314
|
expect(segments).toHaveLength(3);
|
|
@@ -317,12 +322,14 @@ describe("ToggleGroup", () => {
|
|
|
317
322
|
|
|
318
323
|
it("keeps the row wrapper in the vertical orientation", () => {
|
|
319
324
|
const { container } = renderWithHouseThemes(
|
|
320
|
-
<
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
325
|
+
<Preset overrides={{ elevation: "medium" }}>
|
|
326
|
+
<ToggleGroup
|
|
327
|
+
label="Alignment"
|
|
328
|
+
options={options}
|
|
329
|
+
defaultValue="left"
|
|
330
|
+
orientation="vertical"
|
|
331
|
+
/>
|
|
332
|
+
</Preset>,
|
|
326
333
|
);
|
|
327
334
|
const segments = [...container.querySelectorAll("[data-state]")] as HTMLElement[];
|
|
328
335
|
expect(segments).toHaveLength(3);
|
|
@@ -334,7 +341,9 @@ describe("ToggleGroup", () => {
|
|
|
334
341
|
|
|
335
342
|
it("leaves the group frame flat while the segments carry the shadow (E-FLAT)", () => {
|
|
336
343
|
const { container } = renderWithHouseThemes(
|
|
337
|
-
<
|
|
344
|
+
<Preset overrides={{ elevation: "medium" }}>
|
|
345
|
+
<ToggleGroup label="Alignment" options={options} defaultValue="left" />
|
|
346
|
+
</Preset>,
|
|
338
347
|
);
|
|
339
348
|
const group = container.querySelector('[role="group"]') as HTMLElement;
|
|
340
349
|
expect(group).toBeTruthy();
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-221: the picker shells hand FloatingPanel `contentPadding="none"`.
|
|
3
|
+
* Each picker owns one compact inset (MPO-262), so the panel adding its own
|
|
4
|
+
* `panelPadding` stacked a second pad around the widget.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
8
|
+
import React from "react";
|
|
9
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
10
|
+
|
|
11
|
+
const shellProps: Array<Record<string, unknown>> = [];
|
|
12
|
+
|
|
13
|
+
vi.mock("../FloatingPanel", async (importOriginal) => {
|
|
14
|
+
const actual = await importOriginal<typeof import("../FloatingPanel")>();
|
|
15
|
+
return {
|
|
16
|
+
...actual,
|
|
17
|
+
FloatingPanel: (props: Record<string, unknown>) => {
|
|
18
|
+
shellProps.push(props);
|
|
19
|
+
return React.createElement(
|
|
20
|
+
"div",
|
|
21
|
+
{ "data-testid": "shell" },
|
|
22
|
+
props.trigger as React.ReactNode,
|
|
23
|
+
props.children as React.ReactNode,
|
|
24
|
+
);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
import { ColorPicker } from "./ColorPicker";
|
|
30
|
+
import { DatePicker } from "./DatePicker";
|
|
31
|
+
import { TimePicker } from "./TimePicker";
|
|
32
|
+
|
|
33
|
+
describe("picker shells do not pad around the widget (MPO-221)", () => {
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
shellProps.length = 0;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("ColorPicker passes contentPadding none and pads its own body", () => {
|
|
39
|
+
const { container } = renderWithProviders(<ColorPicker name="c" label="Color" />);
|
|
40
|
+
expect(shellProps.at(-1)?.contentPadding).toBe("none");
|
|
41
|
+
expect(container.querySelector('[data-testid="color-picker-panel"]')).not.toBeNull();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("TimePicker passes contentPadding none and pads its own panel", () => {
|
|
45
|
+
const { container } = renderWithProviders(<TimePicker name="t" label="Time" />);
|
|
46
|
+
expect(shellProps.at(-1)?.contentPadding).toBe("none");
|
|
47
|
+
expect(container.querySelector('[data-testid="time-picker-panel"]')).not.toBeNull();
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("DatePicker passes contentPadding none", () => {
|
|
51
|
+
renderWithProviders(<DatePicker name="d" label="Date" />);
|
|
52
|
+
expect(shellProps.at(-1)?.contentPadding).toBe("none");
|
|
53
|
+
});
|
|
54
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -227,6 +227,9 @@ export type {
|
|
|
227
227
|
ReverseGeocodeQuery,
|
|
228
228
|
} from "./fields/Geolocation/geocoder";
|
|
229
229
|
export { resolveGeocoder } from "./fields/Geolocation/geocoder";
|
|
230
|
+
export { GeocoderProvider, useGeocoder } from "./fields/Geolocation/geocoderContext";
|
|
231
|
+
export { createPhotonGeocoder } from "./fields/Geolocation/photonGeocoder";
|
|
232
|
+
export type { PhotonGeocoderOptions } from "./fields/Geolocation/photonGeocoder";
|
|
230
233
|
|
|
231
234
|
export { ImageField } from "./fields/ImageField";
|
|
232
235
|
export type { ImageFieldProps } from "./fields/ImageField";
|
|
@@ -273,6 +276,9 @@ export {
|
|
|
273
276
|
panelTransition,
|
|
274
277
|
panelViewportPadding,
|
|
275
278
|
} from "./FloatingPanel";
|
|
279
|
+
export { PanelPortal } from "./FloatingPanel/PanelPortal";
|
|
280
|
+
export type { PanelPortalProps } from "./FloatingPanel/PanelPortal";
|
|
281
|
+
export { containsAcrossPanels } from "./shared/panelPortal";
|
|
276
282
|
export type {
|
|
277
283
|
FloatingPanelProps,
|
|
278
284
|
PanelWidthMode,
|
|
@@ -347,6 +353,8 @@ export {
|
|
|
347
353
|
clampRadiusInStateProps,
|
|
348
354
|
} from "./shared/utils";
|
|
349
355
|
export type { ClampRadiusInStatePropsOptions, StatePropsRadiusClass } from "./shared/utils";
|
|
356
|
+
export { pressSlopOutsetProps, pressSlopProps } from "./shared/pressSlopProps";
|
|
357
|
+
export type { PressSlopProps } from "./shared/pressSlopProps";
|
|
350
358
|
|
|
351
359
|
// ── Table Cell Context (for chromeless field rendering) ───────
|
|
352
360
|
export { TableCellContext, useTableCellContext, useIsInTableCell } from "./shared/tableCellContext";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web floating panels render through a portal (MPO-335), so a panel's DOM is
|
|
3
|
+
* no longer inside the control that opened it. A `Node.contains` check that
|
|
4
|
+
* decides "inside or outside" follows the portal back to that control here,
|
|
5
|
+
* or a press in a cell editor's dropdown reads as a press outside the cell.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const panelPortalAttribute = "data-fp-portal";
|
|
9
|
+
|
|
10
|
+
const anchors = new WeakMap<Element, Element>();
|
|
11
|
+
|
|
12
|
+
export function registerPanelPortal(portal: Element, anchor: Element): () => void {
|
|
13
|
+
anchors.set(portal, anchor);
|
|
14
|
+
return () => {
|
|
15
|
+
if (anchors.get(portal) === anchor) anchors.delete(portal);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** The element that opened the portaled panel `node` sits in, or null. */
|
|
20
|
+
export function panelPortalAnchor(node: Node): Element | null {
|
|
21
|
+
const element = node instanceof Element ? node : node.parentElement;
|
|
22
|
+
const portal = element?.closest(`[${panelPortalAttribute}]`);
|
|
23
|
+
return portal ? (anchors.get(portal) ?? null) : null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** `root.contains(target)`, where a portaled panel counts as part of its anchor. */
|
|
27
|
+
export function containsAcrossPanels(root: Node | null | undefined, target: unknown): boolean {
|
|
28
|
+
if (!root || typeof Node === "undefined" || !(target instanceof Node)) return false;
|
|
29
|
+
let node: Node | null = target;
|
|
30
|
+
// Each hop climbs out of one portal; nesting is shallow, the cap stops a cycle.
|
|
31
|
+
for (let hop = 0; node && hop < 32; hop++) {
|
|
32
|
+
if (root.contains(node)) return true;
|
|
33
|
+
node = panelPortalAnchor(node);
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { pressSlopProps } from "./pressSlopProps";
|
|
2
|
+
import { pressSlopOutsetProps, pressSlopProps } from "./pressSlopProps";
|
|
3
3
|
import { pickerTriggerContract } from "./pickerTriggerContract";
|
|
4
4
|
|
|
5
5
|
const platform = vi.hoisted(() => ({ web: true }));
|
|
@@ -37,3 +37,29 @@ describe("press-target deficient dimensions", () => {
|
|
|
37
37
|
expect(pressSlopProps(28, true)).toEqual({ hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } });
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
|
+
|
|
41
|
+
describe("pitch-limited outset (LC-54, K12)", () => {
|
|
42
|
+
it("writes the given outset on the vertical axis on web, whatever the painted size", () => {
|
|
43
|
+
expect(pressSlopOutsetProps(4, "vertical")).toEqual({
|
|
44
|
+
"data-mp-press-slop": "4",
|
|
45
|
+
"data-mp-press-axis": "vertical",
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it("floors a fractional outset so the target stays inside its pitch", () => {
|
|
49
|
+
expect(pressSlopOutsetProps(3.5, "vertical")).toEqual({
|
|
50
|
+
"data-mp-press-slop": "3",
|
|
51
|
+
"data-mp-press-axis": "vertical",
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
it("writes nothing for an outset under one pixel", () => {
|
|
55
|
+
expect(pressSlopOutsetProps(0, "vertical")).toBeUndefined();
|
|
56
|
+
expect(pressSlopOutsetProps(0.5)).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
it("gives native a vertical-only hitSlop", () => {
|
|
59
|
+
platform.web = false;
|
|
60
|
+
expect(pressSlopOutsetProps(3, "vertical")).toEqual({
|
|
61
|
+
hitSlop: { top: 3, bottom: 3, left: 0, right: 0 },
|
|
62
|
+
});
|
|
63
|
+
expect(pressSlopOutsetProps(3)).toEqual({ hitSlop: { top: 3, bottom: 3, left: 3, right: 3 } });
|
|
64
|
+
});
|
|
65
|
+
});
|