@multiplatform.one/forms 7.7.6 → 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 +0 -3
- package/dist/cjs/Button/index.native.js +0 -3
- 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/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 +8 -6
- package/dist/cjs/InputParts/index.native.js +9 -9
- 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 +36 -29
- package/dist/cjs/fields/Combobox/index.native.js +38 -38
- 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 +42 -11
- package/dist/cjs/fields/Select/index.native.js +52 -20
- 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/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +0 -3
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +0 -3
- 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.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 +9 -7
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +10 -10
- 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 +36 -29
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +38 -38
- 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 +42 -11
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +52 -20
- 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.native.js.map +1 -1
- package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
- 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 +0 -3
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +0 -3
- 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/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 +9 -7
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +9 -9
- 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 +36 -29
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +38 -38
- 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 +42 -11
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +52 -20
- 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/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 +25 -4
- package/src/Chip/Chip.spec.tsx +3 -1
- package/src/Chip/index.tsx +1 -5
- 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 +15 -5
- 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 +53 -39
- 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 +52 -17
- package/src/fields/Stepper/Stepper.spec.tsx +34 -1
- package/src/fields/Stepper/index.tsx +193 -33
- package/src/index.ts +9 -0
- package/src/shared/focusManagement.spec.tsx +68 -0
- package/src/shared/focusManagement.ts +20 -10
- 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/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/src/router.d.ts +0 -16
|
@@ -12,17 +12,24 @@ function focusIsDropped(insideEl) {
|
|
|
12
12
|
function useCaptureOnOpen(open) {
|
|
13
13
|
const prevRef = useRef(null);
|
|
14
14
|
const wasOpenRef = useRef(false);
|
|
15
|
+
const generationRef = useRef(0);
|
|
15
16
|
if (canUseDom()) {
|
|
17
|
+
if (open !== wasOpenRef.current) generationRef.current += 1;
|
|
16
18
|
if (open && !wasOpenRef.current) {
|
|
17
19
|
prevRef.current = document.activeElement;
|
|
18
20
|
}
|
|
19
21
|
wasOpenRef.current = open;
|
|
20
22
|
}
|
|
21
|
-
return
|
|
23
|
+
return {
|
|
24
|
+
prevRef,
|
|
25
|
+
generationRef
|
|
26
|
+
};
|
|
22
27
|
}
|
|
23
|
-
function restoreLater(prevRef, insideRef) {
|
|
28
|
+
function restoreLater(prevRef, generationRef, insideRef, skipReturnFocusRef) {
|
|
29
|
+
const generation = generationRef.current;
|
|
24
30
|
const restore = () => {
|
|
25
31
|
if (!canUseDom()) return;
|
|
32
|
+
if (skipReturnFocusRef?.current || generationRef.current !== generation) return;
|
|
26
33
|
const target = prevRef.current;
|
|
27
34
|
if (!target || !target.isConnected) return;
|
|
28
35
|
if (focusIsDropped(insideRef?.current ?? null)) {
|
|
@@ -35,20 +42,26 @@ function restoreLater(prevRef, insideRef) {
|
|
|
35
42
|
requestAnimationFrame(() => requestAnimationFrame(restore));
|
|
36
43
|
setTimeout(restore, 320);
|
|
37
44
|
}
|
|
38
|
-
function useReturnFocusOnClose(open) {
|
|
39
|
-
const
|
|
45
|
+
function useReturnFocusOnClose(open, skipReturnFocusRef) {
|
|
46
|
+
const {
|
|
47
|
+
prevRef,
|
|
48
|
+
generationRef
|
|
49
|
+
} = useCaptureOnOpen(open);
|
|
40
50
|
useEffect(() => {
|
|
41
51
|
if (!canUseDom() || !open) return;
|
|
42
|
-
return () => restoreLater(prevRef);
|
|
43
|
-
}, [open, prevRef]);
|
|
52
|
+
return () => restoreLater(prevRef, generationRef, void 0, skipReturnFocusRef);
|
|
53
|
+
}, [open, prevRef, generationRef, skipReturnFocusRef]);
|
|
44
54
|
}
|
|
45
|
-
function useSheetModalFocus(open, frameRef) {
|
|
46
|
-
const
|
|
55
|
+
function useSheetModalFocus(open, frameRef, skipReturnFocusRef) {
|
|
56
|
+
const {
|
|
57
|
+
prevRef,
|
|
58
|
+
generationRef
|
|
59
|
+
} = useCaptureOnOpen(open);
|
|
47
60
|
useEffect(() => {
|
|
48
61
|
if (!canUseDom() || !open) return;
|
|
49
62
|
const frame = frameRef.current;
|
|
50
63
|
if (!frame || typeof frame.addEventListener !== "function") {
|
|
51
|
-
return () => restoreLater(prevRef, frameRef);
|
|
64
|
+
return () => restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
|
|
52
65
|
}
|
|
53
66
|
const focusIn = () => {
|
|
54
67
|
if (!canUseDom()) return;
|
|
@@ -86,9 +99,9 @@ function useSheetModalFocus(open, frameRef) {
|
|
|
86
99
|
cancelAnimationFrame(raf);
|
|
87
100
|
cancelAnimationFrame(innerRaf);
|
|
88
101
|
frame.removeEventListener("keydown", onKeyDown);
|
|
89
|
-
restoreLater(prevRef, frameRef);
|
|
102
|
+
restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
|
|
90
103
|
};
|
|
91
|
-
}, [open, frameRef, prevRef]);
|
|
104
|
+
}, [open, frameRef, prevRef, generationRef, skipReturnFocusRef]);
|
|
92
105
|
}
|
|
93
106
|
export { useReturnFocusOnClose, useSheetModalFocus };
|
|
94
107
|
//# sourceMappingURL=focusManagement.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","isWeb","wasKeyboardFocus","FOCUSABLE","canUseDom","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","wasOpenRef","current","restoreLater","insideRef","restore","target","isConnected","focus","preventScroll","focusVisible","requestAnimationFrame","setTimeout","useReturnFocusOnClose","useSheetModalFocus","frameRef","frame","addEventListener","focusIn","first","querySelector","innerRaf","raf","onKeyDown","e","key","focusables","Array","from","querySelectorAll","filter","el","offsetWidth","offsetHeight","length","preventDefault","last","shiftKey","cancelAnimationFrame","removeEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"AAiCA,SAASA,SAAA,EAAWC,MAAA,QAA8B;AAClD,SAASC,KAAA,QAAa;AACtB,SAASC,gBAAA,QAAwB;AAEjC,MAAMC,SAAA,GACJ;AAEF,MAAMC,SAAA,GAAYA,CAAA,KAAMH,KAAA,IAAS,OAAOI,QAAA,KAAa;AAErD,SAASC,eAAeC,QAAA,EAAwC;EAC9D,MAAMC,EAAA,GAAKH,QAAA,CAASI,aAAA;EACpB,IAAI,CAACD,EAAA,IAAMA,EAAA,KAAOH,QAAA,CAASK,IAAA,IAAQF,EAAA,KAAOH,QAAA,CAASM,eAAA,EAAiB,OAAO;EAG3E,IAAIJ,QAAA,EAAUK,QAAA,CAASJ,EAAE,GAAG,OAAO;EACnC,OAAO;AACT;AAGA,SAASK,iBAAiBC,IAAA,EAAe;EACvC,MAAMC,OAAA,GAAUf,MAAA,CAA2B,IAAI;EAC/C,MAAMgB,UAAA,GAAahB,MAAA,CAAO,KAAK;EAC/B,IAAII,SAAA,CAAU,GAAG;IACf,IAAIU,IAAA,IAAQ,CAACE,UAAA,
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","isWeb","wasKeyboardFocus","FOCUSABLE","canUseDom","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","wasOpenRef","generationRef","current","restoreLater","insideRef","skipReturnFocusRef","generation","restore","target","isConnected","focus","preventScroll","focusVisible","requestAnimationFrame","setTimeout","useReturnFocusOnClose","useSheetModalFocus","frameRef","frame","addEventListener","focusIn","first","querySelector","innerRaf","raf","onKeyDown","e","key","focusables","Array","from","querySelectorAll","filter","el","offsetWidth","offsetHeight","length","preventDefault","last","shiftKey","cancelAnimationFrame","removeEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -44,18 +44,25 @@ function focusIsDropped(insideEl) {
|
|
|
44
44
|
function useCaptureOnOpen(open) {
|
|
45
45
|
var prevRef = (0, import_react.useRef)(null);
|
|
46
46
|
var wasOpenRef = (0, import_react.useRef)(false);
|
|
47
|
+
var generationRef = (0, import_react.useRef)(0);
|
|
47
48
|
if (canUseDom()) {
|
|
49
|
+
if (open !== wasOpenRef.current) generationRef.current += 1;
|
|
48
50
|
if (open && !wasOpenRef.current) {
|
|
49
51
|
prevRef.current = document.activeElement;
|
|
50
52
|
}
|
|
51
53
|
wasOpenRef.current = open;
|
|
52
54
|
}
|
|
53
|
-
return
|
|
55
|
+
return {
|
|
56
|
+
prevRef,
|
|
57
|
+
generationRef
|
|
58
|
+
};
|
|
54
59
|
}
|
|
55
|
-
function restoreLater(prevRef, insideRef) {
|
|
60
|
+
function restoreLater(prevRef, generationRef, insideRef, skipReturnFocusRef) {
|
|
61
|
+
var generation = generationRef.current;
|
|
56
62
|
var restore = function restore2() {
|
|
57
63
|
var _ref;
|
|
58
64
|
if (!canUseDom()) return;
|
|
65
|
+
if ((skipReturnFocusRef === null || skipReturnFocusRef === void 0 ? void 0 : skipReturnFocusRef.current) || generationRef.current !== generation) return;
|
|
59
66
|
var target = prevRef.current;
|
|
60
67
|
if (!target || !target.isConnected) return;
|
|
61
68
|
if (focusIsDropped((_ref = insideRef === null || insideRef === void 0 ? void 0 : insideRef.current) !== null && _ref !== void 0 ? _ref : null)) {
|
|
@@ -70,23 +77,29 @@ function restoreLater(prevRef, insideRef) {
|
|
|
70
77
|
});
|
|
71
78
|
setTimeout(restore, 320);
|
|
72
79
|
}
|
|
73
|
-
function useReturnFocusOnClose(open) {
|
|
74
|
-
var
|
|
80
|
+
function useReturnFocusOnClose(open, skipReturnFocusRef) {
|
|
81
|
+
var {
|
|
82
|
+
prevRef,
|
|
83
|
+
generationRef
|
|
84
|
+
} = useCaptureOnOpen(open);
|
|
75
85
|
(0, import_react.useEffect)(function () {
|
|
76
86
|
if (!canUseDom() || !open) return;
|
|
77
87
|
return function () {
|
|
78
|
-
return restoreLater(prevRef);
|
|
88
|
+
return restoreLater(prevRef, generationRef, void 0, skipReturnFocusRef);
|
|
79
89
|
};
|
|
80
|
-
}, [open, prevRef]);
|
|
90
|
+
}, [open, prevRef, generationRef, skipReturnFocusRef]);
|
|
81
91
|
}
|
|
82
|
-
function useSheetModalFocus(open, frameRef) {
|
|
83
|
-
var
|
|
92
|
+
function useSheetModalFocus(open, frameRef, skipReturnFocusRef) {
|
|
93
|
+
var {
|
|
94
|
+
prevRef,
|
|
95
|
+
generationRef
|
|
96
|
+
} = useCaptureOnOpen(open);
|
|
84
97
|
(0, import_react.useEffect)(function () {
|
|
85
98
|
if (!canUseDom() || !open) return;
|
|
86
99
|
var frame = frameRef.current;
|
|
87
100
|
if (!frame || typeof frame.addEventListener !== "function") {
|
|
88
101
|
return function () {
|
|
89
|
-
return restoreLater(prevRef, frameRef);
|
|
102
|
+
return restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
|
|
90
103
|
};
|
|
91
104
|
}
|
|
92
105
|
var focusIn = function focusIn2() {
|
|
@@ -127,8 +140,8 @@ function useSheetModalFocus(open, frameRef) {
|
|
|
127
140
|
cancelAnimationFrame(raf);
|
|
128
141
|
cancelAnimationFrame(innerRaf);
|
|
129
142
|
frame.removeEventListener("keydown", onKeyDown);
|
|
130
|
-
restoreLater(prevRef, frameRef);
|
|
143
|
+
restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
|
|
131
144
|
};
|
|
132
|
-
}, [open, frameRef, prevRef]);
|
|
145
|
+
}, [open, frameRef, prevRef, generationRef, skipReturnFocusRef]);
|
|
133
146
|
}
|
|
134
147
|
//# sourceMappingURL=focusManagement.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","focusManagement_exports","useReturnFocusOnClose","useSheetModalFocus","module","exports","import_react","require","import_tamagui","import_theme","FOCUSABLE","canUseDom","canUseDom2","isWeb","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","useRef","wasOpenRef","current","restoreLater","insideRef","restore","restore2","_ref","isConnected","focus","preventScroll","focusVisible","wasKeyboardFocus","requestAnimationFrame","setTimeout","useEffect","frameRef","frame","addEventListener"
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","focusManagement_exports","useReturnFocusOnClose","useSheetModalFocus","module","exports","import_react","require","import_tamagui","import_theme","FOCUSABLE","canUseDom","canUseDom2","isWeb","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","useRef","wasOpenRef","generationRef","current","restoreLater","insideRef","skipReturnFocusRef","generation","restore","restore2","_ref","isConnected","focus","preventScroll","focusVisible","wasKeyboardFocus","requestAnimationFrame","setTimeout","useEffect","frameRef","frame","addEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/forms",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.8.0",
|
|
4
4
|
"description": "Cross-platform form components with URL state management",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cross-platform",
|
|
@@ -70,9 +70,10 @@
|
|
|
70
70
|
"perfect-freehand": "^1.2.3",
|
|
71
71
|
"react-native-svg": "15.15.4",
|
|
72
72
|
"tamagui": "2.7.6",
|
|
73
|
-
"@multiplatform.one/
|
|
74
|
-
"@multiplatform.one/
|
|
75
|
-
"@multiplatform.one/
|
|
73
|
+
"@multiplatform.one/platform": "7.8.0",
|
|
74
|
+
"@multiplatform.one/router": "7.8.0",
|
|
75
|
+
"@multiplatform.one/table-primitives": "7.8.0",
|
|
76
|
+
"@multiplatform.one/theme": "7.8.0"
|
|
76
77
|
},
|
|
77
78
|
"devDependencies": {
|
|
78
79
|
"@tamagui/build": "2.7.6",
|
|
@@ -94,9 +95,9 @@
|
|
|
94
95
|
"react-i18next": "^16.6.6",
|
|
95
96
|
"react-native-web": "^0.21.2",
|
|
96
97
|
"vitest": "^4.1.5",
|
|
97
|
-
"@multiplatform.one/
|
|
98
|
-
"@multiplatform.one/storybook": "7.
|
|
99
|
-
"@multiplatform.one/
|
|
98
|
+
"@multiplatform.one/test-utils": "7.8.0",
|
|
99
|
+
"@multiplatform.one/storybook": "7.8.0",
|
|
100
|
+
"@multiplatform.one/config": "7.8.0"
|
|
100
101
|
},
|
|
101
102
|
"peerDependencies": {
|
|
102
103
|
"@react-native-community/datetimepicker": ">=8.0.1",
|
|
@@ -62,9 +62,8 @@ function labelNode(text: string): HTMLElement {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* failure prints is the number the verdict used.
|
|
65
|
+
* Use the canonical unrounded measurement so a below-floor pair cannot
|
|
66
|
+
* pass through display rounding.
|
|
68
67
|
*/
|
|
69
68
|
function pageRatio(ink: string, ground: string, label: string): number {
|
|
70
69
|
return measureContrast({ foreground: ink, background: ground, label }).ratio;
|
|
@@ -159,21 +158,22 @@ describe("Button MPO-40 outlined intent label ink", () => {
|
|
|
159
158
|
}
|
|
160
159
|
});
|
|
161
160
|
|
|
162
|
-
//
|
|
161
|
+
// CLOSED — MPO-40's secondary finding, fixed by the palette step.
|
|
163
162
|
//
|
|
164
163
|
// Fixing the plumbing (the arm above) was necessary, not sufficient. On
|
|
165
164
|
// $color2 — the surface every gallery board is shot on — light warning
|
|
166
|
-
// and success $color11
|
|
167
|
-
// the numbers button-anatomy
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
// the Button. colorRules.ts pins the same warning miss on the intent's
|
|
171
|
-
// own color1 (#fcfcf7, 4.44:1); this pins it on the page ground.
|
|
165
|
+
// and success $color11 sat UNDER mpo's own floor at 4.34 and 4.48, and
|
|
166
|
+
// those were exactly the numbers button-anatomy printed for its CONTRACT
|
|
167
|
+
// row. This block used to assert the miss, and said in as many words that
|
|
168
|
+
// stepping the palette should break it rather than be re-baselined away.
|
|
172
169
|
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
|
|
170
|
+
// The palette stepped: `intentInkFloor` in theme/createThemes.ts darkens
|
|
171
|
+
// light yellow-11 (#9e6c00 -> #996900) and green-11 (#218358 -> #1c8257)
|
|
172
|
+
// by the smallest hue-holding amount that clears the floor here. So the
|
|
173
|
+
// assertion is inverted rather than deleted — the ground and the exact
|
|
174
|
+
// ratios stay pinned, because $color2 is the STRICTEST base surface and a
|
|
175
|
+
// future re-lightening has to fail somewhere loud.
|
|
176
|
+
it("light warning/success $color11 now clear 4.5:1 on the $color2 page surface", () => {
|
|
177
177
|
const ground = houseThemes.light.color2;
|
|
178
178
|
const measured = Object.fromEntries(
|
|
179
179
|
INTENTS.map((intent): [string, number] => [
|
|
@@ -187,10 +187,13 @@ describe("Button MPO-40 outlined intent label ink", () => {
|
|
|
187
187
|
);
|
|
188
188
|
expect(measured, `light.color2 is ${ground}`).toEqual({
|
|
189
189
|
error: 4.95,
|
|
190
|
-
warning: 4.
|
|
191
|
-
success: 4.
|
|
190
|
+
warning: 4.56,
|
|
191
|
+
success: 4.55,
|
|
192
192
|
});
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
for (const intent of INTENTS) {
|
|
194
|
+
expect(measured[intent], `light_${intent} on light.color2`).toBeGreaterThanOrEqual(
|
|
195
|
+
aaTextContrastRatio,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
195
198
|
});
|
|
196
199
|
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment jsdom
|
|
3
|
+
*
|
|
4
|
+
* MPO-91: the forms Button's outlined chrome cannot be requested through a
|
|
5
|
+
* channel the component ignores.
|
|
6
|
+
*
|
|
7
|
+
* `ButtonFrame` is `styled(View)` and declares only an `outlined` BOOLEAN.
|
|
8
|
+
* `variant="outlined"` was never read, but `ButtonProps` inherited it from
|
|
9
|
+
* `TamaguiButtonProps`, so 75 call sites across 29 files typechecked, rendered
|
|
10
|
+
* FILLED, and said nothing. The type now Omits `variant`, and this spec pins
|
|
11
|
+
* both halves of that: the type refuses it (checked by `tsgo --noEmit`), and
|
|
12
|
+
* the runtime genuinely ignores it, so the refusal is honest rather than
|
|
13
|
+
* cosmetic.
|
|
14
|
+
*
|
|
15
|
+
* jsdom cannot cascade Tamagui CSS — assertions read the atomic border-color
|
|
16
|
+
* classes the FRAME emits, the same idiom as Button.filledBorder.spec.tsx.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
20
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
21
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
22
|
+
import { Button } from "./index";
|
|
23
|
+
|
|
24
|
+
afterEach(cleanup);
|
|
25
|
+
|
|
26
|
+
function frame(): HTMLElement {
|
|
27
|
+
return screen.getByRole("button");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe("Button outlined channel (MPO-91)", () => {
|
|
31
|
+
it("the outlined boolean is the channel, and it paints $borderColor", () => {
|
|
32
|
+
renderWithProviders(<Button outlined>Outlined</Button>);
|
|
33
|
+
expect(frame().className).toMatch(/_btc-borderColor\b/);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("the type refuses variant, so a dead pass cannot come back silently", () => {
|
|
37
|
+
// THE GUARD. If someone re-adds `variant` to ButtonProps this stops being
|
|
38
|
+
// an error and `tsgo --noEmit` fails on the unused directive — which is
|
|
39
|
+
// the point: the failure is loud either way.
|
|
40
|
+
// @ts-expect-error MPO-91: `variant` is Omitted from ButtonProps on purpose.
|
|
41
|
+
renderWithProviders(<Button variant="outlined">Refused</Button>);
|
|
42
|
+
// ...and the refusal is honest: it really does render filled.
|
|
43
|
+
expect(frame().className).toMatch(/_btc-transparent\b/);
|
|
44
|
+
expect(frame().className).not.toMatch(/_btc-borderColor\b/);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* MPO-46 AC-1: the painted Button, not the recipe source, matches the
|
|
5
5
|
* measured Tamagui v5 table at $2/$3/$4/$6. Radius used to sit on the
|
|
6
6
|
* borderRadius knob (flat 9px); it must step with the size token, and
|
|
7
|
-
* gap
|
|
7
|
+
* default gap matches that table. Corner shape overrides preserve the
|
|
8
|
+
* internal spacing rather than jamming or separating the icon and label.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
@@ -106,7 +107,7 @@ describe("MPO-46 painted Button size ladder", () => {
|
|
|
106
107
|
}
|
|
107
108
|
});
|
|
108
109
|
|
|
109
|
-
it("
|
|
110
|
+
it("corner overrides preserve the measured internal gap", () => {
|
|
110
111
|
for (const [stop, px] of Object.entries(KNOB_STOPS) as [keyof typeof KNOB_STOPS, number][]) {
|
|
111
112
|
renderWithProviders(
|
|
112
113
|
<Preset overrides={{ borderRadius: stop }}>
|
|
@@ -117,7 +118,7 @@ describe("MPO-46 painted Button size ladder", () => {
|
|
|
117
118
|
);
|
|
118
119
|
const frame = screen.getByRole("button");
|
|
119
120
|
expect(radiusPx(frame), `${stop} radius`).toBe(px);
|
|
120
|
-
expect(gapPx(frame), `${stop} gap`).toBe(
|
|
121
|
+
expect(gapPx(frame), `${stop} gap`).toBe(MEASURED.$4.radius);
|
|
121
122
|
cleanup();
|
|
122
123
|
}
|
|
123
124
|
});
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "@multiplatform.one/theme";
|
|
9
9
|
import { Button as TamaguiButton, Paragraph, XStack, YStack, useTheme } from "tamagui";
|
|
10
10
|
import { Button } from "./index";
|
|
11
|
+
import { useState } from "react";
|
|
11
12
|
|
|
12
13
|
const pressed = (name: string) => () => action(name)();
|
|
13
14
|
|
|
@@ -44,6 +45,25 @@ const meta: Meta<typeof Button> = {
|
|
|
44
45
|
export default meta;
|
|
45
46
|
type Story = StoryObj<typeof Button>;
|
|
46
47
|
|
|
48
|
+
function DestructiveContrastExample({ disabled = false }: { disabled?: boolean }) {
|
|
49
|
+
const [presses, setPresses] = useState(0);
|
|
50
|
+
return (
|
|
51
|
+
<YStack data-lc-clicks={presses}>
|
|
52
|
+
<Button error disabled={disabled} onPress={() => setPresses((value) => value + 1)}>
|
|
53
|
+
Delete
|
|
54
|
+
</Button>
|
|
55
|
+
</YStack>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const DestructiveEnabled: Story = {
|
|
60
|
+
render: () => <DestructiveContrastExample />,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const DestructiveDisabled: Story = {
|
|
64
|
+
render: () => <DestructiveContrastExample disabled />,
|
|
65
|
+
};
|
|
66
|
+
|
|
47
67
|
export const Basic: Story = {
|
|
48
68
|
name: "Main",
|
|
49
69
|
args: {
|
package/src/Button/index.tsx
CHANGED
|
@@ -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
|
|
@@ -239,7 +239,29 @@ export const ButtonFrame = styled(View, {
|
|
|
239
239
|
},
|
|
240
240
|
});
|
|
241
241
|
|
|
242
|
-
|
|
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
|
+
> {
|
|
243
265
|
action?: "submit" | "reset";
|
|
244
266
|
form?: AnyFormApi;
|
|
245
267
|
loading?: boolean;
|
|
@@ -650,7 +672,6 @@ export function Button({
|
|
|
650
672
|
circular={!nested && isCircular ? true : undefined}
|
|
651
673
|
chromeless={selectedFill ? false : chromeless}
|
|
652
674
|
selected={selectedFill || undefined}
|
|
653
|
-
{...(outlined ? { variant: "outlined" as const } : undefined)}
|
|
654
675
|
{...(!isCircular || nested
|
|
655
676
|
? {
|
|
656
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) {
|
|
@@ -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);
|