@multiplatform.one/forms 7.45.1 → 7.47.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/AdaptivePopup/index.native.js +1 -1
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/index.cjs +14 -3
- package/dist/cjs/Button/index.native.js +19 -8
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
- package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
- package/dist/cjs/ControlGroup/index.native.js +1 -1
- package/dist/cjs/ControlGroup/index.native.js.map +1 -1
- package/dist/cjs/DescriptionList/index.native.js +2 -2
- package/dist/cjs/DescriptionList/index.native.js.map +1 -1
- package/dist/cjs/ErrorSummary.cjs +1 -1
- package/dist/cjs/ErrorSummary.native.js +1 -1
- package/dist/cjs/ErrorSummary.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/index.native.js +1 -1
- package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
- package/dist/cjs/FieldGroup.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/PanelPortal.cjs +1 -1
- package/dist/cjs/FloatingPanel/index.cjs +171 -44
- package/dist/cjs/FloatingPanel/index.native.js +9 -2
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/trailingAction.cjs +59 -0
- package/dist/cjs/FloatingPanel/trailingAction.native.js +64 -0
- package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/cjs/Form/index.native.js +1 -1
- package/dist/cjs/Form/index.native.js.map +1 -1
- package/dist/cjs/Form/submissionController.native.js.map +1 -1
- package/dist/cjs/Form/validateOn.native.js.map +1 -1
- package/dist/cjs/FormGrid.cjs +1 -0
- package/dist/cjs/FormGrid.native.js +1 -0
- package/dist/cjs/FormGrid.native.js.map +1 -1
- package/dist/cjs/FormSection.native.js.map +1 -1
- package/dist/cjs/InputParts/PasswordReveal.cjs +96 -0
- package/dist/cjs/InputParts/PasswordReveal.native.js +104 -0
- package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -0
- package/dist/cjs/InputParts/index.cjs +95 -5
- package/dist/cjs/InputParts/index.native.js +99 -5
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Label/index.native.js.map +1 -1
- package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
- package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
- package/dist/cjs/MediaPicker/types.native.js.map +1 -1
- package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
- package/dist/cjs/Skeleton/index.native.js.map +1 -1
- package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
- package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
- package/dist/cjs/Table/index.native.js.map +1 -1
- package/dist/cjs/Wheel/haptic.native.js.map +1 -1
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
- package/dist/cjs/actionLabel.native.js.map +1 -1
- package/dist/cjs/fieldDefaults.native.js.map +1 -1
- package/dist/cjs/fieldLayout.native.js +1 -1
- package/dist/cjs/fieldLayout.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
- package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/index.native.js +2 -2
- package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
- package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/index.cjs +8 -17
- package/dist/cjs/fields/ColorPicker/index.native.js +11 -20
- package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
- package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +28 -44
- package/dist/cjs/fields/Combobox/index.native.js +35 -50
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/Calendar.cjs +3 -4
- package/dist/cjs/fields/DatePicker/Calendar.native.js +3 -4
- package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
- 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.native.js +3 -3
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
- 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/catalog.native.js +2 -2
- package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/index.native.js +2 -2
- package/dist/cjs/fields/DatePicker/parts.cjs +5 -9
- package/dist/cjs/fields/DatePicker/parts.native.js +7 -11
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/cjs/fields/Duration/durationMath.cjs +1 -1
- package/dist/cjs/fields/Duration/durationMath.native.js +1 -1
- package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.cjs +100 -90
- package/dist/cjs/fields/Duration/index.native.js +111 -101
- package/dist/cjs/fields/Duration/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/index.cjs +134 -24
- package/dist/cjs/fields/FileUpload/index.native.js +151 -36
- package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/GeolocationMap.cjs +2 -1
- package/dist/cjs/fields/Geolocation/GeolocationMap.native.js +3 -2
- package/dist/cjs/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/index.cjs +10 -8
- package/dist/cjs/fields/Geolocation/index.native.js +15 -13
- package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
- package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/cjs/fields/Icon/index.cjs +6 -13
- package/dist/cjs/fields/Icon/index.native.js +9 -16
- package/dist/cjs/fields/Icon/index.native.js.map +1 -1
- package/dist/cjs/fields/ImageField/index.cjs +5 -5
- package/dist/cjs/fields/ImageField/index.native.js +7 -7
- package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.cjs +27 -21
- package/dist/cjs/fields/Input/index.native.js +31 -24
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/MentionInput/index.cjs +7 -8
- package/dist/cjs/fields/MentionInput/index.native.js +10 -11
- package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
- package/dist/cjs/fields/OTPInput/index.cjs +1 -1
- package/dist/cjs/fields/OTPInput/index.native.js +4 -4
- package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
- package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/index.cjs +3 -3
- package/dist/cjs/fields/PhoneInput/index.native.js +6 -6
- package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
- package/dist/cjs/fields/Progress/index.native.js +1 -1
- package/dist/cjs/fields/Progress/index.native.js.map +1 -1
- package/dist/cjs/fields/RadioGroup/index.cjs +1 -0
- package/dist/cjs/fields/RadioGroup/index.native.js +2 -1
- package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/Rating/index.native.js +1 -1
- package/dist/cjs/fields/Rating/index.native.js.map +1 -1
- package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/cjs/fields/Rating/types.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +4 -48
- package/dist/cjs/fields/SearchInput/index.native.js +6 -48
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +14 -12
- package/dist/cjs/fields/Select/index.native.js +18 -16
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Signature/index.cjs +1 -1
- package/dist/cjs/fields/Signature/index.native.js +3 -3
- package/dist/cjs/fields/Signature/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.cjs +1 -1
- package/dist/cjs/fields/Slider/index.native.js +2 -2
- package/dist/cjs/fields/Slider/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/index.native.js +2 -2
- package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
- package/dist/cjs/fields/Switch/index.native.js +2 -2
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/cjs/fields/TextArea/index.native.js +2 -2
- package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
- package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/index.native.js +2 -2
- package/dist/cjs/fields/TimePicker/parts.cjs +5 -9
- package/dist/cjs/fields/TimePicker/parts.native.js +6 -10
- package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/index.cjs +14 -9
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js +16 -11
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/cjs/fields/ToggleGroup/index.cjs +1 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js +2 -2
- package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +5 -5
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +5 -5
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
- package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
- package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
- package/dist/cjs/formSpacing.native.js.map +1 -1
- package/dist/cjs/hooks/useFocusManagement.cjs +3 -2
- package/dist/cjs/hooks/useFocusManagement.native.js +3 -2
- package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
- package/dist/cjs/index.cjs +7 -0
- package/dist/cjs/index.native.js +51 -44
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
- package/dist/cjs/keyboard/chain.native.js.map +1 -1
- package/dist/cjs/keyboard/index.native.js.map +1 -1
- package/dist/cjs/keyboard/types.native.js.map +1 -1
- package/dist/cjs/requiredMarking.native.js.map +1 -1
- package/dist/cjs/shared/TimeColumn.native.js +1 -1
- package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
- package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/cjs/shared/colorRamps.native.js.map +1 -1
- package/dist/cjs/shared/devWarn.native.js.map +1 -1
- package/dist/cjs/shared/floatingList.native.js +1 -1
- package/dist/cjs/shared/floatingList.native.js.map +1 -1
- package/dist/cjs/shared/focusManagement.cjs +4 -4
- package/dist/cjs/shared/focusManagement.native.js +4 -4
- package/dist/cjs/shared/focusManagement.native.js.map +1 -1
- package/dist/cjs/shared/groupContext.native.js.map +1 -1
- package/dist/cjs/shared/i18n.native.js.map +1 -1
- package/dist/cjs/shared/instantMotion.native.js.map +1 -1
- package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
- package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
- package/dist/cjs/shared/panelPortal.cjs +1 -1
- package/dist/cjs/shared/panelPortal.native.js +1 -1
- package/dist/cjs/shared/panelPortal.native.js.map +1 -1
- package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
- package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
- package/dist/cjs/shared/t.native.js.map +1 -1
- package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
- package/dist/cjs/shared/useDragScroll.cjs +2 -2
- package/dist/cjs/shared/useDragScroll.native.js +2 -2
- package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
- package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/cjs/shared/useSheetEscapeDismiss.cjs +5 -4
- package/dist/cjs/shared/useSheetEscapeDismiss.native.js +5 -3
- package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
- package/dist/cjs/shared/utils.native.js +1 -1
- package/dist/cjs/shared/utils.native.js.map +1 -1
- package/dist/cjs/shared/zIndex.native.js.map +1 -1
- package/dist/cjs/themedPrimitives.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/utils/LinkCell.native.js.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +17 -6
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +21 -10
- package/dist/esm/Button/index.native.js.map +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.mjs +2 -2
- package/dist/esm/ErrorSummary.mjs.map +1 -1
- package/dist/esm/ErrorSummary.native.js +2 -2
- 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/PanelPortal.mjs +1 -1
- package/dist/esm/FloatingPanel/PanelPortal.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.mjs +173 -46
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +9 -2
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/esm/FloatingPanel/trailingAction.mjs +33 -0
- package/dist/esm/FloatingPanel/trailingAction.mjs.map +1 -0
- package/dist/esm/FloatingPanel/trailingAction.native.js +35 -0
- package/dist/esm/FloatingPanel/trailingAction.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/submissionController.native.js.map +1 -1
- package/dist/esm/Form/validateOn.native.js.map +1 -1
- package/dist/esm/FormGrid.mjs +1 -0
- package/dist/esm/FormGrid.mjs.map +1 -1
- package/dist/esm/FormGrid.native.js +1 -0
- package/dist/esm/FormGrid.native.js.map +1 -1
- package/dist/esm/FormSection.native.js.map +1 -1
- package/dist/esm/InputParts/PasswordReveal.mjs +68 -0
- package/dist/esm/InputParts/PasswordReveal.mjs.map +1 -0
- package/dist/esm/InputParts/PasswordReveal.native.js +73 -0
- package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -0
- package/dist/esm/InputParts/index.mjs +97 -8
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +101 -8
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Label/index.native.js.map +1 -1
- package/dist/esm/MediaPicker/base64.native.js.map +1 -1
- package/dist/esm/MediaPicker/payload.native.js.map +1 -1
- package/dist/esm/MediaPicker/types.native.js.map +1 -1
- package/dist/esm/MediaPicker/useMediaPicker.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.native.js.map +1 -1
- package/dist/esm/Wheel/wheelShared.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.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.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.mjs +8 -17
- package/dist/esm/fields/ColorPicker/index.mjs.map +1 -1
- package/dist/esm/fields/ColorPicker/index.native.js +9 -18
- 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 +29 -45
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +31 -46
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.mjs +4 -5
- package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js +4 -5
- package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
- 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/parts.mjs +5 -9
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +5 -9
- 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.mjs +1 -1
- package/dist/esm/fields/Duration/durationMath.mjs.map +1 -1
- package/dist/esm/fields/Duration/durationMath.native.js +1 -1
- package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.mjs +100 -90
- package/dist/esm/fields/Duration/index.mjs.map +1 -1
- package/dist/esm/fields/Duration/index.native.js +108 -98
- 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.mjs +135 -25
- package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js +150 -35
- 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 +2 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.native.js +2 -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.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/index.mjs +13 -11
- package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/index.native.js +13 -11
- 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.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
- package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/esm/fields/Icon/index.mjs +8 -15
- package/dist/esm/fields/Icon/index.mjs.map +1 -1
- package/dist/esm/fields/Icon/index.native.js +8 -15
- package/dist/esm/fields/Icon/index.native.js.map +1 -1
- package/dist/esm/fields/ImageField/index.mjs +7 -7
- package/dist/esm/fields/ImageField/index.mjs.map +1 -1
- package/dist/esm/fields/ImageField/index.native.js +7 -7
- package/dist/esm/fields/ImageField/index.native.js.map +1 -1
- package/dist/esm/fields/Input/index.mjs +28 -22
- package/dist/esm/fields/Input/index.mjs.map +1 -1
- package/dist/esm/fields/Input/index.native.js +29 -22
- package/dist/esm/fields/Input/index.native.js.map +1 -1
- package/dist/esm/fields/MentionInput/index.mjs +13 -14
- package/dist/esm/fields/MentionInput/index.mjs.map +1 -1
- package/dist/esm/fields/MentionInput/index.native.js +13 -14
- package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
- package/dist/esm/fields/OTPInput/index.mjs +2 -2
- package/dist/esm/fields/OTPInput/index.mjs.map +1 -1
- package/dist/esm/fields/OTPInput/index.native.js +2 -2
- 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 +5 -5
- package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js +5 -5
- 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/PhoneInput/regionNames.native.js.map +1 -1
- package/dist/esm/fields/Progress/index.native.js.map +1 -1
- package/dist/esm/fields/RadioGroup/index.mjs +1 -0
- package/dist/esm/fields/RadioGroup/index.mjs.map +1 -1
- package/dist/esm/fields/RadioGroup/index.native.js +1 -0
- 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 +5 -49
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +5 -47
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +15 -13
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +15 -13
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Signature/index.mjs +2 -2
- package/dist/esm/fields/Signature/index.mjs.map +1 -1
- package/dist/esm/fields/Signature/index.native.js +2 -2
- package/dist/esm/fields/Signature/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.mjs +2 -2
- package/dist/esm/fields/Slider/index.mjs.map +1 -1
- package/dist/esm/fields/Slider/index.native.js +2 -2
- 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.native.js.map +1 -1
- package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/esm/fields/Switch/footprint.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.mjs +5 -9
- package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js +5 -9
- 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.mjs +20 -15
- package/dist/esm/fields/TimeRangeScrubber/index.mjs.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.native.js +20 -15
- package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.mjs +3 -3
- package/dist/esm/fields/ToggleGroup/index.mjs.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.native.js +3 -3
- package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +2 -2
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +2 -2
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.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.mjs +3 -2
- package/dist/esm/hooks/useFocusManagement.mjs.map +1 -1
- package/dist/esm/hooks/useFocusManagement.native.js +3 -2
- package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
- package/dist/esm/index.mjs +3 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +3 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/keyboard/chain.native.js.map +1 -1
- package/dist/esm/keyboard/index.native.js.map +1 -1
- package/dist/esm/keyboard/types.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 +4 -4
- package/dist/esm/shared/focusManagement.mjs.map +1 -1
- package/dist/esm/shared/focusManagement.native.js +4 -4
- 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/instantMotion.native.js.map +1 -1
- package/dist/esm/shared/nativeA11y.native.js.map +1 -1
- package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
- package/dist/esm/shared/panelPortal.mjs +1 -1
- package/dist/esm/shared/panelPortal.mjs.map +1 -1
- package/dist/esm/shared/panelPortal.native.js +1 -1
- package/dist/esm/shared/panelPortal.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.mjs +2 -2
- package/dist/esm/shared/useDragScroll.mjs.map +1 -1
- package/dist/esm/shared/useDragScroll.native.js +2 -2
- 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.mjs +5 -4
- package/dist/esm/shared/useSheetEscapeDismiss.mjs.map +1 -1
- package/dist/esm/shared/useSheetEscapeDismiss.native.js +5 -3
- 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 +17 -6
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +18 -7
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/ErrorSummary.mjs +2 -2
- package/dist/jsx/ErrorSummary.mjs.map +1 -1
- package/dist/jsx/ErrorSummary.native.js +1 -1
- package/dist/jsx/ErrorSummary.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/PanelPortal.mjs +1 -1
- package/dist/jsx/FloatingPanel/PanelPortal.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.mjs +173 -46
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +9 -2
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/trailingAction.mjs +33 -0
- package/dist/jsx/FloatingPanel/trailingAction.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/trailingAction.native.js +64 -0
- package/dist/jsx/FloatingPanel/trailingAction.native.js.map +1 -0
- package/dist/jsx/FormGrid.mjs +1 -0
- package/dist/jsx/FormGrid.mjs.map +1 -1
- package/dist/jsx/FormGrid.native.js +1 -0
- package/dist/jsx/FormGrid.native.js.map +1 -1
- package/dist/jsx/InputParts/PasswordReveal.mjs +68 -0
- package/dist/jsx/InputParts/PasswordReveal.mjs.map +1 -0
- package/dist/jsx/InputParts/PasswordReveal.native.js +104 -0
- package/dist/jsx/InputParts/PasswordReveal.native.js.map +1 -0
- package/dist/jsx/InputParts/index.mjs +97 -8
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +99 -5
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/fields/ColorPicker/index.mjs +8 -17
- package/dist/jsx/fields/ColorPicker/index.mjs.map +1 -1
- package/dist/jsx/fields/ColorPicker/index.native.js +9 -18
- package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +29 -45
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +30 -45
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.mjs +4 -5
- package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.native.js +3 -4
- package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +5 -9
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +5 -9
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Duration/durationMath.mjs +1 -1
- package/dist/jsx/fields/Duration/durationMath.mjs.map +1 -1
- package/dist/jsx/fields/Duration/durationMath.native.js +1 -1
- package/dist/jsx/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/jsx/fields/Duration/index.mjs +100 -90
- package/dist/jsx/fields/Duration/index.mjs.map +1 -1
- package/dist/jsx/fields/Duration/index.native.js +108 -98
- package/dist/jsx/fields/Duration/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/index.mjs +135 -25
- package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/index.native.js +149 -34
- package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.mjs +2 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.native.js +3 -2
- package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/index.mjs +13 -11
- package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/index.native.js +10 -8
- package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
- package/dist/jsx/fields/Icon/index.mjs +8 -15
- package/dist/jsx/fields/Icon/index.mjs.map +1 -1
- package/dist/jsx/fields/Icon/index.native.js +6 -13
- package/dist/jsx/fields/Icon/index.native.js.map +1 -1
- package/dist/jsx/fields/ImageField/index.mjs +7 -7
- package/dist/jsx/fields/ImageField/index.mjs.map +1 -1
- package/dist/jsx/fields/ImageField/index.native.js +5 -5
- package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
- package/dist/jsx/fields/Input/index.mjs +28 -22
- package/dist/jsx/fields/Input/index.mjs.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +28 -21
- package/dist/jsx/fields/Input/index.native.js.map +1 -1
- package/dist/jsx/fields/MentionInput/index.mjs +13 -14
- package/dist/jsx/fields/MentionInput/index.mjs.map +1 -1
- package/dist/jsx/fields/MentionInput/index.native.js +7 -8
- package/dist/jsx/fields/MentionInput/index.native.js.map +1 -1
- package/dist/jsx/fields/OTPInput/index.mjs +2 -2
- package/dist/jsx/fields/OTPInput/index.mjs.map +1 -1
- package/dist/jsx/fields/OTPInput/index.native.js +1 -1
- package/dist/jsx/fields/OTPInput/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.mjs +5 -5
- package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.native.js +3 -3
- package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/jsx/fields/RadioGroup/index.mjs +1 -0
- package/dist/jsx/fields/RadioGroup/index.mjs.map +1 -1
- package/dist/jsx/fields/RadioGroup/index.native.js +1 -0
- package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +5 -49
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +4 -46
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +15 -13
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +14 -12
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Signature/index.mjs +2 -2
- package/dist/jsx/fields/Signature/index.mjs.map +1 -1
- package/dist/jsx/fields/Signature/index.native.js +1 -1
- package/dist/jsx/fields/Signature/index.native.js.map +1 -1
- package/dist/jsx/fields/Slider/index.mjs +2 -2
- package/dist/jsx/fields/Slider/index.mjs.map +1 -1
- package/dist/jsx/fields/Slider/index.native.js +1 -1
- package/dist/jsx/fields/Slider/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.mjs +5 -9
- package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js +5 -9
- package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/index.mjs +20 -15
- package/dist/jsx/fields/TimeRangeScrubber/index.mjs.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/index.native.js +14 -9
- package/dist/jsx/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.mjs +3 -3
- package/dist/jsx/fields/ToggleGroup/index.mjs.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js +1 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +2 -2
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +5 -5
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/jsx/hooks/useFocusManagement.mjs +3 -2
- package/dist/jsx/hooks/useFocusManagement.mjs.map +1 -1
- package/dist/jsx/hooks/useFocusManagement.native.js +3 -2
- package/dist/jsx/hooks/useFocusManagement.native.js.map +1 -1
- package/dist/jsx/index.js +3 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +3 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +7 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/focusManagement.mjs +4 -4
- package/dist/jsx/shared/focusManagement.mjs.map +1 -1
- package/dist/jsx/shared/focusManagement.native.js +4 -4
- package/dist/jsx/shared/focusManagement.native.js.map +1 -1
- package/dist/jsx/shared/panelPortal.mjs +1 -1
- package/dist/jsx/shared/panelPortal.mjs.map +1 -1
- package/dist/jsx/shared/panelPortal.native.js +1 -1
- package/dist/jsx/shared/panelPortal.native.js.map +1 -1
- package/dist/jsx/shared/useDragScroll.mjs +2 -2
- package/dist/jsx/shared/useDragScroll.mjs.map +1 -1
- package/dist/jsx/shared/useDragScroll.native.js +2 -2
- package/dist/jsx/shared/useDragScroll.native.js.map +1 -1
- package/dist/jsx/shared/useSheetEscapeDismiss.mjs +5 -4
- package/dist/jsx/shared/useSheetEscapeDismiss.mjs.map +1 -1
- package/dist/jsx/shared/useSheetEscapeDismiss.native.js +5 -3
- package/dist/jsx/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/package.json +8 -8
- package/src/AdaptivePopup/AdaptivePopup.stories.tsx +2 -1
- package/src/Button/Button.borderLadder.spec.tsx +32 -7
- package/src/Button/Button.edge.spec.tsx +68 -0
- package/src/Button/Button.stories.tsx +2 -1
- package/src/Button/index.tsx +37 -11
- package/src/Chip/Chip.stories.tsx +2 -1
- package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +2 -1
- package/src/ContextualSaveBar/UnsavedChangesDialog.stories.tsx +2 -1
- package/src/ControlGroup/ControlGroup.stories.tsx +2 -1
- package/src/DescriptionList/DescriptionList.stories.tsx +2 -1
- package/src/ErrorSummary.stories.tsx +2 -1
- package/src/ErrorSummary.tsx +2 -2
- package/src/FieldDisplay/FieldDisplay.stories.tsx +2 -1
- package/src/FieldLayout.stories.tsx +2 -2
- package/src/FloatingPanel/FloatingPanel.coverTrigger.spec.tsx +184 -0
- package/src/FloatingPanel/FloatingPanel.spec.tsx +3 -5
- package/src/FloatingPanel/FloatingPanel.stories.tsx +28 -2
- package/src/FloatingPanel/PanelPortal.tsx +1 -0
- package/src/FloatingPanel/index.native.tsx +4 -2
- package/src/FloatingPanel/index.tsx +267 -61
- package/src/FloatingPanel/trailingAction.tsx +37 -0
- package/src/FloatingPanel/useFloatingPanel.spec.tsx +4 -2
- package/src/Form/Form.stories.tsx +2 -1
- package/src/FormGrid.stories.tsx +2 -1
- package/src/FormGrid.tsx +1 -0
- package/src/FormsIntegration.stories.tsx +4 -18
- package/src/InputParts/InputParts.stories.tsx +11 -11
- package/src/InputParts/PasswordReveal.tsx +94 -0
- package/src/InputParts/index.tsx +144 -2
- package/src/InputParts/inputPartsStories.spec.tsx +3 -1
- package/src/Skeleton/Skeleton.stories.tsx +2 -2
- package/src/Spinner/Spinner.stories.tsx +2 -2
- package/src/Wheel/Wheel.stories.tsx +2 -2
- package/src/fieldTrailingAction.spec.tsx +188 -0
- package/src/fields/Barcode/Barcode.stories.tsx +2 -1
- package/src/fields/Barcode/BarcodePreview.stories.tsx +2 -1
- package/src/fields/Checkbox/Checkbox.stories.tsx +3 -1
- package/src/fields/Checkbox/CheckboxGroup.stories.tsx +2 -2
- package/src/fields/Checkbox/Checkboxes.stories.tsx +2 -1
- package/src/fields/ColorPicker/PresetSwatches.stories.tsx +2 -1
- package/src/fields/ColorPicker/index.tsx +6 -12
- package/src/fields/Combobox/Combobox.stories.tsx +2 -1
- package/src/fields/Combobox/index.tsx +39 -41
- package/src/fields/DatePicker/Calendar.stories.tsx +2 -1
- package/src/fields/DatePicker/Calendar.tsx +4 -5
- package/src/fields/DatePicker/DatePicker.spec.tsx +2 -2
- package/src/fields/DatePicker/DatePicker.stories.tsx +2 -1
- package/src/fields/DatePicker/DateRangePicker.stories.tsx +2 -1
- package/src/fields/DatePicker/DatetimePicker.stories.tsx +2 -1
- package/src/fields/DatePicker/MonthPicker.stories.tsx +2 -1
- package/src/fields/DatePicker/MultiDatePicker.spec.tsx +1 -1
- package/src/fields/DatePicker/MultiDatePicker.stories.tsx +2 -1
- package/src/fields/DatePicker/parts.tsx +6 -10
- package/src/fields/Duration/Duration.spec.tsx +25 -1
- package/src/fields/Duration/Duration.stories.tsx +6 -1
- package/src/fields/Duration/durationMath.spec.ts +2 -2
- package/src/fields/Duration/durationMath.ts +1 -1
- package/src/fields/Duration/index.tsx +91 -70
- package/src/fields/FileUpload/FileUpload.spec.tsx +86 -3
- package/src/fields/FileUpload/FileUpload.stories.tsx +15 -0
- package/src/fields/FileUpload/index.tsx +170 -50
- package/src/fields/Geolocation/Geolocation.stories.tsx +2 -1
- package/src/fields/Geolocation/GeolocationMap.native.tsx +2 -1
- package/src/fields/Geolocation/GeolocationMap.tsx +2 -1
- package/src/fields/Geolocation/index.tsx +39 -16
- package/src/fields/Icon/index.tsx +9 -15
- package/src/fields/ImageField/index.tsx +9 -8
- package/src/fields/Input/Input.stories.tsx +39 -1
- package/src/fields/Input/index.tsx +45 -25
- package/src/fields/MentionInput/index.tsx +17 -18
- package/src/fields/OTPInput/OtpInput.stories.tsx +2 -1
- package/src/fields/OTPInput/index.tsx +2 -2
- package/src/fields/PhoneInput/PhoneInput.stories.tsx +2 -1
- package/src/fields/PhoneInput/index.tsx +10 -6
- package/src/fields/Progress/Progress.stories.tsx +2 -1
- package/src/fields/RadioGroup/RadioGroup.stories.tsx +3 -2
- package/src/fields/RadioGroup/index.tsx +1 -0
- package/src/fields/Rating/Rating.stories.tsx +2 -1
- package/src/fields/SearchInput/SearchInput.stories.tsx +2 -1
- package/src/fields/SearchInput/index.tsx +8 -45
- package/src/fields/Select/Select.stories.tsx +2 -2
- package/src/fields/Select/index.tsx +18 -12
- package/src/fields/Signature/Signature.stories.tsx +2 -1
- package/src/fields/Signature/index.tsx +6 -1
- package/src/fields/Slider/Slider.stories.tsx +2 -1
- package/src/fields/Slider/index.tsx +6 -2
- package/src/fields/Stepper/Stepper.stories.tsx +2 -1
- package/src/fields/Switch/Switch.stories.tsx +3 -1
- package/src/fields/TextArea/TextArea.stories.tsx +2 -1
- package/src/fields/TimePicker/TimePicker.stories.tsx +2 -1
- package/src/fields/TimePicker/parts.tsx +6 -10
- package/src/fields/TimeRangeScrubber/index.tsx +20 -18
- package/src/fields/ToggleGroup/ToggleGroup.stories.tsx +2 -8
- package/src/fields/ToggleGroup/index.tsx +10 -4
- package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +2 -2
- package/src/fields/pickerActivation.spec.tsx +7 -3
- package/src/hooks/useFocusManagement.ts +3 -2
- package/src/index.ts +9 -0
- package/src/shared/focusManagement.spec.tsx +11 -1
- package/src/shared/focusManagement.ts +17 -8
- package/src/shared/interactionHooks.spec.tsx +13 -0
- package/src/shared/panelPortal.ts +2 -1
- package/src/shared/useDragScroll.ts +2 -2
- package/src/shared/useSheetEscapeDismiss.ts +9 -4
- package/types/Button/index.d.ts +9 -1
- package/types/Button/index.d.ts.map +1 -1
- package/types/FloatingPanel/PanelPortal.d.ts.map +1 -1
- package/types/FloatingPanel/index.d.ts +9 -1
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/trailingAction.d.ts +16 -0
- package/types/FloatingPanel/trailingAction.d.ts.map +1 -0
- package/types/InputParts/PasswordReveal.d.ts +28 -0
- package/types/InputParts/PasswordReveal.d.ts.map +1 -0
- package/types/InputParts/index.d.ts +34 -2
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/fields/Checkbox/index.d.ts +4 -4
- package/types/fields/ColorPicker/index.d.ts.map +1 -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/parts.d.ts.map +1 -1
- package/types/fields/Duration/index.d.ts.map +1 -1
- package/types/fields/FileUpload/index.d.ts +1 -0
- package/types/fields/FileUpload/index.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
- package/types/fields/Geolocation/index.d.ts.map +1 -1
- package/types/fields/Icon/index.d.ts.map +1 -1
- package/types/fields/ImageField/index.d.ts.map +1 -1
- package/types/fields/Input/index.d.ts +9 -3
- package/types/fields/Input/index.d.ts.map +1 -1
- package/types/fields/MentionInput/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/RadioGroup/index.d.ts.map +1 -1
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Signature/index.d.ts.map +1 -1
- package/types/fields/Slider/index.d.ts.map +1 -1
- package/types/fields/TimePicker/parts.d.ts.map +1 -1
- package/types/fields/TimeRangeScrubber/index.d.ts.map +1 -1
- package/types/fields/ToggleGroup/index.d.ts +1 -1
- package/types/fields/ToggleGroup/index.d.ts.map +1 -1
- package/types/hooks/useFocusManagement.d.ts.map +1 -1
- package/types/index.d.ts +4 -0
- package/types/index.d.ts.map +1 -1
- package/types/shared/focusManagement.d.ts +10 -5
- package/types/shared/focusManagement.d.ts.map +1 -1
- package/types/shared/panelPortal.d.ts.map +1 -1
- package/types/shared/useSheetEscapeDismiss.d.ts +1 -1
- package/types/shared/useSheetEscapeDismiss.d.ts.map +1 -1
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* MPO-134: the borderWidth knob reaches an outlined Button. The frame's
|
|
5
5
|
* `outlined` styled variant used to hard-set `borderWidth: 1`, which beat
|
|
6
6
|
* `borderWidth={resolvedBorderWidth}` on Tamagui prop order and pinned every
|
|
7
|
-
* outlined Button at 1px while a filled one walked 0 /
|
|
7
|
+
* outlined Button at 1px while a filled one walked 0 / hairline / 1 / 2. The
|
|
8
8
|
* resolver owns the floor (DG-BOR-01): `none` under `fillStyle: outlined`
|
|
9
|
-
* is the
|
|
9
|
+
* is the hairline (1px on web, LC-148), and `large` is 2 for filled and outlined alike, so the
|
|
10
10
|
* two keep the box parity the frame's comment promises.
|
|
11
11
|
*
|
|
12
12
|
* jsdom cannot cascade Tamagui CSS — assertions read the atomic border-width
|
|
@@ -14,13 +14,16 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
17
|
-
import { Preset } from "@multiplatform.one/theme";
|
|
18
|
-
import { cleanup, screen } from "@testing-library/react";
|
|
17
|
+
import { createDefaultThemeConfig, Preset } from "@multiplatform.one/theme";
|
|
18
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
19
|
+
import { TamaguiProvider } from "tamagui";
|
|
19
20
|
import { afterEach, describe, expect, it } from "vitest";
|
|
20
21
|
import { Button } from "./index";
|
|
21
22
|
|
|
22
23
|
afterEach(cleanup);
|
|
23
24
|
|
|
25
|
+
const houseConfig = createDefaultThemeConfig();
|
|
26
|
+
|
|
24
27
|
const STOPS = ["none", "small", "medium", "large"] as const;
|
|
25
28
|
|
|
26
29
|
function widthAtoms(): string[] {
|
|
@@ -43,8 +46,8 @@ function renderAt(stop: (typeof STOPS)[number], outlined: boolean): string[] {
|
|
|
43
46
|
|
|
44
47
|
describe("Button borderWidth ladder (MPO-134)", () => {
|
|
45
48
|
it("outlined walks the ladder: hairline at none and small, 1 at medium, 2 at large", () => {
|
|
46
|
-
expect(renderAt("none", true)).toEqual(["_btw-
|
|
47
|
-
expect(renderAt("small", true)).toEqual(["_btw-
|
|
49
|
+
expect(renderAt("none", true)).toEqual(["_btw-1px"]);
|
|
50
|
+
expect(renderAt("small", true)).toEqual(["_btw-1px"]);
|
|
48
51
|
expect(renderAt("medium", true)).toEqual(["_btw-1px"]);
|
|
49
52
|
expect(renderAt("large", true)).toEqual(["_btw-2px"]);
|
|
50
53
|
});
|
|
@@ -53,9 +56,31 @@ describe("Button borderWidth ladder (MPO-134)", () => {
|
|
|
53
56
|
expect(renderAt("none", true)).not.toEqual(renderAt("large", true));
|
|
54
57
|
});
|
|
55
58
|
|
|
59
|
+
it("outlined small paints the resolver's fainter edge, so it still reads apart from medium (LC-148)", () => {
|
|
60
|
+
const colourAtoms = (stop: (typeof STOPS)[number]) => {
|
|
61
|
+
render(
|
|
62
|
+
<TamaguiProvider config={houseConfig.tamagui} defaultTheme="light" disableInjectCSS>
|
|
63
|
+
<Preset overrides={{ fillStyle: "outlined", borderWidth: stop }}>
|
|
64
|
+
<Button>Restart</Button>
|
|
65
|
+
</Preset>
|
|
66
|
+
</TamaguiProvider>,
|
|
67
|
+
);
|
|
68
|
+
const atoms = String(screen.getByRole("button").className || "")
|
|
69
|
+
.split(/\s+/)
|
|
70
|
+
.filter((c) => c.startsWith("_btc-"));
|
|
71
|
+
cleanup();
|
|
72
|
+
return atoms;
|
|
73
|
+
};
|
|
74
|
+
// Tamagui hashes a long variable into the atom, so the hairline edge reads
|
|
75
|
+
// as `_btc-borderColor<hash>` beside medium's bare `_btc-borderColor`.
|
|
76
|
+
expect(colourAtoms("medium")).toContain("_btc-borderColor");
|
|
77
|
+
expect(colourAtoms("small")).not.toContain("_btc-borderColor");
|
|
78
|
+
expect(colourAtoms("small").some((c) => /^_btc-borderColor\d+$/.test(c))).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
|
|
56
81
|
it("filled walks the same ladder, chromeless at none", () => {
|
|
57
82
|
expect(renderAt("none", false)).toEqual(["_btw-0px"]);
|
|
58
|
-
expect(renderAt("small", false)).toEqual(["_btw-
|
|
83
|
+
expect(renderAt("small", false)).toEqual(["_btw-1px"]);
|
|
59
84
|
expect(renderAt("medium", false)).toEqual(["_btw-1px"]);
|
|
60
85
|
expect(renderAt("large", false)).toEqual(["_btw-2px"]);
|
|
61
86
|
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
6
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
7
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
8
|
+
import { Button } from "./index";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* LC-141 EDGE-CONTROL (FZ-7703): a chromeless Button at a container edge
|
|
12
|
+
* pulls out by its own horizontal padding, so its glyph sits on the gutter.
|
|
13
|
+
* A framed Button ignores `edge`: its frame is what aligns.
|
|
14
|
+
*
|
|
15
|
+
* jsdom cannot cascade Tamagui's atomic CSS, so these read the frame's
|
|
16
|
+
* logical-margin and padding atoms.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
afterEach(cleanup);
|
|
20
|
+
|
|
21
|
+
function atoms(prefix: string): string[] {
|
|
22
|
+
return String(screen.getByRole("button").className || "")
|
|
23
|
+
.split(" ")
|
|
24
|
+
.filter((c) => c.startsWith(prefix));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The padding the frame paints, as the px a pull-out must cancel. */
|
|
28
|
+
function paddingPx(): string {
|
|
29
|
+
const [pad] = atoms("_pl-");
|
|
30
|
+
if (!pad) throw new Error("frame paints no left padding");
|
|
31
|
+
return pad.slice("_pl-".length);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe("Button edge (LC-141)", () => {
|
|
35
|
+
it("pulls a chromeless start-edge button out by its own padding", () => {
|
|
36
|
+
renderWithProviders(
|
|
37
|
+
<Button chromeless edge="start">
|
|
38
|
+
Back
|
|
39
|
+
</Button>,
|
|
40
|
+
);
|
|
41
|
+
expect(atoms("_marginInlineStart-")).toEqual([`_marginInlineStart--${paddingPx()}`]);
|
|
42
|
+
expect(atoms("_marginInlineEnd-")).toEqual([]);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it("pulls a chromeless end-edge button out on the trailing side", () => {
|
|
46
|
+
renderWithProviders(
|
|
47
|
+
<Button chromeless edge="end">
|
|
48
|
+
Done
|
|
49
|
+
</Button>,
|
|
50
|
+
);
|
|
51
|
+
expect(atoms("_marginInlineEnd-")).toEqual([`_marginInlineEnd--${paddingPx()}`]);
|
|
52
|
+
expect(atoms("_marginInlineStart-")).toEqual([]);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("leaves a framed button on the gutter", () => {
|
|
56
|
+
renderWithProviders(
|
|
57
|
+
<Button outlined edge="start">
|
|
58
|
+
Back
|
|
59
|
+
</Button>,
|
|
60
|
+
);
|
|
61
|
+
expect(atoms("_marginInline")).toEqual([]);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("does nothing without edge", () => {
|
|
65
|
+
renderWithProviders(<Button chromeless>Back</Button>);
|
|
66
|
+
expect(atoms("_marginInline")).toEqual([]);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -5,8 +5,9 @@ import {
|
|
|
5
5
|
FOCUS_RING_CLIPPED_OFFSET,
|
|
6
6
|
FOCUS_RING_MIN_CONTRAST,
|
|
7
7
|
ensureFocusVisibleRing,
|
|
8
|
+
Paragraph,
|
|
8
9
|
} from "@multiplatform.one/theme";
|
|
9
|
-
import { Button as TamaguiButton,
|
|
10
|
+
import { Button as TamaguiButton, XStack, YStack, useTheme } from "tamagui";
|
|
10
11
|
import { Button, type ButtonProps } from "./index";
|
|
11
12
|
import { useState } from "react";
|
|
12
13
|
|
package/src/Button/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IconSlot } from "@multiplatform.one/theme";
|
|
2
|
-
import { transitionProps } from "@multiplatform.one/theme";
|
|
2
|
+
import { transitionProps, SizableText } from "@multiplatform.one/theme";
|
|
3
3
|
import { pressSlopProps } from "../shared/pressSlopProps";
|
|
4
4
|
import {
|
|
5
5
|
Children,
|
|
@@ -37,7 +37,7 @@ import { useFormField } from "../shared/utils";
|
|
|
37
37
|
import {
|
|
38
38
|
Button as TamaguiButton,
|
|
39
39
|
type ButtonProps as TamaguiButtonProps,
|
|
40
|
-
SizableText,
|
|
40
|
+
SizableText as TamaguiSizableText,
|
|
41
41
|
View,
|
|
42
42
|
XStack,
|
|
43
43
|
YStack,
|
|
@@ -339,6 +339,14 @@ export interface ButtonProps extends Omit<
|
|
|
339
339
|
* `control`.
|
|
340
340
|
*/
|
|
341
341
|
recipeFamily?: RecipeFamilyName;
|
|
342
|
+
/**
|
|
343
|
+
* A chromeless button at a container edge (a toolbar's back button) pulls
|
|
344
|
+
* out by its own horizontal padding, so its glyph sits on the content
|
|
345
|
+
* gutter while the press target reaches into the margin (MUI IconButton
|
|
346
|
+
* `edge`, iOS / Material top-bar navigation icon). No effect on a button
|
|
347
|
+
* that paints a frame: the frame is what aligns there.
|
|
348
|
+
*/
|
|
349
|
+
edge?: "start" | "end";
|
|
342
350
|
}
|
|
343
351
|
|
|
344
352
|
export function Button({
|
|
@@ -363,6 +371,7 @@ export function Button({
|
|
|
363
371
|
nested = false,
|
|
364
372
|
circular,
|
|
365
373
|
chromeless,
|
|
374
|
+
edge,
|
|
366
375
|
verb,
|
|
367
376
|
noun,
|
|
368
377
|
actionRole,
|
|
@@ -444,6 +453,14 @@ export function Button({
|
|
|
444
453
|
const touch = useTouchSurface();
|
|
445
454
|
const recipe = resolveButtonSizeRecipe(resolvedSize, recipeFamily, touch);
|
|
446
455
|
const padX = recipe.paddingHorizontal;
|
|
456
|
+
// `edge` cancels the padding the frame actually paints: an escaped number,
|
|
457
|
+
// a passed-through space token, or the recipe's.
|
|
458
|
+
const edgePull =
|
|
459
|
+
sizeRecipeEscaped && typeof paddingHorizontalProp === "number"
|
|
460
|
+
? -paddingHorizontalProp
|
|
461
|
+
: typeof paddingHorizontalProp === "string" && paddingHorizontalProp.startsWith("$")
|
|
462
|
+
? (`$-${paddingHorizontalProp.slice(1)}` as "$4")
|
|
463
|
+
: -padX;
|
|
447
464
|
const radiusToken = knobProps.borderRadius.borderRadius;
|
|
448
465
|
const radiusStop: SizeRecipeRadiusStop | undefined =
|
|
449
466
|
typeof radiusToken === "string"
|
|
@@ -523,6 +540,10 @@ export function Button({
|
|
|
523
540
|
const isLow = knobProps.textAccent === "low";
|
|
524
541
|
const isMedium = knobProps.textAccent === "medium";
|
|
525
542
|
const resolvedBorderWidth = knobProps.borderRadius.borderWidth;
|
|
543
|
+
// Tamagui applies props in key order, and a JSX prop that repeats a spread
|
|
544
|
+
// key keeps the spread's slot: left in, the fragment's `borderColor` would
|
|
545
|
+
// sit before `outlined`, whose `$borderColor` then beats the LC-148 hairline.
|
|
546
|
+
const { borderColor: knobBorderColor, ...radiusFragment } = knobProps.borderRadius;
|
|
526
547
|
const [hovering, setHovering] = useState(false);
|
|
527
548
|
const [pressing, setPressing] = useState(false);
|
|
528
549
|
const handlePressIn = useCallback(() => {
|
|
@@ -574,7 +595,7 @@ export function Button({
|
|
|
574
595
|
: recipe.iconSize;
|
|
575
596
|
|
|
576
597
|
const renderLabelText = (label: string | number, key?: string) => (
|
|
577
|
-
<
|
|
598
|
+
<TamaguiSizableText
|
|
578
599
|
key={key}
|
|
579
600
|
userSelect="none"
|
|
580
601
|
flexGrow={0}
|
|
@@ -602,7 +623,7 @@ export function Button({
|
|
|
602
623
|
{...transitionProps(knobProps.motion.control)}
|
|
603
624
|
>
|
|
604
625
|
{label}
|
|
605
|
-
</
|
|
626
|
+
</TamaguiSizableText>
|
|
606
627
|
);
|
|
607
628
|
// LC-82 TEXT-RIDES-TEXT: wrap ALL bare string/number children — the
|
|
608
629
|
// array path (coalesced runs), not just the singleton case.
|
|
@@ -734,16 +755,11 @@ export function Button({
|
|
|
734
755
|
aria-busy={loading || undefined}
|
|
735
756
|
opacity={1}
|
|
736
757
|
{...transitionProps(knobProps.motion.control, ["borderRadius", "borderWidth"])}
|
|
737
|
-
{...
|
|
758
|
+
{...radiusFragment}
|
|
738
759
|
{...(radiusStop === "medium" || radiusStop == null
|
|
739
760
|
? { borderRadius: paintedRadius.radius }
|
|
740
761
|
: undefined)}
|
|
741
762
|
borderWidth={resolvedBorderWidth}
|
|
742
|
-
// MPO-19 X3: the borderRadius knob fragment carries `$borderColor` for
|
|
743
|
-
// bordered chrome, but a filled Button's edge is transparent by contract
|
|
744
|
-
// (reference §6.1) — same-width invisible border keeps filled and
|
|
745
|
-
// outlined boxes identical without the filled one showing a ring.
|
|
746
|
-
borderColor={outlined ? "$borderColor" : "transparent"}
|
|
747
763
|
size={resolvedSize}
|
|
748
764
|
{...(chromeless ? undefined : knobProps.elevationChrome)}
|
|
749
765
|
elevation={knobProps.elevation}
|
|
@@ -753,6 +769,11 @@ export function Button({
|
|
|
753
769
|
// knob-driven caller passes `knobProps.outlined`, which is a real
|
|
754
770
|
// boolean, so this fired on most screens.
|
|
755
771
|
outlined={outlined || undefined}
|
|
772
|
+
// MPO-19 X3: the borderRadius knob fragment carries `$borderColor` for
|
|
773
|
+
// bordered chrome, but a filled Button's edge is transparent by contract
|
|
774
|
+
// (reference §6.1) — same-width invisible border keeps filled and
|
|
775
|
+
// outlined boxes identical without the filled one showing a ring.
|
|
776
|
+
borderColor={outlined ? knobBorderColor : "transparent"}
|
|
756
777
|
circular={!nested && isCircular ? true : undefined}
|
|
757
778
|
chromeless={selectedFill ? false : chromeless}
|
|
758
779
|
selected={selectedFill || undefined}
|
|
@@ -767,6 +788,11 @@ export function Button({
|
|
|
767
788
|
minHeight: visualPx,
|
|
768
789
|
}
|
|
769
790
|
: undefined)}
|
|
791
|
+
{...(edge && chromeless && !selectedFill && !isCircular
|
|
792
|
+
? edge === "start"
|
|
793
|
+
? { marginInlineStart: edgePull }
|
|
794
|
+
: { marginInlineEnd: edgePull }
|
|
795
|
+
: undefined)}
|
|
770
796
|
{...(restFill ? { backgroundColor: restFill } : undefined)}
|
|
771
797
|
// Solid-intent sub-themes carry the on-fill foreground as `$color`
|
|
772
798
|
// (LC-05); outlined frames sit on the page, so re-anchor inherited
|
|
@@ -940,4 +966,4 @@ export function Button({
|
|
|
940
966
|
}
|
|
941
967
|
|
|
942
968
|
Button.Icon = TamaguiButton.Icon;
|
|
943
|
-
Button.Text =
|
|
969
|
+
Button.Text = TamaguiSizableText;
|
|
@@ -2,8 +2,9 @@ import { action } from "@multiplatform.one/storybook";
|
|
|
2
2
|
import { CheckIcon, LightningIcon, TagIcon } from "@phosphor-icons/react";
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
4
4
|
import { useState } from "react";
|
|
5
|
-
import {
|
|
5
|
+
import { XStack, YStack } from "tamagui";
|
|
6
6
|
import { Chip, type ChipColor, type ChipSize, type ChipVariantProp } from "./index";
|
|
7
|
+
import { Text } from "@multiplatform.one/theme";
|
|
7
8
|
|
|
8
9
|
const meta: Meta<typeof Chip> = {
|
|
9
10
|
title: "Forms/Chip",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { action } from "@multiplatform.one/storybook";
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { YStack } from "tamagui";
|
|
5
5
|
import { Button } from "../Button";
|
|
6
6
|
import { Checkbox } from "../fields/Checkbox";
|
|
7
7
|
import { Input } from "../fields/Input";
|
|
@@ -9,6 +9,7 @@ import { RadioGroup } from "../fields/RadioGroup";
|
|
|
9
9
|
import { Switch } from "../fields/Switch";
|
|
10
10
|
import { Form } from "../Form";
|
|
11
11
|
import { ContextualSaveBar } from "./index";
|
|
12
|
+
import { SizableText } from "@multiplatform.one/theme";
|
|
12
13
|
|
|
13
14
|
const fields = (
|
|
14
15
|
<YStack gap="$4" width="100%" maxWidth={640} padding="$4" minHeight={360}>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { action } from "@multiplatform.one/storybook";
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { YStack } from "tamagui";
|
|
5
5
|
import { Button } from "../Button";
|
|
6
6
|
import { UnsavedChangesDialog } from "./UnsavedChangesDialog";
|
|
7
|
+
import { Paragraph } from "@multiplatform.one/theme";
|
|
7
8
|
|
|
8
9
|
const meta: Meta<typeof UnsavedChangesDialog> = {
|
|
9
10
|
title: "Forms/ContextualSaveBar/UnsavedChangesDialog",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { GuardrailSpecimenParameter } from "@multiplatform.one/theme";
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
|
-
import {
|
|
3
|
+
import { YStack } from "tamagui";
|
|
4
4
|
import { Button } from "../Button";
|
|
5
5
|
import { Input } from "../InputParts";
|
|
6
6
|
import { ControlGroup } from "./index";
|
|
7
|
+
import { Paragraph } from "@multiplatform.one/theme";
|
|
7
8
|
|
|
8
9
|
const meta: Meta<typeof ControlGroup> = {
|
|
9
10
|
title: "Forms/ControlGroup",
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
|
-
import {
|
|
2
|
+
import { YStack } from "tamagui";
|
|
3
3
|
import { FormGrid } from "../FormGrid";
|
|
4
4
|
import { FormSection, FormSectionStack } from "../FormSection";
|
|
5
5
|
import { DescriptionList, type DescriptionListItem } from "./index";
|
|
6
|
+
import { Paragraph } from "@multiplatform.one/theme";
|
|
6
7
|
|
|
7
8
|
const meta: Meta<typeof DescriptionList> = {
|
|
8
9
|
title: "Forms/DescriptionList",
|
|
@@ -2,13 +2,14 @@ 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
4
|
import { useState } from "react";
|
|
5
|
-
import {
|
|
5
|
+
import { YStack } from "tamagui";
|
|
6
6
|
import { Button } from "./Button";
|
|
7
7
|
import { ErrorSummary, collectFormFieldErrors } from "./ErrorSummary";
|
|
8
8
|
import { FieldLayout } from "./fieldLayout";
|
|
9
9
|
import { Form } from "./Form";
|
|
10
10
|
import { FormSection } from "./FormSection";
|
|
11
11
|
import { Input as InputParts } from "./InputParts";
|
|
12
|
+
import { Paragraph } from "@multiplatform.one/theme";
|
|
12
13
|
|
|
13
14
|
const meta: Meta<typeof ErrorSummary> = {
|
|
14
15
|
title: "Forms/ErrorSummary",
|
package/src/ErrorSummary.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { FOCUS_RING_HALO_OFFSET, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
1
|
+
import { FOCUS_RING_HALO_OFFSET, useResolvedKnobs, H4 } from "@multiplatform.one/theme";
|
|
2
2
|
import { WarningCircleIcon } from "@phosphor-icons/react";
|
|
3
3
|
import { type ReactNode, useEffect, useId, useRef } from "react";
|
|
4
|
-
import { Anchor,
|
|
4
|
+
import { Anchor, Paragraph, YStack, isWeb } from "tamagui";
|
|
5
5
|
import { formCommonColors } from "./shared/colorRamps";
|
|
6
6
|
import { t } from "./shared/t";
|
|
7
7
|
import { warnBannedErrorWords as warnBannedErrorWordsShared } from "./shared/devWarn";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
|
-
import {
|
|
2
|
+
import { XStack, YStack } from "tamagui";
|
|
3
3
|
import type { FieldDisplayType } from "./index";
|
|
4
4
|
import { FieldDisplay } from "./index";
|
|
5
|
+
import { Paragraph } from "@multiplatform.one/theme";
|
|
5
6
|
|
|
6
7
|
const meta: Meta<typeof FieldDisplay> = {
|
|
7
8
|
title: "Forms/FieldDisplay",
|
|
@@ -2,8 +2,8 @@ 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
4
|
import { useState } from "react";
|
|
5
|
-
import { Preset } from "@multiplatform.one/theme";
|
|
6
|
-
import {
|
|
5
|
+
import { Preset, Paragraph } from "@multiplatform.one/theme";
|
|
6
|
+
import { YStack, XStack } from "tamagui";
|
|
7
7
|
import { Button } from "./Button";
|
|
8
8
|
import { Form } from "./Form";
|
|
9
9
|
import { Field, FieldLayout } from "./fieldLayout";
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { fireEvent, waitFor, within } from "@testing-library/react";
|
|
3
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { Preset, defaultPreset, heroPreset, boldPreset } from "@multiplatform.one/theme";
|
|
6
|
+
import { Button } from "../Button";
|
|
7
|
+
import { FloatingPanel } from "./index";
|
|
8
|
+
|
|
9
|
+
const triggerBounds = {
|
|
10
|
+
x: 80,
|
|
11
|
+
y: 240,
|
|
12
|
+
top: 240,
|
|
13
|
+
bottom: 280,
|
|
14
|
+
left: 80,
|
|
15
|
+
right: 200,
|
|
16
|
+
width: 120,
|
|
17
|
+
height: 40,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
function measure(bounds = triggerBounds, panelWidth = 240, panelHeight = 180) {
|
|
21
|
+
const original = HTMLElement.prototype.getBoundingClientRect;
|
|
22
|
+
vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
|
|
23
|
+
function (this: HTMLElement) {
|
|
24
|
+
if (this.hasAttribute("data-fp-reference")) return { ...bounds, toJSON: () => ({}) };
|
|
25
|
+
return original.call(this);
|
|
26
|
+
},
|
|
27
|
+
);
|
|
28
|
+
vi.spyOn(HTMLElement.prototype, "offsetWidth", "get").mockImplementation(
|
|
29
|
+
function (this: HTMLElement) {
|
|
30
|
+
return this.hasAttribute("data-fp-panel") ? panelWidth : 0;
|
|
31
|
+
},
|
|
32
|
+
);
|
|
33
|
+
vi.spyOn(HTMLElement.prototype, "scrollHeight", "get").mockImplementation(
|
|
34
|
+
function (this: HTMLElement) {
|
|
35
|
+
return this.hasAttribute("data-fp-panel") ? panelHeight : 0;
|
|
36
|
+
},
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function Harness({ scrollable }: { scrollable?: boolean }) {
|
|
41
|
+
const [open, setOpen] = useState(false);
|
|
42
|
+
return (
|
|
43
|
+
<FloatingPanel
|
|
44
|
+
open={open}
|
|
45
|
+
onOpenChange={setOpen}
|
|
46
|
+
anchorMode="cover-trigger"
|
|
47
|
+
scrollable={scrollable}
|
|
48
|
+
trigger={
|
|
49
|
+
<Button aria-label="Timeline filters">
|
|
50
|
+
<span aria-hidden="true">◇</span>Filters
|
|
51
|
+
</Button>
|
|
52
|
+
}
|
|
53
|
+
>
|
|
54
|
+
<Button>Assigned to me</Button>
|
|
55
|
+
<Button>All entries</Button>
|
|
56
|
+
</FloatingPanel>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
afterEach(() => {
|
|
61
|
+
vi.restoreAllMocks();
|
|
62
|
+
document.documentElement.removeAttribute("dir");
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("LC-112 exact cover-trigger placement", () => {
|
|
66
|
+
it("keeps an explicitly scrollable panel anchored when a full action row fits", async () => {
|
|
67
|
+
measure(triggerBounds, 240, 2000);
|
|
68
|
+
const result = renderWithProviders(<Harness scrollable />);
|
|
69
|
+
fireEvent.click(result.getByRole("button", { name: "Timeline filters" }), { detail: 0 });
|
|
70
|
+
const panel = await result.findByTestId("floating-panel-viewport");
|
|
71
|
+
expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
|
|
72
|
+
expect(panel.style.top).toBe("240px");
|
|
73
|
+
const echo = within(panel).getByRole("button", { name: "Timeline filters" });
|
|
74
|
+
expect(echo.style.position).toBe("sticky");
|
|
75
|
+
});
|
|
76
|
+
it("keeps a menu floating when its visible trigger sits flush with the viewport", async () => {
|
|
77
|
+
measure({ ...triggerBounds, x: 0, left: 0, right: 120, y: 0, top: 0, bottom: 40 });
|
|
78
|
+
const result = renderWithProviders(<Harness />);
|
|
79
|
+
fireEvent.click(result.getByRole("button", { name: "Timeline filters" }), { detail: 0 });
|
|
80
|
+
const panel = await result.findByTestId("floating-panel-viewport");
|
|
81
|
+
expect(panel.style.top).toBe("0px");
|
|
82
|
+
expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
for (const [name, preset] of Object.entries({
|
|
85
|
+
Default: defaultPreset,
|
|
86
|
+
Hero: heroPreset,
|
|
87
|
+
Bold: boldPreset,
|
|
88
|
+
})) {
|
|
89
|
+
for (const theme of ["light", "dark"] as const) {
|
|
90
|
+
it(`preserves the measured trigger row in ${name} ${theme}`, async () => {
|
|
91
|
+
measure();
|
|
92
|
+
const result = renderWithProviders(
|
|
93
|
+
<Preset overrides={preset.knobs} theme={theme}>
|
|
94
|
+
<Harness />
|
|
95
|
+
</Preset>,
|
|
96
|
+
);
|
|
97
|
+
fireEvent.click(result.getByRole("button", { name: "Timeline filters" }), { detail: 0 });
|
|
98
|
+
const panel = await result.findByTestId("floating-panel-viewport");
|
|
99
|
+
const echo = within(panel).getByRole("button", { name: "Timeline filters" });
|
|
100
|
+
expect(echo.style.width).toBe("120px");
|
|
101
|
+
expect(echo.style.height).toBe("40px");
|
|
102
|
+
expect(echo.getAttribute("aria-expanded")).toBe("true");
|
|
103
|
+
expect(echo.querySelector("[id]")).toBeNull();
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
it("keeps the measured first row over its trigger, exposes its name, and closes on activation", async () => {
|
|
109
|
+
measure();
|
|
110
|
+
const result = renderWithProviders(<Harness />);
|
|
111
|
+
const trigger = result.getByRole("button", { name: "Timeline filters" });
|
|
112
|
+
fireEvent.click(trigger, { detail: 0 });
|
|
113
|
+
const panel = await result.findByTestId("floating-panel-viewport");
|
|
114
|
+
await waitFor(() => expect(panel.style.top).toBe("240px"));
|
|
115
|
+
expect(panel.style.left).toBe("80px");
|
|
116
|
+
const echo = within(panel).getByRole("button", { name: "Timeline filters" });
|
|
117
|
+
expect(echo.style.width).toBe("120px");
|
|
118
|
+
expect(echo.style.height).toBe("40px");
|
|
119
|
+
expect(echo.textContent).toContain("◇");
|
|
120
|
+
await waitFor(() =>
|
|
121
|
+
expect(document.activeElement).toBe(result.getByRole("button", { name: "Assigned to me" })),
|
|
122
|
+
);
|
|
123
|
+
fireEvent.click(echo);
|
|
124
|
+
await waitFor(() => expect(result.queryByTestId("floating-panel-viewport")).toBeNull());
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("uses a bottom sheet at the bottom edge instead of moving the first row upward", async () => {
|
|
128
|
+
measure({ ...triggerBounds, y: 730, top: 730, bottom: 770 });
|
|
129
|
+
const result = renderWithProviders(<Harness />);
|
|
130
|
+
const trigger = result.getByRole("button", { name: "Timeline filters" });
|
|
131
|
+
trigger.focus();
|
|
132
|
+
const parentChildren = trigger.closest("[data-fp-reference]")?.parentElement?.children.length;
|
|
133
|
+
fireEvent.click(trigger, { detail: 0 });
|
|
134
|
+
await result.findByTestId("floating-panel-sheet");
|
|
135
|
+
expect(result.queryByTestId("floating-panel-viewport")).toBeNull();
|
|
136
|
+
expect(result.getByRole("button", { name: "Assigned to me" })).toBeTruthy();
|
|
137
|
+
expect(result.getByRole("button", { name: "Timeline filters" })).toBe(trigger);
|
|
138
|
+
expect(trigger.closest("[data-fp-reference]")?.parentElement?.children.length).toBe(
|
|
139
|
+
parentChildren,
|
|
140
|
+
);
|
|
141
|
+
fireEvent.keyDown(document, { key: "Escape" });
|
|
142
|
+
await waitFor(() => expect(document.activeElement).toBe(trigger));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("closes the collision sheet on Escape while the trigger's tooltip is open", async () => {
|
|
146
|
+
measure({ ...triggerBounds, y: 730, top: 730, bottom: 770 });
|
|
147
|
+
const tooltipEscape = (event: KeyboardEvent) => {
|
|
148
|
+
if (event.key === "Escape") event.stopPropagation();
|
|
149
|
+
};
|
|
150
|
+
document.addEventListener("keydown", tooltipEscape);
|
|
151
|
+
try {
|
|
152
|
+
const result = renderWithProviders(<Harness />);
|
|
153
|
+
const trigger = result.getByRole("button", { name: "Timeline filters" });
|
|
154
|
+
fireEvent.click(trigger, { detail: 0 });
|
|
155
|
+
await result.findByTestId("floating-panel-sheet");
|
|
156
|
+
fireEvent.keyDown(trigger, { key: "Escape" });
|
|
157
|
+
await waitFor(() => expect(result.queryByTestId("floating-panel-sheet")).toBeNull());
|
|
158
|
+
} finally {
|
|
159
|
+
document.removeEventListener("keydown", tooltipEscape);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it("uses a bottom sheet for horizontal collisions instead of shifting the trigger row", async () => {
|
|
164
|
+
measure({ ...triggerBounds, x: 900, left: 900, right: 1020 });
|
|
165
|
+
const result = renderWithProviders(<Harness />);
|
|
166
|
+
fireEvent.click(result.getByRole("button", { name: "Timeline filters" }), { detail: 0 });
|
|
167
|
+
await result.findByTestId("floating-panel-sheet");
|
|
168
|
+
expect(result.queryByTestId("floating-panel-viewport")).toBeNull();
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("aligns the trigger row at the logical start edge in RTL", async () => {
|
|
172
|
+
document.documentElement.dir = "rtl";
|
|
173
|
+
measure({ ...triggerBounds, x: 400, left: 400, right: 520 });
|
|
174
|
+
const result = renderWithProviders(<Harness />);
|
|
175
|
+
(result.container.querySelector("[data-fp-reference]") as HTMLElement).style.direction = "rtl";
|
|
176
|
+
fireEvent.click(result.getByRole("button", { name: "Timeline filters" }), { detail: 0 });
|
|
177
|
+
const panel = await result.findByTestId("floating-panel-viewport");
|
|
178
|
+
await waitFor(() => expect(panel.style.left).toBe("280px"));
|
|
179
|
+
expect(panel.style.transformOrigin).toBe("top right");
|
|
180
|
+
const echo = within(panel).getByRole("button", { name: "Timeline filters" });
|
|
181
|
+
expect(echo.style.alignSelf).toBe("flex-start");
|
|
182
|
+
expect(panel.dir).toBe("rtl");
|
|
183
|
+
});
|
|
184
|
+
});
|
|
@@ -4,7 +4,7 @@ import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
|
4
4
|
import { useState, type ReactNode } from "react";
|
|
5
5
|
import { Text } from "tamagui";
|
|
6
6
|
import { Button } from "../Button";
|
|
7
|
-
import { FloatingPanel
|
|
7
|
+
import { FloatingPanel } from "./index";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* The trigger contract, and why every case fires a REAL press rather than
|
|
@@ -436,9 +436,7 @@ describe("FloatingPanel nesting (MPO-221)", () => {
|
|
|
436
436
|
await waitFor(() => expect(floatingViewport()).not.toBeNull());
|
|
437
437
|
const viewport = floatingViewport() as HTMLElement;
|
|
438
438
|
expect(scroller.contains(viewport)).toBe(false);
|
|
439
|
-
|
|
440
|
-
// viewport padding, now in viewport coordinates with no scroller offset.
|
|
441
|
-
await waitFor(() => expect(viewport.style.top).toBe(`${panelViewportPadding}px`));
|
|
439
|
+
await waitFor(() => expect(viewport.style.top).toBe("0px"));
|
|
442
440
|
});
|
|
443
441
|
|
|
444
442
|
it("offsets its top by a transformed dialog it stays inside", async () => {
|
|
@@ -459,7 +457,7 @@ describe("FloatingPanel nesting (MPO-221)", () => {
|
|
|
459
457
|
expect(dialog.contains(viewport)).toBe(true);
|
|
460
458
|
// Laid out against the dialog, whose content is scrolled 40px, its css
|
|
461
459
|
// top must be 40px lower to land at the same viewport y.
|
|
462
|
-
await waitFor(() => expect(viewport.style.top).toBe(
|
|
460
|
+
await waitFor(() => expect(viewport.style.top).toBe("40px"));
|
|
463
461
|
});
|
|
464
462
|
});
|
|
465
463
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
|
-
import { Preset } from "@multiplatform.one/theme";
|
|
4
|
-
import {
|
|
3
|
+
import { Preset, Paragraph, H4, Text } from "@multiplatform.one/theme";
|
|
4
|
+
import { ScrollView, Separator, View, XStack, YStack } from "tamagui";
|
|
5
5
|
import { FloatingPanel } from "./index";
|
|
6
6
|
import { Button } from "../Button";
|
|
7
7
|
import { Select } from "../fields/Select";
|
|
@@ -52,6 +52,32 @@ export const Basic: Story = {
|
|
|
52
52
|
},
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
export const CoverTriggerEdges: Story = {
|
|
56
|
+
render: () => {
|
|
57
|
+
const [open, setOpen] = useState(false);
|
|
58
|
+
return (
|
|
59
|
+
<YStack
|
|
60
|
+
height="100%"
|
|
61
|
+
minHeight="$20"
|
|
62
|
+
padding="$4"
|
|
63
|
+
justifyContent="flex-end"
|
|
64
|
+
alignItems="flex-end"
|
|
65
|
+
>
|
|
66
|
+
<FloatingPanel
|
|
67
|
+
open={open}
|
|
68
|
+
onOpenChange={setOpen}
|
|
69
|
+
anchorMode="cover-trigger"
|
|
70
|
+
triggerSizing="content"
|
|
71
|
+
trigger={<Button>Edge menu</Button>}
|
|
72
|
+
>
|
|
73
|
+
<Button onPress={() => setOpen(false)}>First action</Button>
|
|
74
|
+
<Button onPress={() => setOpen(false)}>Second action</Button>
|
|
75
|
+
</FloatingPanel>
|
|
76
|
+
</YStack>
|
|
77
|
+
);
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
55
81
|
export const ScrollableContent: Story = {
|
|
56
82
|
render: () => {
|
|
57
83
|
const [open, setOpen] = useState(false);
|