@multiplatform.one/forms 7.71.0 → 7.72.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 +2 -2
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/cjs/Button/index.cjs +16 -0
- package/dist/cjs/Button/index.native.js +18 -2
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Button/mediaPlate.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.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/RegularPanel.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/echoContext.cjs +39 -0
- package/dist/cjs/FloatingPanel/echoContext.native.js +42 -0
- package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/index.cjs +212 -80
- package/dist/cjs/FloatingPanel/index.native.js +92 -17
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/panelWidth.cjs +92 -0
- package/dist/cjs/FloatingPanel/panelWidth.native.js +99 -0
- package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/pointAnchor.cjs +15 -5
- package/dist/cjs/FloatingPanel/pointAnchor.native.js +15 -5
- package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
- package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +58 -4
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +69 -4
- 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.native.js.map +1 -1
- package/dist/cjs/FormSection.native.js.map +1 -1
- package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
- package/dist/cjs/InputParts/index.cjs +18 -0
- package/dist/cjs/InputParts/index.native.js +19 -1
- 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/NativeWheel.native.js +1 -1
- package/dist/cjs/Wheel/NativeWheel.native.js.map +1 -1
- package/dist/cjs/Wheel/haptic.native.js.map +1 -1
- package/dist/cjs/Wheel/index.cjs +2 -1
- package/dist/cjs/Wheel/index.native.js +4 -1
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/Wheel/wheelShared.cjs +6 -1
- package/dist/cjs/Wheel/wheelShared.native.js +7 -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/SystemColorField.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
- 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/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +1 -0
- package/dist/cjs/fields/Combobox/index.native.js +6 -5
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- 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.cjs +6 -30
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +14 -37
- 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/DatetimePicker.native.js.map +1 -1
- 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.cjs +2 -28
- package/dist/cjs/fields/DatePicker/catalog.native.js +4 -32
- 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/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/parts.cjs +11 -20
- package/dist/cjs/fields/DatePicker/parts.native.js +15 -24
- 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.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.native.js +3 -3
- 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.native.js +2 -2
- 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/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.native.js +5 -5
- 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.native.js +3 -3
- package/dist/cjs/fields/Icon/index.native.js.map +1 -1
- package/dist/cjs/fields/ImageField/index.native.js +2 -2
- package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.native.js +3 -3
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/MentionInput/index.native.js +3 -3
- package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
- package/dist/cjs/fields/OTPInput/index.native.js +3 -3
- 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.native.js +3 -3
- 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.native.js +1 -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.native.js +2 -2
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
- package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +65 -44
- package/dist/cjs/fields/Select/index.native.js +73 -51
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.cjs +3 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.native.js +3 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/cjs/fields/Signature/index.native.js +2 -2
- package/dist/cjs/fields/Signature/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.native.js +1 -1
- 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.cjs +4 -25
- package/dist/cjs/fields/TimePicker/catalog.native.js +10 -32
- 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/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/parts.cjs +8 -21
- package/dist/cjs/fields/TimePicker/parts.native.js +9 -22
- 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.native.js +2 -2
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +1 -1
- 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/nativeDateTime/sheetKeyboard.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.native.js.map +1 -1
- package/dist/cjs/index.native.js +45 -45
- 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/choiceRowPress.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.cjs +13 -4
- package/dist/cjs/shared/floatingList.native.js +16 -5
- package/dist/cjs/shared/floatingList.native.js.map +1 -1
- 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/overlaySizeClass.native.js.map +1 -1
- package/dist/cjs/shared/overlayStack.native.js.map +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/restoreRetries.native.js.map +1 -1
- package/dist/cjs/shared/sheetNavigation.native.js.map +1 -1
- package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -1
- package/dist/cjs/shared/systemControls.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.native.js.map +1 -1
- package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
- 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/standardActions.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/IconButtonGroup.native.js.map +1 -1
- package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +17 -1
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +17 -1
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Button/mediaPlate.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.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/RegularPanel.native.js.map +1 -1
- package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
- package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
- package/dist/esm/FloatingPanel/echoContext.mjs +11 -0
- package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -0
- package/dist/esm/FloatingPanel/echoContext.native.js +11 -0
- package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -0
- package/dist/esm/FloatingPanel/index.mjs +213 -83
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +92 -19
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/panelWidth.mjs +63 -0
- package/dist/esm/FloatingPanel/panelWidth.mjs.map +1 -0
- package/dist/esm/FloatingPanel/panelWidth.native.js +67 -0
- package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -0
- package/dist/esm/FloatingPanel/pointAnchor.mjs +15 -5
- package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js +15 -5
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -1
- package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs +58 -5
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +69 -5
- 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.native.js.map +1 -1
- package/dist/esm/FormSection.native.js.map +1 -1
- package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -1
- package/dist/esm/InputParts/index.mjs +19 -1
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +20 -2
- 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/NativeWheel.native.js +1 -1
- package/dist/esm/Wheel/NativeWheel.native.js.map +1 -1
- package/dist/esm/Wheel/haptic.native.js.map +1 -1
- package/dist/esm/Wheel/index.mjs +2 -1
- package/dist/esm/Wheel/index.mjs.map +1 -1
- package/dist/esm/Wheel/index.native.js +4 -1
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/Wheel/wheelShared.mjs +6 -1
- package/dist/esm/Wheel/wheelShared.mjs.map +1 -1
- package/dist/esm/Wheel/wheelShared.native.js +7 -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/SystemColorField.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/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
- package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +1 -0
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +1 -0
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- 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.mjs +6 -30
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.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.mjs +2 -28
- package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.native.js +2 -30
- 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.map +1 -1
- package/dist/esm/fields/DatePicker/parts.mjs +11 -20
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +13 -22
- 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/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.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.native.js.map +1 -1
- package/dist/esm/fields/ImageField/index.native.js.map +1 -1
- 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.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.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.native.js.map +1 -1
- package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
- package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +66 -45
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +70 -48
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.mjs +3 -1
- package/dist/esm/fields/Select/shouldInlineChoices.mjs.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.native.js +3 -1
- package/dist/esm/fields/Select/shouldInlineChoices.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.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.mjs +4 -25
- package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.native.js +7 -29
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.mjs +8 -21
- package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js +8 -21
- 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/dateTimePickerLoader.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/sheetKeyboard.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.map +1 -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/choiceRowPress.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.mjs +14 -5
- package/dist/esm/shared/floatingList.mjs.map +1 -1
- package/dist/esm/shared/floatingList.native.js +16 -5
- package/dist/esm/shared/floatingList.native.js.map +1 -1
- 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/overlaySizeClass.native.js.map +1 -1
- package/dist/esm/shared/overlayStack.native.js.map +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/restoreRetries.native.js.map +1 -1
- package/dist/esm/shared/sheetNavigation.native.js.map +1 -1
- package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
- package/dist/esm/shared/systemControls.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/standardActions.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 -1
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +16 -0
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/echoContext.mjs +11 -0
- package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/echoContext.native.js +42 -0
- package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/index.mjs +213 -83
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +92 -17
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/panelWidth.mjs +63 -0
- package/dist/jsx/FloatingPanel/panelWidth.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/panelWidth.native.js +99 -0
- package/dist/jsx/FloatingPanel/panelWidth.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/pointAnchor.mjs +15 -5
- package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/pointAnchor.native.js +15 -5
- package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +58 -5
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +69 -4
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/jsx/InputParts/index.mjs +19 -1
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +19 -1
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/Wheel/NativeWheel.native.js +1 -1
- package/dist/jsx/Wheel/NativeWheel.native.js.map +1 -1
- package/dist/jsx/Wheel/index.mjs +2 -1
- package/dist/jsx/Wheel/index.mjs.map +1 -1
- package/dist/jsx/Wheel/index.native.js +4 -1
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/Wheel/wheelShared.mjs +6 -1
- package/dist/jsx/Wheel/wheelShared.mjs.map +1 -1
- package/dist/jsx/Wheel/wheelShared.native.js +7 -1
- package/dist/jsx/Wheel/wheelShared.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +1 -0
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +1 -0
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/catalog.mjs +2 -28
- package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/catalog.native.js +2 -30
- package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +11 -20
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +13 -22
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +66 -45
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +69 -47
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.mjs +3 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.mjs.map +1 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.native.js +3 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.mjs +4 -25
- package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.native.js +7 -29
- package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.mjs +8 -21
- package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js +8 -21
- package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/floatingList.mjs +14 -5
- package/dist/jsx/shared/floatingList.mjs.map +1 -1
- package/dist/jsx/shared/floatingList.native.js +15 -4
- package/dist/jsx/shared/floatingList.native.js.map +1 -1
- package/package.json +8 -8
- package/src/Button/index.tsx +22 -0
- package/src/FloatingPanel/FloatingPanel.echoStretch.spec.tsx +67 -0
- package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +193 -2
- package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +237 -0
- package/src/FloatingPanel/echoContext.ts +22 -0
- package/src/FloatingPanel/index.native.tsx +106 -9
- package/src/FloatingPanel/index.tsx +310 -102
- package/src/FloatingPanel/panelWidth.spec.ts +158 -0
- package/src/FloatingPanel/panelWidth.ts +122 -0
- package/src/FloatingPanel/panelWidthContract.spec.ts +10 -10
- package/src/FloatingPanel/pointAnchor.spec.ts +64 -2
- package/src/FloatingPanel/pointAnchor.ts +28 -3
- package/src/FloatingPanel/useFloatingPanel.spec.tsx +124 -4
- package/src/FloatingPanel/useFloatingPanel.ts +106 -33
- package/src/InputParts/index.tsx +26 -0
- package/src/Wheel/NativeWheel.native.tsx +1 -1
- package/src/Wheel/Wheel.spec.tsx +9 -0
- package/src/Wheel/index.tsx +12 -3
- package/src/Wheel/wheelShared.ts +6 -2
- package/src/fields/Combobox/index.tsx +1 -0
- package/src/fields/DatePicker/DatePicker.stories.tsx +3 -3
- package/src/fields/DatePicker/DatetimePicker.catalog.tsx +17 -45
- package/src/fields/DatePicker/DatetimePicker.native.tsx +3 -0
- package/src/fields/DatePicker/catalog.tsx +8 -39
- package/src/fields/DatePicker/index.native.tsx +3 -0
- package/src/fields/DatePicker/parts.tsx +13 -23
- package/src/fields/DatePicker/seamlessCover.spec.tsx +180 -0
- package/src/fields/DatePicker/touchWeb.spec.tsx +109 -167
- package/src/fields/Select/Select.containingBlock.spec.tsx +191 -0
- package/src/fields/Select/Select.stories.tsx +43 -0
- package/src/fields/Select/index.tsx +109 -45
- package/src/fields/Select/shouldInlineChoices.spec.ts +13 -0
- package/src/fields/Select/shouldInlineChoices.ts +6 -0
- package/src/fields/TimePicker/catalog.tsx +12 -33
- package/src/fields/TimePicker/index.native.tsx +2 -0
- package/src/fields/TimePicker/parts.tsx +6 -20
- package/src/index.ts +1 -0
- package/src/shared/floatingList.tsx +21 -5
- package/types/Button/index.d.ts.map +1 -1
- package/types/FloatingPanel/echoContext.d.ts +14 -0
- package/types/FloatingPanel/echoContext.d.ts.map +1 -0
- package/types/FloatingPanel/index.d.ts +59 -0
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +9 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/panelWidth.d.ts +71 -0
- package/types/FloatingPanel/panelWidth.d.ts.map +1 -0
- package/types/FloatingPanel/pointAnchor.d.ts +8 -1
- package/types/FloatingPanel/pointAnchor.d.ts.map +1 -1
- package/types/FloatingPanel/useFloatingPanel.d.ts +33 -2
- package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/Wheel/index.d.ts.map +1 -1
- package/types/Wheel/wheelShared.d.ts +2 -1
- package/types/Wheel/wheelShared.d.ts.map +1 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +6 -0
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.native.d.ts +3 -0
- package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
- package/types/fields/DatePicker/catalog.d.ts +6 -0
- package/types/fields/DatePicker/catalog.d.ts.map +1 -1
- package/types/fields/DatePicker/index.native.d.ts +3 -0
- package/types/fields/DatePicker/index.native.d.ts.map +1 -1
- package/types/fields/DatePicker/parts.d.ts +5 -7
- package/types/fields/DatePicker/parts.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts +8 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Select/shouldInlineChoices.d.ts +5 -1
- package/types/fields/Select/shouldInlineChoices.d.ts.map +1 -1
- package/types/fields/TimePicker/catalog.d.ts +7 -1
- package/types/fields/TimePicker/catalog.d.ts.map +1 -1
- package/types/fields/TimePicker/index.native.d.ts +2 -0
- package/types/fields/TimePicker/index.native.d.ts.map +1 -1
- package/types/fields/TimePicker/parts.d.ts +1 -3
- package/types/fields/TimePicker/parts.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/shared/floatingList.d.ts +5 -1
- package/types/shared/floatingList.d.ts.map +1 -1
- package/dist/cjs/shared/touchWebPicker.cjs +0 -136
- package/dist/cjs/shared/touchWebPicker.native.js +0 -154
- package/dist/cjs/shared/touchWebPicker.native.js.map +0 -1
- package/dist/esm/shared/touchWebPicker.mjs +0 -105
- package/dist/esm/shared/touchWebPicker.mjs.map +0 -1
- package/dist/esm/shared/touchWebPicker.native.js +0 -120
- package/dist/esm/shared/touchWebPicker.native.js.map +0 -1
- package/dist/jsx/shared/touchWebPicker.mjs +0 -105
- package/dist/jsx/shared/touchWebPicker.mjs.map +0 -1
- package/dist/jsx/shared/touchWebPicker.native.js +0 -154
- package/dist/jsx/shared/touchWebPicker.native.js.map +0 -1
- package/src/shared/touchWebPicker.spec.ts +0 -98
- package/src/shared/touchWebPicker.tsx +0 -158
- package/types/shared/touchWebPicker.d.ts +0 -40
- package/types/shared/touchWebPicker.d.ts.map +0 -1
|
@@ -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","floatingList_exports","ScrollArrow","SyncFocusToOpen","clampDropdownRadius","scrollArrowThreshold","module","exports","import_jsx_runtime","require","import_theme","import_react","import_react2","import_theme2","import_tamagui","import_InputParts","dropdownMaxRadiusTokenNum","fieldRadius","startsWith","num","Number","parseInt","slice","param","open","setFocused","FocusContext","useStyledContext","useEffect","direction","scrollRef","visible","arrowScrollDirRef","isUp","animationFrameRef","useRef","lastTimeRef","resumeTimerRef","hoveringRef","activeRef","selfScrollingRef","resumeDelay","stopLoop","useCallback","current","cancelAnimationFrame","startLoop","performance","now","tick","tick1","el","elapsed","px","Math","min","max","scrollTop","scrollHeight","clientHeight","requestAnimationFrame","openTimestampRef","handlePointerEnter","wasOverOnOpen","clearTimeout","setTimeout","handlePointerLeave","onScroll","onScroll2","addEventListener","passive","removeEventListener"],"sources":["../../../src/shared/floatingList.tsx"],"sourcesContent":[null],"mappings":"AAAA,YAAS;;AACT,IAAAA,SAAyB,GAAAC,MAAa,CAAAC,cAAW;AACjD,IAAAC,gBAAS,GAAAF,MAAe,CAAAG,wBAAmB;AAC3C,IAAAC,iBAAS,GAAAJ,MAAA,CAAAK,mBAAwB;AACjC,IAAAC,YAAS,GAAAN,MAAY,CAAAO,SAAA,CAAAC,cAAA;AACrB,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAAC,GAAA,KAAoB;
|
|
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","floatingList_exports","ScrollArrow","SyncFocusToOpen","clampDropdownRadius","scrollArrowThreshold","module","exports","import_jsx_runtime","require","import_theme","import_react","import_react2","import_theme2","import_tamagui","import_InputParts","dropdownMaxRadiusTokenNum","fieldRadius","startsWith","num","Number","parseInt","slice","param","open","setFocused","FocusContext","useStyledContext","useEffect","direction","scrollRef","visible","arrowScrollDirRef","topOffset","bottomOffset","isUp","animationFrameRef","useRef","lastTimeRef","resumeTimerRef","hoveringRef","activeRef","selfScrollingRef","resumeDelay","stopLoop","useCallback","current","cancelAnimationFrame","startLoop","performance","now","tick","tick1","el","elapsed","px","Math","min","max","scrollTop","scrollHeight","clientHeight","requestAnimationFrame","openTimestampRef","handlePointerEnter","wasOverOnOpen","clearTimeout","setTimeout","handlePointerLeave","onScroll","onScroll2","addEventListener","passive","removeEventListener","panelFill","setPanelFill","useState","getComputedStyle","fill","backgroundColor"],"sources":["../../../src/shared/floatingList.tsx"],"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.72.0",
|
|
4
4
|
"description": "Cross-platform form components with URL state management",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cross-platform",
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@floating-ui/react": "^0.27.20",
|
|
60
|
-
"@multiplatform.one/platform": "^7.
|
|
61
|
-
"@multiplatform.one/router": "^7.
|
|
62
|
-
"@multiplatform.one/table-primitives": "^7.
|
|
63
|
-
"@multiplatform.one/theme": "^7.
|
|
60
|
+
"@multiplatform.one/platform": "^7.72.0",
|
|
61
|
+
"@multiplatform.one/router": "^7.72.0",
|
|
62
|
+
"@multiplatform.one/table-primitives": "^7.72.0",
|
|
63
|
+
"@multiplatform.one/theme": "^7.72.0",
|
|
64
64
|
"@phosphor-icons/react": "^2.1.10",
|
|
65
65
|
"@tamagui/get-font-sized": "2.7.6",
|
|
66
66
|
"@tamagui/get-token": "2.7.6",
|
|
@@ -80,9 +80,9 @@
|
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"@expo/ui": "~55.0.17",
|
|
83
|
-
"@multiplatform.one/config": "7.
|
|
84
|
-
"@multiplatform.one/storybook": "7.
|
|
85
|
-
"@multiplatform.one/test-utils": "7.
|
|
83
|
+
"@multiplatform.one/config": "7.72.0",
|
|
84
|
+
"@multiplatform.one/storybook": "7.72.0",
|
|
85
|
+
"@multiplatform.one/test-utils": "7.72.0",
|
|
86
86
|
"@tamagui/build": "2.7.6",
|
|
87
87
|
"@tamagui/config": "2.7.6",
|
|
88
88
|
"@tamagui/vite-plugin": "2.7.6",
|
package/src/Button/index.tsx
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
createElement,
|
|
8
8
|
isValidElement,
|
|
9
9
|
useCallback,
|
|
10
|
+
useEffect,
|
|
10
11
|
useId,
|
|
11
12
|
useState,
|
|
12
13
|
type ComponentType,
|
|
@@ -72,6 +73,7 @@ import { formatActionLabel } from "../actionLabel";
|
|
|
72
73
|
import { formButtonColors, formCommonColors } from "../shared/colorRamps";
|
|
73
74
|
import { warnBareDisabled, warnPositiveTabIndex, warnSizeRecipeEscape } from "../shared/devWarn";
|
|
74
75
|
import { useControlGrouped } from "../shared/groupContext";
|
|
76
|
+
import { useInPanelEcho, usePanelTriggerRadiusReporter } from "../FloatingPanel/echoContext";
|
|
75
77
|
import { loadGlassView } from "./glass";
|
|
76
78
|
import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
|
|
77
79
|
import { useIconButtonGroupGround, useIconButtonGroupMember } from "./iconButtonGroupContext";
|
|
@@ -635,6 +637,17 @@ export function Button({
|
|
|
635
637
|
: undefined;
|
|
636
638
|
const paintedRadius = resolveControlRadius(recipe, radiusStop ?? "medium");
|
|
637
639
|
const innerGap = paintedRadius.gap;
|
|
640
|
+
// LC-112 seamless cover (FZ-8438): a native menu covering this button
|
|
641
|
+
// repeats its arc, and the button's echo inside that menu draws no chrome.
|
|
642
|
+
const inPanelEcho = useInPanelEcho();
|
|
643
|
+
const reportRadius = usePanelTriggerRadiusReporter();
|
|
644
|
+
// A circle reports no cap: the menu takes half its short side.
|
|
645
|
+
const reportedRadius = circular ? Number.POSITIVE_INFINITY : paintedRadius.radius;
|
|
646
|
+
useEffect(() => {
|
|
647
|
+
if (reportRadius && !inPanelEcho && !Number.isNaN(reportedRadius)) {
|
|
648
|
+
reportRadius(reportedRadius);
|
|
649
|
+
}
|
|
650
|
+
}, [reportRadius, inPanelEcho, reportedRadius]);
|
|
638
651
|
// The one Skeleton (forms), at the button's own recipe height.
|
|
639
652
|
const boneHeight = nested ? knobProps.nestedControl.px : recipe.height;
|
|
640
653
|
if (skeleton) {
|
|
@@ -1220,6 +1233,15 @@ export function Button({
|
|
|
1220
1233
|
height: "100%",
|
|
1221
1234
|
}
|
|
1222
1235
|
: undefined)}
|
|
1236
|
+
{...(inPanelEcho
|
|
1237
|
+
? {
|
|
1238
|
+
borderColor: "transparent",
|
|
1239
|
+
backgroundColor: "transparent",
|
|
1240
|
+
elevation: undefined,
|
|
1241
|
+
shadowColor: "transparent",
|
|
1242
|
+
shadowOpacity: 0,
|
|
1243
|
+
}
|
|
1244
|
+
: undefined)}
|
|
1223
1245
|
{...(resolvedRole ? { "data-mp-action-role": resolvedRole } : undefined)}
|
|
1224
1246
|
{...(tier ? { "data-mp-tier": tier } : undefined)}
|
|
1225
1247
|
{...(iconButton
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-112 r3 (FZ-8438): when a consumer sets `panelWidth` and the panel opens
|
|
3
|
+
* wider than its field, the field's echo grows to the panel's end edge, so
|
|
4
|
+
* the value isn't cut short above rows that show it whole. A button echo, or
|
|
5
|
+
* an unset width, keeps the trigger's box.
|
|
6
|
+
*/
|
|
7
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
8
|
+
import { placeEchoOverTrigger } from "./index";
|
|
9
|
+
|
|
10
|
+
function panel(field: boolean) {
|
|
11
|
+
const el = document.createElement("div");
|
|
12
|
+
const row = document.createElement("div");
|
|
13
|
+
row.setAttribute("data-fp-trigger-row", "");
|
|
14
|
+
row.style.width = "260px";
|
|
15
|
+
const visual = document.createElement("div");
|
|
16
|
+
const snapshot = document.createElement("div");
|
|
17
|
+
snapshot.style.width = "260px";
|
|
18
|
+
snapshot.appendChild(document.createElement(field ? "input" : "span"));
|
|
19
|
+
visual.appendChild(snapshot);
|
|
20
|
+
row.appendChild(visual);
|
|
21
|
+
el.appendChild(row);
|
|
22
|
+
document.body.appendChild(el);
|
|
23
|
+
return { el, row, snapshot };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const geometry = { triggerLeft: 16, triggerRight: 276, panelLeft: 16, panelWidth: 360 };
|
|
27
|
+
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
document.body.replaceChildren();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe("placeEchoOverTrigger stretch (LC-112 r3)", () => {
|
|
33
|
+
it("a field's echo grows from the field's start edge to the panel's end", () => {
|
|
34
|
+
const { el, row, snapshot } = panel(true);
|
|
35
|
+
placeEchoOverTrigger(el, geometry, { stretch: true });
|
|
36
|
+
expect(row.style.width).toBe("360px");
|
|
37
|
+
expect(snapshot.style.width).toBe("100%");
|
|
38
|
+
expect(row.style.translate).toBe("");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("a panel slid to the start margin grows the echo only past the field's start", () => {
|
|
42
|
+
const { el, row } = panel(true);
|
|
43
|
+
placeEchoOverTrigger(el, { ...geometry, panelLeft: 10, panelWidth: 1420 }, { stretch: true });
|
|
44
|
+
expect(row.style.translate).toBe("6px 0");
|
|
45
|
+
expect(row.style.width).toBe("1414px");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("an unset panelWidth keeps the trigger's box", () => {
|
|
49
|
+
const { el, row } = panel(true);
|
|
50
|
+
placeEchoOverTrigger(el, geometry);
|
|
51
|
+
expect(row.style.width).toBe("260px");
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("a button echo keeps its box, so a centred label never moves", () => {
|
|
55
|
+
const { el, row } = panel(false);
|
|
56
|
+
placeEchoOverTrigger(el, geometry, { stretch: true });
|
|
57
|
+
expect(row.style.width).toBe("260px");
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("a panel back at the trigger's width shrinks a stretched echo again", () => {
|
|
61
|
+
const { el, row, snapshot } = panel(true);
|
|
62
|
+
placeEchoOverTrigger(el, geometry, { stretch: true });
|
|
63
|
+
placeEchoOverTrigger(el, { ...geometry, panelWidth: 260 }, { stretch: true });
|
|
64
|
+
expect(row.style.width).toBe("260px");
|
|
65
|
+
expect(snapshot.style.width).toBe("");
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -7,9 +7,12 @@ import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
|
7
7
|
import { act } from "@testing-library/react";
|
|
8
8
|
import { useState, type ReactNode } from "react";
|
|
9
9
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
10
|
-
import { Text, XStack, YStack } from "tamagui";
|
|
10
|
+
import { Text, XStack, YStack, getTokens, getVariableValue } from "tamagui";
|
|
11
|
+
import { Button } from "../Button";
|
|
12
|
+
import { Input as InputParts } from "../InputParts";
|
|
11
13
|
import { OverlayStackProvider } from "../shared/overlayStack";
|
|
12
14
|
import { MENU_MIN_WIDTH, type CompactFace } from "./compactFace";
|
|
15
|
+
import type { PanelWidth } from "./panelWidth";
|
|
13
16
|
import { FloatingPanel } from "./index.native";
|
|
14
17
|
import { panelViewportPadding } from "./useFloatingPanel";
|
|
15
18
|
|
|
@@ -49,13 +52,22 @@ afterEach(() => {
|
|
|
49
52
|
vi.useRealTimers();
|
|
50
53
|
});
|
|
51
54
|
|
|
52
|
-
function Menu({
|
|
55
|
+
function Menu({
|
|
56
|
+
face,
|
|
57
|
+
attach = false,
|
|
58
|
+
width,
|
|
59
|
+
}: {
|
|
60
|
+
face?: CompactFace;
|
|
61
|
+
attach?: boolean;
|
|
62
|
+
width?: PanelWidth;
|
|
63
|
+
}) {
|
|
53
64
|
const [open, setOpen] = useState(false);
|
|
54
65
|
return (
|
|
55
66
|
<FloatingPanel
|
|
56
67
|
open={open}
|
|
57
68
|
onOpenChange={setOpen}
|
|
58
69
|
compactFace={face}
|
|
70
|
+
{...(width === undefined ? null : { panelWidth: width })}
|
|
59
71
|
{...(attach ? { anchorMode: "attach" as const, triggerEcho: false } : null)}
|
|
60
72
|
triggerSizing="content"
|
|
61
73
|
contentPadding="none"
|
|
@@ -207,6 +219,134 @@ describe("FloatingPanel native menu face (FZ-7830)", () => {
|
|
|
207
219
|
});
|
|
208
220
|
});
|
|
209
221
|
|
|
222
|
+
function IconMenu() {
|
|
223
|
+
const [open, setOpen] = useState(false);
|
|
224
|
+
return (
|
|
225
|
+
<FloatingPanel
|
|
226
|
+
open={open}
|
|
227
|
+
onOpenChange={setOpen}
|
|
228
|
+
compactFace="menu"
|
|
229
|
+
anchorMode="cover-trigger"
|
|
230
|
+
triggerEcho={false}
|
|
231
|
+
coverAlign="auto"
|
|
232
|
+
triggerSizing="content"
|
|
233
|
+
contentPadding="none"
|
|
234
|
+
trigger={<Text>◐</Text>}
|
|
235
|
+
triggerA11y={{ label: "Appearance" }}
|
|
236
|
+
>
|
|
237
|
+
<Text>System</Text>
|
|
238
|
+
</FloatingPanel>
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function ButtonMenu() {
|
|
243
|
+
const [open, setOpen] = useState(false);
|
|
244
|
+
return (
|
|
245
|
+
<FloatingPanel
|
|
246
|
+
open={open}
|
|
247
|
+
onOpenChange={setOpen}
|
|
248
|
+
compactFace="menu"
|
|
249
|
+
contentPadding="none"
|
|
250
|
+
trigger={<Button data-testid="pill">Status: All</Button>}
|
|
251
|
+
triggerA11y={{ label: "Filter status" }}
|
|
252
|
+
>
|
|
253
|
+
<Text>Open</Text>
|
|
254
|
+
</FloatingPanel>
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function FieldMenu() {
|
|
259
|
+
const [open, setOpen] = useState(false);
|
|
260
|
+
return (
|
|
261
|
+
<FloatingPanel
|
|
262
|
+
open={open}
|
|
263
|
+
onOpenChange={setOpen}
|
|
264
|
+
compactFace="menu"
|
|
265
|
+
contentPadding="none"
|
|
266
|
+
trigger={
|
|
267
|
+
<InputParts>
|
|
268
|
+
<InputParts.Box data-testid="field-box">
|
|
269
|
+
<Text>United States</Text>
|
|
270
|
+
</InputParts.Box>
|
|
271
|
+
</InputParts>
|
|
272
|
+
}
|
|
273
|
+
triggerA11y={{ label: "Country" }}
|
|
274
|
+
>
|
|
275
|
+
<Text>Canada</Text>
|
|
276
|
+
</FloatingPanel>
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const frame = () =>
|
|
281
|
+
document.querySelector<HTMLElement>('[data-testid="floating-panel-menu-surface"]');
|
|
282
|
+
const corners = (el: Element) =>
|
|
283
|
+
Array.from(el.classList)
|
|
284
|
+
.filter((c) => /^_b[tb][lr]r-/.test(c))
|
|
285
|
+
.sort();
|
|
286
|
+
const radiusAtoms = (px: number) =>
|
|
287
|
+
[`_bblr-${px}px`, `_bbrr-${px}px`, `_btlr-${px}px`, `_btrr-${px}px`].sort();
|
|
288
|
+
|
|
289
|
+
describe("LC-112 seamless cover on native (FZ-8438)", () => {
|
|
290
|
+
it("opens an icon trigger's menu ON the button from its top trailing corner (rv_d86cc201997dffd4)", () => {
|
|
291
|
+
trigger = { x: 330, y: 60, width: 44, height: 44 };
|
|
292
|
+
const result = renderWithProviders(<IconMenu />);
|
|
293
|
+
tap(result.getByRole("button", { name: "Appearance" }));
|
|
294
|
+
const panel = menu() as HTMLElement;
|
|
295
|
+
layout(panel, MENU_MIN_WIDTH, 180);
|
|
296
|
+
expect(panel.style.top).toBe(`${trigger.y}px`);
|
|
297
|
+
expect(panel.style.left).toBe(`${trigger.x + trigger.width - MENU_MIN_WIDTH}px`);
|
|
298
|
+
expect(echo()).toBeNull();
|
|
299
|
+
expect(sheet()).toBeNull();
|
|
300
|
+
expect(corners(frame() as HTMLElement)).toEqual(radiusAtoms(22));
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
it("keeps the shadow on an unclipped frame and clips inside it (FZ-8414)", () => {
|
|
304
|
+
const result = renderWithProviders(<IconMenu />);
|
|
305
|
+
tap(result.getByRole("button", { name: "Appearance" }));
|
|
306
|
+
const outer = frame() as HTMLElement;
|
|
307
|
+
expect(outer.className).not.toMatch(/(?:^| )_ox-hidden|_ov-hidden|_o-hidden/);
|
|
308
|
+
expect(getComputedStyle(outer).overflow).not.toBe("hidden");
|
|
309
|
+
const inner = outer.firstElementChild as HTMLElement;
|
|
310
|
+
expect(inner.className).toMatch(/hidden/);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
it("echoes a field with no border or fill of its own and repeats the field's arc", () => {
|
|
314
|
+
trigger = { x: 20, y: 240, width: 300, height: 44 };
|
|
315
|
+
const result = renderWithProviders(<FieldMenu />);
|
|
316
|
+
const live = result.getByTestId("field-box");
|
|
317
|
+
const atom = corners(live).find((c) => c.startsWith("_btlr-")) as string;
|
|
318
|
+
expect(atom).toBeTruthy();
|
|
319
|
+
const token = atom.match(/^_btlr-t-radius-(.+)$/);
|
|
320
|
+
const drawn = token
|
|
321
|
+
? Number(getVariableValue((getTokens().radius as Record<string, unknown>)[`$${token[1]}`]))
|
|
322
|
+
: Number(atom.match(/^_btlr-([\d.]+)px$/)?.[1]);
|
|
323
|
+
tap(result.getByRole("button", { name: "Country" }));
|
|
324
|
+
const row = echo() as HTMLElement;
|
|
325
|
+
expect(row).not.toBeNull();
|
|
326
|
+
const box = row.querySelector('[data-testid="field-box"]') as HTMLElement;
|
|
327
|
+
expect(box.className).toMatch(/_bbc-transparent/);
|
|
328
|
+
expect(box.className).toMatch(/_bg-transparent/);
|
|
329
|
+
expect(live.className).not.toMatch(/_bbc-transparent/);
|
|
330
|
+
expect(corners(frame() as HTMLElement)).toEqual(radiusAtoms(Math.min(drawn, 22)));
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
it("echoes a labelled Button trigger with no border or fill of its own", () => {
|
|
334
|
+
trigger = { x: 20, y: 240, width: 140, height: 44 };
|
|
335
|
+
const result = renderWithProviders(<ButtonMenu />);
|
|
336
|
+
const live = result.getByTestId("pill");
|
|
337
|
+
tap(result.getByRole("button", { name: "Filter status" }));
|
|
338
|
+
const row = echo() as HTMLElement;
|
|
339
|
+
expect(row).not.toBeNull();
|
|
340
|
+
// The echo is the trigger's own box at the start edge, not the menu's width.
|
|
341
|
+
expect(row.style.width).toBe("140px");
|
|
342
|
+
expect(row.style.alignSelf).toBe("flex-start");
|
|
343
|
+
const pill = row.querySelector('[data-testid="pill"]') as HTMLElement;
|
|
344
|
+
expect(pill.className).toMatch(/_bbc-transparent|_btc-transparent/);
|
|
345
|
+
expect(pill.className).toMatch(/_bg-transparent/);
|
|
346
|
+
expect(live.className).not.toBe(pill.className);
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
|
|
210
350
|
/** The SHC account menu's shape: an avatar-sized trigger over rows that fill their width. */
|
|
211
351
|
function AccountMenu() {
|
|
212
352
|
const [open, setOpen] = useState(false);
|
|
@@ -263,3 +403,54 @@ describe("FloatingPanel native menu face width (FZ-8220)", () => {
|
|
|
263
403
|
expect(menu()?.style.minWidth).toBe("320px");
|
|
264
404
|
});
|
|
265
405
|
});
|
|
406
|
+
|
|
407
|
+
describe("FloatingPanel native menu face panelWidth (LC-112, FZ-8438 r3)", () => {
|
|
408
|
+
const room = 390 - 2 * panelViewportPadding;
|
|
409
|
+
const open = (width?: PanelWidth) => {
|
|
410
|
+
const result = renderWithProviders(<Menu face="menu" width={width} />);
|
|
411
|
+
tap(result.getByRole("button", { name: "Stack actions" }));
|
|
412
|
+
return menu() as HTMLElement;
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
it('"content" is the default: the 250pt pull-down floor, up to the room', () => {
|
|
416
|
+
const panel = open();
|
|
417
|
+
expect(panel.style.minWidth).toBe(`${MENU_MIN_WIDTH}px`);
|
|
418
|
+
expect(panel.style.maxWidth).toBe(`${room}px`);
|
|
419
|
+
expect(panel.style.width).toBe("");
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
it('"trigger" is exactly the trigger\'s width', () => {
|
|
423
|
+
const panel = open("trigger");
|
|
424
|
+
expect([panel.style.minWidth, panel.style.width, panel.style.maxWidth]).toEqual([
|
|
425
|
+
"120px",
|
|
426
|
+
"120px",
|
|
427
|
+
"120px",
|
|
428
|
+
]);
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
it('"screen" from a trigger in the gutter spans the gutters, start edge on the trigger\'s', () => {
|
|
432
|
+
const panel = open("screen");
|
|
433
|
+
const gutters = 390 - 2 * trigger.x;
|
|
434
|
+
expect(panel.style.width).toBe(`${gutters}px`);
|
|
435
|
+
layout(panel, gutters, 180);
|
|
436
|
+
expect(panel.style.left).toBe(`${trigger.x}px`);
|
|
437
|
+
expect(panel.style.top).toBe(`${trigger.y}px`);
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
it('"screen" from a trigger deep in the row fills the room, top edge on the trigger\'s', () => {
|
|
441
|
+
trigger = { x: 186, y: 240, width: 120, height: 44 };
|
|
442
|
+
const panel = open("screen");
|
|
443
|
+
expect(panel.style.width).toBe(`${room}px`);
|
|
444
|
+
layout(panel, room, 180);
|
|
445
|
+
expect(panel.style.left).toBe(`${panelViewportPadding}px`);
|
|
446
|
+
expect(panel.style.top).toBe(`${trigger.y}px`);
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
it("a number is a fixed width, capped at the room", () => {
|
|
450
|
+
expect(open(300).style.width).toBe("300px");
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it("a number wider than the room stops at the margins", () => {
|
|
454
|
+
expect(open(900).style.width).toBe(`${room}px`);
|
|
455
|
+
});
|
|
456
|
+
});
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-112 seamless cover (FZ-8438, Clay's rv_a07d4308a6c445b6 and
|
|
3
|
+
* rv_0ea65e640a0ef261 notes; rv_d86cc201997dffd4 for icon triggers). An open
|
|
4
|
+
* panel is ONE surface laid exactly over its trigger: same top edge, left
|
|
5
|
+
* edge and corner arc, the trigger's content echoed in place with no border,
|
|
6
|
+
* fill or divider of its own, drawn above the trigger.
|
|
7
|
+
*/
|
|
8
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
9
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
10
|
+
import { fireEvent, waitFor, within } from "@testing-library/react";
|
|
11
|
+
import { useState } from "react";
|
|
12
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
13
|
+
import { Text } from "tamagui";
|
|
14
|
+
import { Button } from "../Button";
|
|
15
|
+
import { FloatingPanel } from "./index";
|
|
16
|
+
|
|
17
|
+
type Rect = { x: number; y: number; width: number; height: number };
|
|
18
|
+
|
|
19
|
+
function measure(trigger: Rect, panelWidth = 240) {
|
|
20
|
+
const original = HTMLElement.prototype.getBoundingClientRect;
|
|
21
|
+
const rect = {
|
|
22
|
+
...trigger,
|
|
23
|
+
top: trigger.y,
|
|
24
|
+
left: trigger.x,
|
|
25
|
+
right: trigger.x + trigger.width,
|
|
26
|
+
bottom: trigger.y + trigger.height,
|
|
27
|
+
toJSON: () => ({}),
|
|
28
|
+
};
|
|
29
|
+
vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
|
|
30
|
+
function (this: HTMLElement) {
|
|
31
|
+
if (this.hasAttribute("data-fp-reference") || this.dataset.testid === "field") return rect;
|
|
32
|
+
return original.call(this);
|
|
33
|
+
},
|
|
34
|
+
);
|
|
35
|
+
vi.spyOn(HTMLElement.prototype, "offsetWidth", "get").mockImplementation(
|
|
36
|
+
function (this: HTMLElement) {
|
|
37
|
+
return this.hasAttribute("data-fp-panel") ? panelWidth : 0;
|
|
38
|
+
},
|
|
39
|
+
);
|
|
40
|
+
vi.spyOn(HTMLElement.prototype, "scrollHeight", "get").mockImplementation(
|
|
41
|
+
function (this: HTMLElement) {
|
|
42
|
+
return this.hasAttribute("data-fp-panel") ? 160 : 0;
|
|
43
|
+
},
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** A field the way a browser paints it: border, fill and a 10px arc. */
|
|
48
|
+
function Field({ radius }: { radius: number }) {
|
|
49
|
+
return (
|
|
50
|
+
<div
|
|
51
|
+
data-testid="field"
|
|
52
|
+
role="combobox"
|
|
53
|
+
aria-expanded={false}
|
|
54
|
+
tabIndex={0}
|
|
55
|
+
style={{
|
|
56
|
+
borderTopLeftRadius: `${radius}px`,
|
|
57
|
+
borderRadius: `${radius}px`,
|
|
58
|
+
border: "1px solid rgb(200, 200, 200)",
|
|
59
|
+
borderBottom: "1px solid rgb(200, 200, 200)",
|
|
60
|
+
backgroundColor: "rgb(250, 250, 250)",
|
|
61
|
+
boxShadow: "0 1px 2px rgba(0, 0, 0, 0.1)",
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
Mar 5, 2026
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function FieldPanel({ radius = 10 }: { radius?: number }) {
|
|
70
|
+
const [open, setOpen] = useState(false);
|
|
71
|
+
return (
|
|
72
|
+
<FloatingPanel
|
|
73
|
+
open={open}
|
|
74
|
+
onOpenChange={setOpen}
|
|
75
|
+
contentPadding="none"
|
|
76
|
+
trigger={<Field radius={radius} />}
|
|
77
|
+
>
|
|
78
|
+
<Text>March 2026</Text>
|
|
79
|
+
</FloatingPanel>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function IconPanel({ align = "auto" }: { align?: "start" | "auto" }) {
|
|
84
|
+
const [open, setOpen] = useState(false);
|
|
85
|
+
return (
|
|
86
|
+
<FloatingPanel
|
|
87
|
+
open={open}
|
|
88
|
+
onOpenChange={setOpen}
|
|
89
|
+
anchorMode="cover-trigger"
|
|
90
|
+
triggerEcho={false}
|
|
91
|
+
coverAlign={align}
|
|
92
|
+
widthMode="fit-content"
|
|
93
|
+
triggerSizing="content"
|
|
94
|
+
trigger={<Button aria-label="Appearance">◐</Button>}
|
|
95
|
+
>
|
|
96
|
+
<Text>System</Text>
|
|
97
|
+
</FloatingPanel>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const corners = (el: Element) =>
|
|
102
|
+
Array.from(el.classList)
|
|
103
|
+
.filter((c) => /^_b[tb][lr]r-/.test(c))
|
|
104
|
+
.sort();
|
|
105
|
+
|
|
106
|
+
const radiusAtoms = (px: number) =>
|
|
107
|
+
[`_bblr-${px}px`, `_bbrr-${px}px`, `_btlr-${px}px`, `_btrr-${px}px`].sort();
|
|
108
|
+
|
|
109
|
+
async function openField(result: ReturnType<typeof renderWithProviders>) {
|
|
110
|
+
fireEvent.click(result.getByTestId("field"), { detail: 0 });
|
|
111
|
+
const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
|
|
112
|
+
return panel;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
afterEach(() => {
|
|
116
|
+
vi.restoreAllMocks();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
describe("LC-112 seamless cover: one surface over the field (FZ-8438)", () => {
|
|
120
|
+
const field = { x: 16, y: 42, width: 400, height: 40 };
|
|
121
|
+
|
|
122
|
+
it("lays the panel's top and start edges on the field's", async () => {
|
|
123
|
+
measure(field);
|
|
124
|
+
const result = renderWithProviders(<FieldPanel />);
|
|
125
|
+
const panel = await openField(result);
|
|
126
|
+
await waitFor(() => expect(panel.style.top).toBe(`${field.y}px`));
|
|
127
|
+
expect(panel.style.left).toBe(`${field.x}px`);
|
|
128
|
+
const echo = panel.querySelector<HTMLElement>("[data-fp-trigger-row]");
|
|
129
|
+
expect(echo?.style.width).toBe(`${field.width}px`);
|
|
130
|
+
expect(echo?.style.height).toBe(`${field.height}px`);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("draws the field's own arc at all four corners", async () => {
|
|
134
|
+
measure(field);
|
|
135
|
+
const result = renderWithProviders(<FieldPanel radius={10} />);
|
|
136
|
+
const panel = await openField(result);
|
|
137
|
+
await waitFor(() => expect(corners(panel)).toEqual(radiusAtoms(10)));
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("keeps the field's arc past the container cap (full preset, 20px on a 40px field)", async () => {
|
|
141
|
+
measure(field);
|
|
142
|
+
const result = renderWithProviders(
|
|
143
|
+
<Preset overrides={{ borderRadius: "full" }}>
|
|
144
|
+
<FieldPanel radius={50} />
|
|
145
|
+
</Preset>,
|
|
146
|
+
);
|
|
147
|
+
const panel = await openField(result);
|
|
148
|
+
await waitFor(() => expect(corners(panel)).toEqual(radiusAtoms(20)));
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it("echoes the field with no border, fill, shadow or divider of its own", async () => {
|
|
152
|
+
measure(field);
|
|
153
|
+
const result = renderWithProviders(<FieldPanel />);
|
|
154
|
+
const panel = await openField(result);
|
|
155
|
+
const frame = await waitFor(() => {
|
|
156
|
+
const found = panel.querySelector<HTMLElement>("[data-fp-echo-frame]");
|
|
157
|
+
expect(found).not.toBeNull();
|
|
158
|
+
return found as HTMLElement;
|
|
159
|
+
});
|
|
160
|
+
expect(frame.textContent).toBe("Mar 5, 2026");
|
|
161
|
+
expect(frame.style.getPropertyValue("border-color")).toBe("transparent");
|
|
162
|
+
expect(frame.style.getPropertyPriority("border-color")).toBe("important");
|
|
163
|
+
expect(frame.style.getPropertyValue("background-color")).toBe("transparent");
|
|
164
|
+
expect(frame.style.getPropertyValue("box-shadow")).toBe("none");
|
|
165
|
+
const bottom = getComputedStyle(frame).borderBottomColor;
|
|
166
|
+
expect(["transparent", "rgba(0, 0, 0, 0)"]).toContain(bottom);
|
|
167
|
+
// Layout keeps the field's widths, so the echoed text sits where it did.
|
|
168
|
+
expect(getComputedStyle(frame).borderBottomWidth).toBe("1px");
|
|
169
|
+
const row = panel.querySelector<HTMLElement>("[data-fp-trigger-row]") as HTMLElement;
|
|
170
|
+
expect(row.style.backgroundColor).toBe(getComputedStyle(panel).backgroundColor);
|
|
171
|
+
// The live field keeps its chrome; only the echo drops it.
|
|
172
|
+
expect(result.getByTestId("field").style.backgroundColor).toBe("rgb(250, 250, 250)");
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it("draws above the field: a fixed, stacked layer later in the document", async () => {
|
|
176
|
+
measure(field);
|
|
177
|
+
const result = renderWithProviders(<FieldPanel />);
|
|
178
|
+
const panel = await openField(result);
|
|
179
|
+
await waitFor(() => expect(panel.style.top).toBe(`${field.y}px`));
|
|
180
|
+
expect(panel.style.position).toBe("fixed");
|
|
181
|
+
expect(Number(panel.style.zIndex)).toBeGreaterThan(0);
|
|
182
|
+
const live = result.getByTestId("field");
|
|
183
|
+
expect(live.compareDocumentPosition(panel) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
|
|
184
|
+
expect(live.contains(panel)).toBe(false);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
describe("LC-112 icon trigger: the menu opens on its button (rv_d86cc201997dffd4)", () => {
|
|
189
|
+
it("opens from the button's top trailing corner at the end edge, with no echo row", async () => {
|
|
190
|
+
const viewportWidth = document.documentElement.clientWidth || window.innerWidth;
|
|
191
|
+
const button = { x: viewportWidth - 16 - 44, y: 12, width: 44, height: 44 };
|
|
192
|
+
measure(button, 200);
|
|
193
|
+
const result = renderWithProviders(<IconPanel />);
|
|
194
|
+
fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
|
|
195
|
+
const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
|
|
196
|
+
await waitFor(() => expect(panel.style.top).toBe(`${button.y}px`));
|
|
197
|
+
expect(panel.style.left).toBe(`${button.x + button.width - 200}px`);
|
|
198
|
+
expect(panel.style.transformOrigin).toBe("top right");
|
|
199
|
+
expect(panel.querySelector("[data-fp-trigger-row]")).toBeNull();
|
|
200
|
+
expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it("opens from the button's top leading corner where that fits", async () => {
|
|
204
|
+
const button = { x: 16, y: 12, width: 44, height: 44 };
|
|
205
|
+
measure(button, 200);
|
|
206
|
+
const result = renderWithProviders(<IconPanel />);
|
|
207
|
+
fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
|
|
208
|
+
const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
|
|
209
|
+
await waitFor(() => expect(panel.style.top).toBe(`${button.y}px`));
|
|
210
|
+
expect(panel.style.left).toBe(`${button.x}px`);
|
|
211
|
+
expect(panel.style.transformOrigin).toBe("top left");
|
|
212
|
+
expect(within(panel).queryByRole("button", { name: "Appearance" })).toBeNull();
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it("slides up over its button near the bottom edge instead of opening a sheet", async () => {
|
|
216
|
+
const button = { x: 16, y: window.innerHeight - 60, width: 44, height: 44 };
|
|
217
|
+
measure(button, 200);
|
|
218
|
+
const result = renderWithProviders(<IconPanel />);
|
|
219
|
+
fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
|
|
220
|
+
const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
|
|
221
|
+
await waitFor(() => expect(panel.style.visibility).toBe("visible"));
|
|
222
|
+
const top = parseFloat(panel.style.top);
|
|
223
|
+
expect(top).toBeLessThan(button.y);
|
|
224
|
+
expect(top + 160).toBeGreaterThanOrEqual(button.y + button.height);
|
|
225
|
+
expect(panel.style.left).toBe(`${button.x}px`);
|
|
226
|
+
expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it("never end-aligns a custom first row (triggerEcho off, coverAlign start): it collides to the sheet", async () => {
|
|
230
|
+
const viewportWidth = document.documentElement.clientWidth || window.innerWidth;
|
|
231
|
+
const button = { x: viewportWidth - 16 - 44, y: 12, width: 44, height: 44 };
|
|
232
|
+
measure(button, 200);
|
|
233
|
+
const result = renderWithProviders(<IconPanel align="start" />);
|
|
234
|
+
fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
|
|
235
|
+
expect(await result.findByTestId("floating-panel-sheet")).toBeTruthy();
|
|
236
|
+
});
|
|
237
|
+
});
|