@multiplatform.one/forms 7.10.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/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/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/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 +17 -13
- 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 { KeyboardEvent, MouseEvent, ReactNode, RefObject, UIEvent } from "react";
|
|
2
3
|
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, memo } from "react";
|
|
3
4
|
import { CaretDownIcon, CheckIcon } from "@phosphor-icons/react";
|
|
@@ -19,6 +20,7 @@ import {
|
|
|
19
20
|
useGlyphColor,
|
|
20
21
|
useResolvedKnobs,
|
|
21
22
|
wasKeyboardFocus,
|
|
23
|
+
transitionProps,
|
|
22
24
|
} from "@multiplatform.one/theme";
|
|
23
25
|
import type { LabelProps, SizeTokens } from "tamagui";
|
|
24
26
|
// `react-native` aliases to react-native-web on the web, and RNW 0.21 exports
|
|
@@ -51,6 +53,7 @@ import {
|
|
|
51
53
|
panelViewportPadding,
|
|
52
54
|
useViewportGtSm,
|
|
53
55
|
} from "../../FloatingPanel";
|
|
56
|
+
import { PanelPortal } from "../../FloatingPanel/PanelPortal";
|
|
54
57
|
import { zIndex } from "../../shared/zIndex";
|
|
55
58
|
import { useDragScroll } from "../../shared/useDragScroll";
|
|
56
59
|
import { useIsInTableCell } from "../../shared/tableCellContext";
|
|
@@ -454,7 +457,7 @@ const SelectItem = memo(function SelectItem({
|
|
|
454
457
|
: formInputColors.background.focus,
|
|
455
458
|
},
|
|
456
459
|
})}
|
|
457
|
-
{...(ctx.knobProps.transition
|
|
460
|
+
{...transitionProps(ctx.knobProps.transition)}
|
|
458
461
|
>
|
|
459
462
|
<Text
|
|
460
463
|
fontFamily={ctx.knobProps.body.fontFamily}
|
|
@@ -506,6 +509,7 @@ function FloatingSelectCore({
|
|
|
506
509
|
selectedOrder,
|
|
507
510
|
dismissible,
|
|
508
511
|
}: FloatingSelectCoreProps) {
|
|
512
|
+
const hydrationTouch = useTouchSurface();
|
|
509
513
|
const inTableCell = useIsInTableCell();
|
|
510
514
|
const describedBy = useFieldDescribedBy();
|
|
511
515
|
const glyphColor = useGlyphColor();
|
|
@@ -1048,7 +1052,9 @@ function FloatingSelectCore({
|
|
|
1048
1052
|
flexWrap="nowrap"
|
|
1049
1053
|
gap="$1.5"
|
|
1050
1054
|
alignItems="center"
|
|
1051
|
-
maxHeight={
|
|
1055
|
+
maxHeight={
|
|
1056
|
+
getFieldHeight(knobProps.sizeToken as SizeTokens, 1, hydrationTouch) * 0.75
|
|
1057
|
+
}
|
|
1052
1058
|
overflow="hidden"
|
|
1053
1059
|
overflowX="auto"
|
|
1054
1060
|
>
|
|
@@ -1085,7 +1091,7 @@ function FloatingSelectCore({
|
|
|
1085
1091
|
</InputParts.Box>
|
|
1086
1092
|
|
|
1087
1093
|
{panel.mounted && (
|
|
1088
|
-
|
|
1094
|
+
<PanelPortal anchor={panel.triggerRef.current}>
|
|
1089
1095
|
<FloatingFocusManager context={panel.context} modal={false} initialFocus={-1}>
|
|
1090
1096
|
<YStack
|
|
1091
1097
|
outlineWidth={0}
|
|
@@ -1207,7 +1213,7 @@ function FloatingSelectCore({
|
|
|
1207
1213
|
/>
|
|
1208
1214
|
</YStack>
|
|
1209
1215
|
</FloatingFocusManager>
|
|
1210
|
-
|
|
1216
|
+
</PanelPortal>
|
|
1211
1217
|
)}
|
|
1212
1218
|
</>
|
|
1213
1219
|
);
|
|
@@ -1232,6 +1238,7 @@ function NativeSelectCore({
|
|
|
1232
1238
|
dismissible,
|
|
1233
1239
|
native,
|
|
1234
1240
|
}: FloatingSelectCoreProps) {
|
|
1241
|
+
const hydrationTouch = useTouchSurface();
|
|
1235
1242
|
const describedBy = useFieldDescribedBy();
|
|
1236
1243
|
const fieldA11y = useFieldA11y();
|
|
1237
1244
|
const inTableCell = useIsInTableCell();
|
|
@@ -1615,7 +1622,9 @@ function NativeSelectCore({
|
|
|
1615
1622
|
flexWrap="nowrap"
|
|
1616
1623
|
gap="$1.5"
|
|
1617
1624
|
alignItems="center"
|
|
1618
|
-
maxHeight={
|
|
1625
|
+
maxHeight={
|
|
1626
|
+
getFieldHeight(knobProps.sizeToken as SizeTokens, 1, hydrationTouch) * 0.75
|
|
1627
|
+
}
|
|
1619
1628
|
overflow="hidden"
|
|
1620
1629
|
overflowX="auto"
|
|
1621
1630
|
>
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { useTouchSurface } from "@multiplatform.one/theme";
|
|
1
2
|
import type { KnobProps } from "@multiplatform.one/theme";
|
|
2
3
|
import {
|
|
3
4
|
ensureFocusVisibleRing,
|
|
4
5
|
ensureKeyboardModalityTracking,
|
|
5
6
|
wasKeyboardFocus,
|
|
7
|
+
transitionProps,
|
|
6
8
|
} from "@multiplatform.one/theme";
|
|
7
9
|
import type { PointerEvent, ReactNode } from "react";
|
|
8
10
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -304,6 +306,7 @@ function SignatureCanvasImpl({
|
|
|
304
306
|
required,
|
|
305
307
|
hasError,
|
|
306
308
|
}: SignatureCanvasProps) {
|
|
309
|
+
const hydrationTouch = useTouchSurface();
|
|
307
310
|
const [strokes, setStrokes] = useState<Stroke[]>([]);
|
|
308
311
|
const [currentStroke, setCurrentStroke] = useState<Stroke | null>(null);
|
|
309
312
|
const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
|
|
@@ -315,7 +318,7 @@ function SignatureCanvasImpl({
|
|
|
315
318
|
const describedBy = useFieldDescribedBy();
|
|
316
319
|
const aspectRatio = width / height;
|
|
317
320
|
const resolvedSizeToken = (size ?? knobProps.sizeToken) as SizeTokens;
|
|
318
|
-
const minHeightPx = getFieldHeight(resolvedSizeToken, signatureHeightRows);
|
|
321
|
+
const minHeightPx = getFieldHeight(resolvedSizeToken, signatureHeightRows, hydrationTouch);
|
|
319
322
|
const cappedRadius = clampRadiusForLargeComponent(knobProps.borderRadius.borderRadius);
|
|
320
323
|
const canDraw = !disabled && !readOnly;
|
|
321
324
|
const canFocus = !disabled;
|
|
@@ -537,7 +540,7 @@ function SignatureCanvasImpl({
|
|
|
537
540
|
borderColor: error ? formCommonColors.error : formInputColors.border.focus,
|
|
538
541
|
})}
|
|
539
542
|
{...frameRing}
|
|
540
|
-
{...(knobProps.transition
|
|
543
|
+
{...transitionProps(knobProps.transition)}
|
|
541
544
|
focusable={canFocus}
|
|
542
545
|
tabIndex={isWeb ? (canFocus ? 0 : -1) : undefined}
|
|
543
546
|
onFocus={() => {
|
|
@@ -672,6 +675,7 @@ export function Signature({
|
|
|
672
675
|
skeleton,
|
|
673
676
|
compact,
|
|
674
677
|
}: SignatureProps) {
|
|
678
|
+
const hydrationTouch = useTouchSurface();
|
|
675
679
|
const { resolvedForm, knobProps, disabledState, id } = useFormField({
|
|
676
680
|
form: formProp,
|
|
677
681
|
id: idProp,
|
|
@@ -680,7 +684,7 @@ export function Signature({
|
|
|
680
684
|
const resolvedValidators = useResolvedValidators(required, validators, label, name);
|
|
681
685
|
const tamaguiTheme = useTamaguiTheme();
|
|
682
686
|
const resolvedSizeToken = (size ?? knobProps.sizeToken) as SizeTokens;
|
|
683
|
-
const minHeightPx = getFieldHeight(resolvedSizeToken, signatureHeightRows);
|
|
687
|
+
const minHeightPx = getFieldHeight(resolvedSizeToken, signatureHeightRows, hydrationTouch);
|
|
684
688
|
const padHeight = height ?? minHeightPx;
|
|
685
689
|
const padWidth = width ?? Math.round(padHeight * signatureAspect);
|
|
686
690
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useTouchSurface, isTouchSurface } from "@multiplatform.one/theme";
|
|
2
|
+
import { useEffect, useRef, useState, type KeyboardEvent, type ReactNode } from "react";
|
|
2
3
|
import type { AnyFormApi } from "../../types";
|
|
3
4
|
import type { LabelProps, SizeTokens } from "tamagui";
|
|
4
5
|
import {
|
|
@@ -75,7 +76,11 @@ const getTrackProps = (outlined: boolean | undefined, borderRadius: number) => (
|
|
|
75
76
|
|
|
76
77
|
/** Single source for the thumb size: styled default + native jump-delta math. */
|
|
77
78
|
const THUMB_SIZE_TOKEN = "$1.5";
|
|
78
|
-
const THUMB_RENDER_SIZE = getSliderThumbRenderSize(
|
|
79
|
+
const THUMB_RENDER_SIZE = getSliderThumbRenderSize(
|
|
80
|
+
THUMB_SIZE_TOKEN,
|
|
81
|
+
undefined,
|
|
82
|
+
!isWeb && isTouchSurface(),
|
|
83
|
+
);
|
|
79
84
|
|
|
80
85
|
const SliderThumbFrame = styled(TamaguiSlider.Thumb, {
|
|
81
86
|
size: THUMB_SIZE_TOKEN,
|
|
@@ -280,7 +285,8 @@ function SliderControl({
|
|
|
280
285
|
// UNSHIFTED size token and wins over the size variant's shift -1; see
|
|
281
286
|
// getSliderThumbRenderSize). Using the shifted token here put the base-x
|
|
282
287
|
// replica 1-4pt off the true rendered position.
|
|
283
|
-
const
|
|
288
|
+
const hydrationTouch = useTouchSurface();
|
|
289
|
+
const thumbSize = getSliderThumbRenderSize(THUMB_SIZE_TOKEN, undefined, hydrationTouch);
|
|
284
290
|
const jumpMotionEnabled =
|
|
285
291
|
!isWeb && sliderProps?.orientation !== "vertical" && sliderProps?.dir !== "rtl";
|
|
286
292
|
const jumpMotion = useSliderJumpMotion({
|
|
@@ -381,7 +387,7 @@ function SliderControl({
|
|
|
381
387
|
|
|
382
388
|
const motionTransition = animateJump ? transitionToken : undefined;
|
|
383
389
|
const thumbRadius = resolveRadiusClass("BINARY", radiusStop, {
|
|
384
|
-
heightPx:
|
|
390
|
+
heightPx: thumbSize,
|
|
385
391
|
});
|
|
386
392
|
|
|
387
393
|
// `"none"` (not omitted): Tamagui styled defaults / animateOnly can leave a
|
|
@@ -613,6 +619,8 @@ function SliderControl({
|
|
|
613
619
|
return elevationWrapperProps.elevation && isWeb ? (
|
|
614
620
|
<View key={thumbIndex} {...elevationWrapperProps} borderRadius={thumbRadius}>
|
|
615
621
|
<SliderThumbFrame
|
|
622
|
+
width={thumbSize}
|
|
623
|
+
height={thumbSize}
|
|
616
624
|
index={thumbIndex}
|
|
617
625
|
circular={false}
|
|
618
626
|
borderRadius={thumbRadius}
|
|
@@ -626,6 +634,8 @@ function SliderControl({
|
|
|
626
634
|
</View>
|
|
627
635
|
) : (
|
|
628
636
|
<SliderThumbFrame
|
|
637
|
+
width={thumbSize}
|
|
638
|
+
height={thumbSize}
|
|
629
639
|
key={thumbIndex}
|
|
630
640
|
index={thumbIndex}
|
|
631
641
|
circular={false}
|
|
@@ -127,8 +127,12 @@ export function hasMinStepsBetween(values: number[], minStepsBetweenValues: numb
|
|
|
127
127
|
* (`$4` is 32, not 44). Radius is not on the recipe; circular vs square
|
|
128
128
|
* does not change diameter.
|
|
129
129
|
*/
|
|
130
|
-
export function getSliderThumbRenderSize(
|
|
131
|
-
|
|
130
|
+
export function getSliderThumbRenderSize(
|
|
131
|
+
sizeToken: string,
|
|
132
|
+
_circular?: boolean,
|
|
133
|
+
touch = isTouchSurface(),
|
|
134
|
+
): number {
|
|
135
|
+
return sizeRecipeForToken(sizeToken, { touch }).height;
|
|
132
136
|
}
|
|
133
137
|
|
|
134
138
|
/**
|
|
@@ -320,3 +320,33 @@ describe("Stepper", () => {
|
|
|
320
320
|
});
|
|
321
321
|
});
|
|
322
322
|
});
|
|
323
|
+
|
|
324
|
+
describe("Stepper currency (MPO-221)", () => {
|
|
325
|
+
const glyph = (container: HTMLElement) =>
|
|
326
|
+
container.querySelector("[data-testid='stepper-currency']") as HTMLElement | null;
|
|
327
|
+
const input = (container: HTMLElement) =>
|
|
328
|
+
container.querySelector("input[data-stepper-value]") as HTMLInputElement;
|
|
329
|
+
|
|
330
|
+
it("writes the currency glyph beside the value and aligns the value to the end", () => {
|
|
331
|
+
const { container } = renderWithProviders(
|
|
332
|
+
<Stepper aria-label="Price" currency="USD" defaultValue={12} showButtons={false} />,
|
|
333
|
+
);
|
|
334
|
+
expect(glyph(container)?.textContent).toBe("$");
|
|
335
|
+
expect(input(container).className).toMatch(/_ta-right/);
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
it("resolves a Frappe-style symbol to its glyph", () => {
|
|
339
|
+
const { container } = renderWithProviders(
|
|
340
|
+
<Stepper aria-label="Price" currency="₹" defaultValue={12} showButtons={false} />,
|
|
341
|
+
);
|
|
342
|
+
expect(glyph(container)?.textContent).toBe("₹");
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
it("without a currency the value stays centred and no glyph renders", () => {
|
|
346
|
+
const { container } = renderWithProviders(
|
|
347
|
+
<Stepper aria-label="Qty" defaultValue={12} showButtons={false} />,
|
|
348
|
+
);
|
|
349
|
+
expect(glyph(container)).toBeNull();
|
|
350
|
+
expect(input(container).className).toMatch(/_ta-center/);
|
|
351
|
+
});
|
|
352
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useTouchSurface } from "@multiplatform.one/theme";
|
|
1
2
|
import type { DeepKeys, DeepValue } from "@tanstack/form-core";
|
|
2
3
|
import { CaretDownIcon, CaretUpIcon, MinusIcon, PlusIcon } from "@phosphor-icons/react";
|
|
3
4
|
import {
|
|
@@ -10,9 +11,9 @@ import {
|
|
|
10
11
|
useState,
|
|
11
12
|
} from "react";
|
|
12
13
|
import { Pressable } from "react-native";
|
|
13
|
-
import { isWeb, useProps, View } from "tamagui";
|
|
14
|
+
import { isWeb, Text, useProps, View } from "tamagui";
|
|
14
15
|
import { Input as TamaguiInput } from "tamagui";
|
|
15
|
-
import {
|
|
16
|
+
import { currencyAffix, sizeRecipeForToken, useGlyphColor } from "@multiplatform.one/theme";
|
|
16
17
|
import { resolveStepperPlacement } from "./resolveStepperPlacement";
|
|
17
18
|
|
|
18
19
|
export { resolveStepperPlacement, type StepperButtonPosition } from "./resolveStepperPlacement";
|
|
@@ -125,6 +126,12 @@ export type StepperProps<
|
|
|
125
126
|
* coerced to `both` on touch — LC-84).
|
|
126
127
|
*/
|
|
127
128
|
buttonPosition?: "left" | "right" | "both";
|
|
129
|
+
/**
|
|
130
|
+
* ISO 4217 code or Frappe-style symbol. Writes the currency glyph beside
|
|
131
|
+
* the value on the locale's side and puts the value on the numeric
|
|
132
|
+
* (end) alignment.
|
|
133
|
+
*/
|
|
134
|
+
currency?: string;
|
|
128
135
|
allowEmpty?: boolean;
|
|
129
136
|
placeholder?: string;
|
|
130
137
|
inputProps?: Omit<InputProps, "value" | "onChangeText" | "ref">;
|
|
@@ -269,6 +276,7 @@ export function Stepper<
|
|
|
269
276
|
TFormValidator = any,
|
|
270
277
|
TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,
|
|
271
278
|
>(props: StepperProps<TParentData, TName, TFieldValidator, TFormValidator, TData>) {
|
|
279
|
+
const hydrationTouch = useTouchSurface();
|
|
272
280
|
const {
|
|
273
281
|
defaultValue,
|
|
274
282
|
form,
|
|
@@ -300,17 +308,19 @@ export function Stepper<
|
|
|
300
308
|
skeleton,
|
|
301
309
|
compact,
|
|
302
310
|
id: idProp,
|
|
311
|
+
currency,
|
|
303
312
|
...restProps
|
|
304
313
|
} = useProps(props);
|
|
305
314
|
|
|
306
315
|
const { resolvedForm, knobProps, id } = useFormField({ form, id: idProp, compact });
|
|
316
|
+
const affix = currencyAffix(currency);
|
|
307
317
|
const resolvedValidators = useResolvedValidators(required, validators, label, name);
|
|
308
318
|
const motionTransition = knobProps.transition as string | undefined;
|
|
309
319
|
const controlSize = size || knobProps.sizeToken;
|
|
310
320
|
// +/- glyphs are control-internal icons: the recipe's icon channel (LC-79).
|
|
311
321
|
const iconPx = sizeRecipeForToken(String(controlSize)).iconSize;
|
|
312
322
|
const glyphColor = useGlyphColor();
|
|
313
|
-
const placement = resolveStepperPlacement(buttonPosition,
|
|
323
|
+
const placement = resolveStepperPlacement(buttonPosition, hydrationTouch);
|
|
314
324
|
const isControlled = valueProp !== undefined && !name;
|
|
315
325
|
|
|
316
326
|
// Initialize inputValue from defaultValue for standalone mode
|
|
@@ -668,7 +678,7 @@ export function Stepper<
|
|
|
668
678
|
data-stepper-live={live ? "true" : undefined}
|
|
669
679
|
data-stepper-flash={valueFlash ? "true" : undefined}
|
|
670
680
|
onChangeText={readOnly ? undefined : handleInputChange}
|
|
671
|
-
textAlign="center"
|
|
681
|
+
textAlign={affix ? "right" : "center"}
|
|
672
682
|
opacity={valueMotionStyle.opacity}
|
|
673
683
|
// LC-25 native value tween intentionally disabled: Tamagui's RN
|
|
674
684
|
// animation driver crashes Hermes ("Cannot add new property
|
|
@@ -706,6 +716,24 @@ export function Stepper<
|
|
|
706
716
|
/>
|
|
707
717
|
);
|
|
708
718
|
|
|
719
|
+
// T-VALUE: the glyph is part of the amount, never dimmed by textAccent.
|
|
720
|
+
const affixGlyph = affix ? (
|
|
721
|
+
<Text
|
|
722
|
+
data-testid="stepper-currency"
|
|
723
|
+
data-text-class="T-VALUE"
|
|
724
|
+
aria-hidden
|
|
725
|
+
alignSelf="center"
|
|
726
|
+
flexShrink={0}
|
|
727
|
+
paddingHorizontal="$1.5"
|
|
728
|
+
{...knobProps.body}
|
|
729
|
+
fontSize={sizeRecipeForToken(String(controlSize), { touch: hydrationTouch }).fontSize}
|
|
730
|
+
color="$color"
|
|
731
|
+
userSelect="none"
|
|
732
|
+
>
|
|
733
|
+
{affix.glyph}
|
|
734
|
+
</Text>
|
|
735
|
+
) : null;
|
|
736
|
+
|
|
709
737
|
// LC-71: ring rides Input.Box so +/− sit inside the perceived boundary.
|
|
710
738
|
const box = (
|
|
711
739
|
<InputParts.Box
|
|
@@ -723,7 +751,9 @@ export function Stepper<
|
|
|
723
751
|
>
|
|
724
752
|
{showSpin && placement === "both" ? decrementButton : null}
|
|
725
753
|
{showSpin && placement === "left" ? spinColumn("start") : null}
|
|
754
|
+
{affix?.position === "leading" ? affixGlyph : null}
|
|
726
755
|
{area}
|
|
756
|
+
{affix?.position === "trailing" ? affixGlyph : null}
|
|
727
757
|
{showSpin && placement === "right" ? spinColumn("end") : null}
|
|
728
758
|
{showSpin && placement === "both" ? incrementButton : null}
|
|
729
759
|
</InputParts.Box>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-356 / LC-91 SWITCH-FOOTPRINT, native half. Clay's iPhone measured the
|
|
3
|
+
* default track at about 85 × 43 pt; a UISwitch is 51 × 31 with a 27 pt
|
|
4
|
+
* thumb. Mock tamagui's isWeb so the native branch runs on the test host
|
|
5
|
+
* renderer (RadioGroup.native.spec pattern) and read the painted track back.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { cleanup } from "@testing-library/react";
|
|
9
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
10
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
11
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
12
|
+
import { Switch } from "./index";
|
|
13
|
+
import { paintedBox, thumbOf, trackBox } from "../../../tests/switchFootprintProbe";
|
|
14
|
+
|
|
15
|
+
vi.mock("tamagui", async (importOriginal) => ({
|
|
16
|
+
...(await importOriginal<typeof import("tamagui")>()),
|
|
17
|
+
isWeb: false,
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
afterEach(cleanup);
|
|
21
|
+
|
|
22
|
+
function mount(overrides: Record<string, unknown> = {}, minTargetHeight?: number) {
|
|
23
|
+
const result = renderWithProviders(
|
|
24
|
+
<Preset overrides={{ elevation: "none", ...overrides }}>
|
|
25
|
+
<Switch
|
|
26
|
+
name="sw"
|
|
27
|
+
defaultValue={false}
|
|
28
|
+
aria-label="Notifications"
|
|
29
|
+
{...(minTargetHeight !== undefined && { minTargetHeight })}
|
|
30
|
+
/>
|
|
31
|
+
</Preset>,
|
|
32
|
+
);
|
|
33
|
+
const frame = result.getSwitch() as HTMLElement;
|
|
34
|
+
expect(frame).toBeTruthy();
|
|
35
|
+
return { frame, track: trackBox(frame), thumb: paintedBox(thumbOf(frame)) };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
describe("Switch footprint on native (MPO-356)", () => {
|
|
39
|
+
it("paints a UISwitch-sized 51 × 31 track with a 27 pt thumb at default knobs", () => {
|
|
40
|
+
const { track, thumb } = mount();
|
|
41
|
+
expect(track).toEqual({ width: 51, height: 31 });
|
|
42
|
+
expect(thumb).toEqual({ width: 27, height: 27 });
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it("keeps the 51 × 31 paint inside a 44 pt press target on touch", () => {
|
|
46
|
+
const { frame, track } = mount({}, 44);
|
|
47
|
+
expect(paintedBox(frame)).toEqual({ width: 51, height: 44 });
|
|
48
|
+
expect(track).toEqual({ width: 51, height: 31 });
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("steps with the size knob at the UISwitch aspect", () => {
|
|
52
|
+
const small = mount({ size: "small" }).track;
|
|
53
|
+
cleanup();
|
|
54
|
+
const large = mount({ size: "large" }).track;
|
|
55
|
+
expect(small).toEqual({ width: 41, height: 25 });
|
|
56
|
+
expect(large).toEqual({ width: 61, height: 37 });
|
|
57
|
+
});
|
|
58
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-356 / LC-91 SWITCH-FOOTPRINT, web half. At default knobs the painted
|
|
3
|
+
* track is Tamagui's own Switch: `getSwitchHeight` = size × 0.65, width 2×,
|
|
4
|
+
* so `$4` paints 58 × 29, not the 86 × 44 control row it used to fill.
|
|
5
|
+
* The size knob keeps stepping it along Tamagui's ladder.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { cleanup } from "@testing-library/react";
|
|
9
|
+
import { Switch as TamaguiSwitch } from "tamagui";
|
|
10
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
11
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
12
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
13
|
+
import { Switch } from "./index";
|
|
14
|
+
import { paintedBox, thumbOf, trackBox } from "../../../tests/switchFootprintProbe";
|
|
15
|
+
|
|
16
|
+
afterEach(cleanup);
|
|
17
|
+
|
|
18
|
+
const LADDER = [
|
|
19
|
+
{ knob: "small", token: "$3" },
|
|
20
|
+
{ knob: "medium", token: "$4" },
|
|
21
|
+
{ knob: "large", token: "$5" },
|
|
22
|
+
] as const;
|
|
23
|
+
|
|
24
|
+
function ours(size?: (typeof LADDER)[number]["knob"]) {
|
|
25
|
+
const result = renderWithProviders(
|
|
26
|
+
<Preset overrides={{ elevation: "none", ...(size && { size }) }}>
|
|
27
|
+
<Switch name="sw" defaultValue={false} aria-label="Notifications" />
|
|
28
|
+
</Preset>,
|
|
29
|
+
);
|
|
30
|
+
const frame = result.getSwitch() as HTMLElement;
|
|
31
|
+
expect(frame).toBeTruthy();
|
|
32
|
+
return { track: trackBox(frame), thumb: paintedBox(thumbOf(frame)) };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function stock(token: string) {
|
|
36
|
+
const result = renderWithProviders(
|
|
37
|
+
<TamaguiSwitch size={token as never} aria-label="Stock">
|
|
38
|
+
<TamaguiSwitch.Thumb />
|
|
39
|
+
</TamaguiSwitch>,
|
|
40
|
+
);
|
|
41
|
+
const frame = result.getSwitch() as HTMLElement;
|
|
42
|
+
expect(frame).toBeTruthy();
|
|
43
|
+
return { track: paintedBox(frame), thumb: paintedBox(thumbOf(frame)) };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
describe("Switch footprint on web (MPO-356)", () => {
|
|
47
|
+
it("paints Tamagui's 58 × 29 track at default knobs, not the 44 px control row", () => {
|
|
48
|
+
const { track } = ours();
|
|
49
|
+
expect(track).toEqual({ width: 58, height: 29 });
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("the default track is the stock Tamagui $true Switch", () => {
|
|
53
|
+
expect(ours().track).toEqual(stock("$true").track);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("restores the 44 px press target on a fine pointer through the house slop channel (LC-54)", () => {
|
|
57
|
+
const result = renderWithProviders(
|
|
58
|
+
<Switch name="sw" defaultValue={false} aria-label="Notifications" />,
|
|
59
|
+
);
|
|
60
|
+
const frame = result.getSwitch() as HTMLElement;
|
|
61
|
+
const outset = Number(frame.getAttribute("data-mp-press-slop"));
|
|
62
|
+
expect(trackBox(frame).height + outset * 2).toBeGreaterThanOrEqual(44);
|
|
63
|
+
expect(frame.getAttribute("data-mp-press-axis")).toBe("vertical");
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
for (const { knob, token } of LADDER) {
|
|
67
|
+
it(`size ${knob} steps with Tamagui's ${token} Switch and keeps its 2:1 track`, () => {
|
|
68
|
+
const { track, thumb } = ours(knob);
|
|
69
|
+
const reference = stock(token);
|
|
70
|
+
expect(track).toEqual(reference.track);
|
|
71
|
+
expect(track.width).toBe(track.height * 2);
|
|
72
|
+
// Tamagui's thumb fills the track; ours fills it inside the 1 px hairline.
|
|
73
|
+
expect(thumb).toEqual({
|
|
74
|
+
width: reference.thumb.width - 2,
|
|
75
|
+
height: reference.thumb.height - 2,
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
});
|
|
@@ -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
|
+
}
|