@multiplatform.one/forms 7.77.2 → 7.79.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.cjs +27 -23
- package/dist/cjs/Button/IconButtonGroup.native.js +27 -23
- package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/cjs/Button/circleGlyph.native.js.map +1 -1
- package/dist/cjs/Button/glass.cjs +2 -1
- package/dist/cjs/Button/glass.native.js +44 -19
- package/dist/cjs/Button/glass.native.js.map +1 -1
- package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/cjs/Button/index.cjs +12 -12
- package/dist/cjs/Button/index.native.js +14 -14
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Button/webGlass.cjs +9 -5
- package/dist/cjs/Button/webGlass.native.js +9 -5
- 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/iconEcho.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.native.js +4 -4
- 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.cjs +0 -1
- package/dist/cjs/index.native.js +45 -46
- 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/fieldRowContext.native.js.map +1 -1
- package/dist/cjs/shared/floatingList.native.js +1 -1
- package/dist/cjs/shared/floatingList.native.js.map +1 -1
- package/dist/cjs/shared/focusManagement.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.mjs +33 -28
- package/dist/esm/Button/IconButtonGroup.mjs.map +1 -1
- package/dist/esm/Button/IconButtonGroup.native.js +33 -28
- package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/esm/Button/circleGlyph.native.js.map +1 -1
- package/dist/esm/Button/glass.mjs +2 -1
- package/dist/esm/Button/glass.mjs.map +1 -1
- package/dist/esm/Button/glass.native.js +43 -19
- package/dist/esm/Button/glass.native.js.map +1 -1
- package/dist/esm/Button/iconButtonGroupContext.mjs.map +1 -1
- package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +14 -13
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +14 -13
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Button/webGlass.mjs +10 -6
- package/dist/esm/Button/webGlass.mjs.map +1 -1
- package/dist/esm/Button/webGlass.native.js +10 -6
- 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/iconEcho.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.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.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -2
- 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/fieldRowContext.native.js.map +1 -1
- 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/IconButtonGroup.mjs +33 -28
- package/dist/jsx/Button/IconButtonGroup.mjs.map +1 -1
- package/dist/jsx/Button/IconButtonGroup.native.js +27 -23
- package/dist/jsx/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/jsx/Button/glass.mjs +2 -1
- package/dist/jsx/Button/glass.mjs.map +1 -1
- package/dist/jsx/Button/glass.native.js +44 -19
- package/dist/jsx/Button/glass.native.js.map +1 -1
- package/dist/jsx/Button/iconButtonGroupContext.mjs.map +1 -1
- package/dist/jsx/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +14 -13
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +12 -12
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Button/webGlass.mjs +10 -6
- package/dist/jsx/Button/webGlass.mjs.map +1 -1
- package/dist/jsx/Button/webGlass.native.js +9 -5
- package/dist/jsx/Button/webGlass.native.js.map +1 -1
- package/dist/jsx/index.js +2 -2
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -2
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +0 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/package.json +8 -8
- package/src/Button/Button.iconButton.spec.tsx +47 -7
- package/src/Button/IconButtonGroup.spec.tsx +83 -19
- package/src/Button/IconButtonGroup.tsx +43 -40
- package/src/Button/glass.native.spec.ts +62 -0
- package/src/Button/glass.native.ts +58 -37
- package/src/Button/glass.spec.ts +64 -16
- package/src/Button/glass.ts +16 -12
- package/src/Button/iconButtonGroupContext.ts +2 -3
- package/src/Button/index.tsx +19 -13
- package/src/Button/webGlass.ts +25 -18
- package/src/index.ts +0 -1
- package/types/Button/IconButtonGroup.d.ts +7 -12
- package/types/Button/IconButtonGroup.d.ts.map +1 -1
- package/types/Button/glass.d.ts +7 -11
- package/types/Button/glass.d.ts.map +1 -1
- package/types/Button/glass.native.d.ts +22 -10
- package/types/Button/glass.native.d.ts.map +1 -1
- package/types/Button/iconButtonGroupContext.d.ts +2 -3
- package/types/Button/iconButtonGroupContext.d.ts.map +1 -1
- package/types/Button/index.d.ts +1 -1
- package/types/Button/index.d.ts.map +1 -1
- package/types/Button/webGlass.d.ts +8 -16
- package/types/Button/webGlass.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/dist/cjs/Button/mediaPlate.cjs +0 -31
- package/dist/cjs/Button/mediaPlate.native.js +0 -34
- package/dist/cjs/Button/mediaPlate.native.js.map +0 -1
- package/dist/esm/Button/mediaPlate.mjs +0 -6
- package/dist/esm/Button/mediaPlate.mjs.map +0 -1
- package/dist/esm/Button/mediaPlate.native.js +0 -6
- package/dist/esm/Button/mediaPlate.native.js.map +0 -1
- package/dist/jsx/Button/mediaPlate.mjs +0 -6
- package/dist/jsx/Button/mediaPlate.mjs.map +0 -1
- package/dist/jsx/Button/mediaPlate.native.js +0 -34
- package/dist/jsx/Button/mediaPlate.native.js.map +0 -1
- package/src/Button/mediaPlate.ts +0 -9
- package/types/Button/mediaPlate.d.ts +0 -10
- package/types/Button/mediaPlate.d.ts.map +0 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-176 (FZ-8666): real Liquid Glass or none. An Android binary, a binary
|
|
3
|
+
* without the module and an iOS before 26 get no glass at all, so the icon
|
|
4
|
+
* button is its plain glyph.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, expect, it, vi } from "vitest";
|
|
7
|
+
import type { GlassContainerComponent, GlassViewComponent } from "./glass";
|
|
8
|
+
import { resolveSystemGlass, type GlassSources } from "./glass.native";
|
|
9
|
+
|
|
10
|
+
const view = (() => null) as unknown as GlassViewComponent;
|
|
11
|
+
const container = (() => null) as unknown as GlassContainerComponent;
|
|
12
|
+
|
|
13
|
+
function sources(
|
|
14
|
+
nativeModule: unknown,
|
|
15
|
+
overrides: Partial<ReturnType<GlassSources["glass"]>> = {},
|
|
16
|
+
): GlassSources {
|
|
17
|
+
return {
|
|
18
|
+
core: () => ({ requireOptionalNativeModule: () => nativeModule }),
|
|
19
|
+
glass: () => ({
|
|
20
|
+
GlassView: view,
|
|
21
|
+
GlassContainer: container,
|
|
22
|
+
isLiquidGlassAvailable: () => true,
|
|
23
|
+
isGlassEffectAPIAvailable: () => true,
|
|
24
|
+
...overrides,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe("resolveSystemGlass", () => {
|
|
30
|
+
it("iOS 26 with the module gets the system's views", () => {
|
|
31
|
+
expect(resolveSystemGlass(sources({}))).toEqual({ view, container });
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("no native module (Android, a binary built without it) never requires the package", () => {
|
|
35
|
+
const glass = vi.fn();
|
|
36
|
+
const source = { ...sources(null), glass };
|
|
37
|
+
expect(resolveSystemGlass(source as unknown as GlassSources)).toBeNull();
|
|
38
|
+
expect(glass).not.toHaveBeenCalled();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("an iOS before 26 and a beta without the API get no glass", () => {
|
|
42
|
+
expect(resolveSystemGlass(sources({}, { isLiquidGlassAvailable: () => false }))).toBeNull();
|
|
43
|
+
expect(resolveSystemGlass(sources({}, { isGlassEffectAPIAvailable: () => false }))).toBeNull();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("a package that throws on load gets no glass", () => {
|
|
47
|
+
const source = {
|
|
48
|
+
...sources({}),
|
|
49
|
+
glass: () => {
|
|
50
|
+
throw new Error("no module");
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
expect(resolveSystemGlass(source)).toBeNull();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("a module with no container keeps the view", () => {
|
|
57
|
+
expect(resolveSystemGlass(sources({}, { GlassContainer: undefined }))).toEqual({
|
|
58
|
+
view,
|
|
59
|
+
container: null,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
@@ -2,50 +2,71 @@ import type { GlassContainerComponent, GlassViewComponent } from "./glass";
|
|
|
2
2
|
|
|
3
3
|
export type { GlassContainerComponent, GlassViewComponent } from "./glass";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
export interface GlassSources {
|
|
6
|
+
core: () => { requireOptionalNativeModule?: (moduleName: string) => unknown };
|
|
7
|
+
glass: () => {
|
|
8
|
+
GlassView?: GlassViewComponent;
|
|
9
|
+
GlassContainer?: GlassContainerComponent;
|
|
10
|
+
isLiquidGlassAvailable?: () => boolean;
|
|
11
|
+
isGlassEffectAPIAvailable?: () => boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Each require sits in its own try: Metro only treats a require as optional
|
|
16
|
+
// inside one, and an app without the package must still bundle.
|
|
17
|
+
const liveSources: GlassSources = {
|
|
18
|
+
core: () => {
|
|
19
|
+
try {
|
|
20
|
+
return require("expo-modules-core");
|
|
21
|
+
} catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
glass: () => {
|
|
26
|
+
try {
|
|
27
|
+
return require("expo-glass-effect");
|
|
28
|
+
} catch {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export interface SystemGlass {
|
|
35
|
+
view: GlassViewComponent;
|
|
36
|
+
container: GlassContainerComponent | null;
|
|
37
|
+
}
|
|
7
38
|
|
|
8
39
|
/**
|
|
9
|
-
* LC-176: expo-glass-effect's
|
|
10
|
-
*
|
|
11
|
-
* `requireOptionalNativeModule` BEFORE the guarded `require`,
|
|
12
|
-
* binary built without it, or an older iOS, falls back to the
|
|
13
|
-
* glyph instead of throwing mid-render (the `nativePickerLoader.ts`
|
|
40
|
+
* LC-176: expo-glass-effect's views, when this binary links the native module
|
|
41
|
+
* and the OS draws Liquid Glass (iOS 26+); Android never links it. The module
|
|
42
|
+
* is probed through `requireOptionalNativeModule` BEFORE the guarded `require`,
|
|
43
|
+
* so an OTA on a binary built without it, or an older iOS, falls back to the
|
|
44
|
+
* bare tinted glyph instead of throwing mid-render (the `nativePickerLoader.ts`
|
|
45
|
+
* contract). A binary whose module predates the container keeps its capsule.
|
|
14
46
|
*/
|
|
15
|
-
export function
|
|
16
|
-
if (cachedGlassView !== undefined) return cachedGlassView;
|
|
17
|
-
cachedGlassView = null;
|
|
47
|
+
export function resolveSystemGlass(sources: GlassSources = liveSources): SystemGlass | null {
|
|
18
48
|
try {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
GlassView?: GlassViewComponent;
|
|
25
|
-
GlassContainer?: GlassContainerComponent;
|
|
26
|
-
isLiquidGlassAvailable?: () => boolean;
|
|
27
|
-
isGlassEffectAPIAvailable?: () => boolean;
|
|
28
|
-
};
|
|
29
|
-
if (
|
|
30
|
-
glass.GlassView &&
|
|
31
|
-
glass.isLiquidGlassAvailable?.() &&
|
|
32
|
-
glass.isGlassEffectAPIAvailable?.()
|
|
33
|
-
) {
|
|
34
|
-
cachedGlassView = glass.GlassView;
|
|
35
|
-
cachedGlassContainer = glass.GlassContainer ?? null;
|
|
36
|
-
}
|
|
49
|
+
if (sources.core().requireOptionalNativeModule?.("ExpoGlassEffect") == null) return null;
|
|
50
|
+
const glass = sources.glass();
|
|
51
|
+
if (!glass.GlassView || !glass.isLiquidGlassAvailable?.()) return null;
|
|
52
|
+
if (!glass.isGlassEffectAPIAvailable?.()) return null;
|
|
53
|
+
return { view: glass.GlassView, container: glass.GlassContainer ?? null };
|
|
37
54
|
} catch {
|
|
38
|
-
|
|
55
|
+
return null;
|
|
39
56
|
}
|
|
40
|
-
return cachedGlassView;
|
|
41
57
|
}
|
|
42
58
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
59
|
+
let cached: SystemGlass | null | undefined;
|
|
60
|
+
|
|
61
|
+
function systemGlass(): SystemGlass | null {
|
|
62
|
+
if (cached === undefined) cached = resolveSystemGlass();
|
|
63
|
+
return cached;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function loadGlassView(): GlassViewComponent | null {
|
|
67
|
+
return systemGlass()?.view ?? null;
|
|
68
|
+
}
|
|
69
|
+
|
|
48
70
|
export function loadGlassContainer(): GlassContainerComponent | null {
|
|
49
|
-
|
|
50
|
-
return cachedGlassContainer ?? null;
|
|
71
|
+
return systemGlass()?.container ?? null;
|
|
51
72
|
}
|
package/src/Button/glass.spec.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @vitest-environment jsdom
|
|
3
3
|
*
|
|
4
|
-
* LC-176 / LC-266:
|
|
5
|
-
*
|
|
4
|
+
* LC-176 / LC-266 (FZ-8666): no browser can draw Liquid Glass, so no browser
|
|
5
|
+
* draws glass, iOS Safari included. The drawn face stays behind one switch in
|
|
6
|
+
* `glass.ts` until Clay answers the compare.
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
|
-
import { createDefaultThemeConfig } from "@multiplatform.one/theme";
|
|
9
|
-
import { cleanup, render } from "@testing-library/react";
|
|
9
|
+
import { createDefaultThemeConfig, Surface } from "@multiplatform.one/theme";
|
|
10
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
10
11
|
import { createElement } from "react";
|
|
11
12
|
import { TamaguiProvider } from "tamagui";
|
|
12
13
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
13
|
-
import { isAppleTouchWeb, loadGlassView } from "./glass";
|
|
14
|
+
import { isAppleTouchWeb, loadGlassContainer, loadGlassView } from "./glass";
|
|
15
|
+
import { IconButton, IconButtonGroup } from "./index";
|
|
16
|
+
import { WebGlassFace } from "./webGlass";
|
|
14
17
|
|
|
15
18
|
const IPHONE =
|
|
16
19
|
"Mozilla/5.0 (iPhone; CPU iPhone OS 26_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1";
|
|
@@ -44,30 +47,75 @@ describe("isAppleTouchWeb", () => {
|
|
|
44
47
|
});
|
|
45
48
|
});
|
|
46
49
|
|
|
47
|
-
|
|
50
|
+
function Glyph({ size }: { size?: number }) {
|
|
51
|
+
return createElement("svg", { "data-glyph": "", width: size, height: size });
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function renderBar(ui: ReturnType<typeof createElement>) {
|
|
55
|
+
return render(
|
|
56
|
+
createElement(
|
|
57
|
+
TamaguiProvider,
|
|
58
|
+
{ config: houseConfig.tamagui, defaultTheme: "light", disableInjectCSS: true },
|
|
59
|
+
createElement(Surface, { bar: true }, ui),
|
|
60
|
+
),
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
describe("no glass on the web (LC-176)", () => {
|
|
48
65
|
afterEach(() => {
|
|
49
66
|
cleanup();
|
|
50
67
|
vi.unstubAllGlobals();
|
|
51
68
|
});
|
|
52
69
|
|
|
53
|
-
it(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
70
|
+
it.each([
|
|
71
|
+
["iOS Safari", { userAgent: IPHONE, platform: "iPhone", maxTouchPoints: 5 }],
|
|
72
|
+
["iPadOS Safari", { userAgent: MAC_SAFARI, platform: "MacIntel", maxTouchPoints: 5 }],
|
|
73
|
+
["desktop Safari", { userAgent: MAC_SAFARI, platform: "MacIntel", maxTouchPoints: 0 }],
|
|
74
|
+
["Android Chrome", { userAgent: PIXEL, platform: "Linux armv8l", maxTouchPoints: 5 }],
|
|
75
|
+
])("%s loads no glass and draws the plain glyph", (_browser, nav) => {
|
|
76
|
+
vi.stubGlobal("navigator", nav);
|
|
77
|
+
expect(loadGlassView()).toBeNull();
|
|
78
|
+
expect(loadGlassContainer()).toBeNull();
|
|
79
|
+
renderBar(
|
|
80
|
+
createElement(
|
|
81
|
+
"div",
|
|
82
|
+
null,
|
|
83
|
+
createElement(
|
|
84
|
+
IconButtonGroup,
|
|
85
|
+
null,
|
|
86
|
+
createElement(IconButton, { icon: Glyph, "aria-label": "Search" }),
|
|
87
|
+
createElement(IconButton, { icon: Glyph, "aria-label": "More" }),
|
|
88
|
+
),
|
|
89
|
+
createElement(IconButton, { icon: Glyph, "aria-label": "Back" }),
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
expect(document.querySelector("[data-mp-glass]")).toBeNull();
|
|
93
|
+
expect(document.querySelector("[data-mp-glass-capsule]")).toBeNull();
|
|
94
|
+
expect(document.querySelector('[data-mp-icon-button-group="bar"]')).not.toBeNull();
|
|
95
|
+
for (const name of ["Search", "More", "Back"])
|
|
96
|
+
expect(screen.getByLabelText(name).getAttribute("data-mp-icon-button")).toBe("glyph");
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
describe("the drawn web face behind the switch", () => {
|
|
101
|
+
afterEach(cleanup);
|
|
102
|
+
|
|
103
|
+
it("sits under the glyph it backs, which stays its sibling", () => {
|
|
57
104
|
const { container } = render(
|
|
58
105
|
createElement(
|
|
59
106
|
TamaguiProvider,
|
|
60
107
|
{ config: houseConfig.tamagui, defaultTheme: "light", disableInjectCSS: true },
|
|
61
|
-
createElement(
|
|
108
|
+
createElement(
|
|
109
|
+
WebGlassFace,
|
|
110
|
+
{ style: { position: "absolute" } },
|
|
111
|
+
createElement("svg", { "data-glyph": "" }),
|
|
112
|
+
),
|
|
62
113
|
),
|
|
63
114
|
);
|
|
64
115
|
const face = container.querySelector('[data-mp-glass="web"]') as HTMLElement | null;
|
|
65
116
|
expect(face).not.toBeNull();
|
|
66
117
|
expect(face!.style.zIndex).toBe("-1");
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
it("every other browser draws the bare glyph", () => {
|
|
70
|
-
vi.stubGlobal("navigator", { userAgent: PIXEL, platform: "Linux armv8l", maxTouchPoints: 5 });
|
|
71
|
-
expect(loadGlassView()).toBeNull();
|
|
118
|
+
expect(face!.querySelector("[data-glyph]")).toBeNull();
|
|
119
|
+
expect(face!.nextElementSibling?.hasAttribute("data-glyph")).toBe(true);
|
|
72
120
|
});
|
|
73
121
|
});
|
package/src/Button/glass.ts
CHANGED
|
@@ -4,9 +4,10 @@ import { isAppleTouchWeb, WebGlassFace } from "./webGlass";
|
|
|
4
4
|
/** The slice of expo-glass-effect's `GlassView` an icon button draws. */
|
|
5
5
|
export type GlassViewComponent = ComponentType<{
|
|
6
6
|
style?: unknown;
|
|
7
|
-
glassEffectStyle?: "regular" | "clear";
|
|
7
|
+
glassEffectStyle?: "regular" | "clear" | "none";
|
|
8
8
|
isInteractive?: boolean;
|
|
9
|
-
|
|
9
|
+
colorScheme?: "auto" | "light" | "dark";
|
|
10
|
+
children?: ReactNode;
|
|
10
11
|
}>;
|
|
11
12
|
|
|
12
13
|
/** The slice of expo-glass-effect's `GlassContainer` an icon button group draws. */
|
|
@@ -19,20 +20,23 @@ export type GlassContainerComponent = ComponentType<{
|
|
|
19
20
|
export { isAppleTouchWeb } from "./webGlass";
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
|
-
* LC-176:
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* liquid glass if it's an iPhone"); every other browser draws the bare glyph.
|
|
23
|
+
* LC-176 (FZ-8666): iOS Safari cannot draw Liquid Glass, so it draws no glass.
|
|
24
|
+
* This is the one switch for the drawn face Clay asked for on
|
|
25
|
+
* rv_3bb3f1f65d6b981f, off since his note on rv_d481d34557e702ef, until he
|
|
26
|
+
* answers rv_c6369c2bab2ffea0.
|
|
27
27
|
*/
|
|
28
|
-
|
|
29
|
-
return isAppleTouchWeb() ? (WebGlassFace as GlassViewComponent) : null;
|
|
30
|
-
}
|
|
28
|
+
const iosSafariGlassFace = false;
|
|
31
29
|
|
|
32
30
|
/**
|
|
33
|
-
* LC-176: the
|
|
34
|
-
*
|
|
31
|
+
* LC-176: the system Liquid Glass an icon button sits in on a bar. Only native
|
|
32
|
+
* iOS 26 has it, from expo-glass-effect (`glass.native.ts`; Android probes
|
|
33
|
+
* null), so the web draws the plain glyph.
|
|
35
34
|
*/
|
|
35
|
+
export function loadGlassView(): GlassViewComponent | null {
|
|
36
|
+
return iosSafariGlassFace && isAppleTouchWeb() ? (WebGlassFace as GlassViewComponent) : null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** LC-176: the system's Liquid Glass container. Only iOS has it. */
|
|
36
40
|
export function loadGlassContainer(): GlassContainerComponent | null {
|
|
37
41
|
return null;
|
|
38
42
|
}
|
|
@@ -4,9 +4,8 @@ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : us
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* LC-176: the ground an `IconButtonGroup` paints under its buttons. `media`
|
|
7
|
-
* is one shared
|
|
8
|
-
*
|
|
9
|
-
* so a button inside draws its bare glyph instead of its own circle.
|
|
7
|
+
* is one shared dark capsule and `glass` one shared Liquid Glass capsule, so
|
|
8
|
+
* a button inside draws its bare glyph instead of its own circle.
|
|
10
9
|
*/
|
|
11
10
|
export type IconButtonGroupGround = "media" | "glass" | null;
|
|
12
11
|
|
package/src/Button/index.tsx
CHANGED
|
@@ -79,7 +79,6 @@ import { warnBareDisabled, warnPositiveTabIndex, warnSizeRecipeEscape } from "..
|
|
|
79
79
|
import { useControlGrouped } from "../shared/groupContext";
|
|
80
80
|
import { useInPanelEcho, usePanelTriggerRadiusReporter } from "../FloatingPanel/echoContext";
|
|
81
81
|
import { loadGlassView } from "./glass";
|
|
82
|
-
import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
|
|
83
82
|
import { boldStroke, GLYPH_BOLD_STROKE_UNITS, ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "./circleGlyph";
|
|
84
83
|
import { useIconButtonGroupGround, useIconButtonGroupMember } from "./iconButtonGroupContext";
|
|
85
84
|
|
|
@@ -850,9 +849,9 @@ export function Button({
|
|
|
850
849
|
(labelled && chromeless && accentInk === true && edge === "start");
|
|
851
850
|
const labelLine = labelLinePx(knobProps.body.fontFamily);
|
|
852
851
|
const glyphFloor = iconButtonGlyphPx(labelLine);
|
|
853
|
-
// LC-176: on iOS 26 a bar's icon button
|
|
854
|
-
// bar button. Elsewhere, and on a binary without the module, it stays
|
|
855
|
-
// bare tinted glyph.
|
|
852
|
+
// LC-176: on iOS 26 a bar's icon button sits in system Liquid Glass, the
|
|
853
|
+
// native bar button. Elsewhere, and on a binary without the module, it stays
|
|
854
|
+
// the bare tinted glyph; nothing re-creates the glass (FZ-8666).
|
|
856
855
|
const glassGroup = groupGround === "glass";
|
|
857
856
|
const GlassView =
|
|
858
857
|
iconButton && !inlineGlyph && !nested && accentInk && barSurface && !selectedFill && !glassGroup
|
|
@@ -1095,7 +1094,8 @@ export function Button({
|
|
|
1095
1094
|
// A plain button is ink on the bar: no shadow at rest (E-FLAT).
|
|
1096
1095
|
const plainTier = tier === "plain";
|
|
1097
1096
|
// LC-176: hover and press light a soft plate on web; on native the glyph
|
|
1098
|
-
// dims,
|
|
1097
|
+
// dims, and on glass the system answers the press instead. The media plate
|
|
1098
|
+
// deepens instead.
|
|
1099
1099
|
const glyphState = iconButton && !selectedFill;
|
|
1100
1100
|
const iconHover = glyphState
|
|
1101
1101
|
? isWeb
|
|
@@ -1107,7 +1107,9 @@ export function Button({
|
|
|
1107
1107
|
const iconPress = glyphState
|
|
1108
1108
|
? isWeb
|
|
1109
1109
|
? hostScoped({ backgroundColor: "$backgroundPress" })
|
|
1110
|
-
:
|
|
1110
|
+
: GlassView || glassGroup
|
|
1111
|
+
? { backgroundColor: "transparent" }
|
|
1112
|
+
: { backgroundColor: "transparent", opacity: ICON_BUTTON_PRESS_OPACITY }
|
|
1111
1113
|
: mediaPlate
|
|
1112
1114
|
? { backgroundColor: "$shadow5" }
|
|
1113
1115
|
: undefined;
|
|
@@ -1174,7 +1176,6 @@ export function Button({
|
|
|
1174
1176
|
? {
|
|
1175
1177
|
borderRadius: 100000,
|
|
1176
1178
|
backgroundColor: "$shadow4",
|
|
1177
|
-
...(isWeb ? { style: MEDIA_PLATE_WEB_STYLE } : undefined),
|
|
1178
1179
|
}
|
|
1179
1180
|
: undefined)}
|
|
1180
1181
|
{...(edge && !inlineGlyph && chromeless && !selectedFill && !isCircular
|
|
@@ -1345,8 +1346,8 @@ export function Button({
|
|
|
1345
1346
|
{GlassView ? (
|
|
1346
1347
|
<GlassView
|
|
1347
1348
|
glassEffectStyle="regular"
|
|
1348
|
-
isInteractive
|
|
1349
|
-
|
|
1349
|
+
isInteractive={!unavailable}
|
|
1350
|
+
colorScheme={darkScheme ? "dark" : "light"}
|
|
1350
1351
|
style={{
|
|
1351
1352
|
position: "absolute",
|
|
1352
1353
|
top: glassInset,
|
|
@@ -1354,10 +1355,15 @@ export function Button({
|
|
|
1354
1355
|
bottom: glassInset,
|
|
1355
1356
|
left: glassInset,
|
|
1356
1357
|
borderRadius: visualPx / 2,
|
|
1358
|
+
alignItems: "center",
|
|
1359
|
+
justifyContent: "center",
|
|
1357
1360
|
}}
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
+
>
|
|
1362
|
+
{iconElement}
|
|
1363
|
+
</GlassView>
|
|
1364
|
+
) : (
|
|
1365
|
+
iconElement
|
|
1366
|
+
)}
|
|
1361
1367
|
{labelContent}
|
|
1362
1368
|
{iconAfterElement}
|
|
1363
1369
|
</ButtonFrame>
|
|
@@ -1426,5 +1432,5 @@ export function IconButton(props: IconButtonProps) {
|
|
|
1426
1432
|
return <Button {...props} />;
|
|
1427
1433
|
}
|
|
1428
1434
|
|
|
1429
|
-
export { IconButtonGroup
|
|
1435
|
+
export { IconButtonGroup } from "./IconButtonGroup";
|
|
1430
1436
|
export type { IconButtonGroupProps } from "./IconButtonGroup";
|
package/src/Button/webGlass.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { isDarkThemeName } from "@multiplatform.one/theme";
|
|
2
|
-
import { createElement } from "react";
|
|
2
|
+
import { createElement, Fragment, type ReactNode } from "react";
|
|
3
3
|
import { useThemeName, YStack } from "tamagui";
|
|
4
|
-
import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
|
|
5
4
|
|
|
6
5
|
type GlassNavigator = { userAgent?: string; platform?: string; maxTouchPoints?: number };
|
|
7
6
|
|
|
@@ -19,24 +18,32 @@ export function isAppleTouchWeb(
|
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
const webGlassMarker = { "data-mp-glass": "web" };
|
|
21
|
+
const webGlassBlur = {
|
|
22
|
+
backdropFilter: "blur(16px) saturate(180%)",
|
|
23
|
+
WebkitBackdropFilter: "blur(16px) saturate(180%)",
|
|
24
|
+
} as const;
|
|
22
25
|
|
|
23
26
|
/**
|
|
24
|
-
* LC-176: the
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* drop shadow alone, with the media plate's blur.
|
|
27
|
+
* LC-176: the drawn face `loadGlassView` can give iOS Safari, one circle for a
|
|
28
|
+
* lone button or one capsule for an `IconButtonGroup`. Off by default: the
|
|
29
|
+
* compare in `glass.ts` decides whether it stays. Its children stay siblings
|
|
30
|
+
* above the layer (absolute, z -1 in the button's stacking context).
|
|
29
31
|
*/
|
|
30
|
-
export function WebGlassFace({ style }: { style?: unknown }) {
|
|
32
|
+
export function WebGlassFace({ style, children }: { style?: unknown; children?: ReactNode }) {
|
|
31
33
|
const dark = isDarkThemeName(useThemeName());
|
|
32
|
-
return createElement(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
34
|
+
return createElement(
|
|
35
|
+
Fragment,
|
|
36
|
+
null,
|
|
37
|
+
createElement(YStack, {
|
|
38
|
+
pointerEvents: "none",
|
|
39
|
+
backgroundColor: dark ? "$color4" : "$color1",
|
|
40
|
+
opacity: 0.92,
|
|
41
|
+
shadowColor: "$shadowColor",
|
|
42
|
+
shadowRadius: 10,
|
|
43
|
+
shadowOffset: { width: 0, height: 3 },
|
|
44
|
+
...webGlassMarker,
|
|
45
|
+
style: { ...(style as object), zIndex: -1, ...webGlassBlur },
|
|
46
|
+
}),
|
|
47
|
+
children,
|
|
48
|
+
);
|
|
42
49
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { type XStackProps } from "tamagui";
|
|
3
|
-
/**
|
|
4
|
-
* LC-176: how far apart two Liquid Glass circles may sit and still merge. Half
|
|
5
|
-
* the 44pt target, so neighbours on the bar's gap always join.
|
|
6
|
-
*/
|
|
7
|
-
export declare const ICON_BUTTON_GLASS_MERGE_PX = 22;
|
|
8
3
|
export interface IconButtonGroupProps extends XStackProps {
|
|
9
|
-
/** Over imagery or video: the group shares one
|
|
4
|
+
/** Over imagery or video: the group shares one dark capsule. */
|
|
10
5
|
plate?: "media";
|
|
11
6
|
children?: ReactNode;
|
|
12
7
|
}
|
|
13
8
|
/**
|
|
14
9
|
* LC-176: icon buttons that sit side by side. Grounds merge, they never stand
|
|
15
|
-
* as a row of separate circles: on iOS 26 the bar's group
|
|
16
|
-
* capsule, as the system draws a bar's item group (merging each
|
|
17
|
-
* the glass container left a waist between them, FZ-8158)
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* capsule (FZ-8494).
|
|
10
|
+
* as a row of separate circles: on iOS 26 the bar's group sits in one system
|
|
11
|
+
* Liquid Glass capsule, as the system draws a bar's item group (merging each
|
|
12
|
+
* circle through the glass container left a waist between them, FZ-8158), so
|
|
13
|
+
* press and merge are the system's; over media the group shares one dark
|
|
14
|
+
* capsule; a bare row stays bare. A lone button keeps its own circle, and a
|
|
15
|
+
* bar group with no icon button in it paints no capsule (FZ-8494).
|
|
21
16
|
*/
|
|
22
17
|
export declare function IconButtonGroup({ plate, children, ...rest }: IconButtonGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
23
18
|
//# sourceMappingURL=IconButtonGroup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAA4C,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAmBrF,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CAyIjF"}
|
package/types/Button/glass.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ import type { ComponentType, ReactNode } from "react";
|
|
|
2
2
|
/** The slice of expo-glass-effect's `GlassView` an icon button draws. */
|
|
3
3
|
export type GlassViewComponent = ComponentType<{
|
|
4
4
|
style?: unknown;
|
|
5
|
-
glassEffectStyle?: "regular" | "clear";
|
|
5
|
+
glassEffectStyle?: "regular" | "clear" | "none";
|
|
6
6
|
isInteractive?: boolean;
|
|
7
|
-
|
|
7
|
+
colorScheme?: "auto" | "light" | "dark";
|
|
8
|
+
children?: ReactNode;
|
|
8
9
|
}>;
|
|
9
10
|
/** The slice of expo-glass-effect's `GlassContainer` an icon button group draws. */
|
|
10
11
|
export type GlassContainerComponent = ComponentType<{
|
|
@@ -14,16 +15,11 @@ export type GlassContainerComponent = ComponentType<{
|
|
|
14
15
|
}>;
|
|
15
16
|
export { isAppleTouchWeb } from "./webGlass";
|
|
16
17
|
/**
|
|
17
|
-
* LC-176: the
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* rv_3bb3f1f65d6b981f: "Is there a way to have the buttons at the bottom be
|
|
21
|
-
* liquid glass if it's an iPhone"); every other browser draws the bare glyph.
|
|
18
|
+
* LC-176: the system Liquid Glass an icon button sits in on a bar. Only native
|
|
19
|
+
* iOS 26 has it, from expo-glass-effect (`glass.native.ts`; Android probes
|
|
20
|
+
* null), so the web draws the plain glyph.
|
|
22
21
|
*/
|
|
23
22
|
export declare function loadGlassView(): GlassViewComponent | null;
|
|
24
|
-
/**
|
|
25
|
-
* LC-176: the container that merges neighbouring Liquid Glass circles into one
|
|
26
|
-
* shape, as iOS 26 groups bar buttons. Only iOS has it.
|
|
27
|
-
*/
|
|
23
|
+
/** LC-176: the system's Liquid Glass container. Only iOS has it. */
|
|
28
24
|
export declare function loadGlassContainer(): GlassContainerComponent | null;
|
|
29
25
|
//# sourceMappingURL=glass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/Button/glass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/Button/glass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAU7C;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import type { GlassContainerComponent, GlassViewComponent } from "./glass";
|
|
2
2
|
export type { GlassContainerComponent, GlassViewComponent } from "./glass";
|
|
3
|
+
export interface GlassSources {
|
|
4
|
+
core: () => {
|
|
5
|
+
requireOptionalNativeModule?: (moduleName: string) => unknown;
|
|
6
|
+
};
|
|
7
|
+
glass: () => {
|
|
8
|
+
GlassView?: GlassViewComponent;
|
|
9
|
+
GlassContainer?: GlassContainerComponent;
|
|
10
|
+
isLiquidGlassAvailable?: () => boolean;
|
|
11
|
+
isGlassEffectAPIAvailable?: () => boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface SystemGlass {
|
|
15
|
+
view: GlassViewComponent;
|
|
16
|
+
container: GlassContainerComponent | null;
|
|
17
|
+
}
|
|
3
18
|
/**
|
|
4
|
-
* LC-176: expo-glass-effect's
|
|
5
|
-
*
|
|
6
|
-
* `requireOptionalNativeModule` BEFORE the guarded `require`,
|
|
7
|
-
* binary built without it, or an older iOS, falls back to the
|
|
8
|
-
* glyph instead of throwing mid-render (the `nativePickerLoader.ts`
|
|
19
|
+
* LC-176: expo-glass-effect's views, when this binary links the native module
|
|
20
|
+
* and the OS draws Liquid Glass (iOS 26+); Android never links it. The module
|
|
21
|
+
* is probed through `requireOptionalNativeModule` BEFORE the guarded `require`,
|
|
22
|
+
* so an OTA on a binary built without it, or an older iOS, falls back to the
|
|
23
|
+
* bare tinted glyph instead of throwing mid-render (the `nativePickerLoader.ts`
|
|
24
|
+
* contract). A binary whose module predates the container keeps its capsule.
|
|
9
25
|
*/
|
|
26
|
+
export declare function resolveSystemGlass(sources?: GlassSources): SystemGlass | null;
|
|
10
27
|
export declare function loadGlassView(): GlassViewComponent | null;
|
|
11
|
-
/**
|
|
12
|
-
* LC-176: expo-glass-effect's `GlassContainer`, present exactly when
|
|
13
|
-
* `loadGlassView` found Liquid Glass. A binary whose module predates the
|
|
14
|
-
* container keeps separate circles rather than throwing.
|
|
15
|
-
*/
|
|
16
28
|
export declare function loadGlassContainer(): GlassContainerComponent | null;
|
|
17
29
|
//# sourceMappingURL=glass.native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glass.native.d.ts","sourceRoot":"","sources":["../../src/Button/glass.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"glass.native.d.ts","sourceRoot":"","sources":["../../src/Button/glass.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM;QAAE,2BAA2B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,CAAC;IAC9E,KAAK,EAAE,MAAM;QACX,SAAS,CAAC,EAAE,kBAAkB,CAAC;QAC/B,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,sBAAsB,CAAC,EAAE,MAAM,OAAO,CAAC;QACvC,yBAAyB,CAAC,EAAE,MAAM,OAAO,CAAC;KAC3C,CAAC;CACH;AAqBD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,YAA0B,GAAG,WAAW,GAAG,IAAI,CAU1F;AASD,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LC-176: the ground an `IconButtonGroup` paints under its buttons. `media`
|
|
3
|
-
* is one shared
|
|
4
|
-
*
|
|
5
|
-
* so a button inside draws its bare glyph instead of its own circle.
|
|
3
|
+
* is one shared dark capsule and `glass` one shared Liquid Glass capsule, so
|
|
4
|
+
* a button inside draws its bare glyph instead of its own circle.
|
|
6
5
|
*/
|
|
7
6
|
export type IconButtonGroupGround = "media" | "glass" | null;
|
|
8
7
|
export declare const IconButtonGroupContext: import("react").Context<IconButtonGroupGround>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconButtonGroupContext.d.ts","sourceRoot":"","sources":["../../src/Button/iconButtonGroupContext.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"iconButtonGroupContext.d.ts","sourceRoot":"","sources":["../../src/Button/iconButtonGroupContext.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,eAAO,MAAM,sBAAsB,gDAA6C,CAAC;AAEjF,wBAAgB,wBAAwB,IAAI,qBAAqB,CAEhE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,iCAAwB,MAAM,IAAI,SAAe,CAAC;AAEtF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMhE;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACvE;AAED,eAAO,MAAM,6BAA6B,wDAAqD,CAAC;AAEhG,wBAAgB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI,CAEzE"}
|