@multiplatform.one/forms 7.7.4 → 7.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Button/index.cjs +3 -36
- package/dist/cjs/Button/index.native.js +3 -36
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +1 -1
- package/dist/cjs/Chip/index.native.js +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/index.cjs +17 -10
- package/dist/cjs/ContextualSaveBar/index.native.js +18 -10
- package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/index.cjs +59 -14
- package/dist/cjs/FloatingPanel/index.native.js +16 -7
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/nestedAction.cjs +37 -0
- package/dist/cjs/FloatingPanel/nestedAction.native.js +42 -0
- package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -0
- package/dist/cjs/InputParts/index.cjs +11 -7
- package/dist/cjs/InputParts/index.native.js +12 -10
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Wheel/index.cjs +3 -3
- package/dist/cjs/Wheel/index.native.js +3 -3
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/fieldLayout.cjs +3 -3
- package/dist/cjs/fieldLayout.native.js +3 -3
- package/dist/cjs/fieldLayout.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.cjs +9 -2
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +74 -76
- package/dist/cjs/fields/Combobox/index.native.js +78 -86
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/Calendar.cjs +6 -1
- package/dist/cjs/fields/DatePicker/Calendar.native.js +6 -1
- package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DateRangePicker.cjs +2 -2
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +15 -12
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +39 -14
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MonthPicker.cjs +10 -3
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js +10 -3
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MultiDatePicker.cjs +2 -2
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/index.native.js +3 -0
- package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/parts.cjs +26 -14
- package/dist/cjs/fields/DatePicker/parts.native.js +28 -14
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geocoder.cjs +63 -0
- package/dist/cjs/fields/Geolocation/geocoder.native.js +68 -0
- package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -0
- package/dist/cjs/fields/Geolocation/index.cjs +801 -152
- package/dist/cjs/fields/Geolocation/index.native.js +856 -167
- package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.cjs +44 -0
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js +47 -0
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
- package/dist/cjs/fields/Icon/drawnSet.cjs +14 -3
- package/dist/cjs/fields/Icon/drawnSet.native.js +18 -3
- package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/cjs/fields/Icon/index.cjs +102 -27
- package/dist/cjs/fields/Icon/index.native.js +115 -31
- package/dist/cjs/fields/Icon/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.cjs +5 -12
- package/dist/cjs/fields/Input/index.native.js +5 -13
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/index.cjs +2 -2
- package/dist/cjs/fields/PhoneInput/index.native.js +2 -2
- package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +8 -9
- package/dist/cjs/fields/SearchInput/index.native.js +8 -9
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +53 -18
- package/dist/cjs/fields/Select/index.native.js +63 -37
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/index.cjs +144 -31
- package/dist/cjs/fields/Stepper/index.native.js +151 -31
- package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.native.js +2 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/focusManagement.cjs +24 -11
- package/dist/cjs/shared/focusManagement.native.js +24 -11
- package/dist/cjs/shared/focusManagement.native.js.map +1 -1
- package/dist/cjs/shared/pickerTriggerContract.cjs +38 -0
- package/dist/cjs/shared/pickerTriggerContract.native.js +41 -0
- package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -0
- package/dist/cjs/shared/pressSlopProps.cjs +68 -0
- package/dist/cjs/shared/pressSlopProps.native.js +72 -0
- package/dist/cjs/shared/pressSlopProps.native.js.map +1 -0
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +1 -34
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +1 -34
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +1 -1
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/index.mjs +17 -10
- package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/esm/ContextualSaveBar/index.native.js +18 -10
- package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
- package/dist/esm/ControlGroup/index.native.js.map +1 -1
- package/dist/esm/DescriptionList/index.native.js.map +1 -1
- package/dist/esm/ErrorSummary.native.js.map +1 -1
- package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
- package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
- package/dist/esm/FieldDisplay/index.native.js.map +1 -1
- package/dist/esm/FieldGroup.native.js.map +1 -1
- package/dist/esm/FloatingPanel/index.mjs +58 -15
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +15 -8
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.mjs +11 -0
- package/dist/esm/FloatingPanel/nestedAction.mjs.map +1 -0
- package/dist/esm/FloatingPanel/nestedAction.native.js +13 -0
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -0
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/Form/index.native.js.map +1 -1
- package/dist/esm/Form/validateOn.native.js.map +1 -1
- package/dist/esm/FormGrid.native.js.map +1 -1
- package/dist/esm/FormSection.native.js.map +1 -1
- package/dist/esm/InputParts/index.mjs +12 -8
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +13 -11
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Label/index.native.js.map +1 -1
- package/dist/esm/Skeleton/index.native.js.map +1 -1
- package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
- package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
- package/dist/esm/Table/index.native.js.map +1 -1
- package/dist/esm/Wheel/haptic.native.js.map +1 -1
- package/dist/esm/Wheel/index.mjs +3 -3
- package/dist/esm/Wheel/index.mjs.map +1 -1
- package/dist/esm/Wheel/index.native.js +3 -3
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/actionLabel.native.js.map +1 -1
- package/dist/esm/fieldDefaults.native.js.map +1 -1
- package/dist/esm/fieldLayout.mjs +3 -3
- package/dist/esm/fieldLayout.mjs.map +1 -1
- package/dist/esm/fieldLayout.native.js +3 -3
- package/dist/esm/fieldLayout.native.js.map +1 -1
- package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
- package/dist/esm/fields/Barcode/index.native.js.map +1 -1
- package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
- package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +74 -76
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +78 -86
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.mjs +6 -1
- package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js +6 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.mjs +2 -2
- package/dist/esm/fields/DatePicker/DateRangePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js +39 -14
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.mjs +10 -3
- package/dist/esm/fields/DatePicker/MonthPicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.native.js +10 -3
- package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.mjs +2 -2
- package/dist/esm/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/index.native.js +3 -0
- package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/parts.mjs +28 -16
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +30 -16
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geocoder.mjs +33 -0
- package/dist/esm/fields/Geolocation/geocoder.mjs.map +1 -0
- package/dist/esm/fields/Geolocation/geocoder.native.js +35 -0
- package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -0
- package/dist/esm/fields/Geolocation/index.mjs +792 -149
- package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/index.native.js +847 -164
- package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs +19 -0
- package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
- package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js +19 -0
- package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
- package/dist/esm/fields/Icon/drawnSet.mjs +14 -3
- package/dist/esm/fields/Icon/drawnSet.mjs.map +1 -1
- package/dist/esm/fields/Icon/drawnSet.native.js +18 -3
- package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/esm/fields/Icon/index.mjs +93 -18
- package/dist/esm/fields/Icon/index.mjs.map +1 -1
- package/dist/esm/fields/Icon/index.native.js +106 -22
- package/dist/esm/fields/Icon/index.native.js.map +1 -1
- package/dist/esm/fields/ImageField/index.native.js.map +1 -1
- package/dist/esm/fields/Input/index.mjs +5 -12
- package/dist/esm/fields/Input/index.mjs.map +1 -1
- package/dist/esm/fields/Input/index.native.js +5 -13
- package/dist/esm/fields/Input/index.native.js.map +1 -1
- package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
- package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
- package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/index.mjs +2 -2
- package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js +2 -2
- package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/esm/fields/Progress/index.native.js.map +1 -1
- package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/esm/fields/Rating/types.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.mjs +9 -10
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +9 -10
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +54 -19
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +64 -38
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Signature/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/esm/fields/Stepper/index.mjs +145 -32
- package/dist/esm/fields/Stepper/index.mjs.map +1 -1
- package/dist/esm/fields/Stepper/index.native.js +152 -32
- package/dist/esm/fields/Stepper/index.native.js.map +1 -1
- package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/esm/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/fields/TextArea/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
- package/dist/esm/fields/nativeSelect.native.js.map +1 -1
- package/dist/esm/fields/selectedOrder.native.js.map +1 -1
- package/dist/esm/formSpacing.native.js.map +1 -1
- package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/requiredMarking.native.js.map +1 -1
- package/dist/esm/shared/TimeColumn.native.js.map +1 -1
- package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/esm/shared/colorRamps.native.js.map +1 -1
- package/dist/esm/shared/devWarn.native.js.map +1 -1
- package/dist/esm/shared/floatingList.native.js.map +1 -1
- package/dist/esm/shared/focusManagement.mjs +24 -11
- package/dist/esm/shared/focusManagement.mjs.map +1 -1
- package/dist/esm/shared/focusManagement.native.js +24 -11
- package/dist/esm/shared/focusManagement.native.js.map +1 -1
- package/dist/esm/shared/groupContext.native.js.map +1 -1
- package/dist/esm/shared/i18n.native.js.map +1 -1
- package/dist/esm/shared/pickerTriggerContract.mjs +13 -0
- package/dist/esm/shared/pickerTriggerContract.mjs.map +1 -0
- package/dist/esm/shared/pickerTriggerContract.native.js +13 -0
- package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -0
- package/dist/esm/shared/pressSlopProps.mjs +43 -0
- package/dist/esm/shared/pressSlopProps.mjs.map +1 -0
- package/dist/esm/shared/pressSlopProps.native.js +44 -0
- package/dist/esm/shared/pressSlopProps.native.js.map +1 -0
- package/dist/esm/shared/t.native.js.map +1 -1
- package/dist/esm/shared/tableCellContext.native.js.map +1 -1
- package/dist/esm/shared/useDragScroll.native.js.map +1 -1
- package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
- package/dist/esm/shared/utils.native.js.map +1 -1
- package/dist/esm/shared/zIndex.native.js.map +1 -1
- package/dist/esm/themedPrimitives.native.js.map +1 -1
- package/dist/esm/types.native.js.map +1 -1
- package/dist/esm/utils/LinkCell.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +1 -34
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +3 -36
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +1 -1
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +1 -1
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.mjs +17 -10
- package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.native.js +18 -10
- package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/index.mjs +58 -15
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +16 -7
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/nestedAction.mjs +11 -0
- package/dist/jsx/FloatingPanel/nestedAction.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/nestedAction.native.js +42 -0
- package/dist/jsx/FloatingPanel/nestedAction.native.js.map +1 -0
- package/dist/jsx/InputParts/index.mjs +12 -8
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +12 -10
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/Wheel/index.mjs +3 -3
- package/dist/jsx/Wheel/index.mjs.map +1 -1
- package/dist/jsx/Wheel/index.native.js +3 -3
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/fieldLayout.mjs +3 -3
- package/dist/jsx/fieldLayout.mjs.map +1 -1
- package/dist/jsx/fieldLayout.native.js +3 -3
- package/dist/jsx/fieldLayout.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +74 -76
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +78 -86
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.mjs +6 -1
- package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.native.js +6 -1
- package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.mjs +2 -2
- package/dist/jsx/fields/DatePicker/DateRangePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +39 -14
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MonthPicker.mjs +10 -3
- package/dist/jsx/fields/DatePicker/MonthPicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/MonthPicker.native.js +10 -3
- package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs +2 -2
- package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js +3 -0
- package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +28 -16
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +28 -14
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/geocoder.mjs +33 -0
- package/dist/jsx/fields/Geolocation/geocoder.mjs.map +1 -0
- package/dist/jsx/fields/Geolocation/geocoder.native.js +68 -0
- package/dist/jsx/fields/Geolocation/geocoder.native.js.map +1 -0
- package/dist/jsx/fields/Geolocation/index.mjs +792 -149
- package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/index.native.js +856 -167
- package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs +19 -0
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js +47 -0
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
- package/dist/jsx/fields/Icon/drawnSet.mjs +14 -3
- package/dist/jsx/fields/Icon/drawnSet.mjs.map +1 -1
- package/dist/jsx/fields/Icon/drawnSet.native.js +18 -3
- package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/jsx/fields/Icon/index.mjs +93 -18
- package/dist/jsx/fields/Icon/index.mjs.map +1 -1
- package/dist/jsx/fields/Icon/index.native.js +115 -31
- package/dist/jsx/fields/Icon/index.native.js.map +1 -1
- package/dist/jsx/fields/Input/index.mjs +5 -12
- package/dist/jsx/fields/Input/index.mjs.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +5 -13
- package/dist/jsx/fields/Input/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.mjs +2 -2
- package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.native.js +2 -2
- package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +9 -10
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +8 -9
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +54 -19
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +63 -37
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Stepper/index.mjs +145 -32
- package/dist/jsx/fields/Stepper/index.mjs.map +1 -1
- package/dist/jsx/fields/Stepper/index.native.js +151 -31
- package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
- package/dist/jsx/index.js +2 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +2 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/focusManagement.mjs +24 -11
- package/dist/jsx/shared/focusManagement.mjs.map +1 -1
- package/dist/jsx/shared/focusManagement.native.js +24 -11
- package/dist/jsx/shared/focusManagement.native.js.map +1 -1
- package/dist/jsx/shared/pickerTriggerContract.mjs +13 -0
- package/dist/jsx/shared/pickerTriggerContract.mjs.map +1 -0
- package/dist/jsx/shared/pickerTriggerContract.native.js +41 -0
- package/dist/jsx/shared/pickerTriggerContract.native.js.map +1 -0
- package/dist/jsx/shared/pressSlopProps.mjs +43 -0
- package/dist/jsx/shared/pressSlopProps.mjs.map +1 -0
- package/dist/jsx/shared/pressSlopProps.native.js +72 -0
- package/dist/jsx/shared/pressSlopProps.native.js.map +1 -0
- package/package.json +8 -7
- package/src/Button/Button.labelInk.spec.tsx +21 -18
- package/src/Button/Button.outlinedChannel.spec.tsx +46 -0
- package/src/Button/Button.sizeLadder.spec.tsx +4 -3
- package/src/Button/Button.stories.tsx +20 -0
- package/src/Button/index.tsx +26 -39
- package/src/Chip/Chip.spec.tsx +3 -1
- package/src/Chip/index.tsx +1 -5
- package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +33 -0
- package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +19 -0
- package/src/ContextualSaveBar/index.tsx +12 -8
- package/src/ContextualSaveBar/nativeFlow.spec.tsx +20 -0
- package/src/FieldLayout.stories.tsx +41 -0
- package/src/FloatingPanel/FloatingPanel.native.spec.tsx +54 -0
- package/src/FloatingPanel/FloatingPanel.spec.tsx +109 -0
- package/src/FloatingPanel/index.native.tsx +24 -7
- package/src/FloatingPanel/index.tsx +80 -13
- package/src/FloatingPanel/nestedAction.spec.ts +36 -0
- package/src/FloatingPanel/nestedAction.ts +15 -0
- package/src/FloatingPanel/panelWidthContract.spec.ts +12 -15
- package/src/FormsIntegration.stories.tsx +2 -6
- package/src/InputParts/index.tsx +20 -6
- package/src/InputParts/layoutGap.spec.tsx +43 -0
- package/src/Wheel/Wheel.spec.tsx +16 -0
- package/src/Wheel/index.tsx +3 -3
- package/src/fieldLayout.spec.tsx +42 -1
- package/src/fieldLayout.tsx +9 -9
- package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +18 -0
- package/src/fields/Checkbox/CheckboxFieldFrame.tsx +6 -1
- package/src/fields/Combobox/Combobox.spec.tsx +48 -1
- package/src/fields/Combobox/index.tsx +90 -80
- package/src/fields/DatePicker/Calendar.tsx +4 -1
- package/src/fields/DatePicker/DatePicker.stories.tsx +22 -1
- package/src/fields/DatePicker/DateRangePicker.tsx +4 -2
- package/src/fields/DatePicker/DatetimePicker.catalog.tsx +21 -19
- package/src/fields/DatePicker/DatetimePicker.native.spec.tsx +144 -0
- package/src/fields/DatePicker/DatetimePicker.native.tsx +57 -32
- package/src/fields/DatePicker/DatetimePicker.stories.tsx +22 -0
- package/src/fields/DatePicker/MonthPicker.tsx +8 -3
- package/src/fields/DatePicker/MultiDatePicker.tsx +4 -2
- package/src/fields/DatePicker/index.native.tsx +1 -0
- package/src/fields/DatePicker/parts.spec.tsx +56 -0
- package/src/fields/DatePicker/parts.tsx +33 -12
- package/src/fields/Geolocation/Geolocation.spec.tsx +287 -35
- package/src/fields/Geolocation/Geolocation.stories.tsx +141 -7
- package/src/fields/Geolocation/GeolocationMap.native.tsx +3 -0
- package/src/fields/Geolocation/GeolocationMap.tsx +4 -0
- package/src/fields/Geolocation/geocoder.spec.ts +59 -0
- package/src/fields/Geolocation/geocoder.ts +84 -0
- package/src/fields/Geolocation/geocoderSeam.spec.tsx +203 -0
- package/src/fields/Geolocation/index.tsx +912 -180
- package/src/fields/Geolocation/nativeSearchFocus.spec.ts +34 -0
- package/src/fields/Geolocation/nativeSearchFocus.ts +19 -0
- package/src/fields/Geolocation/salvage.spec.tsx +398 -0
- package/src/fields/Geolocation/storyProviders.spec.tsx +44 -0
- package/src/fields/Icon/Icon.spec.tsx +215 -1
- package/src/fields/Icon/Icon.stories.tsx +9 -1
- package/src/fields/Icon/drawnSet.tsx +39 -4
- package/src/fields/Icon/index.tsx +118 -18
- package/src/fields/Input/Input.copy.spec.tsx +1 -0
- package/src/fields/Input/Input.spec.tsx +50 -0
- package/src/fields/Input/Input.stories.tsx +1 -1
- package/src/fields/Input/index.tsx +7 -13
- package/src/fields/PhoneInput/index.tsx +2 -2
- package/src/fields/SearchInput/SearchInput.spec.tsx +14 -0
- package/src/fields/SearchInput/index.tsx +5 -6
- package/src/fields/Select/Select.spec.tsx +54 -0
- package/src/fields/Select/index.tsx +63 -33
- package/src/fields/Stepper/Stepper.spec.tsx +34 -1
- package/src/fields/Stepper/index.tsx +193 -33
- package/src/fields/pickerActivation.spec.tsx +105 -0
- package/src/fields/pickerDensity.spec.tsx +86 -0
- package/src/fields/pickerRows.spec.tsx +66 -0
- package/src/index.ts +9 -0
- package/src/shared/focusManagement.spec.tsx +68 -0
- package/src/shared/focusManagement.ts +20 -10
- package/src/shared/pickerTriggerContract.ts +13 -0
- package/src/shared/pressSlopProps.spec.ts +39 -0
- package/src/shared/pressSlopProps.ts +52 -0
- package/types/Button/index.d.ts +22 -3
- package/types/Button/index.d.ts.map +1 -1
- package/types/Chip/index.d.ts.map +1 -1
- package/types/ContextualSaveBar/index.d.ts +1 -1
- package/types/ContextualSaveBar/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.d.ts +11 -1
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +2 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/nestedAction.d.ts +13 -0
- package/types/FloatingPanel/nestedAction.d.ts.map +1 -0
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/fields/Checkbox/CheckboxFieldFrame.d.ts +46 -2
- package/types/fields/Checkbox/CheckboxFieldFrame.d.ts.map +1 -1
- package/types/fields/Checkbox/index.d.ts +3 -3
- package/types/fields/Combobox/index.d.ts +3 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/DatePicker/Calendar.d.ts.map +1 -1
- package/types/fields/DatePicker/DateRangePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
- package/types/fields/DatePicker/MonthPicker.d.ts.map +1 -1
- package/types/fields/DatePicker/MultiDatePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/index.native.d.ts.map +1 -1
- package/types/fields/DatePicker/parts.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.d.ts +4 -0
- package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.native.d.ts +3 -0
- package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
- package/types/fields/Geolocation/geocoder.d.ts +53 -0
- package/types/fields/Geolocation/geocoder.d.ts.map +1 -0
- package/types/fields/Geolocation/index.d.ts +18 -2
- package/types/fields/Geolocation/index.d.ts.map +1 -1
- package/types/fields/Geolocation/nativeSearchFocus.d.ts +8 -0
- package/types/fields/Geolocation/nativeSearchFocus.d.ts.map +1 -0
- package/types/fields/Icon/drawnSet.d.ts.map +1 -1
- package/types/fields/Icon/index.d.ts.map +1 -1
- package/types/fields/Input/index.d.ts.map +1 -1
- package/types/fields/PhoneInput/index.d.ts.map +1 -1
- package/types/fields/RadioGroup/index.d.ts +2 -2
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Stepper/index.d.ts.map +1 -1
- package/types/fields/ToggleGroup/index.d.ts +1 -1
- package/types/index.d.ts +2 -0
- package/types/index.d.ts.map +1 -1
- package/types/shared/focusManagement.d.ts +2 -2
- package/types/shared/focusManagement.d.ts.map +1 -1
- package/types/shared/pickerTriggerContract.d.ts +18 -0
- package/types/shared/pickerTriggerContract.d.ts.map +1 -0
- package/types/shared/pressSlopProps.d.ts +8 -0
- package/types/shared/pressSlopProps.d.ts.map +1 -0
- package/src/router.d.ts +0 -16
package/src/Button/index.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pressSlopProps } from "../shared/pressSlopProps";
|
|
1
2
|
import {
|
|
2
3
|
Children,
|
|
3
4
|
createElement,
|
|
@@ -20,7 +21,6 @@ import {
|
|
|
20
21
|
sizeRecipeFromHeight,
|
|
21
22
|
solidButtonIntents,
|
|
22
23
|
useResolvedKnobs,
|
|
23
|
-
type HitSlopInsets,
|
|
24
24
|
type RecipeFamilyName,
|
|
25
25
|
type SizeRecipe,
|
|
26
26
|
type SizeRecipeRadiusStop,
|
|
@@ -56,8 +56,8 @@ import { useControlGrouped } from "../shared/groupContext";
|
|
|
56
56
|
* Coordinated size recipe (Polaris slim/medium/large, Primer s/m/l, Linear
|
|
57
57
|
* 28/32/40, Spectrum S/M, M3 XS/S). Height, pad, type, icon, gap and radius
|
|
58
58
|
* step together from the size table. The borderRadius knob is an override
|
|
59
|
-
*
|
|
60
|
-
* Density
|
|
59
|
+
* of painted corners only (`resolveControlRadius`); internal gap keeps the
|
|
60
|
+
* icon and label grouped. Density selects the same-height compact family.
|
|
61
61
|
*
|
|
62
62
|
* GENERATED (LC-75 / LC-80): Button consumes `recipeFamilies.control` — the
|
|
63
63
|
* handwritten mirror table this file used to carry drifted (md font 13 vs the
|
|
@@ -105,40 +105,6 @@ function sizeTokenPx(size: SizeTokens | number | undefined): number {
|
|
|
105
105
|
return typeof resolved === "number" && Number.isFinite(resolved) ? resolved : MIN_PRESS_TARGET;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const PRESS_SLOP_STYLE_ID = "mp-button-press-slop";
|
|
109
|
-
|
|
110
|
-
function pressSlopStylesheet(): string {
|
|
111
|
-
const rules = ["[data-mp-press-slop]{position:relative}"];
|
|
112
|
-
for (let n = 1; n <= 16; n++) {
|
|
113
|
-
rules.push(`[data-mp-press-slop="${n}"]::after{content:"";position:absolute;inset:-${n}px}`);
|
|
114
|
-
}
|
|
115
|
-
return rules.join("");
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function ensureButtonPressSlop(): void {
|
|
119
|
-
if (!isWeb || typeof document === "undefined") return;
|
|
120
|
-
if (document.getElementById(PRESS_SLOP_STYLE_ID)) return;
|
|
121
|
-
const tag = document.createElement("style");
|
|
122
|
-
tag.id = PRESS_SLOP_STYLE_ID;
|
|
123
|
-
tag.textContent = pressSlopStylesheet();
|
|
124
|
-
document.head.appendChild(tag);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function pressSlopProps(
|
|
128
|
-
visualPx: number,
|
|
129
|
-
enabled: boolean,
|
|
130
|
-
): { "data-mp-press-slop": string } | { hitSlop: HitSlopInsets } | undefined {
|
|
131
|
-
if (!enabled || visualPx >= MIN_PRESS_TARGET) return undefined;
|
|
132
|
-
const hitSlop = pressTargetHitSlop(visualPx);
|
|
133
|
-
const outset = hitSlop.top;
|
|
134
|
-
if (outset <= 0) return undefined;
|
|
135
|
-
if (isWeb) {
|
|
136
|
-
ensureButtonPressSlop();
|
|
137
|
-
return { "data-mp-press-slop": String(outset) };
|
|
138
|
-
}
|
|
139
|
-
return { hitSlop };
|
|
140
|
-
}
|
|
141
|
-
|
|
142
108
|
/** DG-ACT-01 role within an ActionBar / action region. */
|
|
143
109
|
export type ButtonActionRole = "primary" | "secondary" | "chrome";
|
|
144
110
|
|
|
@@ -273,7 +239,29 @@ export const ButtonFrame = styled(View, {
|
|
|
273
239
|
},
|
|
274
240
|
});
|
|
275
241
|
|
|
276
|
-
|
|
242
|
+
/**
|
|
243
|
+
* MPO-91: `variant` is Omitted, and that Omit IS the guard.
|
|
244
|
+
*
|
|
245
|
+
* `ButtonFrame` is `styled(View)` and declares only an `outlined` BOOLEAN, so
|
|
246
|
+
* `variant="outlined"` was never read — it landed on the frame as an unread
|
|
247
|
+
* prop and the button rendered FILLED. Because `TamaguiButtonProps` carries
|
|
248
|
+
* `variant`, the inherited type advertised a channel this component ignores,
|
|
249
|
+
* so 75 call sites across 29 files typechecked, rendered wrong, and said
|
|
250
|
+
* nothing. Declaring the prop and dropping it on the floor is the lying API
|
|
251
|
+
* MPO-81 refused to ship.
|
|
252
|
+
*
|
|
253
|
+
* Omitting it turns every one of those call sites into a compile error instead
|
|
254
|
+
* of a silent no-op, which is what stops the prop coming back. The house
|
|
255
|
+
* channel is the `outlined` boolean.
|
|
256
|
+
*
|
|
257
|
+
* `@multiplatform.one/components`' Button still accepts `variant` and maps it
|
|
258
|
+
* onto `outlined` — that shim is the documented raw-tamagui compat hatch, and
|
|
259
|
+
* it declares the prop itself rather than inheriting it from here.
|
|
260
|
+
*/
|
|
261
|
+
export interface ButtonProps extends Omit<
|
|
262
|
+
TamaguiButtonProps,
|
|
263
|
+
"form" | "icon" | "iconAfter" | "variant"
|
|
264
|
+
> {
|
|
277
265
|
action?: "submit" | "reset";
|
|
278
266
|
form?: AnyFormApi;
|
|
279
267
|
loading?: boolean;
|
|
@@ -684,7 +672,6 @@ export function Button({
|
|
|
684
672
|
circular={!nested && isCircular ? true : undefined}
|
|
685
673
|
chromeless={selectedFill ? false : chromeless}
|
|
686
674
|
selected={selectedFill || undefined}
|
|
687
|
-
{...(outlined ? { variant: "outlined" as const } : undefined)}
|
|
688
675
|
{...(!isCircular || nested
|
|
689
676
|
? {
|
|
690
677
|
paddingHorizontal: padX,
|
package/src/Chip/Chip.spec.tsx
CHANGED
|
@@ -161,7 +161,9 @@ describe("Chip", () => {
|
|
|
161
161
|
|
|
162
162
|
it("selected chip renders a leading check when no icon is passed", () => {
|
|
163
163
|
const result = renderWithProviders(<Chip selected>On</Chip>);
|
|
164
|
-
|
|
164
|
+
const fill = result.container.querySelector("svg")?.getAttribute("fill");
|
|
165
|
+
expect(fill).toBeTruthy();
|
|
166
|
+
expect(fill?.startsWith("$")).toBe(false);
|
|
165
167
|
});
|
|
166
168
|
|
|
167
169
|
it("onPress fires from the chip body and does not fire dismiss", () => {
|
package/src/Chip/index.tsx
CHANGED
|
@@ -436,11 +436,7 @@ export function Chip({
|
|
|
436
436
|
? t("Remove {{label}}", { label: String(children) })
|
|
437
437
|
: t("Remove");
|
|
438
438
|
const leading =
|
|
439
|
-
icon !== undefined ?
|
|
440
|
-
icon
|
|
441
|
-
) : selected ? (
|
|
442
|
-
<CheckIcon size={iconSize} color={textColor as string} />
|
|
443
|
-
) : null;
|
|
439
|
+
icon !== undefined ? icon : selected ? <CheckIcon size={iconSize} color={glyphInk} /> : null;
|
|
444
440
|
|
|
445
441
|
const onBodyKeyDown = ((e: KeyboardEvent) => {
|
|
446
442
|
if ((e.key === "Enter" || e.key === " ") && onPress) {
|
|
@@ -119,6 +119,39 @@ describe("ContextualSaveBar", () => {
|
|
|
119
119
|
expect(savebar()).toBeNull();
|
|
120
120
|
});
|
|
121
121
|
|
|
122
|
+
it.each([undefined, "Review changes"])(
|
|
123
|
+
"shows the complete narrow-form refusal with custom status %s",
|
|
124
|
+
async (message) => {
|
|
125
|
+
const refusal =
|
|
126
|
+
"service_identifier_already_exists_012345678901234567890123456789. Choose a different identifier and retry.";
|
|
127
|
+
const result = renderWithProviders(
|
|
128
|
+
<div style={{ width: 309 }}>
|
|
129
|
+
<Form
|
|
130
|
+
saveBar={{ message }}
|
|
131
|
+
formOptions={{ defaultValues: { name: "svc" } }}
|
|
132
|
+
onSubmit={async () => {
|
|
133
|
+
throw new Error(refusal);
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
<Input name="name" label="Service name" />
|
|
137
|
+
</Form>
|
|
138
|
+
</div>,
|
|
139
|
+
);
|
|
140
|
+
const input = result.container.querySelector("input")!;
|
|
141
|
+
await act(async () => typeIn(input, "svc-billing"));
|
|
142
|
+
await act(async () => fireEvent.click(barButton("Save")));
|
|
143
|
+
await waitFor(() => expect(savebar()?.textContent).toContain(refusal));
|
|
144
|
+
const status = savebar()!.querySelector('[role="status"]')!;
|
|
145
|
+
expect(getComputedStyle(status).whiteSpace).not.toBe("nowrap");
|
|
146
|
+
expect(getComputedStyle(status).textOverflow).not.toBe("ellipsis");
|
|
147
|
+
expect(getComputedStyle(status).overflowWrap).toBe("anywhere");
|
|
148
|
+
expect(getComputedStyle(savebar()!).flexDirection).toBe("column");
|
|
149
|
+
expect(barButton("Save").getAttribute("aria-disabled")).toBeNull();
|
|
150
|
+
expect(barButton("Discard").getAttribute("aria-disabled")).toBeNull();
|
|
151
|
+
expect((input as HTMLInputElement).value).toBe("svc-billing");
|
|
152
|
+
},
|
|
153
|
+
);
|
|
154
|
+
|
|
122
155
|
it("clears after Save and after Discard confirm", async () => {
|
|
123
156
|
const onSubmit = vi.fn();
|
|
124
157
|
const result = renderWithProviders(
|
|
@@ -89,3 +89,22 @@ export const Dirty: Story = {
|
|
|
89
89
|
</Form>
|
|
90
90
|
),
|
|
91
91
|
};
|
|
92
|
+
|
|
93
|
+
export const NarrowRefusal: Story = {
|
|
94
|
+
name: "Narrow refusal",
|
|
95
|
+
render: () => (
|
|
96
|
+
<YStack width={309} maxWidth="100%">
|
|
97
|
+
<Form
|
|
98
|
+
saveBar={{ forceVisible: true }}
|
|
99
|
+
formOptions={{ defaultValues: { name: "service-example" } }}
|
|
100
|
+
onSubmit={async () => {
|
|
101
|
+
throw new Error(
|
|
102
|
+
"service_identifier_already_exists_012345678901234567890123456789. Choose a different identifier and retry.",
|
|
103
|
+
);
|
|
104
|
+
}}
|
|
105
|
+
>
|
|
106
|
+
<Input name="name" label="Service name" />
|
|
107
|
+
</Form>
|
|
108
|
+
</YStack>
|
|
109
|
+
),
|
|
110
|
+
};
|
|
@@ -39,7 +39,7 @@ export interface ContextualSaveBarProps {
|
|
|
39
39
|
* Form reads this; the bar itself does not.
|
|
40
40
|
*/
|
|
41
41
|
onAutoCommit?: (name: string, value: unknown) => void;
|
|
42
|
-
/** Override
|
|
42
|
+
/** Override normal dirty-state copy; saving and failures retain their status. */
|
|
43
43
|
message?: string;
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -83,7 +83,6 @@ function statusCopy(args: {
|
|
|
83
83
|
dirty: number;
|
|
84
84
|
override?: string;
|
|
85
85
|
}): { text: string; failed: boolean; qualifier?: string } {
|
|
86
|
-
if (args.override) return { text: args.override, failed: false };
|
|
87
86
|
if (args.isSubmitting) return { text: t("Saving…"), failed: false };
|
|
88
87
|
if (args.saveError) {
|
|
89
88
|
return {
|
|
@@ -101,6 +100,7 @@ function statusCopy(args: {
|
|
|
101
100
|
failed: true,
|
|
102
101
|
};
|
|
103
102
|
}
|
|
103
|
+
if (args.override) return { text: args.override, failed: false };
|
|
104
104
|
const qualifier =
|
|
105
105
|
args.dirty > 0
|
|
106
106
|
? args.dirty === 1
|
|
@@ -236,11 +236,13 @@ export function ContextualSaveBar({
|
|
|
236
236
|
data-mp-savebar-bottom-radius="0"
|
|
237
237
|
role="region"
|
|
238
238
|
aria-label={t("Unsaved changes")}
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
// Tamagui maps sticky to absolute on native; keep the dock in flow there.
|
|
240
|
+
position={isWeb ? "sticky" : "relative"}
|
|
241
|
+
bottom={isWeb ? 0 : undefined}
|
|
241
242
|
width="100%"
|
|
242
243
|
zIndex={zIndex.sheet}
|
|
243
|
-
|
|
244
|
+
flexDirection={copy.failed ? "column" : "row"}
|
|
245
|
+
alignItems={copy.failed ? "stretch" : "center"}
|
|
244
246
|
paddingTop="$2.5"
|
|
245
247
|
paddingHorizontal={padX as never}
|
|
246
248
|
paddingBottom="$2.5"
|
|
@@ -266,15 +268,17 @@ export function ContextualSaveBar({
|
|
|
266
268
|
...(elevationProps.style as object | undefined),
|
|
267
269
|
}}
|
|
268
270
|
>
|
|
269
|
-
<XStack flex={1} minWidth={0} alignItems="baseline" gap="$2">
|
|
271
|
+
<XStack flex={copy.failed ? undefined : 1} minWidth={0} alignItems="baseline" gap="$2">
|
|
270
272
|
<Text
|
|
271
273
|
role="status"
|
|
272
274
|
{...knobProps.body}
|
|
273
275
|
fontSize="$4"
|
|
274
276
|
lineHeight="$4"
|
|
275
277
|
color={copy.failed ? formCommonColors.error : "$color"}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
+
flexShrink={1}
|
|
279
|
+
numberOfLines={copy.failed ? undefined : 1}
|
|
280
|
+
ellipsizeMode={copy.failed ? undefined : "tail"}
|
|
281
|
+
{...(isWeb && copy.failed ? { style: { overflowWrap: "anywhere" } } : {})}
|
|
278
282
|
>
|
|
279
283
|
{copy.text}
|
|
280
284
|
</Text>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { expect, it, vi } from "vitest";
|
|
3
|
+
import { Form } from "../Form";
|
|
4
|
+
import { ContextualSaveBar } from "./index";
|
|
5
|
+
|
|
6
|
+
vi.mock("tamagui", async (importOriginal) => ({
|
|
7
|
+
...(await importOriginal<typeof import("tamagui")>()),
|
|
8
|
+
isWeb: false,
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
it("reserves native layout space instead of mapping a sticky dock to absolute", () => {
|
|
12
|
+
const view = renderWithProviders(
|
|
13
|
+
<Form formOptions={{ defaultValues: { name: "example" } }}>
|
|
14
|
+
<ContextualSaveBar forceVisible />
|
|
15
|
+
</Form>,
|
|
16
|
+
);
|
|
17
|
+
const bar = view.container.querySelector("[data-mp-contextual-savebar]")!;
|
|
18
|
+
expect(getComputedStyle(bar).position).toBe("relative");
|
|
19
|
+
expect(getComputedStyle(bar).bottom).not.toBe("0px");
|
|
20
|
+
});
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { action } from "@multiplatform.one/storybook";
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
3
|
import { useForm } from "@tanstack/react-form";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
4
6
|
import { Input as TamaguiInput, Paragraph, YStack, XStack } from "tamagui";
|
|
5
7
|
import { Button } from "./Button";
|
|
6
8
|
import { Form } from "./Form";
|
|
7
9
|
import { Field, FieldLayout } from "./fieldLayout";
|
|
10
|
+
import { Input } from "./fields/Input";
|
|
11
|
+
import { Checkbox } from "./fields/Checkbox";
|
|
8
12
|
|
|
9
13
|
const meta: Meta<typeof FieldLayout> = {
|
|
10
14
|
title: "Forms/FieldLayout",
|
|
@@ -39,6 +43,43 @@ export const Basic: Story = {
|
|
|
39
43
|
),
|
|
40
44
|
};
|
|
41
45
|
|
|
46
|
+
/** Shared message order with real controls, including the inline checkbox row. */
|
|
47
|
+
export const MessageOrder: Story = {
|
|
48
|
+
render: () => {
|
|
49
|
+
const Example = () => {
|
|
50
|
+
const [showErrors, setShowErrors] = useState(false);
|
|
51
|
+
return (
|
|
52
|
+
<YStack gap="$4" width="100%" maxWidth={480}>
|
|
53
|
+
<Input
|
|
54
|
+
id="message-top"
|
|
55
|
+
label="Contact"
|
|
56
|
+
helperText="Use an address where we can reach you"
|
|
57
|
+
error={showErrors ? "Enter a contact address" : undefined}
|
|
58
|
+
/>
|
|
59
|
+
<Preset overrides={{ fieldLabelPlacement: "side" }}>
|
|
60
|
+
<Input
|
|
61
|
+
id="message-side"
|
|
62
|
+
label="Office"
|
|
63
|
+
helperText="Use the office name shown on your account"
|
|
64
|
+
error={showErrors ? "Enter your office name" : undefined}
|
|
65
|
+
/>
|
|
66
|
+
</Preset>
|
|
67
|
+
<Checkbox
|
|
68
|
+
id="message-inline"
|
|
69
|
+
label="Accept terms"
|
|
70
|
+
helperText="Read the terms before continuing"
|
|
71
|
+
error={showErrors ? "Accept the terms to continue" : undefined}
|
|
72
|
+
/>
|
|
73
|
+
<Button onPress={() => setShowErrors((shown) => !shown)}>
|
|
74
|
+
{showErrors ? "Show helpers" : "Show validation"}
|
|
75
|
+
</Button>
|
|
76
|
+
</YStack>
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
return <Example />;
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
42
83
|
export const ErrorStates: Story = {
|
|
43
84
|
render: () => (
|
|
44
85
|
<YStack gap="$6" maxWidth={360}>
|
|
@@ -57,6 +57,60 @@ function panel(open: boolean) {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
describe("FloatingPanel native presentation lifecycle", () => {
|
|
60
|
+
it("keeps full-field triggers stretched and allows content-sized composite adornments", () => {
|
|
61
|
+
for (const triggerSizing of [undefined, "content"] as const) {
|
|
62
|
+
const result = renderWithProviders(
|
|
63
|
+
<FloatingPanel
|
|
64
|
+
open={false}
|
|
65
|
+
onOpenChange={onOpenChange}
|
|
66
|
+
trigger={<Text>Country</Text>}
|
|
67
|
+
triggerSizing={triggerSizing}
|
|
68
|
+
triggerA11y={{ label: "Country code" }}
|
|
69
|
+
>
|
|
70
|
+
<Text>row</Text>
|
|
71
|
+
</FloatingPanel>,
|
|
72
|
+
);
|
|
73
|
+
const trigger = result.getByRole("button", { name: "Country code" });
|
|
74
|
+
expect(getComputedStyle(trigger).width).toBe(triggerSizing === "content" ? "" : "100%");
|
|
75
|
+
expect(getComputedStyle(trigger).alignSelf).toBe("stretch");
|
|
76
|
+
expect(getComputedStyle(trigger.parentElement!).width).toBe(
|
|
77
|
+
triggerSizing === "content" ? "" : "100%",
|
|
78
|
+
);
|
|
79
|
+
result.unmount();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("composes native readiness with entrance and ignores late closed or unmounted events", () => {
|
|
84
|
+
const onNativeShow = vi.fn();
|
|
85
|
+
const example = (open: boolean) => (
|
|
86
|
+
<FloatingPanel
|
|
87
|
+
open={open}
|
|
88
|
+
onOpenChange={onOpenChange}
|
|
89
|
+
onNativeShow={onNativeShow}
|
|
90
|
+
trigger={<Text>Pick</Text>}
|
|
91
|
+
>
|
|
92
|
+
<Text>row</Text>
|
|
93
|
+
</FloatingPanel>
|
|
94
|
+
);
|
|
95
|
+
const result = renderWithProviders(example(true));
|
|
96
|
+
expect(Animated.timing).toHaveBeenCalledTimes(1);
|
|
97
|
+
expect(onNativeShow).not.toHaveBeenCalled();
|
|
98
|
+
const shown = modal.onShow;
|
|
99
|
+
act(() => shown?.());
|
|
100
|
+
expect(onNativeShow).toHaveBeenCalledTimes(1);
|
|
101
|
+
expect(Animated.timing).toHaveBeenCalledTimes(1);
|
|
102
|
+
result.rerender(example(false));
|
|
103
|
+
act(() => shown?.());
|
|
104
|
+
expect(onNativeShow).toHaveBeenCalledTimes(1);
|
|
105
|
+
result.rerender(example(true));
|
|
106
|
+
const nextShown = modal.onShow;
|
|
107
|
+
act(() => nextShown?.());
|
|
108
|
+
expect(onNativeShow).toHaveBeenCalledTimes(2);
|
|
109
|
+
result.unmount();
|
|
110
|
+
act(() => nextShown?.());
|
|
111
|
+
expect(onNativeShow).toHaveBeenCalledTimes(2);
|
|
112
|
+
});
|
|
113
|
+
|
|
60
114
|
it("enters without onShow and ignores onShow for the same presentation", () => {
|
|
61
115
|
renderWithProviders(panel(true));
|
|
62
116
|
expect(Animated.timing).toHaveBeenCalledTimes(1);
|
|
@@ -40,12 +40,16 @@ function Harness({
|
|
|
40
40
|
sheet,
|
|
41
41
|
onOpenChange,
|
|
42
42
|
extra,
|
|
43
|
+
openOn,
|
|
44
|
+
sizing,
|
|
43
45
|
}: {
|
|
44
46
|
trigger: ReactNode;
|
|
45
47
|
disabled?: boolean;
|
|
46
48
|
sheet?: boolean;
|
|
47
49
|
onOpenChange?: (open: boolean) => void;
|
|
48
50
|
extra?: ReactNode;
|
|
51
|
+
openOn?: "press" | "contextmenu";
|
|
52
|
+
sizing?: "grow" | "fill";
|
|
49
53
|
}) {
|
|
50
54
|
const [open, setOpen] = useState(false);
|
|
51
55
|
return (
|
|
@@ -64,6 +68,8 @@ function Harness({
|
|
|
64
68
|
trigger={trigger}
|
|
65
69
|
disabled={disabled}
|
|
66
70
|
sheet={sheet}
|
|
71
|
+
openOn={openOn}
|
|
72
|
+
sizing={sizing}
|
|
67
73
|
>
|
|
68
74
|
<Text>panel body</Text>
|
|
69
75
|
{extra}
|
|
@@ -79,6 +85,75 @@ const isOpen = (result: { container: HTMLElement }) =>
|
|
|
79
85
|
|
|
80
86
|
const floatingViewport = () => document.querySelector('[data-testid="floating-panel-viewport"]');
|
|
81
87
|
|
|
88
|
+
describe("FloatingPanel nested actions", () => {
|
|
89
|
+
it("does not require a marked DOM button to stop propagation", () => {
|
|
90
|
+
const action = vi.fn();
|
|
91
|
+
const onOpenChange = vi.fn();
|
|
92
|
+
const result = renderWithProviders(
|
|
93
|
+
<Harness
|
|
94
|
+
onOpenChange={onOpenChange}
|
|
95
|
+
trigger={
|
|
96
|
+
<button type="button" data-floating-panel-action="true" onClick={action}>
|
|
97
|
+
Clear selection
|
|
98
|
+
</button>
|
|
99
|
+
}
|
|
100
|
+
/>,
|
|
101
|
+
);
|
|
102
|
+
fireEvent.click(result.getByRole("button", { name: "Clear selection" }), { detail: 0 });
|
|
103
|
+
expect(action).toHaveBeenCalledOnce();
|
|
104
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
for (const sheet of [true, false]) {
|
|
108
|
+
for (const activation of ["pointer", "keyboard"] as const) {
|
|
109
|
+
it(`lets a marked ${activation} action run without opening ${sheet ? "sheet" : "float"}`, () => {
|
|
110
|
+
const action = vi.fn();
|
|
111
|
+
const onOpenChange = vi.fn();
|
|
112
|
+
const result = renderWithProviders(
|
|
113
|
+
<Harness
|
|
114
|
+
sheet={sheet}
|
|
115
|
+
onOpenChange={onOpenChange}
|
|
116
|
+
trigger={
|
|
117
|
+
<Button
|
|
118
|
+
data-floating-panel-action="true"
|
|
119
|
+
onPress={(event) => {
|
|
120
|
+
event.stopPropagation();
|
|
121
|
+
action();
|
|
122
|
+
}}
|
|
123
|
+
>
|
|
124
|
+
Clear selection
|
|
125
|
+
</Button>
|
|
126
|
+
}
|
|
127
|
+
/>,
|
|
128
|
+
);
|
|
129
|
+
const button = result.getByRole("button", { name: "Clear selection" });
|
|
130
|
+
if (activation === "pointer") pointerPress(button);
|
|
131
|
+
else {
|
|
132
|
+
fireEvent.keyDown(button, { key: "Enter" });
|
|
133
|
+
fireEvent.keyUp(button, { key: "Enter" });
|
|
134
|
+
}
|
|
135
|
+
expect(action).toHaveBeenCalledOnce();
|
|
136
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
137
|
+
expect(isOpen(result)).toBe(false);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
it(`preserves context-menu opening from a marked action in ${sheet ? "sheet" : "float"}`, () => {
|
|
142
|
+
const onOpenChange = vi.fn();
|
|
143
|
+
const result = renderWithProviders(
|
|
144
|
+
<Harness
|
|
145
|
+
sheet={sheet}
|
|
146
|
+
openOn="contextmenu"
|
|
147
|
+
onOpenChange={onOpenChange}
|
|
148
|
+
trigger={<Button data-floating-panel-action="true">Context action</Button>}
|
|
149
|
+
/>,
|
|
150
|
+
);
|
|
151
|
+
fireEvent.contextMenu(result.getByRole("button", { name: "Context action" }));
|
|
152
|
+
expect(onOpenChange).toHaveBeenCalledWith(true);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
82
157
|
/** The DEEPEST node carrying the whole label — several ancestors report the
|
|
83
158
|
* same `textContent`, and pressing one of those would sidestep the very
|
|
84
159
|
* swallow these cases exist to catch. */
|
|
@@ -260,4 +335,38 @@ describe("FloatingPanel trigger — floating mode", () => {
|
|
|
260
335
|
expect(document.activeElement).toBe(trigger);
|
|
261
336
|
});
|
|
262
337
|
});
|
|
338
|
+
|
|
339
|
+
it("disconnects fill content observation on close and unmount", async () => {
|
|
340
|
+
const observers: { target: Element; disconnected: boolean }[] = [];
|
|
341
|
+
class TrackingResizeObserver {
|
|
342
|
+
private tracked?: { target: Element; disconnected: boolean };
|
|
343
|
+
observe(target: Element) {
|
|
344
|
+
if (target.parentElement?.getAttribute("data-testid") !== "floating-panel-viewport") return;
|
|
345
|
+
this.tracked = { target, disconnected: false };
|
|
346
|
+
observers.push(this.tracked);
|
|
347
|
+
}
|
|
348
|
+
unobserve() {}
|
|
349
|
+
disconnect() {
|
|
350
|
+
if (this.tracked) this.tracked.disconnected = true;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
vi.stubGlobal("ResizeObserver", TrackingResizeObserver);
|
|
354
|
+
const result = renderWithProviders(
|
|
355
|
+
<Harness sizing="fill" trigger={<Button>Open Panel</Button>} />,
|
|
356
|
+
);
|
|
357
|
+
try {
|
|
358
|
+
const trigger = result.container.querySelector("[role='button']") as HTMLElement;
|
|
359
|
+
pointerPress(trigger);
|
|
360
|
+
await waitFor(() => expect(observers.some((observer) => !observer.disconnected)).toBe(true));
|
|
361
|
+
fireEvent.keyDown(document, { key: "Escape" });
|
|
362
|
+
await waitFor(() => expect(observers.every((observer) => observer.disconnected)).toBe(true));
|
|
363
|
+
pointerPress(trigger);
|
|
364
|
+
await waitFor(() => expect(observers.some((observer) => !observer.disconnected)).toBe(true));
|
|
365
|
+
result.unmount();
|
|
366
|
+
expect(observers.every((observer) => observer.disconnected)).toBe(true);
|
|
367
|
+
} finally {
|
|
368
|
+
result.unmount();
|
|
369
|
+
vi.unstubAllGlobals();
|
|
370
|
+
}
|
|
371
|
+
});
|
|
263
372
|
});
|
|
@@ -76,6 +76,7 @@ export {
|
|
|
76
76
|
} from "./useFloatingPanel";
|
|
77
77
|
export type { UseFloatingPanelOptions, UseFloatingPanelReturn } from "./useFloatingPanel";
|
|
78
78
|
export type { FloatingPanelProps } from "./index";
|
|
79
|
+
export { floatingPanelActionProps, isNestedPanelAction } from "./nestedAction";
|
|
79
80
|
|
|
80
81
|
/** Native never has a >sm web viewport; AdaptivePopup uses this to pick Sheet mode. */
|
|
81
82
|
export function useViewportGtSm() {
|
|
@@ -103,8 +104,10 @@ const enterDuration = 280;
|
|
|
103
104
|
export function FloatingPanel({
|
|
104
105
|
open,
|
|
105
106
|
onOpenChange,
|
|
107
|
+
onNativeShow,
|
|
106
108
|
trigger,
|
|
107
109
|
triggerEnd,
|
|
110
|
+
triggerSizing = "stretch",
|
|
108
111
|
children,
|
|
109
112
|
scrollable,
|
|
110
113
|
disabled,
|
|
@@ -355,7 +358,13 @@ export function FloatingPanel({
|
|
|
355
358
|
|
|
356
359
|
return (
|
|
357
360
|
<>
|
|
358
|
-
<RNView
|
|
361
|
+
<RNView
|
|
362
|
+
style={{
|
|
363
|
+
flexDirection: "row",
|
|
364
|
+
alignItems: "center",
|
|
365
|
+
width: triggerSizing === "content" ? undefined : "100%",
|
|
366
|
+
}}
|
|
367
|
+
>
|
|
359
368
|
<Pressable
|
|
360
369
|
{...(isContextMenu
|
|
361
370
|
? { onLongPress: handleTriggerLongPress, delayLongPress: 500 }
|
|
@@ -368,18 +377,22 @@ export function FloatingPanel({
|
|
|
368
377
|
? { accessibilityValue: { text: triggerA11y.value } }
|
|
369
378
|
: undefined)}
|
|
370
379
|
{...(triggerA11y?.hint ? { accessibilityHint: triggerA11y.hint } : undefined)}
|
|
371
|
-
//
|
|
372
|
-
//
|
|
380
|
+
// Whole-field triggers stretch; composite adornments hug their
|
|
381
|
+
// content so sibling inputs retain their editable space.
|
|
373
382
|
style={{
|
|
374
|
-
flex: 1,
|
|
383
|
+
flex: triggerSizing === "content" ? undefined : 1,
|
|
375
384
|
minWidth: 0,
|
|
376
385
|
alignSelf: "stretch",
|
|
377
|
-
width: "100%",
|
|
386
|
+
width: triggerSizing === "content" ? undefined : "100%",
|
|
378
387
|
opacity: disabled ? 0.5 : 1,
|
|
379
388
|
}}
|
|
380
389
|
>
|
|
381
390
|
{/* Own the hit target — see file header for why pointerEvents="none". */}
|
|
382
|
-
<RNView
|
|
391
|
+
<RNView
|
|
392
|
+
pointerEvents="none"
|
|
393
|
+
collapsable={false}
|
|
394
|
+
style={{ width: triggerSizing === "content" ? undefined : "100%" }}
|
|
395
|
+
>
|
|
383
396
|
{trigger}
|
|
384
397
|
</RNView>
|
|
385
398
|
</Pressable>
|
|
@@ -391,7 +404,11 @@ export function FloatingPanel({
|
|
|
391
404
|
animationType="fade"
|
|
392
405
|
statusBarTranslucent
|
|
393
406
|
onRequestClose={close}
|
|
394
|
-
onShow={
|
|
407
|
+
onShow={() => {
|
|
408
|
+
if (!activeRef.current) return;
|
|
409
|
+
enter();
|
|
410
|
+
onNativeShow?.();
|
|
411
|
+
}}
|
|
395
412
|
>
|
|
396
413
|
{/*
|
|
397
414
|
A plain padded column, not KeyboardAvoidingView: inside a Modal the
|