@multiplatform.one/forms 7.6.3 → 7.7.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.native.js +1 -1
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/index.cjs +8 -2
- package/dist/cjs/Button/index.native.js +14 -3
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +1 -3
- package/dist/cjs/Chip/index.native.js +5 -3
- 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.cjs +19 -3
- package/dist/cjs/ContextualSaveBar/index.native.js +22 -6
- 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.cjs +41 -13
- package/dist/cjs/DescriptionList/index.native.js +45 -15
- package/dist/cjs/DescriptionList/index.native.js.map +1 -1
- package/dist/cjs/ErrorSummary.cjs +4 -1
- package/dist/cjs/ErrorSummary.native.js +4 -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/useFloatingPanel.cjs +24 -2
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +43 -2
- 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/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/index.cjs +42 -2
- package/dist/cjs/InputParts/index.native.js +42 -2
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Label/index.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/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.cjs +5 -2
- package/dist/cjs/fields/Checkbox/Checkbox.native.js +7 -4
- 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.cjs +69 -59
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +76 -66
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.cjs +33 -0
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js +36 -0
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
- package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/index.native.js +3 -3
- package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
- package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.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.cjs +402 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +441 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.cjs +2 -376
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +70 -298
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/catalog.cjs +306 -0
- package/dist/cjs/fields/DatePicker/catalog.native.js +350 -0
- package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -0
- package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/index.cjs +7 -280
- package/dist/cjs/fields/DatePicker/index.native.js +67 -186
- package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/parts.cjs +12 -9
- package/dist/cjs/fields/DatePicker/parts.native.js +14 -11
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.cjs +29 -3
- package/dist/cjs/fields/Duration/index.native.js +32 -6
- package/dist/cjs/fields/Duration/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/index.cjs +0 -1
- package/dist/cjs/fields/FileUpload/index.native.js +7 -3
- 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/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/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 +2 -2
- 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.cjs +9 -4
- package/dist/cjs/fields/PhoneInput/index.native.js +16 -9
- 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/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.cjs +1 -1
- package/dist/cjs/fields/Rating/index.native.js +5 -2
- package/dist/cjs/fields/Rating/index.native.js.map +1 -1
- package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/cjs/fields/Rating/types.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +6 -0
- package/dist/cjs/fields/SearchInput/index.native.js +8 -2
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +88 -2
- package/dist/cjs/fields/Select/index.native.js +94 -6
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Signature/index.cjs +9 -5
- package/dist/cjs/fields/Signature/index.native.js +11 -7
- package/dist/cjs/fields/Signature/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.cjs +3 -1
- package/dist/cjs/fields/Slider/index.native.js +4 -2
- package/dist/cjs/fields/Slider/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/index.native.js +2 -2
- package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/cjs/fields/Switch/index.cjs +5 -18
- package/dist/cjs/fields/Switch/index.native.js +7 -20
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/cjs/fields/TextArea/index.cjs +19 -5
- package/dist/cjs/fields/TextArea/index.native.js +25 -7
- package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/catalog.cjs +203 -0
- package/dist/cjs/fields/TimePicker/catalog.native.js +227 -0
- package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -0
- package/dist/cjs/fields/TimePicker/index.cjs +6 -177
- package/dist/cjs/fields/TimePicker/index.native.js +75 -86
- package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
- 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.cjs +6 -0
- package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js +6 -0
- package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/index.cjs +34 -14
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js +40 -16
- 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.cjs +202 -0
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +211 -0
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.cjs +30 -0
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js +33 -0
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
- package/dist/cjs/fields/nativeSelect.cjs +30 -0
- package/dist/cjs/fields/nativeSelect.native.js +33 -0
- package/dist/cjs/fields/nativeSelect.native.js.map +1 -0
- 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 +1 -0
- package/dist/cjs/index.native.js +44 -43
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/requiredMarking.native.js.map +1 -1
- package/dist/cjs/shared/TimeColumn.native.js +1 -1
- package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
- package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/cjs/shared/colorRamps.native.js.map +1 -1
- package/dist/cjs/shared/devWarn.native.js.map +1 -1
- package/dist/cjs/shared/floatingList.native.js +1 -1
- package/dist/cjs/shared/floatingList.native.js.map +1 -1
- package/dist/cjs/shared/focusManagement.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/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/themedPrimitives.cjs +5 -0
- package/dist/cjs/themedPrimitives.native.js +5 -0
- package/dist/cjs/themedPrimitives.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/utils/LinkCell.native.js.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +9 -3
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +14 -3
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +1 -3
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +5 -3
- 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.mjs +19 -3
- package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/esm/ContextualSaveBar/index.native.js +19 -3
- 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.mjs +41 -13
- package/dist/esm/DescriptionList/index.mjs.map +1 -1
- package/dist/esm/DescriptionList/index.native.js +43 -13
- package/dist/esm/DescriptionList/index.native.js.map +1 -1
- package/dist/esm/ErrorSummary.mjs +5 -2
- package/dist/esm/ErrorSummary.mjs.map +1 -1
- package/dist/esm/ErrorSummary.native.js +5 -2
- package/dist/esm/ErrorSummary.native.js.map +1 -1
- package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
- package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
- package/dist/esm/FieldDisplay/index.native.js.map +1 -1
- package/dist/esm/FieldGroup.native.js.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs +24 -3
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +43 -3
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/Form/index.native.js.map +1 -1
- package/dist/esm/Form/validateOn.native.js.map +1 -1
- package/dist/esm/FormGrid.native.js.map +1 -1
- package/dist/esm/FormSection.native.js.map +1 -1
- package/dist/esm/InputParts/index.mjs +43 -3
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +43 -3
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Label/index.native.js.map +1 -1
- package/dist/esm/Skeleton/index.native.js.map +1 -1
- package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
- package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
- package/dist/esm/Table/index.native.js.map +1 -1
- package/dist/esm/Wheel/haptic.native.js.map +1 -1
- package/dist/esm/Wheel/index.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.mjs +5 -2
- package/dist/esm/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/Checkbox.native.js +6 -3
- 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.mjs +69 -59
- package/dist/esm/fields/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxGroup.native.js +75 -65
- package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/checkboxGroupContext.mjs +7 -0
- package/dist/esm/fields/Checkbox/checkboxGroupContext.mjs.map +1 -0
- package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js +7 -0
- package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
- package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +377 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +413 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.mjs +1 -375
- package/dist/esm/fields/DatePicker/DatetimePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js +65 -293
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.mjs +276 -0
- package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -0
- package/dist/esm/fields/DatePicker/catalog.native.js +317 -0
- package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -0
- package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/index.mjs +1 -274
- package/dist/esm/fields/DatePicker/index.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/index.native.js +60 -179
- package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/parts.mjs +13 -10
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +13 -10
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.mjs +29 -4
- package/dist/esm/fields/Duration/index.mjs.map +1 -1
- package/dist/esm/fields/Duration/index.native.js +29 -4
- package/dist/esm/fields/Duration/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/index.mjs +0 -1
- package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js +5 -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/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/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.mjs +9 -4
- package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js +13 -6
- package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/esm/fields/Progress/index.native.js.map +1 -1
- package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/index.mjs +2 -2
- package/dist/esm/fields/Rating/index.mjs.map +1 -1
- package/dist/esm/fields/Rating/index.native.js +5 -2
- package/dist/esm/fields/Rating/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/esm/fields/Rating/types.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.mjs +6 -0
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +6 -0
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +78 -3
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +80 -3
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Signature/index.mjs +10 -6
- package/dist/esm/fields/Signature/index.mjs.map +1 -1
- package/dist/esm/fields/Signature/index.native.js +10 -6
- package/dist/esm/fields/Signature/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.mjs +4 -2
- package/dist/esm/fields/Slider/index.mjs.map +1 -1
- package/dist/esm/fields/Slider/index.native.js +4 -2
- package/dist/esm/fields/Slider/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/esm/fields/Stepper/index.native.js.map +1 -1
- package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/esm/fields/Switch/index.mjs +6 -19
- package/dist/esm/fields/Switch/index.mjs.map +1 -1
- package/dist/esm/fields/Switch/index.native.js +6 -19
- package/dist/esm/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/fields/TextArea/index.mjs +19 -5
- package/dist/esm/fields/TextArea/index.mjs.map +1 -1
- package/dist/esm/fields/TextArea/index.native.js +23 -5
- package/dist/esm/fields/TextArea/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.mjs +174 -0
- package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -0
- package/dist/esm/fields/TimePicker/catalog.native.js +195 -0
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -0
- package/dist/esm/fields/TimePicker/index.mjs +2 -173
- package/dist/esm/fields/TimePicker/index.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/index.native.js +76 -87
- package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.mjs +6 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.mjs.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js +6 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.mjs +37 -18
- package/dist/esm/fields/TimeRangeScrubber/index.mjs.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.native.js +41 -18
- 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.mjs +166 -0
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -0
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +172 -0
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs +5 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js +5 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
- package/dist/esm/fields/nativeSelect.mjs +5 -0
- package/dist/esm/fields/nativeSelect.mjs.map +1 -0
- package/dist/esm/fields/nativeSelect.native.js +5 -0
- package/dist/esm/fields/nativeSelect.native.js.map +1 -0
- 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/requiredMarking.native.js.map +1 -1
- package/dist/esm/shared/TimeColumn.native.js.map +1 -1
- package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/esm/shared/colorRamps.native.js.map +1 -1
- package/dist/esm/shared/devWarn.native.js.map +1 -1
- package/dist/esm/shared/floatingList.native.js.map +1 -1
- package/dist/esm/shared/focusManagement.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/t.native.js.map +1 -1
- package/dist/esm/shared/tableCellContext.native.js.map +1 -1
- package/dist/esm/shared/useDragScroll.native.js.map +1 -1
- package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
- package/dist/esm/shared/utils.native.js.map +1 -1
- package/dist/esm/shared/zIndex.native.js.map +1 -1
- package/dist/esm/themedPrimitives.mjs +5 -0
- package/dist/esm/themedPrimitives.mjs.map +1 -1
- package/dist/esm/themedPrimitives.native.js +5 -0
- 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.native.js +1 -1
- package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +9 -3
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +14 -3
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +1 -3
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +5 -3
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
- package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.mjs +19 -3
- package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.native.js +22 -6
- package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
- package/dist/jsx/ControlGroup/index.native.js +1 -1
- package/dist/jsx/ControlGroup/index.native.js.map +1 -1
- package/dist/jsx/DescriptionList/index.mjs +41 -13
- package/dist/jsx/DescriptionList/index.mjs.map +1 -1
- package/dist/jsx/DescriptionList/index.native.js +45 -15
- package/dist/jsx/DescriptionList/index.native.js.map +1 -1
- package/dist/jsx/ErrorSummary.mjs +5 -2
- package/dist/jsx/ErrorSummary.mjs.map +1 -1
- package/dist/jsx/ErrorSummary.native.js +4 -1
- package/dist/jsx/ErrorSummary.native.js.map +1 -1
- package/dist/jsx/FieldDisplay/editMode.native.js.map +1 -1
- package/dist/jsx/FieldDisplay/formatters.native.js.map +1 -1
- package/dist/jsx/FieldDisplay/index.native.js +1 -1
- package/dist/jsx/FieldDisplay/index.native.js.map +1 -1
- package/dist/jsx/FieldGroup.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +24 -3
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +43 -2
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/jsx/Form/index.native.js +1 -1
- package/dist/jsx/Form/index.native.js.map +1 -1
- package/dist/jsx/Form/validateOn.native.js.map +1 -1
- package/dist/jsx/FormGrid.native.js.map +1 -1
- package/dist/jsx/FormSection.native.js.map +1 -1
- package/dist/jsx/InputParts/index.mjs +43 -3
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +42 -2
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/Label/index.native.js.map +1 -1
- package/dist/jsx/Skeleton/index.native.js.map +1 -1
- package/dist/jsx/Spinner/SpinnerGlyph.native.js.map +1 -1
- package/dist/jsx/Spinner/spinnerSize.native.js.map +1 -1
- package/dist/jsx/Table/index.native.js.map +1 -1
- package/dist/jsx/Wheel/haptic.native.js.map +1 -1
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/actionLabel.native.js.map +1 -1
- package/dist/jsx/fieldDefaults.native.js.map +1 -1
- package/dist/jsx/fieldLayout.native.js +1 -1
- package/dist/jsx/fieldLayout.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/BarcodeScanner.native.js +1 -1
- package/dist/jsx/fields/Barcode/code128.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/index.native.js +2 -2
- package/dist/jsx/fields/Barcode/index.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/qr.native.js.map +1 -1
- package/dist/jsx/fields/Barcode/scannerTypes.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/Checkbox.mjs +5 -2
- package/dist/jsx/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/Checkbox.native.js +7 -4
- package/dist/jsx/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxCard.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxGroup.mjs +69 -59
- package/dist/jsx/fields/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxGroup.native.js +76 -66
- package/dist/jsx/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.mjs +7 -0
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.mjs.map +1 -0
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.native.js +36 -0
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
- package/dist/jsx/fields/Checkbox/index.native.js.map +1 -1
- package/dist/jsx/fields/ColorPicker/index.native.js +3 -3
- package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/jsx/fields/ColorPicker/parts.native.js +2 -2
- package/dist/jsx/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +5 -5
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +377 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +441 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.mjs +1 -375
- package/dist/jsx/fields/DatePicker/DatetimePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +70 -298
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MonthPicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/catalog.mjs +276 -0
- package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -0
- package/dist/jsx/fields/DatePicker/catalog.native.js +350 -0
- package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -0
- package/dist/jsx/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/index.mjs +1 -274
- package/dist/jsx/fields/DatePicker/index.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js +67 -186
- package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +13 -10
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +14 -11
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/jsx/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/jsx/fields/Duration/index.mjs +29 -4
- package/dist/jsx/fields/Duration/index.mjs.map +1 -1
- package/dist/jsx/fields/Duration/index.native.js +32 -6
- package/dist/jsx/fields/Duration/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/index.mjs +0 -1
- package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/index.native.js +7 -3
- package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/geoValue.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/index.native.js +5 -5
- package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/mapMath.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/mapTypes.native.js.map +1 -1
- package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/jsx/fields/Icon/index.native.js +3 -3
- package/dist/jsx/fields/Icon/index.native.js.map +1 -1
- package/dist/jsx/fields/ImageField/index.native.js +2 -2
- package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +2 -2
- package/dist/jsx/fields/Input/index.native.js.map +1 -1
- package/dist/jsx/fields/MentionInput/index.native.js +3 -3
- package/dist/jsx/fields/MentionInput/index.native.js.map +1 -1
- package/dist/jsx/fields/OTPInput/index.native.js +3 -3
- package/dist/jsx/fields/OTPInput/index.native.js.map +1 -1
- package/dist/jsx/fields/OTPInput/otpCellCss.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/dialCodes.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.mjs +9 -4
- package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.native.js +16 -9
- package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/jsx/fields/Progress/index.native.js +1 -1
- package/dist/jsx/fields/Progress/index.native.js.map +1 -1
- package/dist/jsx/fields/RadioGroup/index.native.js +1 -1
- package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/Rating/index.mjs +2 -2
- package/dist/jsx/fields/Rating/index.mjs.map +1 -1
- package/dist/jsx/fields/Rating/index.native.js +5 -2
- package/dist/jsx/fields/Rating/index.native.js.map +1 -1
- package/dist/jsx/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/jsx/fields/Rating/types.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +6 -0
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +8 -2
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +78 -3
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +94 -6
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Signature/index.mjs +10 -6
- package/dist/jsx/fields/Signature/index.mjs.map +1 -1
- package/dist/jsx/fields/Signature/index.native.js +11 -7
- package/dist/jsx/fields/Signature/index.native.js.map +1 -1
- package/dist/jsx/fields/Slider/index.mjs +4 -2
- package/dist/jsx/fields/Slider/index.mjs.map +1 -1
- package/dist/jsx/fields/Slider/index.native.js +4 -2
- package/dist/jsx/fields/Slider/index.native.js.map +1 -1
- package/dist/jsx/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/jsx/fields/Stepper/index.native.js +2 -2
- package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
- package/dist/jsx/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/jsx/fields/Switch/index.mjs +6 -19
- package/dist/jsx/fields/Switch/index.mjs.map +1 -1
- package/dist/jsx/fields/Switch/index.native.js +7 -20
- package/dist/jsx/fields/Switch/index.native.js.map +1 -1
- package/dist/jsx/fields/TextArea/index.mjs +19 -5
- package/dist/jsx/fields/TextArea/index.mjs.map +1 -1
- package/dist/jsx/fields/TextArea/index.native.js +25 -7
- package/dist/jsx/fields/TextArea/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.mjs +174 -0
- package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -0
- package/dist/jsx/fields/TimePicker/catalog.native.js +227 -0
- package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -0
- package/dist/jsx/fields/TimePicker/index.mjs +2 -173
- package/dist/jsx/fields/TimePicker/index.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/index.native.js +75 -86
- package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/geometry.mjs +6 -1
- package/dist/jsx/fields/TimeRangeScrubber/geometry.mjs.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/geometry.native.js +6 -0
- package/dist/jsx/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/index.mjs +37 -18
- package/dist/jsx/fields/TimeRangeScrubber/index.mjs.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/index.native.js +40 -16
- package/dist/jsx/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js +1 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +166 -0
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -0
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +211 -0
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs +5 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js +33 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
- package/dist/jsx/fields/nativeSelect.mjs +5 -0
- package/dist/jsx/fields/nativeSelect.mjs.map +1 -0
- package/dist/jsx/fields/nativeSelect.native.js +33 -0
- package/dist/jsx/fields/nativeSelect.native.js.map +1 -0
- package/dist/jsx/fields/selectedOrder.native.js.map +1 -1
- package/dist/jsx/formSpacing.native.js.map +1 -1
- package/dist/jsx/hooks/useFocusManagement.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 +44 -43
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/requiredMarking.native.js.map +1 -1
- package/dist/jsx/shared/TimeColumn.native.js +1 -1
- package/dist/jsx/shared/TimeColumn.native.js.map +1 -1
- package/dist/jsx/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/jsx/shared/colorRamps.native.js.map +1 -1
- package/dist/jsx/shared/devWarn.native.js.map +1 -1
- package/dist/jsx/shared/floatingList.native.js +1 -1
- package/dist/jsx/shared/floatingList.native.js.map +1 -1
- package/dist/jsx/shared/focusManagement.native.js.map +1 -1
- package/dist/jsx/shared/groupContext.native.js.map +1 -1
- package/dist/jsx/shared/i18n.native.js.map +1 -1
- package/dist/jsx/shared/t.native.js.map +1 -1
- package/dist/jsx/shared/tableCellContext.native.js.map +1 -1
- package/dist/jsx/shared/useDragScroll.native.js.map +1 -1
- package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/jsx/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/dist/jsx/shared/useWheelIncrement.native.js.map +1 -1
- package/dist/jsx/shared/utils.native.js +1 -1
- package/dist/jsx/shared/utils.native.js.map +1 -1
- package/dist/jsx/shared/zIndex.native.js.map +1 -1
- package/dist/jsx/themedPrimitives.mjs +5 -0
- package/dist/jsx/themedPrimitives.mjs.map +1 -1
- package/dist/jsx/themedPrimitives.native.js +5 -0
- package/dist/jsx/themedPrimitives.native.js.map +1 -1
- package/dist/jsx/types.native.js.map +1 -1
- package/dist/jsx/utils/LinkCell.native.js.map +1 -1
- package/package.json +12 -9
- package/src/Button/Button.labelInk.spec.tsx +1 -1
- package/src/Button/Button.sizeLadder.spec.tsx +124 -0
- package/src/Button/Button.spec.tsx +7 -17
- package/src/Button/Button.stories.tsx +14 -0
- package/src/Button/index.tsx +24 -4
- package/src/Chip/Chip.spec.tsx +15 -0
- package/src/Chip/Chip.stories.tsx +251 -0
- package/src/Chip/index.tsx +5 -1
- package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +51 -0
- package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +42 -23
- package/src/ContextualSaveBar/UnsavedChangesDialog.spec.tsx +167 -0
- package/src/ContextualSaveBar/UnsavedChangesDialog.stories.tsx +118 -0
- package/src/ContextualSaveBar/index.tsx +14 -5
- package/src/ContextualSaveBar/unsavedChangesDialogStories.spec.tsx +79 -0
- package/src/DescriptionList/DescriptionList.spec.tsx +19 -1
- package/src/DescriptionList/DescriptionList.stories.tsx +5 -1
- package/src/DescriptionList/index.tsx +60 -20
- package/src/ErrorSummary.stories.tsx +197 -0
- package/src/ErrorSummary.tsx +5 -2
- package/src/FloatingPanel/panelWidthContract.spec.ts +2 -2
- package/src/FloatingPanel/useFloatingPanel.spec.tsx +199 -1
- package/src/FloatingPanel/useFloatingPanel.ts +45 -3
- package/src/InputParts/InputParts.stories.tsx +230 -0
- package/src/InputParts/index.tsx +56 -2
- package/src/InputParts/inputPartsStories.spec.tsx +122 -0
- package/src/Skeleton/Skeleton.stories.tsx +148 -0
- package/src/Skeleton/skeletonStories.spec.tsx +107 -0
- package/src/Spinner/SpinnerGlyph.spec.tsx +132 -0
- package/src/Wheel/Wheel.stories.tsx +232 -0
- package/src/Wheel/WheelEdgeFade.spec.tsx +141 -0
- package/src/Wheel/wheelStories.spec.tsx +143 -0
- package/src/errorSummaryStories.spec.tsx +114 -0
- package/src/fields/Checkbox/Checkbox.spec.tsx +24 -0
- package/src/fields/Checkbox/Checkbox.tsx +8 -3
- package/src/fields/Checkbox/CheckboxBox.spec.tsx +395 -0
- package/src/fields/Checkbox/CheckboxCard.spec.tsx +197 -0
- package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +116 -0
- package/src/fields/Checkbox/CheckboxGroup.stories.tsx +15 -0
- package/src/fields/Checkbox/CheckboxGroup.tsx +77 -70
- package/src/fields/Checkbox/checkboxGroupContext.ts +12 -0
- package/src/fields/DatePicker/Calendar.spec.tsx +6 -5
- package/src/fields/DatePicker/DatePicker.stories.tsx +13 -0
- package/src/fields/DatePicker/DatetimePicker.catalog.tsx +586 -0
- package/src/fields/DatePicker/DatetimePicker.native.tsx +243 -0
- package/src/fields/DatePicker/DatetimePicker.tsx +2 -584
- package/src/fields/DatePicker/catalog.tsx +450 -0
- package/src/fields/DatePicker/index.native.tsx +261 -0
- package/src/fields/DatePicker/index.tsx +20 -448
- package/src/fields/DatePicker/parts.tsx +11 -6
- package/src/fields/Duration/Duration.spec.tsx +50 -0
- package/src/fields/Duration/Duration.stories.tsx +21 -0
- package/src/fields/Duration/index.tsx +43 -5
- package/src/fields/FileUpload/index.tsx +5 -1
- package/src/fields/Input/Input.spec.tsx +3 -1
- package/src/fields/PhoneInput/PhoneInput.spec.tsx +16 -63
- package/src/fields/PhoneInput/PhoneInput.tvalue-source.spec.ts +23 -0
- package/src/fields/PhoneInput/index.tsx +10 -3
- package/src/fields/Rating/index.tsx +9 -1
- package/src/fields/SearchInput/SearchInput.spec.tsx +20 -0
- package/src/fields/SearchInput/index.tsx +6 -0
- package/src/fields/Select/Select.stories.tsx +23 -1
- package/src/fields/Select/index.tsx +87 -1
- package/src/fields/Signature/Signature.spec.tsx +22 -3
- package/src/fields/Signature/index.tsx +16 -7
- package/src/fields/Slider/index.tsx +4 -1
- package/src/fields/Switch/index.tsx +14 -12
- package/src/fields/TextArea/TextArea.spec.tsx +68 -0
- package/src/fields/TextArea/index.tsx +23 -5
- package/src/fields/TimePicker/TimePicker.stories.tsx +13 -0
- package/src/fields/TimePicker/catalog.tsx +265 -0
- package/src/fields/TimePicker/index.native.tsx +229 -0
- package/src/fields/TimePicker/index.tsx +6 -261
- package/src/fields/TimeRangeScrubber/TimeRangeScrubber.spec.tsx +36 -0
- package/src/fields/TimeRangeScrubber/geometry.ts +13 -0
- package/src/fields/TimeRangeScrubber/index.tsx +49 -8
- package/src/fields/nativeDateTime/OsDateTimeSheet.spec.ts +12 -0
- package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +197 -0
- package/src/fields/nativeDateTime/osDateTimeIosDisplay.ts +4 -0
- package/src/fields/nativeSelect.spec.ts +28 -0
- package/src/fields/nativeSelect.ts +13 -0
- package/src/index.ts +2 -2
- package/src/themedPrimitives.tsx +10 -6
- package/types/Button/index.d.ts +3 -2
- package/types/Button/index.d.ts.map +1 -1
- package/types/Chip/index.d.ts.map +1 -1
- package/types/ContextualSaveBar/index.d.ts.map +1 -1
- package/types/DescriptionList/index.d.ts.map +1 -1
- package/types/ErrorSummary.d.ts.map +1 -1
- package/types/FloatingPanel/useFloatingPanel.d.ts +13 -0
- package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/fields/Checkbox/Checkbox.d.ts.map +1 -1
- package/types/fields/Checkbox/CheckboxGroup.d.ts.map +1 -1
- package/types/fields/Checkbox/checkboxGroupContext.d.ts +8 -0
- package/types/fields/Checkbox/checkboxGroupContext.d.ts.map +1 -0
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +35 -0
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -0
- package/types/fields/DatePicker/DatetimePicker.d.ts +2 -32
- package/types/fields/DatePicker/DatetimePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.native.d.ts +26 -0
- package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -0
- package/types/fields/DatePicker/catalog.d.ts +42 -0
- package/types/fields/DatePicker/catalog.d.ts.map +1 -0
- package/types/fields/DatePicker/index.d.ts +2 -39
- package/types/fields/DatePicker/index.d.ts.map +1 -1
- package/types/fields/DatePicker/index.native.d.ts +40 -0
- package/types/fields/DatePicker/index.native.d.ts.map +1 -0
- package/types/fields/DatePicker/parts.d.ts.map +1 -1
- package/types/fields/Duration/index.d.ts +2 -0
- package/types/fields/Duration/index.d.ts.map +1 -1
- package/types/fields/FileUpload/index.d.ts.map +1 -1
- package/types/fields/PhoneInput/index.d.ts.map +1 -1
- package/types/fields/Rating/index.d.ts.map +1 -1
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts +6 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Signature/index.d.ts.map +1 -1
- package/types/fields/Slider/index.d.ts.map +1 -1
- package/types/fields/Switch/index.d.ts.map +1 -1
- package/types/fields/TextArea/index.d.ts.map +1 -1
- package/types/fields/TimePicker/catalog.d.ts +41 -0
- package/types/fields/TimePicker/catalog.d.ts.map +1 -0
- package/types/fields/TimePicker/index.d.ts +2 -38
- package/types/fields/TimePicker/index.d.ts.map +1 -1
- package/types/fields/TimePicker/index.native.d.ts +31 -0
- package/types/fields/TimePicker/index.native.d.ts.map +1 -0
- package/types/fields/TimeRangeScrubber/geometry.d.ts +8 -0
- package/types/fields/TimeRangeScrubber/geometry.d.ts.map +1 -1
- package/types/fields/TimeRangeScrubber/index.d.ts +1 -1
- package/types/fields/TimeRangeScrubber/index.d.ts.map +1 -1
- package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts +12 -0
- package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts.map +1 -0
- package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts +3 -0
- package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts.map +1 -0
- package/types/fields/nativeSelect.d.ts +12 -0
- package/types/fields/nativeSelect.d.ts.map +1 -0
- package/types/index.d.ts +2 -2
- package/types/index.d.ts.map +1 -1
- package/types/themedPrimitives.d.ts.map +1 -1
|
@@ -87,6 +87,15 @@ function purposeMaxCh(): number {
|
|
|
87
87
|
return LABEL_COLUMN_MAX_CH;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
function labelColumnGridTrack(width: string): string {
|
|
91
|
+
const prefix = "min(max-content,";
|
|
92
|
+
if (width.startsWith(prefix) && width.endsWith(")")) {
|
|
93
|
+
const inner = width.slice(prefix.length, -1).trim();
|
|
94
|
+
if (inner.endsWith("ch")) return `fit-content(${inner})`;
|
|
95
|
+
}
|
|
96
|
+
return width;
|
|
97
|
+
}
|
|
98
|
+
|
|
90
99
|
function listItemRhythm(density: string) {
|
|
91
100
|
const compact = density === "compact";
|
|
92
101
|
return {
|
|
@@ -152,7 +161,9 @@ function TermText({ children }: { children: ReactNode }) {
|
|
|
152
161
|
{...knobProps.body}
|
|
153
162
|
color="$color11"
|
|
154
163
|
minWidth={0}
|
|
155
|
-
|
|
164
|
+
// `overflowWrap` is not a tamagui style prop; passed as one it reaches
|
|
165
|
+
// the DOM host as an unknown React prop. Web takes it through `style`.
|
|
166
|
+
{...(isWeb ? { style: { overflowWrap: "break-word" } } : undefined)}
|
|
156
167
|
>
|
|
157
168
|
{children}
|
|
158
169
|
</Text>
|
|
@@ -320,18 +331,32 @@ function DescriptionListWeb({
|
|
|
320
331
|
placement: DescriptionListPlacement;
|
|
321
332
|
framed: boolean;
|
|
322
333
|
}) {
|
|
334
|
+
// Write tracks after commit: React's style setter (and invalid `min()`
|
|
335
|
+
// track syntax) otherwise leave a one-column computed grid.
|
|
336
|
+
const columns = stacked
|
|
337
|
+
? undefined
|
|
338
|
+
: hasAction
|
|
339
|
+
? `${labelColumnGridTrack(labelColumnWidth)} minmax(0, 1fr) max-content`
|
|
340
|
+
: `${labelColumnGridTrack(labelColumnWidth)} minmax(0, 1fr)`;
|
|
341
|
+
const listRef = useRef<HTMLDivElement>(null);
|
|
342
|
+
|
|
343
|
+
useLayoutEffect(() => {
|
|
344
|
+
const el = listRef.current;
|
|
345
|
+
if (!el) return;
|
|
346
|
+
if (columns) {
|
|
347
|
+
el.style.setProperty("grid-template-columns", columns);
|
|
348
|
+
} else {
|
|
349
|
+
el.style.removeProperty("grid-template-columns");
|
|
350
|
+
}
|
|
351
|
+
}, [columns]);
|
|
352
|
+
|
|
323
353
|
const style: CSSProperties = stacked
|
|
324
|
-
? { display: "block", width: "100%" }
|
|
325
|
-
: {
|
|
326
|
-
display: "grid",
|
|
327
|
-
gridTemplateColumns: hasAction
|
|
328
|
-
? `${labelColumnWidth} minmax(0, 1fr) max-content`
|
|
329
|
-
: `${labelColumnWidth} minmax(0, 1fr)`,
|
|
330
|
-
width: "100%",
|
|
331
|
-
};
|
|
354
|
+
? { display: "block", width: "100%", minWidth: 0 }
|
|
355
|
+
: { display: "grid", width: "100%", minWidth: 0 };
|
|
332
356
|
|
|
333
357
|
return (
|
|
334
|
-
<
|
|
358
|
+
<div
|
|
359
|
+
ref={listRef}
|
|
335
360
|
data-mpo-description-list=""
|
|
336
361
|
data-placement={placement}
|
|
337
362
|
data-stacked={stacked ? "true" : "false"}
|
|
@@ -342,8 +367,6 @@ function DescriptionListWeb({
|
|
|
342
367
|
data-label-column-width={labelColumnWidth}
|
|
343
368
|
data-density={density}
|
|
344
369
|
data-size={size}
|
|
345
|
-
width="100%"
|
|
346
|
-
minWidth={0}
|
|
347
370
|
style={style}
|
|
348
371
|
>
|
|
349
372
|
{rows.map((row, index) => (
|
|
@@ -357,17 +380,26 @@ function DescriptionListWeb({
|
|
|
357
380
|
quiet={quiet}
|
|
358
381
|
/>
|
|
359
382
|
))}
|
|
360
|
-
</
|
|
383
|
+
</div>
|
|
361
384
|
);
|
|
362
385
|
}
|
|
363
386
|
|
|
364
|
-
|
|
387
|
+
type HostLayoutEvent = { nativeEvent: { layout: { width: number } } };
|
|
388
|
+
|
|
389
|
+
function useContainerWide(enabled: boolean): {
|
|
390
|
+
ref: Ref<unknown>;
|
|
391
|
+
wide: boolean;
|
|
392
|
+
onLayout: ((event: HostLayoutEvent) => void) | undefined;
|
|
393
|
+
} {
|
|
365
394
|
const ref = useRef<HTMLDivElement>(null);
|
|
366
|
-
|
|
395
|
+
// Web assumes wide until measured (desktop stories). Native assumes stacked
|
|
396
|
+
// until onLayout — phones sit under the 480 collapse.
|
|
397
|
+
const [wide, setWide] = useState(isWeb);
|
|
367
398
|
|
|
368
399
|
useLayoutEffect(() => {
|
|
400
|
+
if (!isWeb || !enabled) return;
|
|
369
401
|
const el = ref.current;
|
|
370
|
-
if (!el
|
|
402
|
+
if (!el) {
|
|
371
403
|
setWide(true);
|
|
372
404
|
return;
|
|
373
405
|
}
|
|
@@ -392,7 +424,14 @@ function useContainerWide(enabled: boolean): { ref: Ref<unknown>; wide: boolean
|
|
|
392
424
|
return () => ro.disconnect();
|
|
393
425
|
}, [enabled]);
|
|
394
426
|
|
|
395
|
-
|
|
427
|
+
const onLayout =
|
|
428
|
+
!isWeb && enabled
|
|
429
|
+
? (event: HostLayoutEvent) => {
|
|
430
|
+
setWide(event.nativeEvent.layout.width >= FORM_GRID_COLLAPSE_WIDTH);
|
|
431
|
+
}
|
|
432
|
+
: undefined;
|
|
433
|
+
|
|
434
|
+
return { ref, wide, onLayout };
|
|
396
435
|
}
|
|
397
436
|
|
|
398
437
|
export function DescriptionList({
|
|
@@ -415,8 +454,8 @@ export function DescriptionList({
|
|
|
415
454
|
return itemsFromChildren(children);
|
|
416
455
|
}, [items, children]);
|
|
417
456
|
const hasAction = rows.some(rowHasAction);
|
|
418
|
-
const measureCollapse = placement === "side"
|
|
419
|
-
const { ref, wide } = useContainerWide(measureCollapse);
|
|
457
|
+
const measureCollapse = placement === "side";
|
|
458
|
+
const { ref, wide, onLayout } = useContainerWide(measureCollapse);
|
|
420
459
|
const stacked = placement === "top" || (placement === "side" && !wide);
|
|
421
460
|
|
|
422
461
|
const list = (
|
|
@@ -453,7 +492,7 @@ export function DescriptionList({
|
|
|
453
492
|
<DescriptionListRowView
|
|
454
493
|
key={index}
|
|
455
494
|
row={row}
|
|
456
|
-
stacked={
|
|
495
|
+
stacked={stacked}
|
|
457
496
|
hasActionColumn={hasAction}
|
|
458
497
|
rhythm={rhythm}
|
|
459
498
|
showRule={index > 0}
|
|
@@ -476,6 +515,7 @@ export function DescriptionList({
|
|
|
476
515
|
ref={ref as never}
|
|
477
516
|
data-mpo-description-list-host=""
|
|
478
517
|
data-testid={testID}
|
|
518
|
+
onLayout={onLayout}
|
|
479
519
|
minWidth={0}
|
|
480
520
|
{...widthProps}
|
|
481
521
|
{...(framed
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { action } from "@multiplatform.one/storybook";
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
3
|
+
import { useForm } from "@tanstack/react-form";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { Input as TamaguiInput, Paragraph, YStack } from "tamagui";
|
|
6
|
+
import { Button } from "./Button";
|
|
7
|
+
import { ErrorSummary, collectFormFieldErrors } from "./ErrorSummary";
|
|
8
|
+
import { FieldLayout } from "./fieldLayout";
|
|
9
|
+
import { Form } from "./Form";
|
|
10
|
+
import { FormSection } from "./FormSection";
|
|
11
|
+
|
|
12
|
+
const meta: Meta<typeof ErrorSummary> = {
|
|
13
|
+
title: "Forms/ErrorSummary",
|
|
14
|
+
component: ErrorSummary,
|
|
15
|
+
parameters: {
|
|
16
|
+
status: { type: "beta" },
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component:
|
|
20
|
+
'Form-level error summary (DG-VAL-02), the GOV.UK pattern. It lists every field error as a link that focuses the offending control, carries `role="alert"`, and takes keyboard focus itself the moment it appears — so a submit failure is announced once and the keyboard lands somewhere useful instead of at the top of the document.',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
argTypes: {
|
|
25
|
+
title: { control: "text" },
|
|
26
|
+
disableAutoFocus: { control: "boolean" },
|
|
27
|
+
},
|
|
28
|
+
args: {
|
|
29
|
+
disableAutoFocus: true,
|
|
30
|
+
errors: [
|
|
31
|
+
{ name: "email", error: "Enter an email address in the format name@example.com" },
|
|
32
|
+
{ name: "password", error: "Enter a password" },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default meta;
|
|
38
|
+
type Story = StoryObj<typeof ErrorSummary>;
|
|
39
|
+
|
|
40
|
+
export const Basic: Story = {
|
|
41
|
+
render: (args) => (
|
|
42
|
+
<YStack maxWidth={520}>
|
|
43
|
+
<ErrorSummary {...args} onFocusField={action("onFocusField")} />
|
|
44
|
+
</YStack>
|
|
45
|
+
),
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Structured errors (DG-VAL-04): a validator may return `{ problem, action }`
|
|
50
|
+
* instead of a string, and the summary flattens the pair into one sentence —
|
|
51
|
+
* what is wrong, then what to do about it.
|
|
52
|
+
*/
|
|
53
|
+
export const StructuredErrors: Story = {
|
|
54
|
+
render: () => (
|
|
55
|
+
<YStack maxWidth={520}>
|
|
56
|
+
<ErrorSummary
|
|
57
|
+
disableAutoFocus
|
|
58
|
+
errors={[
|
|
59
|
+
{
|
|
60
|
+
name: "vatNumber",
|
|
61
|
+
error: {
|
|
62
|
+
problem: "That VAT number is not registered.",
|
|
63
|
+
action: "Check it against your registration certificate.",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "startDate",
|
|
68
|
+
error: { problem: "The start date is in the past." },
|
|
69
|
+
},
|
|
70
|
+
]}
|
|
71
|
+
onFocusField={action("onFocusField")}
|
|
72
|
+
/>
|
|
73
|
+
</YStack>
|
|
74
|
+
),
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/** A custom `label` overrides the link text without touching the error payload. */
|
|
78
|
+
export const CustomLabels: Story = {
|
|
79
|
+
render: () => (
|
|
80
|
+
<YStack maxWidth={520}>
|
|
81
|
+
<ErrorSummary
|
|
82
|
+
disableAutoFocus
|
|
83
|
+
title="Check these before continuing"
|
|
84
|
+
errors={[
|
|
85
|
+
{ name: "email", label: "Email address", error: "Enter an email address" },
|
|
86
|
+
{ name: "phone", label: "Phone number", error: "Enter a phone number" },
|
|
87
|
+
]}
|
|
88
|
+
onFocusField={action("onFocusField")}
|
|
89
|
+
/>
|
|
90
|
+
</YStack>
|
|
91
|
+
),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/** One error, the common case after a single missed required field. */
|
|
95
|
+
export const SingleError: Story = {
|
|
96
|
+
render: () => (
|
|
97
|
+
<YStack maxWidth={520}>
|
|
98
|
+
<ErrorSummary
|
|
99
|
+
disableAutoFocus
|
|
100
|
+
errors={[{ name: "terms", error: "You must accept the terms to continue" }]}
|
|
101
|
+
onFocusField={action("onFocusField")}
|
|
102
|
+
/>
|
|
103
|
+
</YStack>
|
|
104
|
+
),
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/** An empty list renders nothing at all — no empty banner, no reserved space. */
|
|
108
|
+
export const EmptyRendersNothing: Story = {
|
|
109
|
+
render: () => (
|
|
110
|
+
<YStack maxWidth={520} gap="$3">
|
|
111
|
+
<Paragraph size="$3">Nothing should paint between these two lines.</Paragraph>
|
|
112
|
+
<ErrorSummary errors={[]} />
|
|
113
|
+
<Paragraph size="$3">Second line.</Paragraph>
|
|
114
|
+
</YStack>
|
|
115
|
+
),
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The live loop: submit empty, the summary appears, and clicking a link puts
|
|
120
|
+
* the caret in the field that caused it. `collectFormFieldErrors` turns
|
|
121
|
+
* TanStack `fieldMeta` into the item list.
|
|
122
|
+
*/
|
|
123
|
+
export const FocusesTheFieldOnPress: Story = {
|
|
124
|
+
render: () => {
|
|
125
|
+
const Example = () => {
|
|
126
|
+
const [errors, setErrors] = useState<ReturnType<typeof collectFormFieldErrors>>([]);
|
|
127
|
+
const form = useForm({
|
|
128
|
+
defaultValues: { email: "", password: "" },
|
|
129
|
+
onSubmit: async ({ value }) => {
|
|
130
|
+
action("onSubmit")(value);
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
const submit = () => {
|
|
134
|
+
const next = collectFormFieldErrors({
|
|
135
|
+
email: { errors: [form.state.values.email ? undefined : "Enter an email address"] },
|
|
136
|
+
password: { errors: [form.state.values.password ? undefined : "Enter a password"] },
|
|
137
|
+
});
|
|
138
|
+
setErrors(next);
|
|
139
|
+
if (next.length === 0) void form.handleSubmit();
|
|
140
|
+
};
|
|
141
|
+
return (
|
|
142
|
+
<Form form={form}>
|
|
143
|
+
<YStack maxWidth={520} gap="$4">
|
|
144
|
+
<ErrorSummary errors={errors} disableAutoFocus onFocusField={action("onFocusField")} />
|
|
145
|
+
<FormSection label="Sign in">
|
|
146
|
+
<FieldLayout id="email" label="Email">
|
|
147
|
+
<TamaguiInput
|
|
148
|
+
id="email"
|
|
149
|
+
placeholder="you@example.com"
|
|
150
|
+
onChangeText={(text) => form.setFieldValue("email", text)}
|
|
151
|
+
/>
|
|
152
|
+
</FieldLayout>
|
|
153
|
+
<FieldLayout id="password" label="Password">
|
|
154
|
+
<TamaguiInput
|
|
155
|
+
id="password"
|
|
156
|
+
secureTextEntry
|
|
157
|
+
onChangeText={(text) => form.setFieldValue("password", text)}
|
|
158
|
+
/>
|
|
159
|
+
</FieldLayout>
|
|
160
|
+
</FormSection>
|
|
161
|
+
<Button onPress={submit}>Submit</Button>
|
|
162
|
+
</YStack>
|
|
163
|
+
</Form>
|
|
164
|
+
);
|
|
165
|
+
};
|
|
166
|
+
return <Example />;
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* `disableAutoFocus` off is the shipping default: the summary steals focus so
|
|
172
|
+
* a screen reader announces it. Toggle the control to feel the difference.
|
|
173
|
+
*/
|
|
174
|
+
export const AutoFocusOnAppear: Story = {
|
|
175
|
+
render: () => {
|
|
176
|
+
const Example = () => {
|
|
177
|
+
const [shown, setShown] = useState(false);
|
|
178
|
+
return (
|
|
179
|
+
<YStack maxWidth={520} gap="$4">
|
|
180
|
+
<Button onPress={() => setShown((prev) => !prev)}>
|
|
181
|
+
{shown ? "Hide the summary" : "Show the summary"}
|
|
182
|
+
</Button>
|
|
183
|
+
{shown ? (
|
|
184
|
+
<ErrorSummary
|
|
185
|
+
errors={[
|
|
186
|
+
{ name: "email", error: "Enter an email address" },
|
|
187
|
+
{ name: "postcode", error: "Enter a postcode" },
|
|
188
|
+
]}
|
|
189
|
+
onFocusField={action("onFocusField")}
|
|
190
|
+
/>
|
|
191
|
+
) : null}
|
|
192
|
+
</YStack>
|
|
193
|
+
);
|
|
194
|
+
};
|
|
195
|
+
return <Example />;
|
|
196
|
+
},
|
|
197
|
+
};
|
package/src/ErrorSummary.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
1
|
+
import { FOCUS_RING_HALO_OFFSET, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
2
2
|
import { WarningCircleIcon } from "@phosphor-icons/react";
|
|
3
3
|
import { type ReactNode, useEffect, useId, useRef } from "react";
|
|
4
4
|
import { Anchor, H4, Paragraph, YStack, isWeb } from "tamagui";
|
|
@@ -152,7 +152,10 @@ export function ErrorSummary({
|
|
|
152
152
|
outlineWidth: 2,
|
|
153
153
|
outlineStyle: "solid",
|
|
154
154
|
outlineColor: "$color8",
|
|
155
|
-
|
|
155
|
+
// LC-71 §4 halo: inline text link. The summary sits in a run of prose,
|
|
156
|
+
// so a band at offset 0 crosses the line box and collides with the
|
|
157
|
+
// ascenders/descenders around it.
|
|
158
|
+
outlineOffset: FOCUS_RING_HALO_OFFSET,
|
|
156
159
|
}}
|
|
157
160
|
data-testid="error-summary"
|
|
158
161
|
>
|
|
@@ -24,8 +24,8 @@ const fieldsDir = resolve(dirname(fileURLToPath(import.meta.url)), "..", "fields
|
|
|
24
24
|
/** Pickers whose trigger is a form FIELD: the panel may never be narrower. */
|
|
25
25
|
const fieldShapedPickers = [
|
|
26
26
|
"DatePicker/parts.tsx",
|
|
27
|
-
"DatePicker/DatetimePicker.tsx",
|
|
28
|
-
"TimePicker/
|
|
27
|
+
"DatePicker/DatetimePicker.catalog.tsx",
|
|
28
|
+
"TimePicker/catalog.tsx",
|
|
29
29
|
"ColorPicker/parts.tsx",
|
|
30
30
|
"Icon/index.tsx",
|
|
31
31
|
];
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { waitFor } from "@testing-library/react";
|
|
17
17
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
18
|
-
import { describe, expect, it } from "vitest";
|
|
18
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
19
19
|
import {
|
|
20
20
|
type PanelWidthMode,
|
|
21
|
+
measureDrawnRadius,
|
|
21
22
|
panelAnchorOffset,
|
|
22
23
|
resolvePanelWidthMode,
|
|
23
24
|
useFloatingPanel,
|
|
@@ -166,3 +167,200 @@ describe("FloatingPanel width modes (MPO-38)", () => {
|
|
|
166
167
|
expect(result.getByTestId("anchor-floating").style.minWidth).toBe("");
|
|
167
168
|
});
|
|
168
169
|
});
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Drawn-radius equality (MPO-129).
|
|
173
|
+
*
|
|
174
|
+
* The panel wears the arc the TRIGGER actually draws, and the box the panel
|
|
175
|
+
* anchors to is not always the box that paints. `FloatingPanelWeb` hands
|
|
176
|
+
* `setReferenceRef` to a layout-only `<View>` around the caller's `trigger`
|
|
177
|
+
* slot, so reading the anchor's own computed radius returned 0px and
|
|
178
|
+
* `min(0, h/2, w/2)` pinned every consumer's panel to a square corner at
|
|
179
|
+
* EVERY stop — measured on origin/main 3bb889f32: trigger 5/9/16/50px,
|
|
180
|
+
* panel 0px, in light and dark.
|
|
181
|
+
*
|
|
182
|
+
* These cases lock the three behaviours that fix depends on, so the zero
|
|
183
|
+
* cannot come back: the anchor's own paint wins when it has one (the
|
|
184
|
+
* Select/Combobox path, which was never broken), an unpainted anchor
|
|
185
|
+
* descends to the box sharing its corner, and an anchor with nothing painted
|
|
186
|
+
* anywhere returns null so the caller falls back to the CLAMPED TOKEN rather
|
|
187
|
+
* than to zero.
|
|
188
|
+
*
|
|
189
|
+
* FIXTURE FIDELITY, and it is load-bearing. jsdom reports an UNSET
|
|
190
|
+
* `borderTopLeftRadius` as the empty string; a browser reports "0px". The old
|
|
191
|
+
* implementation ran `parseFloat` on that value, so on an unstyled jsdom node
|
|
192
|
+
* it saw NaN and returned null — accidentally the right answer — while in a
|
|
193
|
+
* browser it saw 0 and returned a measured 0 that beat the token fallback.
|
|
194
|
+
* That is the bug. So every layout-only wrapper below sets
|
|
195
|
+
* `borderTopLeftRadius: "0px"` explicitly: without it these cases pass against
|
|
196
|
+
* the broken implementation and lock nothing.
|
|
197
|
+
*/
|
|
198
|
+
function boxed(
|
|
199
|
+
el: HTMLElement,
|
|
200
|
+
rect: { x: number; y: number; width: number; height: number },
|
|
201
|
+
style: Partial<CSSStyleDeclaration>,
|
|
202
|
+
) {
|
|
203
|
+
mockRect(el, rect);
|
|
204
|
+
Object.assign(el.style, style);
|
|
205
|
+
return el;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** jsdom resolves computed style only for ATTACHED nodes, and the fix reads
|
|
209
|
+
* computed style — so the fixture has to live in the document. */
|
|
210
|
+
function mounted(el: HTMLElement) {
|
|
211
|
+
document.body.appendChild(el);
|
|
212
|
+
return el;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
describe("FloatingPanel drawn radius (MPO-129)", () => {
|
|
216
|
+
afterEach(() => {
|
|
217
|
+
document.body.innerHTML = "";
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("reads the anchor itself when the anchor is the painted control", () => {
|
|
221
|
+
// Select and Combobox spread the reference onto InputParts.Box. That path
|
|
222
|
+
// was correct before this fix and must stay byte-for-byte correct after.
|
|
223
|
+
const anchor = mounted(
|
|
224
|
+
boxed(
|
|
225
|
+
document.createElement("div"),
|
|
226
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
227
|
+
{
|
|
228
|
+
borderTopLeftRadius: "9px",
|
|
229
|
+
backgroundColor: "rgb(255, 255, 255)",
|
|
230
|
+
},
|
|
231
|
+
),
|
|
232
|
+
);
|
|
233
|
+
expect(measureDrawnRadius(anchor)).toBe(9);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it("descends to the painted trigger when the anchor is a layout-only wrapper", () => {
|
|
237
|
+
// The regression itself: wrapper draws nothing, Button draws 16px.
|
|
238
|
+
const wrapper = mounted(
|
|
239
|
+
boxed(
|
|
240
|
+
document.createElement("div"),
|
|
241
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
242
|
+
{
|
|
243
|
+
// A browser reports "0px" here; jsdom leaves it "". Without this the
|
|
244
|
+
// fixture is not the box the bug happens on — see the note above.
|
|
245
|
+
borderTopLeftRadius: "0px",
|
|
246
|
+
cursor: "pointer",
|
|
247
|
+
opacity: "1",
|
|
248
|
+
},
|
|
249
|
+
),
|
|
250
|
+
);
|
|
251
|
+
const button = boxed(
|
|
252
|
+
document.createElement("div"),
|
|
253
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
254
|
+
{
|
|
255
|
+
borderTopLeftRadius: "16px",
|
|
256
|
+
backgroundColor: "rgb(240, 240, 240)",
|
|
257
|
+
},
|
|
258
|
+
);
|
|
259
|
+
wrapper.appendChild(button);
|
|
260
|
+
expect(measureDrawnRadius(wrapper)).toBe(16);
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it("clamps the descended radius to the painted trigger's own half-height", () => {
|
|
264
|
+
// `full` asks for 50px on a 44px control; CSS draws 22px, so the panel
|
|
265
|
+
// must draw 22px too — matching a 50px arc would not coincide.
|
|
266
|
+
const wrapper = mounted(
|
|
267
|
+
boxed(
|
|
268
|
+
document.createElement("div"),
|
|
269
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
270
|
+
{
|
|
271
|
+
// A browser reports "0px" here; jsdom leaves it "". Without this the
|
|
272
|
+
// fixture is not the box the bug happens on — see the note above.
|
|
273
|
+
borderTopLeftRadius: "0px",
|
|
274
|
+
cursor: "pointer",
|
|
275
|
+
},
|
|
276
|
+
),
|
|
277
|
+
);
|
|
278
|
+
const button = boxed(
|
|
279
|
+
document.createElement("div"),
|
|
280
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
281
|
+
{
|
|
282
|
+
borderTopLeftRadius: "50px",
|
|
283
|
+
backgroundColor: "rgb(240, 240, 240)",
|
|
284
|
+
},
|
|
285
|
+
);
|
|
286
|
+
wrapper.appendChild(button);
|
|
287
|
+
expect(measureDrawnRadius(wrapper)).toBe(22);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
it("keeps a square corner square rather than inventing one", () => {
|
|
291
|
+
const wrapper = mounted(
|
|
292
|
+
boxed(
|
|
293
|
+
document.createElement("div"),
|
|
294
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
295
|
+
{
|
|
296
|
+
// A browser reports "0px" here; jsdom leaves it "". Without this the
|
|
297
|
+
// fixture is not the box the bug happens on — see the note above.
|
|
298
|
+
borderTopLeftRadius: "0px",
|
|
299
|
+
cursor: "pointer",
|
|
300
|
+
},
|
|
301
|
+
),
|
|
302
|
+
);
|
|
303
|
+
const button = boxed(
|
|
304
|
+
document.createElement("div"),
|
|
305
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
306
|
+
{
|
|
307
|
+
borderTopLeftRadius: "0px",
|
|
308
|
+
backgroundColor: "rgb(240, 240, 240)",
|
|
309
|
+
},
|
|
310
|
+
);
|
|
311
|
+
wrapper.appendChild(button);
|
|
312
|
+
expect(measureDrawnRadius(wrapper)).toBe(0);
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
it("ignores a painted descendant that does not share the anchor's corner", () => {
|
|
316
|
+
// An inset swatch is not the corner the panel meets. Nothing else paints,
|
|
317
|
+
// so this resolves to the token fallback, not to the swatch's radius.
|
|
318
|
+
const wrapper = mounted(
|
|
319
|
+
boxed(
|
|
320
|
+
document.createElement("div"),
|
|
321
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
322
|
+
{
|
|
323
|
+
// A browser reports "0px" here; jsdom leaves it "". Without this the
|
|
324
|
+
// fixture is not the box the bug happens on — see the note above.
|
|
325
|
+
borderTopLeftRadius: "0px",
|
|
326
|
+
cursor: "pointer",
|
|
327
|
+
},
|
|
328
|
+
),
|
|
329
|
+
);
|
|
330
|
+
const swatch = boxed(
|
|
331
|
+
document.createElement("div"),
|
|
332
|
+
{ x: 12, y: 12, width: 20, height: 20 },
|
|
333
|
+
{
|
|
334
|
+
borderTopLeftRadius: "10px",
|
|
335
|
+
backgroundColor: "rgb(255, 0, 0)",
|
|
336
|
+
},
|
|
337
|
+
);
|
|
338
|
+
wrapper.appendChild(swatch);
|
|
339
|
+
expect(measureDrawnRadius(wrapper)).toBeNull();
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it("returns null — never 0 — when nothing under the anchor paints a corner", () => {
|
|
343
|
+
// This is the whole bug in one assertion. A measured 0 wins over the
|
|
344
|
+
// token fallback because `measuredRadius ?? clampDropdownRadius(token)`
|
|
345
|
+
// only falls back on null, so returning 0 here squares every panel.
|
|
346
|
+
const wrapper = mounted(
|
|
347
|
+
boxed(
|
|
348
|
+
document.createElement("div"),
|
|
349
|
+
{ x: 0, y: 0, width: 240, height: 44 },
|
|
350
|
+
{
|
|
351
|
+
// A browser reports "0px" here; jsdom leaves it "". Without this the
|
|
352
|
+
// fixture is not the box the bug happens on — see the note above.
|
|
353
|
+
borderTopLeftRadius: "0px",
|
|
354
|
+
cursor: "pointer",
|
|
355
|
+
},
|
|
356
|
+
),
|
|
357
|
+
);
|
|
358
|
+
wrapper.appendChild(
|
|
359
|
+
boxed(document.createElement("span"), { x: 0, y: 0, width: 60, height: 20 }, {}),
|
|
360
|
+
);
|
|
361
|
+
// Guard the premise: if this ever reads "" again the case below goes green
|
|
362
|
+
// against a broken implementation, exactly as it did before MPO-129.
|
|
363
|
+
expect(getComputedStyle(wrapper).borderTopLeftRadius).toBe("0px");
|
|
364
|
+
expect(measureDrawnRadius(wrapper)).toBeNull();
|
|
365
|
+
});
|
|
366
|
+
});
|
|
@@ -141,6 +141,42 @@ export interface UseFloatingPanelReturn {
|
|
|
141
141
|
|
|
142
142
|
// ── Hook ──────────────────────────────────────────────────────
|
|
143
143
|
|
|
144
|
+
/** A box paints a corner if it draws a radius, a border or a background. */
|
|
145
|
+
function paintsACorner(el: HTMLElement): boolean {
|
|
146
|
+
const cs = getComputedStyle(el);
|
|
147
|
+
if (Number.parseFloat(cs.borderTopLeftRadius) > 0) return true;
|
|
148
|
+
if (Number.parseFloat(cs.borderTopWidth) > 0 && cs.borderTopStyle !== "none") return true;
|
|
149
|
+
const bg = cs.backgroundColor;
|
|
150
|
+
return !!bg && bg !== "transparent" && bg !== "rgba(0, 0, 0, 0)";
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The element the panel ANCHORS to is not always the element that PAINTS
|
|
155
|
+
* (MPO-129). `FloatingPanelWeb` hands `setReferenceRef` to a layout-only
|
|
156
|
+
* `<View>` wrapping the caller's `trigger` slot — it carries cursor and
|
|
157
|
+
* opacity and draws nothing — so reading its computed radius returns 0px and
|
|
158
|
+
* `min(0, h/2, w/2)` pins the panel to a square corner at EVERY stop, not
|
|
159
|
+
* just at `full`. Select and Combobox escape it only because they spread the
|
|
160
|
+
* reference onto `InputParts.Box`, which is the painted control itself.
|
|
161
|
+
*
|
|
162
|
+
* Positioning still measures the wrapper (that is the cover contract's box —
|
|
163
|
+
* a ColorPicker read from its swatch would measure the swatch's inset).
|
|
164
|
+
* Only the ARC descends: to the outermost box that shares the anchor's own
|
|
165
|
+
* top-left corner and actually paints one. Nothing painted → null, so the
|
|
166
|
+
* caller falls back to the clamped token rather than to zero.
|
|
167
|
+
*/
|
|
168
|
+
function paintedCornerBox(root: HTMLElement): HTMLElement | null {
|
|
169
|
+
if (paintsACorner(root)) return root;
|
|
170
|
+
const rootRect = root.getBoundingClientRect();
|
|
171
|
+
for (const el of Array.from(root.querySelectorAll<HTMLElement>("*"))) {
|
|
172
|
+
const rect = el.getBoundingClientRect();
|
|
173
|
+
if (rect.width <= 0 || rect.height <= 0) continue;
|
|
174
|
+
if (Math.abs(rect.left - rootRect.left) > 1 || Math.abs(rect.top - rootRect.top) > 1) continue;
|
|
175
|
+
if (paintsACorner(el)) return el;
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
|
|
144
180
|
/**
|
|
145
181
|
* OVERLAY_ANCHOR_GAP rule — radius equality: a panel that aligns to (or
|
|
146
182
|
* covers) its trigger must draw the SAME corner arc as the trigger at the
|
|
@@ -149,11 +185,17 @@ export interface UseFloatingPanelReturn {
|
|
|
149
185
|
* ~22px arcs on a 44px-high field while a token-styled panel would draw its
|
|
150
186
|
* own, different arc. Measure the trigger's effective (drawn) radius
|
|
151
187
|
* instead and hand that px value to the panel.
|
|
188
|
+
*
|
|
189
|
+
* Exported for `useFloatingPanel.spec.tsx`: the arc is measured, not
|
|
190
|
+
* declared, so the only way to lock it is to feed it real boxes.
|
|
152
191
|
*/
|
|
153
|
-
function measureDrawnRadius(el: HTMLElement): number | null {
|
|
154
|
-
const
|
|
192
|
+
export function measureDrawnRadius(el: HTMLElement): number | null {
|
|
193
|
+
const box = paintedCornerBox(el);
|
|
194
|
+
if (!box) return null;
|
|
195
|
+
const raw = parseFloat(getComputedStyle(box).borderTopLeftRadius);
|
|
155
196
|
if (!Number.isFinite(raw)) return null;
|
|
156
|
-
const rect =
|
|
197
|
+
const rect = box.getBoundingClientRect();
|
|
198
|
+
if (rect.width <= 0 || rect.height <= 0) return null;
|
|
157
199
|
return Math.min(raw, rect.height / 2, rect.width / 2);
|
|
158
200
|
}
|
|
159
201
|
|