@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
|
@@ -45,7 +45,15 @@
|
|
|
45
45
|
* backdrop dismiss is armed a short delay after the present begins.
|
|
46
46
|
*/
|
|
47
47
|
|
|
48
|
-
import {
|
|
48
|
+
import {
|
|
49
|
+
useCallback,
|
|
50
|
+
useContext,
|
|
51
|
+
useEffect,
|
|
52
|
+
useLayoutEffect,
|
|
53
|
+
useMemo,
|
|
54
|
+
useRef,
|
|
55
|
+
useState,
|
|
56
|
+
} from "react";
|
|
49
57
|
import {
|
|
50
58
|
Animated,
|
|
51
59
|
Easing,
|
|
@@ -58,6 +66,7 @@ import {
|
|
|
58
66
|
useWindowDimensions,
|
|
59
67
|
View as RNView,
|
|
60
68
|
} from "react-native";
|
|
69
|
+
import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
|
|
61
70
|
import { Surface, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
62
71
|
import { View, YStack } from "tamagui";
|
|
63
72
|
import { t } from "../shared/t";
|
|
@@ -84,8 +93,7 @@ export function useViewportGtSm() {
|
|
|
84
93
|
}
|
|
85
94
|
|
|
86
95
|
const sheetMaxHeightRatio = 0.85;
|
|
87
|
-
// Home-indicator / gesture-bar clearance
|
|
88
|
-
// dependency in this package).
|
|
96
|
+
// Home-indicator / gesture-bar clearance.
|
|
89
97
|
const bottomInset = Platform.OS === "ios" ? 24 : 16;
|
|
90
98
|
// Backdrop left visible above the sheet: the scrim has to stay tappable, and a
|
|
91
99
|
// sheet flush with the status bar reads as a page, not a sheet.
|
|
@@ -122,6 +130,7 @@ export function FloatingPanel({
|
|
|
122
130
|
const { height: windowHeight } = useWindowDimensions();
|
|
123
131
|
// MPO-64: the sheet must end ABOVE the keyboard, not run under it.
|
|
124
132
|
const keyboardInset = useKeyboardInset();
|
|
133
|
+
const topInset = useContext(SafeAreaInsetsContext)?.top ?? initialWindowMetrics?.insets.top ?? 0;
|
|
125
134
|
const [backdropArmed, setBackdropArmed] = useState(false);
|
|
126
135
|
const armTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
127
136
|
const close = useCallback(() => onOpenChange(false), [onOpenChange]);
|
|
@@ -142,18 +151,18 @@ export function FloatingPanel({
|
|
|
142
151
|
/*
|
|
143
152
|
* MPO-64. Two numbers, both of which have to know about the keyboard:
|
|
144
153
|
*
|
|
145
|
-
* - the sheet may never be taller than the space
|
|
146
|
-
* a strip of backdrop so it still reads as a sheet
|
|
147
|
-
* tappable. Without this the frame extends under the
|
|
148
|
-
* row is clipped mid-glyph, and the rounded top edge
|
|
149
|
-
* autocomplete suggestion strip.
|
|
154
|
+
* - the sheet may never be taller than the space between the status bar
|
|
155
|
+
* and the keyboard, less a strip of backdrop so it still reads as a sheet
|
|
156
|
+
* and the scrim stays tappable. Without this the frame extends under the
|
|
157
|
+
* keyboard, the last row is clipped mid-glyph, and the rounded top edge
|
|
158
|
+
* is drawn over the autocomplete suggestion strip.
|
|
150
159
|
* - the bottom padding is home-indicator clearance. The keyboard already
|
|
151
160
|
* covers the home indicator, so keeping 24pt there just wastes a row.
|
|
152
161
|
*/
|
|
153
162
|
const available = Math.max(0, windowHeight - keyboardInset);
|
|
154
163
|
const maxHeight = Math.max(
|
|
155
164
|
minSheetHeight,
|
|
156
|
-
Math.round(Math.min(windowHeight * sheetMaxHeightRatio, available - backdropStrip)),
|
|
165
|
+
Math.round(Math.min(windowHeight * sheetMaxHeightRatio, available - topInset - backdropStrip)),
|
|
157
166
|
);
|
|
158
167
|
const sheetBottomPadding = keyboardInset > 0 ? 8 : bottomInset;
|
|
159
168
|
|
|
@@ -202,8 +211,59 @@ export function FloatingPanel({
|
|
|
202
211
|
const presentationRef = useRef(0);
|
|
203
212
|
const activeRef = useRef(false);
|
|
204
213
|
|
|
214
|
+
/*
|
|
215
|
+
* MPO-68: a sheet at rest below full height is LAID OUT at that height.
|
|
216
|
+
* Translating a full-height frame down pushed its last rows off the screen,
|
|
217
|
+
* or under the keyboard, while the list still measured the full height, so
|
|
218
|
+
* they could never be scrolled into view.
|
|
219
|
+
*
|
|
220
|
+
* `frameCap` rides the same Animated.View as `translateY`, so the swap
|
|
221
|
+
* between "full height, translated" and "detent height, at 0" lands in one
|
|
222
|
+
* commit and the top edge does not move. `restHeightRef` is null at full
|
|
223
|
+
* height; a gesture always runs uncapped, in `travel` coordinates.
|
|
224
|
+
*/
|
|
225
|
+
const frameCap = useRef(new Animated.Value(maxHeight)).current;
|
|
226
|
+
const maxHeightRef = useRef(maxHeight);
|
|
227
|
+
const restHeightRef = useRef<number | null>(null);
|
|
228
|
+
// The last uncapped layout, and whether it filled the max height. A capped
|
|
229
|
+
// frame measures only its cap, so when the keyboard moves the max height
|
|
230
|
+
// under a resting sheet, its full height is re-derived from these.
|
|
231
|
+
const naturalRef = useRef(0);
|
|
232
|
+
const filledRef = useRef(false);
|
|
233
|
+
|
|
234
|
+
useLayoutEffect(() => {
|
|
235
|
+
maxHeightRef.current = maxHeight;
|
|
236
|
+
const rest = restHeightRef.current;
|
|
237
|
+
frameCap.setValue(rest === null ? maxHeight : Math.min(maxHeight, rest));
|
|
238
|
+
if (rest !== null && naturalRef.current > 0) {
|
|
239
|
+
setMeasuredHeight(filledRef.current ? maxHeight : Math.min(naturalRef.current, maxHeight));
|
|
240
|
+
}
|
|
241
|
+
}, [frameCap, maxHeight]);
|
|
242
|
+
|
|
243
|
+
const restAt = useCallback(
|
|
244
|
+
(height: number) => {
|
|
245
|
+
restHeightRef.current = height;
|
|
246
|
+
frameCap.setValue(Math.min(maxHeightRef.current, height));
|
|
247
|
+
restRef.current = 0;
|
|
248
|
+
translateY.setValue(0);
|
|
249
|
+
},
|
|
250
|
+
[frameCap, translateY],
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
const releaseRest = useCallback(() => {
|
|
254
|
+
const rest = restHeightRef.current;
|
|
255
|
+
if (rest === null) return;
|
|
256
|
+
restHeightRef.current = null;
|
|
257
|
+
const offset = Math.max(0, travelRef.current - Math.min(maxHeightRef.current, rest));
|
|
258
|
+
frameCap.setValue(maxHeightRef.current);
|
|
259
|
+
restRef.current = offset;
|
|
260
|
+
translateY.setValue(offset);
|
|
261
|
+
}, [frameCap, translateY]);
|
|
262
|
+
|
|
205
263
|
const settleTo = useCallback(
|
|
206
|
-
(
|
|
264
|
+
(height: number, velocity = 0) => {
|
|
265
|
+
const presentation = presentationRef.current;
|
|
266
|
+
const toValue = Math.max(0, travelRef.current - height);
|
|
207
267
|
restRef.current = toValue;
|
|
208
268
|
Animated.spring(translateY, {
|
|
209
269
|
toValue,
|
|
@@ -215,9 +275,12 @@ export function FloatingPanel({
|
|
|
215
275
|
// JS driver: see the header. A native-driven node inside this Modal
|
|
216
276
|
// does not advance, and the drag already writes the value from JS.
|
|
217
277
|
useNativeDriver: false,
|
|
218
|
-
}).start()
|
|
278
|
+
}).start(({ finished }) => {
|
|
279
|
+
if (!finished || toValue === 0) return;
|
|
280
|
+
if (activeRef.current && presentation === presentationRef.current) restAt(height);
|
|
281
|
+
});
|
|
219
282
|
},
|
|
220
|
-
[translateY],
|
|
283
|
+
[restAt, translateY],
|
|
221
284
|
);
|
|
222
285
|
|
|
223
286
|
const dismiss = useCallback(
|
|
@@ -245,10 +308,15 @@ export function FloatingPanel({
|
|
|
245
308
|
PanResponder.create({
|
|
246
309
|
onStartShouldSetPanResponder: () => true,
|
|
247
310
|
onMoveShouldSetPanResponder: (_evt, g) => Math.abs(g.dy) > 2,
|
|
311
|
+
// Lifting a rest cap can scroll the list inside, and a scroll lets
|
|
312
|
+
// any ancestor ScrollView the finger started under claim the touch,
|
|
313
|
+
// ending the drag and blurring a focused input on release.
|
|
314
|
+
onPanResponderTerminationRequest: () => false,
|
|
248
315
|
onPanResponderGrant: () => {
|
|
249
316
|
translateY.stopAnimation((value) => {
|
|
250
317
|
if (typeof value === "number" && Number.isFinite(value)) restRef.current = value;
|
|
251
318
|
});
|
|
319
|
+
releaseRest();
|
|
252
320
|
},
|
|
253
321
|
onPanResponderMove: (_evt, g) => {
|
|
254
322
|
const next = restRef.current + g.dy;
|
|
@@ -277,11 +345,11 @@ export function FloatingPanel({
|
|
|
277
345
|
best = height;
|
|
278
346
|
}
|
|
279
347
|
}
|
|
280
|
-
settleTo(
|
|
348
|
+
settleTo(best, g.vy);
|
|
281
349
|
},
|
|
282
|
-
onPanResponderTerminate: () => settleTo(restRef.current),
|
|
350
|
+
onPanResponderTerminate: () => settleTo(travelRef.current - restRef.current),
|
|
283
351
|
}),
|
|
284
|
-
[dismiss, settleTo, translateY],
|
|
352
|
+
[dismiss, releaseRest, settleTo, translateY],
|
|
285
353
|
);
|
|
286
354
|
|
|
287
355
|
// One entrance per present, whichever trigger gets here first: the effect
|
|
@@ -321,6 +389,8 @@ export function FloatingPanel({
|
|
|
321
389
|
useEffect(() => {
|
|
322
390
|
presentationRef.current += 1;
|
|
323
391
|
activeRef.current = open;
|
|
392
|
+
restHeightRef.current = null;
|
|
393
|
+
frameCap.setValue(maxHeightRef.current);
|
|
324
394
|
if (open) {
|
|
325
395
|
enter();
|
|
326
396
|
} else {
|
|
@@ -340,7 +410,7 @@ export function FloatingPanel({
|
|
|
340
410
|
}
|
|
341
411
|
translateY.stopAnimation();
|
|
342
412
|
};
|
|
343
|
-
}, [open, enter, translateY]);
|
|
413
|
+
}, [open, enter, frameCap, translateY]);
|
|
344
414
|
|
|
345
415
|
const content = scrollable ? (
|
|
346
416
|
<RNScrollView
|
|
@@ -430,19 +500,24 @@ export function FloatingPanel({
|
|
|
430
500
|
from option rows / calendar days and blocks commit.
|
|
431
501
|
*/}
|
|
432
502
|
<Animated.View
|
|
503
|
+
testID="floating-panel-sheet"
|
|
433
504
|
onLayout={(e) => {
|
|
434
505
|
// Travel distance for a dismiss, and the basis for the detents.
|
|
435
506
|
// A content-sized picker is shorter than maxHeight, and sliding
|
|
436
507
|
// it by maxHeight would overshoot into a visible lag.
|
|
508
|
+
if (restHeightRef.current !== null) return;
|
|
437
509
|
const h = Math.round(e.nativeEvent.layout.height);
|
|
438
|
-
if (h
|
|
510
|
+
if (h <= 0) return;
|
|
511
|
+
naturalRef.current = h;
|
|
512
|
+
filledRef.current = h >= maxHeightRef.current - 1;
|
|
513
|
+
if (h !== measuredHeight) setMeasuredHeight(h);
|
|
439
514
|
}}
|
|
440
515
|
style={{
|
|
441
516
|
// MPO-64: a flex child defaults to flexShrink 0, so without this
|
|
442
517
|
// the sheet cannot give way to the keyboard at all.
|
|
443
518
|
flexShrink: 1,
|
|
444
519
|
minHeight: 0,
|
|
445
|
-
maxHeight,
|
|
520
|
+
maxHeight: frameCap,
|
|
446
521
|
transform: [{ translateY }],
|
|
447
522
|
}}
|
|
448
523
|
>
|
|
@@ -451,9 +526,11 @@ export function FloatingPanel({
|
|
|
451
526
|
borderBottomLeftRadius={0}
|
|
452
527
|
borderBottomRightRadius={0}
|
|
453
528
|
maxHeight={maxHeight}
|
|
529
|
+
flexShrink={1}
|
|
530
|
+
minHeight={0}
|
|
454
531
|
// sheetFill opens at full sheet height (flexShrink keeps the
|
|
455
532
|
// keyboard from pushing the top of the sheet off-screen).
|
|
456
|
-
{...(sheetFill ? { height: maxHeight
|
|
533
|
+
{...(sheetFill ? { height: maxHeight } : undefined)}
|
|
457
534
|
paddingTop="$2"
|
|
458
535
|
paddingBottom={sheetBottomPadding}
|
|
459
536
|
// VoiceOver escape gesture (two-finger Z) dismisses the sheet.
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import type { ReactNode, RefObject, UIEvent } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
useCallback,
|
|
4
|
+
useEffect,
|
|
5
|
+
useLayoutEffect,
|
|
6
|
+
useRef,
|
|
7
|
+
useState,
|
|
8
|
+
useSyncExternalStore,
|
|
9
|
+
} from "react";
|
|
3
10
|
import {
|
|
4
11
|
OVERLAY_ATTACH_GAP,
|
|
5
12
|
OVERLAY_BREAKPOINT,
|
|
@@ -7,7 +14,7 @@ import {
|
|
|
7
14
|
wasKeyboardFocus,
|
|
8
15
|
ensureKeyboardModalityTracking,
|
|
9
16
|
} from "@multiplatform.one/theme";
|
|
10
|
-
import { isWeb, Sheet,
|
|
17
|
+
import { isWeb, Sheet, View, YStack } from "tamagui";
|
|
11
18
|
import { useClick, useDismiss, useInteractions } from "@floating-ui/react";
|
|
12
19
|
import { ScrollArrow } from "../shared/floatingList";
|
|
13
20
|
import { useReturnFocusOnClose, useSheetModalFocus } from "../shared/focusManagement";
|
|
@@ -16,6 +23,9 @@ import { useFloatingPanel, panelTransition, panelViewportPadding } from "./useFl
|
|
|
16
23
|
import type { PanelWidthMode } from "./useFloatingPanel";
|
|
17
24
|
import { zIndex } from "../shared/zIndex";
|
|
18
25
|
import { isNestedPanelAction, type PanelActionEvent } from "./nestedAction";
|
|
26
|
+
import { PanelPortal } from "./PanelPortal";
|
|
27
|
+
|
|
28
|
+
type PointerOpenEvent = PanelActionEvent & { button?: number; target?: unknown };
|
|
19
29
|
|
|
20
30
|
export { floatingPanelActionProps, isNestedPanelAction } from "./nestedAction";
|
|
21
31
|
|
|
@@ -185,6 +195,33 @@ function useKeyboardFocusIntoPanel(
|
|
|
185
195
|
}, [open, frameRef, keyboardOpenRef]);
|
|
186
196
|
}
|
|
187
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Viewport y of the box a `position: fixed` panel is laid out against. The
|
|
200
|
+
* top math above is in viewport coordinates, which is only right while that
|
|
201
|
+
* box is the viewport. An ancestor with a transform, filter, perspective,
|
|
202
|
+
* paint containment or container query becomes the containing block instead.
|
|
203
|
+
* PanelPortal lifts the panel out of scroll views, but a panel hosted in a
|
|
204
|
+
* transformed dialog still lays out against that dialog. A `display: contents`
|
|
205
|
+
* node has no box, so its computed `contain` (Tamagui's theme span) is ignored.
|
|
206
|
+
*/
|
|
207
|
+
function fixedContainingBlockTop(element: HTMLElement): number {
|
|
208
|
+
for (let node = element.parentElement; node; node = node.parentElement) {
|
|
209
|
+
const cs = getComputedStyle(node);
|
|
210
|
+
if (cs.display === "contents") continue;
|
|
211
|
+
const set = (value: string | undefined, initial: string) => !!value && value !== initial;
|
|
212
|
+
const captures =
|
|
213
|
+
set(cs.transform, "none") ||
|
|
214
|
+
set(cs.perspective, "none") ||
|
|
215
|
+
set(cs.filter, "none") ||
|
|
216
|
+
set(cs.backdropFilter, "none") ||
|
|
217
|
+
set(cs.containerType, "normal") ||
|
|
218
|
+
/transform|perspective|filter/.test(cs.willChange) ||
|
|
219
|
+
/paint|layout|strict|content/.test(cs.contain);
|
|
220
|
+
if (captures) return node.getBoundingClientRect().top + node.clientTop - node.scrollTop;
|
|
221
|
+
}
|
|
222
|
+
return 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
188
225
|
function panelTransformOrigin(placement: string): string {
|
|
189
226
|
const rtl =
|
|
190
227
|
isWeb &&
|
|
@@ -208,31 +245,30 @@ const overlayFloatBreakpoint = OVERLAY_BREAKPOINT;
|
|
|
208
245
|
* re-render on resize). Name kept for API compatibility; "gtSm" reads as
|
|
209
246
|
* "wide enough to float" (≥ OVERLAY_BREAKPOINT), not the dead v4 media key.
|
|
210
247
|
*/
|
|
248
|
+
function subscribeViewport(listener: () => void) {
|
|
249
|
+
if (!isWeb || typeof window === "undefined") return () => {};
|
|
250
|
+
window.addEventListener("resize", listener);
|
|
251
|
+
return () => window.removeEventListener("resize", listener);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function viewportSnapshot() {
|
|
255
|
+
return isWeb && typeof window !== "undefined" && window.innerWidth > overlayFloatBreakpoint;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const serverViewportSnapshot = () => false;
|
|
259
|
+
|
|
211
260
|
export function useViewportGtSm() {
|
|
212
|
-
|
|
213
|
-
isWeb && typeof window !== "undefined" ? window.innerWidth > overlayFloatBreakpoint : false,
|
|
214
|
-
);
|
|
215
|
-
useEffect(() => {
|
|
216
|
-
if (!isWeb || typeof window === "undefined") return;
|
|
217
|
-
const handler = () => setWideEnoughToFloat(window.innerWidth > overlayFloatBreakpoint);
|
|
218
|
-
window.addEventListener("resize", handler);
|
|
219
|
-
return () => window.removeEventListener("resize", handler);
|
|
220
|
-
}, []);
|
|
221
|
-
return wideEnoughToFloat;
|
|
261
|
+
return useSyncExternalStore(subscribeViewport, viewportSnapshot, serverViewportSnapshot);
|
|
222
262
|
}
|
|
223
263
|
|
|
224
264
|
export function FloatingPanel(props: FloatingPanelProps) {
|
|
225
265
|
// LC-71: install modality tracking during render so the Enter that opens
|
|
226
266
|
// the panel is already classified as keyboard-origin when focus moves in.
|
|
227
267
|
if (isWeb) ensureKeyboardModalityTracking();
|
|
228
|
-
const media = useMedia();
|
|
229
268
|
const viewportGtSm = useViewportGtSm();
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
|
|
233
|
-
// map, MPO-13 C4) for SSR when window is unavailable.
|
|
234
|
-
const effectiveGtSm = typeof window !== "undefined" ? viewportGtSm : media.sm === true;
|
|
235
|
-
const shouldUseSheet = props.sheet ?? (!isWeb || !effectiveGtSm);
|
|
269
|
+
// SSR and the hydration render use the same sheet structure. The viewport
|
|
270
|
+
// snapshot switches to floating after hydration when the browser is wide.
|
|
271
|
+
const shouldUseSheet = props.sheet ?? (!isWeb || !viewportGtSm);
|
|
236
272
|
|
|
237
273
|
if (shouldUseSheet) return <FloatingPanelSheet {...props} />;
|
|
238
274
|
return <FloatingPanelWeb {...props} />;
|
|
@@ -240,6 +276,26 @@ export function FloatingPanel(props: FloatingPanelProps) {
|
|
|
240
276
|
|
|
241
277
|
// ── Sheet (mobile / native / forced) ──────────────────────────
|
|
242
278
|
|
|
279
|
+
/**
|
|
280
|
+
* A closed tamagui Sheet keeps its children mounted and parks the frame
|
|
281
|
+
* below the viewport, so state inside survives a reopen. Parked, the frame
|
|
282
|
+
* must leave the accessibility tree and the Tab order (MPO-359).
|
|
283
|
+
*/
|
|
284
|
+
function useParkedFrameInert(open: boolean, frameRef: RefObject<HTMLElement | null>) {
|
|
285
|
+
useEffect(() => {
|
|
286
|
+
if (!isWeb) return;
|
|
287
|
+
const frame = frameRef.current;
|
|
288
|
+
if (!frame || typeof frame.setAttribute !== "function") return;
|
|
289
|
+
if (open) {
|
|
290
|
+
frame.removeAttribute("inert");
|
|
291
|
+
frame.removeAttribute("aria-hidden");
|
|
292
|
+
} else {
|
|
293
|
+
frame.setAttribute("inert", "");
|
|
294
|
+
frame.setAttribute("aria-hidden", "true");
|
|
295
|
+
}
|
|
296
|
+
}, [open, frameRef]);
|
|
297
|
+
}
|
|
298
|
+
|
|
243
299
|
function FloatingPanelSheet({
|
|
244
300
|
open,
|
|
245
301
|
onOpenChange,
|
|
@@ -274,6 +330,7 @@ function FloatingPanelSheet({
|
|
|
274
330
|
// DG-A11Y-04 / Axiom 7: Sheet has no focus scope — move focus into the
|
|
275
331
|
// frame on open, trap Tab while open, return focus to the trigger on close.
|
|
276
332
|
const sheetFrameRef = useRef<HTMLElement | null>(null);
|
|
333
|
+
useParkedFrameInert(open, sheetFrameRef);
|
|
277
334
|
useSheetModalFocus(open, sheetFrameRef, skipReturnFocusRef);
|
|
278
335
|
useKeyboardFocusIntoPanel(open, sheetFrameRef);
|
|
279
336
|
|
|
@@ -472,13 +529,14 @@ function FloatingPanelWeb({
|
|
|
472
529
|
let height = Math.min(totalContentHeight, Math.max(0, available));
|
|
473
530
|
height = Math.max(Math.min(120, Math.max(0, available)), height);
|
|
474
531
|
const top = isDropup ? aboveBottom - height : belowTop;
|
|
532
|
+
const cssTop = top - fixedContainingBlockTop(dropdownElement);
|
|
475
533
|
|
|
476
534
|
const cached = overlayStyleRef.current;
|
|
477
|
-
if (!cached || cached.top !==
|
|
478
|
-
dropdownElement.style.top = `${
|
|
535
|
+
if (!cached || cached.top !== cssTop || cached.maxHeight !== height) {
|
|
536
|
+
dropdownElement.style.top = `${cssTop}px`;
|
|
479
537
|
dropdownElement.style.maxHeight = `${height}px`;
|
|
480
538
|
dropdownElement.style.height = "";
|
|
481
|
-
overlayStyleRef.current = { top, maxHeight: height };
|
|
539
|
+
overlayStyleRef.current = { top: cssTop, maxHeight: height };
|
|
482
540
|
void dropdownElement.offsetHeight;
|
|
483
541
|
}
|
|
484
542
|
|
|
@@ -545,12 +603,13 @@ function FloatingPanelWeb({
|
|
|
545
603
|
}
|
|
546
604
|
}
|
|
547
605
|
|
|
606
|
+
const cssTop = top - fixedContainingBlockTop(dropdownElement);
|
|
548
607
|
const cached = overlayStyleRef.current;
|
|
549
|
-
if (!cached || cached.top !==
|
|
550
|
-
dropdownElement.style.top = `${
|
|
608
|
+
if (!cached || cached.top !== cssTop || cached.maxHeight !== height) {
|
|
609
|
+
dropdownElement.style.top = `${cssTop}px`;
|
|
551
610
|
dropdownElement.style.maxHeight = `${height}px`;
|
|
552
611
|
dropdownElement.style.height = "";
|
|
553
|
-
overlayStyleRef.current = { top, maxHeight: height };
|
|
612
|
+
overlayStyleRef.current = { top: cssTop, maxHeight: height };
|
|
554
613
|
void dropdownElement.offsetHeight;
|
|
555
614
|
}
|
|
556
615
|
|
|
@@ -698,6 +757,24 @@ function FloatingPanelWeb({
|
|
|
698
757
|
[disabled, onOpenChange],
|
|
699
758
|
);
|
|
700
759
|
|
|
760
|
+
// useClick's mousedown opener calls preventDefault, so a pointer open never
|
|
761
|
+
// focuses the trigger the way a pressed button is focused. The render that
|
|
762
|
+
// opens the panel then captures whatever held focus before, often <body> or
|
|
763
|
+
// another trigger, and Escape returns there (LC-48). Focus the pressed
|
|
764
|
+
// control first so the capture is the trigger, as for a keyboard open.
|
|
765
|
+
const focusTriggerOnPointerOpen = (event: PointerOpenEvent) => {
|
|
766
|
+
if (open || disabled || isContextMenu || event.button !== 0 || !isWeb) return;
|
|
767
|
+
const reference = panel.triggerRef.current;
|
|
768
|
+
if (!reference) return;
|
|
769
|
+
const target = event.target instanceof Element ? event.target : null;
|
|
770
|
+
const pressed = target?.closest<HTMLElement>(PANEL_FOCUSABLE);
|
|
771
|
+
const focusable =
|
|
772
|
+
pressed && reference.contains(pressed)
|
|
773
|
+
? pressed
|
|
774
|
+
: reference.querySelector<HTMLElement>(PANEL_FOCUSABLE);
|
|
775
|
+
focusable?.focus({ preventScroll: true, focusVisible: false } as FocusOptions);
|
|
776
|
+
};
|
|
777
|
+
|
|
701
778
|
const referenceProps = getReferenceProps({
|
|
702
779
|
ref: panel.setReferenceRef,
|
|
703
780
|
onClickCapture: openFromSynthesizedClick,
|
|
@@ -709,7 +786,9 @@ function FloatingPanelWeb({
|
|
|
709
786
|
const handler = referenceProps[name];
|
|
710
787
|
if (typeof handler === "function") {
|
|
711
788
|
referenceProps[name] = (event: PanelActionEvent) => {
|
|
712
|
-
if (
|
|
789
|
+
if (isNestedPanelAction(event)) return;
|
|
790
|
+
if (name === "onMouseDown") focusTriggerOnPointerOpen(event as PointerOpenEvent);
|
|
791
|
+
handler(event);
|
|
713
792
|
};
|
|
714
793
|
}
|
|
715
794
|
}
|
|
@@ -732,67 +811,74 @@ function FloatingPanelWeb({
|
|
|
732
811
|
</View>
|
|
733
812
|
|
|
734
813
|
{panel.mounted && (
|
|
735
|
-
<
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
(
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
/>
|
|
782
|
-
<View
|
|
783
|
-
ref={contentRef as any}
|
|
784
|
-
{...(contentPadding !== "none" ? panel.knobProps.panelPadding : undefined)}
|
|
785
|
-
{...(contentPadding !== "none" ? panel.knobProps.gapLg : undefined)}
|
|
814
|
+
<PanelPortal anchor={panel.triggerRef.current}>
|
|
815
|
+
<YStack
|
|
816
|
+
{...getFloatingProps({
|
|
817
|
+
ref: panel.refs.setFloating,
|
|
818
|
+
style: {
|
|
819
|
+
...elevatedSurfaceStyle,
|
|
820
|
+
position: panel.strategy,
|
|
821
|
+
top: overlayStyleRef.current?.top ?? panel.y ?? 0,
|
|
822
|
+
left: panel.x ?? 0,
|
|
823
|
+
scrollbarWidth: "none" as any,
|
|
824
|
+
zIndex: zIndex.dropdown,
|
|
825
|
+
overflow: "auto",
|
|
826
|
+
...panel.floatingStyleRef.current,
|
|
827
|
+
...(overlayStyleRef.current
|
|
828
|
+
? { maxHeight: overlayStyleRef.current.maxHeight }
|
|
829
|
+
: {}),
|
|
830
|
+
opacity: panel.visible ? 1 : 0,
|
|
831
|
+
// `none`, not scale(1): any transform makes this panel the
|
|
832
|
+
// containing block of a nested panel's `position: fixed`, which
|
|
833
|
+
// then positions against this box and is clipped by its scroll.
|
|
834
|
+
transform: panel.visible ? "none" : "scale(0.96)",
|
|
835
|
+
transition: webTransition,
|
|
836
|
+
transformOrigin: panelTransformOrigin(panel.placement),
|
|
837
|
+
},
|
|
838
|
+
onScroll: handleScroll,
|
|
839
|
+
onTransitionEnd: (event) => {
|
|
840
|
+
if (
|
|
841
|
+
event.target === event.currentTarget &&
|
|
842
|
+
(event.propertyName === "height" || event.propertyName === "max-height")
|
|
843
|
+
) {
|
|
844
|
+
panel.updateArrows(event.currentTarget);
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
})}
|
|
848
|
+
data-testid="floating-panel-viewport"
|
|
849
|
+
data-fp-panel=""
|
|
850
|
+
{...panelChromeFocus}
|
|
851
|
+
pointerEvents={panel.visible ? "auto" : "none"}
|
|
852
|
+
{...elevatedSurfaceProps}
|
|
853
|
+
// Complete elevatedSurface fragment above is the ONLY surface source
|
|
854
|
+
// (SF-OVERLAY "including border and elevation", Round 2 docket).
|
|
855
|
+
// The one layered exception is anatomy, not surface: the dropdown
|
|
856
|
+
// radius clamp (same shape as Card's containerRadius over
|
|
857
|
+
// elevatedSurface) keeps list rows unclipped at large radius knobs.
|
|
858
|
+
borderRadius={panel.dropdownRadius}
|
|
859
|
+
paddingVertical={0}
|
|
786
860
|
>
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
861
|
+
<ScrollArrow
|
|
862
|
+
direction="up"
|
|
863
|
+
scrollRef={panel.refs.floating}
|
|
864
|
+
visible={panel.arrowUp}
|
|
865
|
+
arrowScrollDirRef={panel.arrowScrollDirRef}
|
|
866
|
+
/>
|
|
867
|
+
<View
|
|
868
|
+
ref={contentRef as any}
|
|
869
|
+
{...(contentPadding !== "none" ? panel.knobProps.panelPadding : undefined)}
|
|
870
|
+
{...(contentPadding !== "none" ? panel.knobProps.gapLg : undefined)}
|
|
871
|
+
>
|
|
872
|
+
{children}
|
|
873
|
+
</View>
|
|
874
|
+
<ScrollArrow
|
|
875
|
+
direction="down"
|
|
876
|
+
scrollRef={panel.refs.floating}
|
|
877
|
+
visible={panel.arrowDown}
|
|
878
|
+
arrowScrollDirRef={panel.arrowScrollDirRef}
|
|
879
|
+
/>
|
|
880
|
+
</YStack>
|
|
881
|
+
</PanelPortal>
|
|
796
882
|
)}
|
|
797
883
|
</>
|
|
798
884
|
);
|