@multiplatform.one/forms 7.11.0 → 7.16.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 +11 -4
- package/dist/cjs/Button/index.native.js +11 -4
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +5 -2
- package/dist/cjs/Chip/index.native.js +6 -7
- package/dist/cjs/Chip/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 +117 -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 +16 -5
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +16 -5
- 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/Skeleton/index.cjs +1 -3
- package/dist/cjs/Skeleton/index.native.js +3 -6
- package/dist/cjs/Skeleton/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/fieldLayout.cjs +1 -1
- package/dist/cjs/fieldLayout.native.js +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/index.cjs +1 -1
- package/dist/cjs/fields/Barcode/index.native.js +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 +3 -1
- package/dist/cjs/fields/ColorPicker/index.native.js +3 -1
- package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/parts.cjs +2 -1
- package/dist/cjs/fields/ColorPicker/parts.native.js +2 -1
- 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/DatePicker/parts.cjs +2 -1
- package/dist/cjs/fields/DatePicker/parts.native.js +2 -1
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.cjs +6 -4
- package/dist/cjs/fields/Duration/index.native.js +6 -4
- 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/Icon/index.cjs +1 -1
- package/dist/cjs/fields/Icon/index.native.js +1 -1
- package/dist/cjs/fields/Icon/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.cjs +8 -6
- package/dist/cjs/fields/Input/index.native.js +8 -6
- 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 +12 -10
- package/dist/cjs/fields/SearchInput/index.native.js +12 -10
- 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 +9 -6
- package/dist/cjs/fields/TextArea/index.native.js +9 -6
- 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 +6 -1
- package/dist/cjs/fields/TimePicker/parts.native.js +8 -1
- 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 +11 -4
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +11 -4
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +6 -3
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +7 -8
- package/dist/esm/Chip/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 +119 -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 +17 -6
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +17 -6
- 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/Skeleton/index.mjs +1 -3
- package/dist/esm/Skeleton/index.mjs.map +1 -1
- package/dist/esm/Skeleton/index.native.js +3 -6
- package/dist/esm/Skeleton/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/fieldLayout.mjs +1 -1
- package/dist/esm/fieldLayout.mjs.map +1 -1
- package/dist/esm/fieldLayout.native.js +1 -1
- package/dist/esm/fieldLayout.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/index.mjs +1 -1
- package/dist/esm/fields/Barcode/index.mjs.map +1 -1
- package/dist/esm/fields/Barcode/index.native.js +1 -1
- package/dist/esm/fields/Barcode/index.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 +3 -1
- package/dist/esm/fields/ColorPicker/index.mjs.map +1 -1
- package/dist/esm/fields/ColorPicker/index.native.js +3 -1
- package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.mjs +2 -1
- package/dist/esm/fields/ColorPicker/parts.mjs.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.native.js +2 -1
- 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/DatePicker/parts.mjs +2 -1
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +2 -1
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.mjs +4 -2
- package/dist/esm/fields/Duration/index.mjs.map +1 -1
- package/dist/esm/fields/Duration/index.native.js +4 -2
- 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/Icon/index.mjs +1 -1
- package/dist/esm/fields/Icon/index.mjs.map +1 -1
- package/dist/esm/fields/Icon/index.native.js +1 -1
- package/dist/esm/fields/Icon/index.native.js.map +1 -1
- package/dist/esm/fields/Input/index.mjs +4 -2
- package/dist/esm/fields/Input/index.mjs.map +1 -1
- package/dist/esm/fields/Input/index.native.js +4 -2
- 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 +7 -5
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +7 -5
- 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 +9 -6
- package/dist/esm/fields/TextArea/index.mjs.map +1 -1
- package/dist/esm/fields/TextArea/index.native.js +9 -6
- 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 +6 -1
- package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js +8 -1
- 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 +11 -4
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +11 -4
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +6 -3
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +6 -7
- package/dist/jsx/Chip/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 +119 -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 +17 -6
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +16 -5
- 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/Skeleton/index.mjs +1 -3
- package/dist/jsx/Skeleton/index.mjs.map +1 -1
- package/dist/jsx/Skeleton/index.native.js +3 -6
- package/dist/jsx/Skeleton/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/fieldLayout.mjs +1 -1
- package/dist/jsx/fieldLayout.mjs.map +1 -1
- package/dist/jsx/fieldLayout.native.js +1 -1
- package/dist/jsx/fieldLayout.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/index.mjs +1 -1
- package/dist/jsx/fields/Barcode/index.mjs.map +1 -1
- package/dist/jsx/fields/Barcode/index.native.js +1 -1
- package/dist/jsx/fields/Barcode/index.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 +3 -1
- package/dist/jsx/fields/ColorPicker/index.mjs.map +1 -1
- package/dist/jsx/fields/ColorPicker/index.native.js +3 -1
- package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/jsx/fields/ColorPicker/parts.mjs +2 -1
- package/dist/jsx/fields/ColorPicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/ColorPicker/parts.native.js +2 -1
- 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/DatePicker/parts.mjs +2 -1
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +2 -1
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Duration/index.mjs +4 -2
- package/dist/jsx/fields/Duration/index.mjs.map +1 -1
- package/dist/jsx/fields/Duration/index.native.js +6 -4
- 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/Icon/index.mjs +1 -1
- package/dist/jsx/fields/Icon/index.mjs.map +1 -1
- package/dist/jsx/fields/Icon/index.native.js +1 -1
- package/dist/jsx/fields/Icon/index.native.js.map +1 -1
- package/dist/jsx/fields/Input/index.mjs +4 -2
- package/dist/jsx/fields/Input/index.mjs.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +8 -6
- 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 +7 -5
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +12 -10
- 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 +9 -6
- package/dist/jsx/fields/TextArea/index.mjs.map +1 -1
- package/dist/jsx/fields/TextArea/index.native.js +9 -6
- 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 +6 -1
- package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js +8 -1
- 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.lc71.spec.tsx +17 -0
- package/src/Button/Button.radiusLaw.spec.tsx +153 -0
- package/src/Button/index.tsx +11 -4
- package/src/Chip/Chip.spec.tsx +23 -0
- package/src/Chip/index.tsx +10 -6
- 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 +180 -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.spec.tsx +81 -0
- package/src/FloatingPanel/useFloatingPanel.ts +39 -12
- 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/Skeleton/Skeleton.radius.spec.tsx +30 -0
- package/src/Skeleton/index.tsx +4 -7
- package/src/Wheel/Wheel.spec.tsx +9 -2
- package/src/Wheel/index.tsx +0 -2
- package/src/errorTint.spec.tsx +70 -0
- package/src/fieldFamilyStories.radius.spec.tsx +48 -0
- package/src/fieldLayout.tsx +1 -1
- 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/Barcode/index.tsx +3 -3
- 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 +7 -2
- package/src/fields/ColorPicker/parts.tsx +2 -1
- 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/DatePicker/parts.tsx +2 -1
- package/src/fields/Duration/index.tsx +4 -2
- 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/Icon/index.tsx +1 -1
- package/src/fields/Input/index.tsx +4 -2
- 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 +6 -5
- 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 +9 -6
- package/src/fields/TimePicker/TimePicker.native.spec.tsx +48 -0
- package/src/fields/TimePicker/catalog.tsx +1 -0
- package/src/fields/TimePicker/parts.tsx +5 -1
- 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/Chip/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 +6 -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 +10 -4
- 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/Skeleton/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/DatePicker/parts.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
|
@@ -16,12 +16,14 @@ const SCHEMES = ["light", "dark"] as const;
|
|
|
16
16
|
|
|
17
17
|
afterEach(cleanup);
|
|
18
18
|
|
|
19
|
+
const atomPx = (value: string) => Number(value.replace("--", "."));
|
|
20
|
+
|
|
19
21
|
function paintedHeight(el: HTMLElement): number {
|
|
20
22
|
const rect = el.getBoundingClientRect().height;
|
|
21
23
|
if (rect > 0) return rect;
|
|
22
24
|
for (const cls of String(el.className || "").split(/\s+/)) {
|
|
23
|
-
const m = /^_h-(\d+(
|
|
24
|
-
if (m) return
|
|
25
|
+
const m = /^_h-(\d+(?:--\d+)?)px$/.exec(cls);
|
|
26
|
+
if (m) return atomPx(m[1]);
|
|
25
27
|
}
|
|
26
28
|
if (el.style.height) {
|
|
27
29
|
const n = parseFloat(el.style.height);
|
|
@@ -31,14 +33,17 @@ function paintedHeight(el: HTMLElement): number {
|
|
|
31
33
|
return cs > 0 ? cs : 0;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Rest atom is `_btlr-22px`; hover/press/focus are `_btlr-0hover-22px` / `_btlr-0active-22px` / `_btlr-0focus-22px`.
|
|
38
|
+
* An odd-height part rounds to a half pixel, which tamagui writes with `--` for the dot (`_btlr-14--5px`).
|
|
39
|
+
*/
|
|
35
40
|
function paintedRadius(el: HTMLElement, state?: "hover" | "active" | "focus"): number {
|
|
36
41
|
const className = String(el.className || "");
|
|
37
42
|
const re = state
|
|
38
|
-
? new RegExp(`_btlr-0${state}-(\\d+(
|
|
39
|
-
: /(?:^|\s)_btlr-(\d+(
|
|
43
|
+
? new RegExp(`_btlr-0${state}-(\\d+(?:--\\d+)?)px`)
|
|
44
|
+
: /(?:^|\s)_btlr-(\d+(?:--\d+)?)px(?:\s|$)/;
|
|
40
45
|
const m = re.exec(className);
|
|
41
|
-
if (m) return
|
|
46
|
+
if (m) return atomPx(m[1]);
|
|
42
47
|
if (!state && el.style.borderRadius) {
|
|
43
48
|
const n = parseFloat(el.style.borderRadius);
|
|
44
49
|
if (Number.isFinite(n)) return n;
|
|
@@ -112,3 +117,29 @@ describe("Switch BINARY radius (thumb and track are one member)", () => {
|
|
|
112
117
|
});
|
|
113
118
|
}
|
|
114
119
|
});
|
|
120
|
+
|
|
121
|
+
describe("Switch declares its BINARY class for the constraint audit", () => {
|
|
122
|
+
it("thumb and track carry data-radius-resolution at every stop", () => {
|
|
123
|
+
for (const stop of STOPS) {
|
|
124
|
+
const result = mountSwitch(stop, "light");
|
|
125
|
+
const { track, thumb } = parts(result);
|
|
126
|
+
expect(track.getAttribute("data-radius-resolution")).toBe("BINARY");
|
|
127
|
+
expect(thumb.getAttribute("data-radius-resolution")).toBe("BINARY");
|
|
128
|
+
result.unmount();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it("a consumer radius override drops the declaration", () => {
|
|
133
|
+
const result = renderWithProviders(
|
|
134
|
+
<Switch
|
|
135
|
+
name="sw-override"
|
|
136
|
+
defaultValue={false}
|
|
137
|
+
aria-label="Notifications"
|
|
138
|
+
switchProps={{ borderRadius: 9 } as never}
|
|
139
|
+
/>,
|
|
140
|
+
);
|
|
141
|
+
const { track, thumb } = parts(result);
|
|
142
|
+
expect(track.hasAttribute("data-radius-resolution")).toBe(false);
|
|
143
|
+
expect(thumb.hasAttribute("data-radius-resolution")).toBe(false);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { sizeRecipeForToken } from "@multiplatform.one/theme";
|
|
2
|
+
import { isWeb } from "tamagui";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* LC-91 SWITCH-FOOTPRINT (MPO-356). The recipe height is the control ROW and
|
|
6
|
+
* the press target (44 at `$4`); the painted switch is a glyph inside it, so
|
|
7
|
+
* it takes the platform switch's own fraction of that height:
|
|
8
|
+
*
|
|
9
|
+
* - web: Tamagui's Switch, `getSwitchHeight` = size × 0.65 at a 2:1 aspect,
|
|
10
|
+
* thumb filling the track (tamagui.dev `$4` = 58 × 29, thumb 29).
|
|
11
|
+
* - native: UISwitch, 51 × 31 pt with a 27 pt thumb (2 pt rim gutter) at the
|
|
12
|
+
* 44 medium stop. Material 3's 52 × 32 sits inside the same 10 percent.
|
|
13
|
+
*
|
|
14
|
+
* Painting the whole recipe height is what made `$4` an 86 × 44 slab once
|
|
15
|
+
* MPO-13 lifted the recipe from 32 to Tamagui's 44.
|
|
16
|
+
*/
|
|
17
|
+
const webSwitch = { heightRatio: 0.65, aspect: 2, rimGutter: 0 };
|
|
18
|
+
const nativeSwitch = { heightRatio: 31 / 44, aspect: 51 / 31, rimGutter: 2 };
|
|
19
|
+
|
|
20
|
+
export type SwitchFootprint = {
|
|
21
|
+
trackHeight: number;
|
|
22
|
+
trackWidth: number;
|
|
23
|
+
/** Track height inside its border: the lane the thumb rides in. */
|
|
24
|
+
thumbSlot: number;
|
|
25
|
+
thumbInset: number;
|
|
26
|
+
thumbSize: number;
|
|
27
|
+
/** Thumb travel from off to on. */
|
|
28
|
+
travel: number;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export function switchFootprint(sizeToken: string, borderWidth: number): SwitchFootprint {
|
|
32
|
+
const platform = isWeb ? webSwitch : nativeSwitch;
|
|
33
|
+
const trackHeight = Math.round(sizeRecipeForToken(sizeToken).height * platform.heightRatio);
|
|
34
|
+
const trackWidth = Math.round(trackHeight * platform.aspect);
|
|
35
|
+
const thumbSlot = trackHeight - borderWidth * 2;
|
|
36
|
+
const thumbInset = Math.max(0, platform.rimGutter - borderWidth);
|
|
37
|
+
return {
|
|
38
|
+
trackHeight,
|
|
39
|
+
trackWidth,
|
|
40
|
+
thumbSlot,
|
|
41
|
+
thumbInset,
|
|
42
|
+
thumbSize: thumbSlot - thumbInset * 2,
|
|
43
|
+
travel: trackWidth - borderWidth * 2 - thumbSlot,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -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,8 +244,9 @@ 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
|
-
theme={hasError ? "
|
|
249
|
+
theme={hasError ? "error" : undefined}
|
|
247
250
|
// LC-40: Box owns the disabled chrome wash (value text stays >= AA);
|
|
248
251
|
// the old 0.5 whole-box dim dropped text under the floor.
|
|
249
252
|
disabled={disabled}
|
|
@@ -339,7 +342,7 @@ export function TextArea({
|
|
|
339
342
|
if (!resolvedForm || !name) {
|
|
340
343
|
return (
|
|
341
344
|
<FieldLayout {...layoutBind} error={error} onBlur={onBlur}>
|
|
342
|
-
<InputParts size={resolvedSize} {...(error ? { theme: "
|
|
345
|
+
<InputParts size={resolvedSize} {...(error ? { theme: "error" } : undefined)}>
|
|
343
346
|
{renderTextArea(value ?? defaultValue, undefined, undefined, !!error)}
|
|
344
347
|
</InputParts>
|
|
345
348
|
</FieldLayout>
|
|
@@ -361,7 +364,7 @@ export function TextArea({
|
|
|
361
364
|
error={resolvedError}
|
|
362
365
|
onBlur={mergeFieldHandler(field, "handleBlur", onBlur)}
|
|
363
366
|
>
|
|
364
|
-
<InputParts size={resolvedSize} {...(resolvedError ? { theme: "
|
|
367
|
+
<InputParts size={resolvedSize} {...(resolvedError ? { theme: "error" } : undefined)}>
|
|
365
368
|
{renderTextArea(
|
|
366
369
|
field.state.value as string,
|
|
367
370
|
(text) => field.handleChange(text as any),
|
|
@@ -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
|
-
theme={error ? "
|
|
156
|
+
theme={error ? "error" : 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();
|