@multiplatform.one/forms 7.81.0 → 7.81.1
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.cjs +1 -0
- package/dist/cjs/AdaptivePopup/index.native.js +3 -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/circleGlyph.native.js.map +1 -1
- package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/cjs/Button/index.native.js +2 -2
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Button/webGlass.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/PanelHeader.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/coverRect.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/index.native.js +212 -66
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/paintedBox.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -1
- 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.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.native.js.map +1 -1
- package/dist/cjs/InputParts/keyboardAppearance.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/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.native.js +5 -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.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.native.js +2 -2
- 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/DurationWheel.native.js +1 -1
- package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/cjs/fields/Duration/durationWheelTypes.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 +19 -2
- package/dist/cjs/fields/Select/index.native.js +26 -6
- package/dist/cjs/fields/Select/index.native.js.map +1 -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.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.native.js +1 -1
- 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/CheckGlyph.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/checkedOnField.cjs +104 -0
- package/dist/cjs/shared/checkedOnField.native.js +117 -0
- package/dist/cjs/shared/checkedOnField.native.js.map +1 -0
- 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/fieldRowContext.native.js.map +1 -1
- package/dist/cjs/shared/floatingList.cjs +7 -79
- package/dist/cjs/shared/floatingList.native.js +8 -90
- 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.mjs +2 -1
- package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js +2 -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/circleGlyph.native.js.map +1 -1
- package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Button/webGlass.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/PanelHeader.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/coverRect.native.js.map +1 -1
- package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +174 -28
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -1
- package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -1
- 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.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.native.js.map +1 -1
- package/dist/esm/InputParts/keyboardAppearance.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/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.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.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.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/durationWheelTypes.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 +19 -2
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +22 -2
- package/dist/esm/fields/Select/index.native.js.map +1 -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.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/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.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/CheckGlyph.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/checkedOnField.mjs +76 -0
- package/dist/esm/shared/checkedOnField.mjs.map +1 -0
- package/dist/esm/shared/checkedOnField.native.js +86 -0
- package/dist/esm/shared/checkedOnField.native.js.map +1 -0
- 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/fieldRowContext.native.js.map +1 -1
- package/dist/esm/shared/floatingList.mjs +3 -75
- package/dist/esm/shared/floatingList.mjs.map +1 -1
- package/dist/esm/shared/floatingList.native.js +3 -85
- 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/AdaptivePopup/index.mjs +2 -1
- package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
- package/dist/jsx/AdaptivePopup/index.native.js +1 -0
- package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +212 -66
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +19 -2
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +22 -2
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/shared/checkedOnField.mjs +76 -0
- package/dist/jsx/shared/checkedOnField.mjs.map +1 -0
- package/dist/jsx/shared/checkedOnField.native.js +117 -0
- package/dist/jsx/shared/checkedOnField.native.js.map +1 -0
- package/dist/jsx/shared/floatingList.mjs +3 -75
- package/dist/jsx/shared/floatingList.mjs.map +1 -1
- package/dist/jsx/shared/floatingList.native.js +7 -89
- package/dist/jsx/shared/floatingList.native.js.map +1 -1
- package/package.json +8 -8
- package/src/AdaptivePopup/index.tsx +5 -2
- package/src/FloatingPanel/index.native.tsx +194 -20
- package/src/FloatingPanel/index.tsx +10 -0
- package/src/FloatingPanel/sheetGrabber.spec.tsx +53 -0
- package/src/fields/Select/Select.popUp.native.spec.tsx +276 -0
- package/src/fields/Select/Select.stories.tsx +16 -0
- package/src/fields/Select/index.tsx +18 -2
- package/src/shared/checkedOnField.ts +116 -0
- package/src/shared/floatingList.tsx +8 -116
- package/types/AdaptivePopup/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.d.ts +15 -0
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +8 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/shared/checkedOnField.d.ts +54 -0
- package/types/shared/checkedOnField.d.ts.map +1 -0
- package/types/shared/floatingList.d.ts +2 -53
- package/types/shared/floatingList.d.ts.map +1 -1
|
@@ -27,10 +27,10 @@ __export(floatingList_exports, {
|
|
|
27
27
|
ScrollArrow: () => ScrollArrow,
|
|
28
28
|
SyncFocusToOpen: () => SyncFocusToOpen,
|
|
29
29
|
clampDropdownRadius: () => clampDropdownRadius,
|
|
30
|
-
growOnScroll: () => growOnScroll,
|
|
31
|
-
placeCheckedOnField: () => placeCheckedOnField,
|
|
32
|
-
scrollArrowBand: () => scrollArrowBand,
|
|
33
|
-
scrollArrowThreshold: () => scrollArrowThreshold
|
|
30
|
+
growOnScroll: () => import_checkedOnField2.growOnScroll,
|
|
31
|
+
placeCheckedOnField: () => import_checkedOnField2.placeCheckedOnField,
|
|
32
|
+
scrollArrowBand: () => import_checkedOnField2.scrollArrowBand,
|
|
33
|
+
scrollArrowThreshold: () => import_checkedOnField2.scrollArrowThreshold
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(floatingList_exports);
|
|
36
36
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -40,6 +40,8 @@ var import_react2 = require("@phosphor-icons/react");
|
|
|
40
40
|
var import_theme2 = require("@multiplatform.one/theme");
|
|
41
41
|
var import_tamagui = require("tamagui");
|
|
42
42
|
var import_InputParts = require("../InputParts/index.native.js");
|
|
43
|
+
var import_checkedOnField = require("./checkedOnField.native.js");
|
|
44
|
+
var import_checkedOnField2 = require("./checkedOnField.native.js");
|
|
43
45
|
var dropdownMaxRadiusTokenNum = 8;
|
|
44
46
|
function clampDropdownRadius(fieldRadius) {
|
|
45
47
|
if (fieldRadius === "$0") return 0;
|
|
@@ -61,90 +63,6 @@ function SyncFocusToOpen(param) {
|
|
|
61
63
|
}, [open, setFocused]);
|
|
62
64
|
return null;
|
|
63
65
|
}
|
|
64
|
-
var scrollArrowThreshold = 8;
|
|
65
|
-
function scrollArrowBand(rowHeight) {
|
|
66
|
-
return Math.round(rowHeight / 2);
|
|
67
|
-
}
|
|
68
|
-
var clamp = function clamp2(value, low, high) {
|
|
69
|
-
return Math.max(low, Math.min(high, value));
|
|
70
|
-
};
|
|
71
|
-
function placeCheckedOnField(input) {
|
|
72
|
-
var _input_threshold;
|
|
73
|
-
var {
|
|
74
|
-
fieldTop,
|
|
75
|
-
fieldBottom,
|
|
76
|
-
rowTop,
|
|
77
|
-
rowHeight,
|
|
78
|
-
contentHeight,
|
|
79
|
-
boundsTop,
|
|
80
|
-
boundsBottom,
|
|
81
|
-
band
|
|
82
|
-
} = input;
|
|
83
|
-
var threshold = (_input_threshold = input.threshold) !== null && _input_threshold !== void 0 ? _input_threshold : scrollArrowThreshold;
|
|
84
|
-
var target = clamp((fieldTop + fieldBottom) / 2 - rowHeight / 2, boundsTop, boundsBottom - rowHeight);
|
|
85
|
-
if (contentHeight <= boundsBottom - boundsTop) {
|
|
86
|
-
var top = clamp(target - rowTop, boundsTop, boundsBottom - contentHeight);
|
|
87
|
-
return {
|
|
88
|
-
top,
|
|
89
|
-
height: contentHeight,
|
|
90
|
-
scrollTop: 0
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
var top1 = target - rowTop;
|
|
94
|
-
var scrollTop = 0;
|
|
95
|
-
if (top1 < boundsTop) {
|
|
96
|
-
scrollTop = boundsTop - top1;
|
|
97
|
-
top1 = boundsTop;
|
|
98
|
-
}
|
|
99
|
-
var end = function end2() {
|
|
100
|
-
return top1 - scrollTop + contentHeight;
|
|
101
|
-
};
|
|
102
|
-
var bottom = function bottom2() {
|
|
103
|
-
return Math.min(boundsBottom, end());
|
|
104
|
-
};
|
|
105
|
-
var checkedTop = function checkedTop2() {
|
|
106
|
-
return top1 - scrollTop + rowTop;
|
|
107
|
-
};
|
|
108
|
-
if (end() - bottom() > threshold) {
|
|
109
|
-
var short = checkedTop() + rowHeight - (bottom() - band);
|
|
110
|
-
if (short > 0) {
|
|
111
|
-
var lift = scrollTop > 0 ? 0 : Math.min(short, top1 - boundsTop);
|
|
112
|
-
top1 -= lift;
|
|
113
|
-
scrollTop += short - lift;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (scrollTop > threshold) {
|
|
117
|
-
var short1 = top1 + band - checkedTop();
|
|
118
|
-
if (short1 > 0) scrollTop = Math.max(0, scrollTop - short1);
|
|
119
|
-
}
|
|
120
|
-
if (scrollTop > 0 && scrollTop <= threshold) {
|
|
121
|
-
top1 += scrollTop;
|
|
122
|
-
scrollTop = 0;
|
|
123
|
-
}
|
|
124
|
-
return {
|
|
125
|
-
top: top1,
|
|
126
|
-
height: bottom() - top1,
|
|
127
|
-
scrollTop
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
function growOnScroll(param) {
|
|
131
|
-
var {
|
|
132
|
-
top,
|
|
133
|
-
height,
|
|
134
|
-
scrollTop,
|
|
135
|
-
contentHeight,
|
|
136
|
-
boundsTop,
|
|
137
|
-
boundsBottom
|
|
138
|
-
} = param;
|
|
139
|
-
var origin = top - scrollTop;
|
|
140
|
-
var nextTop = Math.min(top, Math.max(boundsTop, origin));
|
|
141
|
-
var nextBottom = Math.max(top + height, Math.min(boundsBottom, origin + contentHeight));
|
|
142
|
-
return {
|
|
143
|
-
top: nextTop,
|
|
144
|
-
height: nextBottom - nextTop,
|
|
145
|
-
scrollTop: nextTop - origin
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
66
|
function ScrollArrow(param) {
|
|
149
67
|
var {
|
|
150
68
|
direction,
|
|
@@ -256,7 +174,7 @@ function ScrollArrow(param) {
|
|
|
256
174
|
knobProps
|
|
257
175
|
} = (0, import_theme2.useResolvedKnobs)();
|
|
258
176
|
var iconSize = knobProps.controlIcon.width;
|
|
259
|
-
var band = bandProp !== null && bandProp !== void 0 ? bandProp : scrollArrowBand(knobProps.menuRow.minHeight);
|
|
177
|
+
var band = bandProp !== null && bandProp !== void 0 ? bandProp : (0, import_checkedOnField.scrollArrowBand)(knobProps.menuRow.minHeight);
|
|
260
178
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
|
|
261
179
|
position: "sticky",
|
|
262
180
|
top: isUp ? topOffset : void 0,
|
|
@@ -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","growOnScroll","placeCheckedOnField","scrollArrowBand","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","
|
|
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","growOnScroll","import_checkedOnField2","placeCheckedOnField","scrollArrowBand","scrollArrowThreshold","module","exports","import_jsx_runtime","require","import_theme","import_react","import_react2","import_theme2","import_tamagui","import_InputParts","import_checkedOnField","dropdownMaxRadiusTokenNum","fieldRadius","startsWith","num","Number","parseInt","slice","param","open","setFocused","FocusContext","useStyledContext","useEffect","direction","scrollRef","visible","arrowScrollDirRef","topOffset","band","bandProp","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.81.
|
|
3
|
+
"version": "7.81.1",
|
|
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.81.
|
|
61
|
-
"@multiplatform.one/router": "^7.81.
|
|
62
|
-
"@multiplatform.one/table-primitives": "^7.81.
|
|
63
|
-
"@multiplatform.one/theme": "^7.81.
|
|
60
|
+
"@multiplatform.one/platform": "^7.81.1",
|
|
61
|
+
"@multiplatform.one/router": "^7.81.1",
|
|
62
|
+
"@multiplatform.one/table-primitives": "^7.81.1",
|
|
63
|
+
"@multiplatform.one/theme": "^7.81.1",
|
|
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.81.
|
|
84
|
-
"@multiplatform.one/storybook": "7.81.
|
|
85
|
-
"@multiplatform.one/test-utils": "7.81.
|
|
83
|
+
"@multiplatform.one/config": "7.81.1",
|
|
84
|
+
"@multiplatform.one/storybook": "7.81.1",
|
|
85
|
+
"@multiplatform.one/test-utils": "7.81.1",
|
|
86
86
|
"@tamagui/build": "2.7.6",
|
|
87
87
|
"@tamagui/config": "2.7.6",
|
|
88
88
|
"@tamagui/vite-plugin": "2.7.6",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { transitionProps, overlayScrim } from "@multiplatform.one/theme";
|
|
1
|
+
import { sheetGrabber, transitionProps, overlayScrim } from "@multiplatform.one/theme";
|
|
2
2
|
import { DialogContent, DialogOverlay } from "@multiplatform.one/theme";
|
|
3
3
|
import {
|
|
4
4
|
cloneElement,
|
|
@@ -404,7 +404,10 @@ export function AdaptivePopup({
|
|
|
404
404
|
enterStyle={{ opacity: 0 }}
|
|
405
405
|
exitStyle={{ opacity: 0 }}
|
|
406
406
|
/>
|
|
407
|
-
<Sheet.Handle
|
|
407
|
+
<Sheet.Handle
|
|
408
|
+
{...sheetGrabber}
|
|
409
|
+
{...({ "aria-hidden": true } as Record<string, unknown>)}
|
|
410
|
+
/>
|
|
408
411
|
<Sheet.Frame
|
|
409
412
|
// Sheet.Frame forwards its ref at runtime; the styled prop type
|
|
410
413
|
// just omits `ref`, hence the cast. tabIndex -1 makes the frame a
|
|
@@ -61,10 +61,25 @@
|
|
|
61
61
|
* OVERLAY_BREAKPOINT the sheet is the wrong form. The panel opens over its
|
|
62
62
|
* field the way the web float does (LC-105, LC-112), sized by `widthMode`;
|
|
63
63
|
* compact windows (iPhone, Slide Over) keep the sheet. `sheet` forces it.
|
|
64
|
+
*
|
|
65
|
+
* Pop-up (`popUp`, FZ-8655): a Select's menu face opens the way a macOS pop-up
|
|
66
|
+
* does, as the web's covering Select does. The rows are measured here, the
|
|
67
|
+
* caller reports the row that goes on the field, and `placeCheckedOnField`
|
|
68
|
+
* (shared with the web) places the panel. It's a touch list, so a panel keeps
|
|
69
|
+
* its box as it scrolls, as a UIMenu does, where a pointer's grows
|
|
70
|
+
* (`growOnScroll`).
|
|
64
71
|
*/
|
|
65
72
|
|
|
66
|
-
import {
|
|
73
|
+
import { CaretDownIcon, CaretUpIcon } from "@phosphor-icons/react";
|
|
74
|
+
import {
|
|
75
|
+
nativeAnimationConfig,
|
|
76
|
+
type MotionStop,
|
|
77
|
+
overlayScrim,
|
|
78
|
+
sheetGrabber,
|
|
79
|
+
sheetGrabberZone,
|
|
80
|
+
} from "@multiplatform.one/theme";
|
|
67
81
|
import {
|
|
82
|
+
type ComponentRef,
|
|
68
83
|
isValidElement,
|
|
69
84
|
type ReactNode,
|
|
70
85
|
useCallback,
|
|
@@ -88,10 +103,22 @@ import {
|
|
|
88
103
|
useWindowDimensions,
|
|
89
104
|
View as RNView,
|
|
90
105
|
type GestureResponderEvent,
|
|
106
|
+
type NativeScrollEvent,
|
|
107
|
+
type NativeSyntheticEvent,
|
|
91
108
|
} from "react-native";
|
|
92
109
|
import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
|
|
93
|
-
import {
|
|
94
|
-
|
|
110
|
+
import {
|
|
111
|
+
Surface,
|
|
112
|
+
useGlyphColor,
|
|
113
|
+
useResolvedKnobs,
|
|
114
|
+
motionDurationMs,
|
|
115
|
+
} from "@multiplatform.one/theme";
|
|
116
|
+
import { getTokenValue, View, YStack } from "tamagui";
|
|
117
|
+
import {
|
|
118
|
+
placeCheckedOnField,
|
|
119
|
+
scrollArrowBand,
|
|
120
|
+
scrollArrowThreshold,
|
|
121
|
+
} from "../shared/checkedOnField";
|
|
95
122
|
import { useInsideOverlay, useOverlayZIndex } from "../shared/overlayStack";
|
|
96
123
|
import { OverlayWindow } from "../shared/OverlayWindow";
|
|
97
124
|
import { t } from "../shared/t";
|
|
@@ -174,6 +201,7 @@ export function FloatingPanel({
|
|
|
174
201
|
triggerEcho = true,
|
|
175
202
|
coverAlign = "start",
|
|
176
203
|
iconCover = false,
|
|
204
|
+
popUp,
|
|
177
205
|
anchorMode,
|
|
178
206
|
panelWidth = "content",
|
|
179
207
|
sheet,
|
|
@@ -242,7 +270,7 @@ export function FloatingPanel({
|
|
|
242
270
|
const insideOverlay = useInsideOverlay();
|
|
243
271
|
const asMenu = isContextMenu
|
|
244
272
|
? compactFace === "menu"
|
|
245
|
-
: resolveCompactFace(compactFace, insideOverlay) === "menu";
|
|
273
|
+
: resolveCompactFace(compactFace, insideOverlay) === "menu" || (popUp != null && regular);
|
|
246
274
|
const asRegular = regular && !asMenu && !isContextMenu && sheet !== true;
|
|
247
275
|
const anchored = asMenu || asRegular;
|
|
248
276
|
const triggerRef = useRef<RNView | null>(null);
|
|
@@ -657,8 +685,9 @@ export function FloatingPanel({
|
|
|
657
685
|
Math.max(safeArea?.bottom ?? 0, keyboardInset) -
|
|
658
686
|
panelViewportPadding,
|
|
659
687
|
}}
|
|
660
|
-
echo={triggerEcho && !iconCover ? (triggerRow ?? trigger) : null}
|
|
688
|
+
echo={triggerEcho && !iconCover && !popUp ? (triggerRow ?? trigger) : null}
|
|
661
689
|
echoLabel={triggerA11y?.label}
|
|
690
|
+
popUp={popUp}
|
|
662
691
|
iconCover={iconCover && anchorMode !== "attach"}
|
|
663
692
|
group={iconCover && anchorMode !== "attach" ? (group ?? null) : null}
|
|
664
693
|
coverAlign={anchorMode === "attach" ? "start" : coverAlign}
|
|
@@ -765,19 +794,23 @@ export function FloatingPanel({
|
|
|
765
794
|
{...knobProps.elevatedSurface}
|
|
766
795
|
borderBottomLeftRadius={0}
|
|
767
796
|
borderBottomRightRadius={0}
|
|
797
|
+
// A sheet spans the screen: only its top edge meets the page,
|
|
798
|
+
// so no side border gutters a full-width row (FZ-8557).
|
|
799
|
+
borderLeftWidth={0}
|
|
800
|
+
borderRightWidth={0}
|
|
801
|
+
borderBottomWidth={0}
|
|
768
802
|
maxHeight={maxHeight}
|
|
769
803
|
flexShrink={1}
|
|
770
804
|
minHeight={0}
|
|
771
805
|
// sheetFill opens at full sheet height (flexShrink keeps the
|
|
772
806
|
// keyboard from pushing the top of the sheet off-screen).
|
|
773
807
|
{...(sheetFill ? { height: maxHeight } : undefined)}
|
|
774
|
-
paddingTop="$2"
|
|
775
808
|
paddingBottom={sheetBottomPadding}
|
|
776
809
|
// VoiceOver escape gesture (two-finger Z) dismisses the sheet.
|
|
777
810
|
onAccessibilityEscape={close}
|
|
778
811
|
>
|
|
779
812
|
{/*
|
|
780
|
-
The grab ZONE, not just the
|
|
813
|
+
The grab ZONE, not just the 5pt pill: a 5pt tall target is
|
|
781
814
|
unhittable. The gesture lives here rather than on the whole
|
|
782
815
|
sheet so it never fights the ScrollView inside it, which is the
|
|
783
816
|
same division iOS uses.
|
|
@@ -786,14 +819,10 @@ export function FloatingPanel({
|
|
|
786
819
|
{...panResponder.panHandlers}
|
|
787
820
|
accessibilityRole="adjustable"
|
|
788
821
|
accessibilityLabel={t("Drag to resize")}
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
alignItems: "center",
|
|
792
|
-
paddingTop: 4,
|
|
793
|
-
paddingBottom: 12,
|
|
794
|
-
}}
|
|
822
|
+
testID="floating-panel-grabber"
|
|
823
|
+
style={sheetGrabberZone}
|
|
795
824
|
>
|
|
796
|
-
<View
|
|
825
|
+
<View {...sheetGrabber} />
|
|
797
826
|
</RNView>
|
|
798
827
|
<YStack
|
|
799
828
|
padding={framePadding}
|
|
@@ -830,6 +859,7 @@ function TriggerMenuPanel({
|
|
|
830
859
|
bounds,
|
|
831
860
|
echo,
|
|
832
861
|
echoLabel,
|
|
862
|
+
popUp,
|
|
833
863
|
iconCover = false,
|
|
834
864
|
group = null,
|
|
835
865
|
coverAlign,
|
|
@@ -846,6 +876,8 @@ function TriggerMenuPanel({
|
|
|
846
876
|
bounds: PanelBounds;
|
|
847
877
|
echo: ReactNode;
|
|
848
878
|
echoLabel?: string;
|
|
879
|
+
/** LC-112 (FZ-8655): the row that sits on the trigger, a macOS pop-up. */
|
|
880
|
+
popUp?: FloatingPanelProps["popUp"];
|
|
849
881
|
/** LC-112 (FZ-8665): an icon trigger, covered at the surface it is seen on. */
|
|
850
882
|
iconCover?: boolean;
|
|
851
883
|
/** LC-112 (FZ-8550): the glass capsule a grouped trigger sits on. */
|
|
@@ -860,7 +892,12 @@ function TriggerMenuPanel({
|
|
|
860
892
|
children: ReactNode;
|
|
861
893
|
}) {
|
|
862
894
|
const { knobProps } = useResolvedKnobs({ painted: false });
|
|
895
|
+
const glyphColor = useGlyphColor();
|
|
863
896
|
const [size, setSize] = useState<{ width: number; height: number } | null>(null);
|
|
897
|
+
const [contentHeight, setContentHeight] = useState<number | null>(null);
|
|
898
|
+
const [scrolled, setScrolled] = useState<{ up: boolean; down: boolean } | null>(null);
|
|
899
|
+
const scrollRef = useRef<ComponentRef<typeof RNScrollView>>(null);
|
|
900
|
+
const offsetRef = useRef(0);
|
|
864
901
|
// LC-112 (FZ-8480, FZ-8550): an icon trigger's panel covers the surface the
|
|
865
902
|
// trigger is seen on, its capsule or its press target.
|
|
866
903
|
const cover = anchor && iconCover ? iconCoverRect(anchor, group) : anchor;
|
|
@@ -885,8 +922,31 @@ function TriggerMenuPanel({
|
|
|
885
922
|
echo: echo != null,
|
|
886
923
|
floor: Math.max(MENU_MIN_WIDTH, cover?.width ?? 0),
|
|
887
924
|
});
|
|
888
|
-
const
|
|
889
|
-
|
|
925
|
+
const borderWidth = Number(knobProps.elevatedSurface.borderWidth) || 0;
|
|
926
|
+
const framePaddingToken = getTokenValue(
|
|
927
|
+
framePadding as Parameters<typeof getTokenValue>[0],
|
|
928
|
+
"space",
|
|
929
|
+
);
|
|
930
|
+
const framePaddingPx = typeof framePaddingToken === "number" ? framePaddingToken : 0;
|
|
931
|
+
// LC-112 (FZ-8655): the web's macOS pop-up, from the rows measured here.
|
|
932
|
+
const band = scrollArrowBand(knobProps.menuRow.minHeight);
|
|
933
|
+
const fit =
|
|
934
|
+
anchor && popUp?.row && contentHeight != null
|
|
935
|
+
? placeCheckedOnField({
|
|
936
|
+
fieldTop: anchor.y,
|
|
937
|
+
fieldBottom: anchor.y + anchor.height,
|
|
938
|
+
rowTop: popUp.row.top + framePaddingPx,
|
|
939
|
+
rowHeight: popUp.row.height,
|
|
940
|
+
contentHeight,
|
|
941
|
+
boundsTop: bounds.top + borderWidth,
|
|
942
|
+
boundsBottom: bounds.bottom - borderWidth,
|
|
943
|
+
band,
|
|
944
|
+
})
|
|
945
|
+
: null;
|
|
946
|
+
const scrollTop = fit?.scrollTop ?? 0;
|
|
947
|
+
const scrolls = fit != null && contentHeight != null && fit.height < contentHeight;
|
|
948
|
+
const placed =
|
|
949
|
+
anchor && cover && size && (!popUp || fit)
|
|
890
950
|
? (attach ? placeBesideTrigger : placeOverTrigger)({
|
|
891
951
|
trigger: cover,
|
|
892
952
|
width: size.width,
|
|
@@ -897,6 +957,39 @@ function TriggerMenuPanel({
|
|
|
897
957
|
pinned: iconCover,
|
|
898
958
|
})
|
|
899
959
|
: null;
|
|
960
|
+
const placement =
|
|
961
|
+
placed && fit
|
|
962
|
+
? { ...placed, top: fit.top - borderWidth, maxHeight: fit.height + 2 * borderWidth }
|
|
963
|
+
: placed;
|
|
964
|
+
useLayoutEffect(() => {
|
|
965
|
+
offsetRef.current = scrollTop;
|
|
966
|
+
if (scrollTop > 0) scrollRef.current?.scrollTo({ y: scrollTop, animated: false });
|
|
967
|
+
}, [scrollTop]);
|
|
968
|
+
const atRest = {
|
|
969
|
+
up: scrolls && scrollTop > scrollArrowThreshold,
|
|
970
|
+
down:
|
|
971
|
+
scrolls &&
|
|
972
|
+
fit != null &&
|
|
973
|
+
contentHeight != null &&
|
|
974
|
+
contentHeight - scrollTop - fit.height > scrollArrowThreshold,
|
|
975
|
+
};
|
|
976
|
+
const arrows = scrolled ?? atRest;
|
|
977
|
+
const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
|
|
978
|
+
if (!scrolls) return;
|
|
979
|
+
const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;
|
|
980
|
+
offsetRef.current = contentOffset.y;
|
|
981
|
+
const up = contentOffset.y > scrollArrowThreshold;
|
|
982
|
+
const down =
|
|
983
|
+
contentSize.height - contentOffset.y - layoutMeasurement.height > scrollArrowThreshold;
|
|
984
|
+
setScrolled((prev) => (prev?.up === up && prev?.down === down ? prev : { up, down }));
|
|
985
|
+
};
|
|
986
|
+
// A band's tap turns the page, less a row, so nothing goes unseen.
|
|
987
|
+
const scrollPage = (direction: "up" | "down") => {
|
|
988
|
+
if (!fit) return;
|
|
989
|
+
const page = Math.max(band, fit.height - 2 * band - (popUp?.row?.height ?? 0));
|
|
990
|
+
const next = offsetRef.current + (direction === "up" ? -page : page);
|
|
991
|
+
scrollRef.current?.scrollTo({ y: Math.max(0, next), animated: true });
|
|
992
|
+
};
|
|
900
993
|
// LC-112 seamless cover: the menu is its trigger grown open, so it draws the
|
|
901
994
|
// trigger's corner arc at all four corners. A field reports its radius; an
|
|
902
995
|
// icon button with no echo is a circle or capsule, half its short side.
|
|
@@ -909,7 +1002,6 @@ function TriggerMenuPanel({
|
|
|
909
1002
|
: coverAlign === "auto" && half
|
|
910
1003
|
? half
|
|
911
1004
|
: undefined;
|
|
912
|
-
const borderWidth = Number(knobProps.elevatedSurface.borderWidth) || 0;
|
|
913
1005
|
// A panel slid along the screen (a `"screen"` or fixed width, or one pushed
|
|
914
1006
|
// back inside the margins) keeps its echo on the trigger.
|
|
915
1007
|
const echoShift =
|
|
@@ -998,13 +1090,47 @@ function TriggerMenuPanel({
|
|
|
998
1090
|
</Pressable>
|
|
999
1091
|
) : null}
|
|
1000
1092
|
<RNScrollView
|
|
1093
|
+
ref={scrollRef}
|
|
1001
1094
|
style={{ flexGrow: 0, flexShrink: 1 }}
|
|
1002
1095
|
keyboardShouldPersistTaps="handled"
|
|
1096
|
+
{...(popUp
|
|
1097
|
+
? {
|
|
1098
|
+
contentOffset: { x: 0, y: scrollTop },
|
|
1099
|
+
scrollEnabled: scrolls,
|
|
1100
|
+
bounces: scrolls,
|
|
1101
|
+
onScroll: handleScroll,
|
|
1102
|
+
scrollEventThrottle: 16,
|
|
1103
|
+
}
|
|
1104
|
+
: null)}
|
|
1003
1105
|
>
|
|
1004
|
-
<
|
|
1005
|
-
|
|
1006
|
-
|
|
1106
|
+
<RNView
|
|
1107
|
+
testID="floating-panel-menu-content"
|
|
1108
|
+
collapsable={false}
|
|
1109
|
+
onLayout={popUp ? (e) => setContentHeight(e.nativeEvent.layout.height) : undefined}
|
|
1110
|
+
>
|
|
1111
|
+
<YStack padding={framePadding} gap={frameGap}>
|
|
1112
|
+
{children}
|
|
1113
|
+
</YStack>
|
|
1114
|
+
</RNView>
|
|
1007
1115
|
</RNScrollView>
|
|
1116
|
+
{scrolls ? (
|
|
1117
|
+
<>
|
|
1118
|
+
<ScrollBand
|
|
1119
|
+
direction="up"
|
|
1120
|
+
band={band}
|
|
1121
|
+
visible={arrows.up}
|
|
1122
|
+
glyphColor={glyphColor}
|
|
1123
|
+
onPress={scrollPage}
|
|
1124
|
+
/>
|
|
1125
|
+
<ScrollBand
|
|
1126
|
+
direction="down"
|
|
1127
|
+
band={band}
|
|
1128
|
+
visible={arrows.down}
|
|
1129
|
+
glyphColor={glyphColor}
|
|
1130
|
+
onPress={scrollPage}
|
|
1131
|
+
/>
|
|
1132
|
+
</>
|
|
1133
|
+
) : null}
|
|
1008
1134
|
</YStack>
|
|
1009
1135
|
</YStack>
|
|
1010
1136
|
</RNView>
|
|
@@ -1012,6 +1138,54 @@ function TriggerMenuPanel({
|
|
|
1012
1138
|
);
|
|
1013
1139
|
}
|
|
1014
1140
|
|
|
1141
|
+
/**
|
|
1142
|
+
* A pop-up's scroll arrow on native (LC-112, FZ-8655): the web's opaque band in
|
|
1143
|
+
* the panel's own fill, half a menu row at a clipped edge, so a cut row hides
|
|
1144
|
+
* under it. A tap on it stays off the row beneath and turns the page.
|
|
1145
|
+
*/
|
|
1146
|
+
function ScrollBand({
|
|
1147
|
+
direction,
|
|
1148
|
+
band,
|
|
1149
|
+
visible,
|
|
1150
|
+
glyphColor,
|
|
1151
|
+
onPress,
|
|
1152
|
+
}: {
|
|
1153
|
+
direction: "up" | "down";
|
|
1154
|
+
band: number;
|
|
1155
|
+
visible: boolean;
|
|
1156
|
+
glyphColor: string;
|
|
1157
|
+
onPress: (direction: "up" | "down") => void;
|
|
1158
|
+
}) {
|
|
1159
|
+
const { knobProps } = useResolvedKnobs({ painted: false });
|
|
1160
|
+
const Icon = direction === "up" ? CaretUpIcon : CaretDownIcon;
|
|
1161
|
+
if (!visible) return null;
|
|
1162
|
+
return (
|
|
1163
|
+
<Pressable
|
|
1164
|
+
testID={`floating-panel-scroll-${direction}`}
|
|
1165
|
+
onPress={() => onPress(direction)}
|
|
1166
|
+
accessibilityElementsHidden
|
|
1167
|
+
importantForAccessibility="no-hide-descendants"
|
|
1168
|
+
style={{
|
|
1169
|
+
position: "absolute",
|
|
1170
|
+
start: 0,
|
|
1171
|
+
end: 0,
|
|
1172
|
+
height: band,
|
|
1173
|
+
zIndex: 1,
|
|
1174
|
+
...(direction === "up" ? { top: 0 } : { bottom: 0 }),
|
|
1175
|
+
}}
|
|
1176
|
+
>
|
|
1177
|
+
<View
|
|
1178
|
+
flex={1}
|
|
1179
|
+
alignItems="center"
|
|
1180
|
+
justifyContent="center"
|
|
1181
|
+
backgroundColor={knobProps.elevatedSurface.backgroundColor}
|
|
1182
|
+
>
|
|
1183
|
+
<Icon size={knobProps.controlIcon.width} color={glyphColor} />
|
|
1184
|
+
</View>
|
|
1185
|
+
</Pressable>
|
|
1186
|
+
);
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1015
1189
|
/**
|
|
1016
1190
|
* The menu at the long-press point: measured once per open at its natural
|
|
1017
1191
|
* size, then placed by the same rule as the web pointer menu. Later layouts
|
|
@@ -108,6 +108,16 @@ export interface FloatingPanelProps {
|
|
|
108
108
|
* it opens down from the button's top edge, or up from its bottom edge.
|
|
109
109
|
*/
|
|
110
110
|
iconCover?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Native only: the panel opens the way a macOS pop-up does (LC-112, FZ-8655).
|
|
113
|
+
* `row` is the row that sits on the trigger, its offset and height in the
|
|
114
|
+
* panel's content, `null` until the caller has measured it. There's no
|
|
115
|
+
* trigger echo, a list that fits the safe edges shows whole, and a taller one
|
|
116
|
+
* scrolls under opaque arrow bands (`placeCheckedOnField`). At regular width
|
|
117
|
+
* this is the panel's face at every list length, so a Select never takes
|
|
118
|
+
* RegularPanel's echo or a sheet there.
|
|
119
|
+
*/
|
|
120
|
+
popUp?: { row: { top: number; height: number } | null };
|
|
111
121
|
/**
|
|
112
122
|
* Optional control rendered beside the trigger but OUTSIDE the native press
|
|
113
123
|
* capture (e.g. DatePicker/ColorPicker clear). On native the trigger subtree
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FZ-8648: one grabber. A FloatingPanel's phone sheet draws the theme's
|
|
3
|
+
* `sheetGrabber` on the web and on native, with nothing local on top, so it
|
|
4
|
+
* can't drift from SheetModal's (whose spec holds it to the same recipe).
|
|
5
|
+
*/
|
|
6
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
7
|
+
import { sheetGrabber } from "@multiplatform.one/theme";
|
|
8
|
+
import { describe, expect, it, vi } from "vitest";
|
|
9
|
+
import { Text, View } from "tamagui";
|
|
10
|
+
import { FloatingPanel as NativePanel } from "./index.native";
|
|
11
|
+
import { FloatingPanel } from "./index";
|
|
12
|
+
|
|
13
|
+
vi.mock("react-native-web", async (importOriginal) => ({
|
|
14
|
+
...(await importOriginal<typeof import("react-native")>()),
|
|
15
|
+
ActionSheetIOS: undefined,
|
|
16
|
+
Modal: ({ children }: { children: import("react").ReactNode }) => children,
|
|
17
|
+
useWindowDimensions: () => ({ width: 390, height: 844, scale: 3, fontScale: 1 }),
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
const atoms = (node: Element) => String(node.className).split(/\s+/).filter(Boolean);
|
|
21
|
+
|
|
22
|
+
function recipeAtoms() {
|
|
23
|
+
const view = renderWithProviders(<View testID="recipe" {...sheetGrabber} />);
|
|
24
|
+
const list = atoms(view.getByTestId("recipe"));
|
|
25
|
+
view.unmount();
|
|
26
|
+
return list;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe("FloatingPanel sheet grabber (FZ-8648)", () => {
|
|
30
|
+
it("draws the recipe in the native sheet", () => {
|
|
31
|
+
const recipe = recipeAtoms();
|
|
32
|
+
const result = renderWithProviders(
|
|
33
|
+
<NativePanel open onOpenChange={() => {}} trigger={<Text>Open</Text>}>
|
|
34
|
+
<Text>Row</Text>
|
|
35
|
+
</NativePanel>,
|
|
36
|
+
);
|
|
37
|
+
const capsule = result.getByTestId("floating-panel-grabber").firstElementChild as Element;
|
|
38
|
+
expect(atoms(capsule)).toEqual(expect.arrayContaining(recipe));
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("draws the recipe in the web sheet, with no transform", async () => {
|
|
42
|
+
const recipe = recipeAtoms();
|
|
43
|
+
const result = renderWithProviders(
|
|
44
|
+
<FloatingPanel open sheet onOpenChange={() => {}} trigger={<Text>Open</Text>}>
|
|
45
|
+
<Text>Row</Text>
|
|
46
|
+
</FloatingPanel>,
|
|
47
|
+
);
|
|
48
|
+
await result.findByTestId("floating-panel-sheet");
|
|
49
|
+
const handle = result.getByLabelText("Resize");
|
|
50
|
+
expect(atoms(handle)).toEqual(expect.arrayContaining(recipe));
|
|
51
|
+
expect(handle.getAttribute("style") ?? "").not.toMatch(/transform/);
|
|
52
|
+
});
|
|
53
|
+
});
|