@multiplatform.one/forms 7.6.3 → 7.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AdaptivePopup/index.native.js +1 -1
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/index.cjs +7 -1
- package/dist/cjs/Button/index.native.js +8 -2
- 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 +38 -12
- package/dist/cjs/DescriptionList/index.native.js +40 -14
- 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.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/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 +75 -2
- package/dist/cjs/fields/Select/index.native.js +81 -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 +8 -2
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +8 -2
- 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 +38 -12
- package/dist/esm/DescriptionList/index.mjs.map +1 -1
- package/dist/esm/DescriptionList/index.native.js +38 -12
- 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.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 +76 -3
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +78 -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/Button/index.mjs +8 -2
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +7 -1
- 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/index.mjs +19 -3
- package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.native.js +19 -3
- package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/jsx/DescriptionList/index.mjs +38 -12
- package/dist/jsx/DescriptionList/index.mjs.map +1 -1
- package/dist/jsx/DescriptionList/index.native.js +38 -12
- 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/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/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/fields/Checkbox/Checkbox.mjs +5 -2
- package/dist/jsx/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/Checkbox.native.js +6 -3
- package/dist/jsx/fields/Checkbox/Checkbox.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 +75 -65
- 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/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 +69 -297
- package/dist/jsx/fields/DatePicker/DatetimePicker.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/index.mjs +1 -274
- package/dist/jsx/fields/DatePicker/index.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js +66 -185
- 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 +12 -9
- package/dist/jsx/fields/DatePicker/parts.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 +29 -3
- package/dist/jsx/fields/Duration/index.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 +13 -6
- package/dist/jsx/fields/PhoneInput/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 +4 -1
- package/dist/jsx/fields/Rating/index.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 +6 -0
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +76 -3
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +77 -2
- 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 +9 -5
- 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 +3 -1
- package/dist/jsx/fields/Slider/index.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 +5 -18
- 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 +23 -5
- 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 +74 -85
- package/dist/jsx/fields/TimePicker/index.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 +38 -14
- package/dist/jsx/fields/TimeRangeScrubber/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/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 +1 -0
- package/dist/jsx/index.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/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 +18 -3
- 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/index.tsx +14 -5
- package/src/DescriptionList/DescriptionList.spec.tsx +19 -1
- package/src/DescriptionList/DescriptionList.stories.tsx +5 -1
- package/src/DescriptionList/index.tsx +57 -19
- 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/index.tsx +56 -2
- package/src/Spinner/SpinnerGlyph.spec.tsx +132 -0
- package/src/Wheel/WheelEdgeFade.spec.tsx +141 -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/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 +77 -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/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
|
@@ -343,6 +343,30 @@ describe("CheckboxGroup", () => {
|
|
|
343
343
|
});
|
|
344
344
|
});
|
|
345
345
|
|
|
346
|
+
it("E-FLAT: group glyphs stay unwrapped at elevation large; standalone Checkbox still wraps", () => {
|
|
347
|
+
const result = renderWithProviders(
|
|
348
|
+
<Preset overrides={{ elevation: "large" }}>
|
|
349
|
+
<div data-testid="group">
|
|
350
|
+
<CheckboxGroup label="Group" options={options} defaultValue={["a"]} />
|
|
351
|
+
</div>
|
|
352
|
+
<div data-testid="solo">
|
|
353
|
+
<Checkbox label="Solo" checked />
|
|
354
|
+
</div>
|
|
355
|
+
</Preset>,
|
|
356
|
+
);
|
|
357
|
+
const groupBox = result.container
|
|
358
|
+
.querySelector("[data-testid='group']")
|
|
359
|
+
?.querySelector("[data-checkbox-box='true']");
|
|
360
|
+
expect(groupBox).toBeTruthy();
|
|
361
|
+
expect(groupBox!.parentElement?.getAttribute("role")).toBe("checkbox");
|
|
362
|
+
|
|
363
|
+
const soloBox = result.container
|
|
364
|
+
.querySelector("[data-testid='solo']")
|
|
365
|
+
?.querySelector("[data-checkbox-box='true']");
|
|
366
|
+
expect(soloBox).toBeTruthy();
|
|
367
|
+
expect(soloBox!.parentElement?.getAttribute("role")).not.toBe("checkbox");
|
|
368
|
+
});
|
|
369
|
+
|
|
346
370
|
describe("compound Checkboxes LC-71", () => {
|
|
347
371
|
it("keyboard focus rings the box, never the focus-group item", async () => {
|
|
348
372
|
const spy = vi.spyOn(Theme, "wasKeyboardFocus").mockReturnValue(true);
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
useTheme,
|
|
21
21
|
} from "tamagui";
|
|
22
22
|
import { useIsInTableCell } from "../../shared/tableCellContext";
|
|
23
|
+
import { useCheckboxGroupSkipsElevation } from "./checkboxGroupContext";
|
|
23
24
|
import { Skeleton } from "../../Skeleton";
|
|
24
25
|
import { Field, FieldLayout } from "../../fieldLayout";
|
|
25
26
|
import { formCommonColors, formSelectedColors } from "../../shared/colorRamps";
|
|
@@ -149,9 +150,14 @@ export function Checkbox({
|
|
|
149
150
|
const labelFocusStyle = { color: baseLabelColor, ...text.focusKnobProps };
|
|
150
151
|
const labelFocusVisibleStyle = { color: baseLabelColor, ...text.focusVisibleKnobProps };
|
|
151
152
|
const tamaguiTheme = useTheme();
|
|
153
|
+
// E-FLAT: table cells and CheckboxGroup items ignore elevation. Skip the
|
|
154
|
+
// shared helper rather than changing it (MPO-96 owns default `small`).
|
|
155
|
+
const inTableCell = useIsInTableCell();
|
|
156
|
+
const inCheckboxGroup = useCheckboxGroupSkipsElevation();
|
|
157
|
+
const skipElevation = inTableCell || inCheckboxGroup;
|
|
152
158
|
const elevationWrapperProps = useMemo(
|
|
153
|
-
() => getElevationWrapperProps(knobProps, elevation),
|
|
154
|
-
[knobProps, elevation],
|
|
159
|
+
() => (skipElevation ? {} : getElevationWrapperProps(knobProps, elevation)),
|
|
160
|
+
[skipElevation, knobProps, elevation],
|
|
155
161
|
);
|
|
156
162
|
const accentTokenKey = (knobProps.textAccentColor ?? "$color").replace("$", "");
|
|
157
163
|
const indicatorColor = getVariable(
|
|
@@ -207,7 +213,6 @@ export function Checkbox({
|
|
|
207
213
|
// checkbox's own computed size (tamagui scaleSize 0.45), so visual density
|
|
208
214
|
// is unchanged. Cells (chromeless) and plain forms share the treatment —
|
|
209
215
|
// the earlier cell-only split left the plain checkbox at a 20px target.
|
|
210
|
-
const inTableCell = useIsInTableCell();
|
|
211
216
|
const targetSize = CHECKBOX_TARGET_PX;
|
|
212
217
|
const glyphSize = getCheckboxGlyphSize(resolvedSize as SizeTokens);
|
|
213
218
|
const iconSize = getCheckboxIconSize(glyphSize);
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CheckboxBox — the painted glyph and the geometry rules around it (MPO-143).
|
|
3
|
+
*
|
|
4
|
+
* Checkbox.spec.tsx already covers the two headline radius helpers through the
|
|
5
|
+
* package barrel. What had no coverage at all is everything else this module
|
|
6
|
+
* exports: the WCAG hit-target constant, the three size/border derivations,
|
|
7
|
+
* the LC-71 "the 44px frame paints nothing" prop bag, the keyboard-modality
|
|
8
|
+
* focus handlers, and the glyph box itself. Those are the parts that regress
|
|
9
|
+
* silently — nothing today would notice if the hit target grew a wash or the
|
|
10
|
+
* glyph started stealing the press.
|
|
11
|
+
*/
|
|
12
|
+
import { cleanup } from "@testing-library/react";
|
|
13
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
14
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
15
|
+
import {
|
|
16
|
+
CHECKBOX_GLYPH_MAX_RADIUS_TOKEN,
|
|
17
|
+
CHECKBOX_TARGET_PX,
|
|
18
|
+
CheckboxGlyphBox,
|
|
19
|
+
checkboxKbFocusHandlers,
|
|
20
|
+
checkboxTargetFrameProps,
|
|
21
|
+
clampCheckboxGlyphRadius,
|
|
22
|
+
getCheckboxBoxBorderWidth,
|
|
23
|
+
getCheckboxGlyphSize,
|
|
24
|
+
getCheckboxIconSize,
|
|
25
|
+
isCircularCheckboxRadius,
|
|
26
|
+
} from "./CheckboxBox";
|
|
27
|
+
|
|
28
|
+
afterEach(cleanup);
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Modality is the ONE thing here that has to be stood in for. The real tracker
|
|
32
|
+
* (`@multiplatform.one/theme/keyboardFocusRing`) installs global document
|
|
33
|
+
* listeners lazily and never flips under this test environment - a dispatched
|
|
34
|
+
* keydown, on the document or on a real element, leaves `wasKeyboardFocus()`
|
|
35
|
+
* false - so driving it would assert the environment, not the component.
|
|
36
|
+
* Everything else in the module stays real: only this one function is
|
|
37
|
+
* replaced, over `importActual`.
|
|
38
|
+
*/
|
|
39
|
+
let keyboardModality = false;
|
|
40
|
+
vi.mock("@multiplatform.one/theme", async (importOriginal) => {
|
|
41
|
+
const actual = await importOriginal<typeof import("@multiplatform.one/theme")>();
|
|
42
|
+
return { ...actual, wasKeyboardFocus: () => keyboardModality };
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
function pressKey() {
|
|
46
|
+
keyboardModality = true;
|
|
47
|
+
}
|
|
48
|
+
function pressPointer() {
|
|
49
|
+
keyboardModality = false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
afterEach(() => {
|
|
53
|
+
keyboardModality = false;
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
function glyph(container: HTMLElement): HTMLElement {
|
|
57
|
+
const node = container.querySelector("[data-checkbox-box='true']");
|
|
58
|
+
if (!node) throw new Error("CheckboxGlyphBox did not render");
|
|
59
|
+
return node as HTMLElement;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Tamagui paints through atomic classes, so read both channels. */
|
|
63
|
+
function cssOf(node: HTMLElement, prop: string): string {
|
|
64
|
+
const inline = node.style.getPropertyValue(prop);
|
|
65
|
+
if (inline) return inline;
|
|
66
|
+
return getComputedStyle(node).getPropertyValue(prop) || "";
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function classesOf(node: HTMLElement): string {
|
|
70
|
+
return Array.from(node.classList).join(" ");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
describe("CheckboxBox — the target is 44px and the glyph is smaller", () => {
|
|
74
|
+
it("pins the WCAG 2.5.5 pressable floor at 44px", () => {
|
|
75
|
+
expect(CHECKBOX_TARGET_PX).toBe(44);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("derives the glyph at 45% of the size token, rounded", () => {
|
|
79
|
+
// $4 resolves to 44 on the house size scale in this config, so the glyph
|
|
80
|
+
// is derived, never hardcoded: whatever the token resolves to, the glyph
|
|
81
|
+
// is round(0.45 x) and strictly smaller than the 44px target.
|
|
82
|
+
for (const token of ["$2", "$3", "$4", "$5"] as const) {
|
|
83
|
+
const size = getCheckboxGlyphSize(token);
|
|
84
|
+
expect(Number.isInteger(size)).toBe(true);
|
|
85
|
+
expect(size).toBeGreaterThan(0);
|
|
86
|
+
expect(size).toBeLessThan(CHECKBOX_TARGET_PX);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("grows the glyph monotonically with the size token", () => {
|
|
91
|
+
const small = getCheckboxGlyphSize("$2");
|
|
92
|
+
const large = getCheckboxGlyphSize("$5");
|
|
93
|
+
expect(large).toBeGreaterThan(small);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
describe("CheckboxBox — the empty box's edge is the shape (DF-06)", () => {
|
|
98
|
+
it("floors the border at 2px whatever the knob says", () => {
|
|
99
|
+
expect(getCheckboxBoxBorderWidth(1)).toBe(2);
|
|
100
|
+
expect(getCheckboxBoxBorderWidth(0)).toBe(2);
|
|
101
|
+
expect(getCheckboxBoxBorderWidth(undefined)).toBe(2);
|
|
102
|
+
expect(getCheckboxBoxBorderWidth(Number.NaN)).toBe(2);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("honours a thicker knob instead of clamping it down", () => {
|
|
106
|
+
expect(getCheckboxBoxBorderWidth(3)).toBe(3);
|
|
107
|
+
expect(getCheckboxBoxBorderWidth(6)).toBe(6);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it("keeps the check mark at 70% of the glyph but never under 10px", () => {
|
|
111
|
+
expect(getCheckboxIconSize(20)).toBe(14);
|
|
112
|
+
expect(getCheckboxIconSize(30)).toBe(21);
|
|
113
|
+
// The floor bites on the small end: 0.7 x 10 = 7 would be unreadable.
|
|
114
|
+
expect(getCheckboxIconSize(10)).toBe(10);
|
|
115
|
+
expect(getCheckboxIconSize(4)).toBe(10);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
describe("CheckboxBox — the radius law (DG-RAD-05 / R2)", () => {
|
|
120
|
+
it("caps every token stop at $2, which is the documented maximum", () => {
|
|
121
|
+
expect(CHECKBOX_GLYPH_MAX_RADIUS_TOKEN).toBe(2);
|
|
122
|
+
expect(clampCheckboxGlyphRadius("$1")).toBe("$1");
|
|
123
|
+
expect(clampCheckboxGlyphRadius("$2")).toBe("$2");
|
|
124
|
+
for (const token of ["$3", "$4", "$6", "$8", "$10", "$12"]) {
|
|
125
|
+
expect(clampCheckboxGlyphRadius(token), token).toBe("$2");
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it("goes hard-angled for pointy and for $0, and pointy wins over any stop", () => {
|
|
130
|
+
expect(clampCheckboxGlyphRadius("$0")).toBe(0);
|
|
131
|
+
expect(clampCheckboxGlyphRadius("$12", { pointy: true })).toBe(0);
|
|
132
|
+
expect(clampCheckboxGlyphRadius("$1", { pointy: true })).toBe(0);
|
|
133
|
+
expect(clampCheckboxGlyphRadius(undefined, { pointy: true })).toBe(0);
|
|
134
|
+
// pointy:false is not pointy — it must not swallow the stop.
|
|
135
|
+
expect(clampCheckboxGlyphRadius("$1", { pointy: false })).toBe("$1");
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it("passes a non-token value through untouched", () => {
|
|
139
|
+
expect(clampCheckboxGlyphRadius("4px")).toBe("4px");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("RULE GAP: an absent token falls back to $4, above the documented $2 cap", () => {
|
|
143
|
+
// This is the module's own shared clamp fallback (clampRadius(..., "$4")),
|
|
144
|
+
// and it contradicts the comment three lines above it in CheckboxBox.tsx:
|
|
145
|
+
// "$4 (9) already paints as a circle on that box". Asserted as OBSERVED
|
|
146
|
+
// behaviour, deliberately not "fixed" here — which of the two is right is
|
|
147
|
+
// Clay's call, and it is recorded on MPO-143 rather than guessed at.
|
|
148
|
+
expect(clampCheckboxGlyphRadius(undefined)).toBe("$4");
|
|
149
|
+
// The live caller always passes a resolved knob token, so the gap is in
|
|
150
|
+
// the exported contract, not in what the Checkbox renders today.
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it("calls a radius circular exactly at half the side, not before", () => {
|
|
154
|
+
expect(isCircularCheckboxRadius(9, 20)).toBe(false);
|
|
155
|
+
expect(isCircularCheckboxRadius(10, 20)).toBe(true);
|
|
156
|
+
expect(isCircularCheckboxRadius(11, 20)).toBe(true);
|
|
157
|
+
expect(isCircularCheckboxRadius(0, 20)).toBe(false);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it("refuses to answer for a zero or negative side", () => {
|
|
161
|
+
expect(isCircularCheckboxRadius(10, 0)).toBe(false);
|
|
162
|
+
expect(isCircularCheckboxRadius(10, -20)).toBe(false);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("keeps the capped stop non-circular on a real glyph, which is the point of the cap", () => {
|
|
166
|
+
// $2 = 5px on the house radius scale, glyph ~20px: 5 < 10, so square.
|
|
167
|
+
expect(isCircularCheckboxRadius(5, 20)).toBe(false);
|
|
168
|
+
// $4 = 9px would not be, which is why the cap exists.
|
|
169
|
+
expect(isCircularCheckboxRadius(9, 18)).toBe(true);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
describe("CheckboxBox — LC-71: the 44px frame paints nothing", () => {
|
|
174
|
+
it("is a 44px square with no border, no radius and no fill", () => {
|
|
175
|
+
expect(checkboxTargetFrameProps.width).toBe(CHECKBOX_TARGET_PX);
|
|
176
|
+
expect(checkboxTargetFrameProps.height).toBe(CHECKBOX_TARGET_PX);
|
|
177
|
+
expect(checkboxTargetFrameProps.minWidth).toBe(CHECKBOX_TARGET_PX);
|
|
178
|
+
expect(checkboxTargetFrameProps.minHeight).toBe(CHECKBOX_TARGET_PX);
|
|
179
|
+
expect(checkboxTargetFrameProps.borderWidth).toBe(0);
|
|
180
|
+
expect(checkboxTargetFrameProps.borderRadius).toBe(0);
|
|
181
|
+
expect(checkboxTargetFrameProps.padding).toBe(0);
|
|
182
|
+
expect(checkboxTargetFrameProps.backgroundColor).toBe("transparent");
|
|
183
|
+
expect(checkboxTargetFrameProps.outlineWidth).toBe(0);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it("keeps every interaction channel transparent, so no wash can wrap the label", () => {
|
|
187
|
+
for (const state of [
|
|
188
|
+
"hoverStyle",
|
|
189
|
+
"pressStyle",
|
|
190
|
+
"focusStyle",
|
|
191
|
+
"focusVisibleStyle",
|
|
192
|
+
"activeStyle",
|
|
193
|
+
] as const) {
|
|
194
|
+
const bag = checkboxTargetFrameProps[state] as Record<string, unknown>;
|
|
195
|
+
expect(bag.backgroundColor, state).toBe("transparent");
|
|
196
|
+
expect(bag.borderColor, state).toBe("transparent");
|
|
197
|
+
}
|
|
198
|
+
expect(checkboxTargetFrameProps.focusStyle.outlineWidth).toBe(0);
|
|
199
|
+
expect(checkboxTargetFrameProps.focusVisibleStyle.outlineWidth).toBe(0);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
describe("CheckboxBox — keyboard-modality focus handlers", () => {
|
|
204
|
+
it("raises kbFocus on a focus that followed a key press", () => {
|
|
205
|
+
const setKbFocus = vi.fn();
|
|
206
|
+
const handlers = checkboxKbFocusHandlers(setKbFocus, vi.fn());
|
|
207
|
+
pressKey();
|
|
208
|
+
handlers.onFocus({});
|
|
209
|
+
expect(setKbFocus).toHaveBeenCalledWith(true);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
it("stays quiet on a focus that followed a pointer press", () => {
|
|
213
|
+
const setKbFocus = vi.fn();
|
|
214
|
+
const handlers = checkboxKbFocusHandlers(setKbFocus, vi.fn());
|
|
215
|
+
pressPointer();
|
|
216
|
+
handlers.onFocus({});
|
|
217
|
+
expect(setKbFocus).not.toHaveBeenCalled();
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("always clears kbFocus on blur, whatever the modality was", () => {
|
|
221
|
+
const setKbFocus = vi.fn();
|
|
222
|
+
const handlers = checkboxKbFocusHandlers(setKbFocus, vi.fn());
|
|
223
|
+
pressPointer();
|
|
224
|
+
handlers.onBlur({});
|
|
225
|
+
expect(setKbFocus).toHaveBeenCalledWith(false);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
it("tracks hover in and out", () => {
|
|
229
|
+
const setHovered = vi.fn();
|
|
230
|
+
const handlers = checkboxKbFocusHandlers(vi.fn(), setHovered);
|
|
231
|
+
handlers.onHoverIn({});
|
|
232
|
+
expect(setHovered).toHaveBeenLastCalledWith(true);
|
|
233
|
+
handlers.onHoverOut({});
|
|
234
|
+
expect(setHovered).toHaveBeenLastCalledWith(false);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it("forwards the caller's own handlers instead of swallowing them", () => {
|
|
238
|
+
const rest = {
|
|
239
|
+
onFocus: vi.fn(),
|
|
240
|
+
onBlur: vi.fn(),
|
|
241
|
+
onHoverIn: vi.fn(),
|
|
242
|
+
onHoverOut: vi.fn(),
|
|
243
|
+
};
|
|
244
|
+
const handlers = checkboxKbFocusHandlers(vi.fn(), vi.fn(), rest);
|
|
245
|
+
const event = { id: 1 };
|
|
246
|
+
handlers.onFocus(event);
|
|
247
|
+
handlers.onBlur(event);
|
|
248
|
+
handlers.onHoverIn(event);
|
|
249
|
+
handlers.onHoverOut(event);
|
|
250
|
+
expect(rest.onFocus).toHaveBeenCalledWith(event);
|
|
251
|
+
expect(rest.onBlur).toHaveBeenCalledWith(event);
|
|
252
|
+
expect(rest.onHoverIn).toHaveBeenCalledWith(event);
|
|
253
|
+
expect(rest.onHoverOut).toHaveBeenCalledWith(event);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it("survives a caller that passes no handlers at all", () => {
|
|
257
|
+
const handlers = checkboxKbFocusHandlers(vi.fn(), vi.fn());
|
|
258
|
+
expect(() => {
|
|
259
|
+
handlers.onFocus({});
|
|
260
|
+
handlers.onBlur({});
|
|
261
|
+
handlers.onHoverIn({});
|
|
262
|
+
handlers.onHoverOut({});
|
|
263
|
+
}).not.toThrow();
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
describe("CheckboxGlyphBox — the painted box", () => {
|
|
268
|
+
it("marks itself so the boards and the other specs can find it", () => {
|
|
269
|
+
const { container } = renderWithProviders(
|
|
270
|
+
<CheckboxGlyphBox
|
|
271
|
+
glyphSize={20}
|
|
272
|
+
isMarked={false}
|
|
273
|
+
kbFocus={false}
|
|
274
|
+
borderWidth={2}
|
|
275
|
+
borderRadius={5}
|
|
276
|
+
/>,
|
|
277
|
+
);
|
|
278
|
+
expect(glyph(container)).toBeTruthy();
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it("never takes the press, so the 44px frame keeps the responder", () => {
|
|
282
|
+
const { container } = renderWithProviders(
|
|
283
|
+
<CheckboxGlyphBox
|
|
284
|
+
glyphSize={20}
|
|
285
|
+
isMarked={false}
|
|
286
|
+
kbFocus={false}
|
|
287
|
+
borderWidth={2}
|
|
288
|
+
borderRadius={5}
|
|
289
|
+
/>,
|
|
290
|
+
);
|
|
291
|
+
expect(cssOf(glyph(container), "pointer-events")).toBe("none");
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
it("publishes the focus-ring flag only while kbFocus is true", () => {
|
|
295
|
+
const off = renderWithProviders(
|
|
296
|
+
<CheckboxGlyphBox
|
|
297
|
+
glyphSize={20}
|
|
298
|
+
isMarked={false}
|
|
299
|
+
kbFocus={false}
|
|
300
|
+
borderWidth={2}
|
|
301
|
+
borderRadius={5}
|
|
302
|
+
/>,
|
|
303
|
+
);
|
|
304
|
+
expect(glyph(off.container).getAttribute("data-focus-ring")).toBeNull();
|
|
305
|
+
cleanup();
|
|
306
|
+
const on = renderWithProviders(
|
|
307
|
+
<CheckboxGlyphBox glyphSize={20} isMarked={false} kbFocus borderWidth={2} borderRadius={5} />,
|
|
308
|
+
);
|
|
309
|
+
expect(glyph(on.container).getAttribute("data-focus-ring")).toBe("true");
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
it("is an empty box when idle and drops that transparency when marked", () => {
|
|
313
|
+
const unmarked = renderWithProviders(
|
|
314
|
+
<CheckboxGlyphBox
|
|
315
|
+
glyphSize={20}
|
|
316
|
+
isMarked={false}
|
|
317
|
+
kbFocus={false}
|
|
318
|
+
borderWidth={2}
|
|
319
|
+
borderRadius={5}
|
|
320
|
+
/>,
|
|
321
|
+
);
|
|
322
|
+
expect(classesOf(glyph(unmarked.container))).toContain("_bg-transparent");
|
|
323
|
+
cleanup();
|
|
324
|
+
const marked = renderWithProviders(
|
|
325
|
+
<CheckboxGlyphBox glyphSize={20} isMarked kbFocus={false} borderWidth={2} borderRadius={5} />,
|
|
326
|
+
);
|
|
327
|
+
// Checked paints the MARK channel (formSelectedColors.mark), so the
|
|
328
|
+
// transparent fill is gone. The mark token is an accent value the test
|
|
329
|
+
// config does not resolve, which is exactly why this asserts the absence
|
|
330
|
+
// of the idle fill rather than a colour literal.
|
|
331
|
+
expect(classesOf(glyph(marked.container))).not.toContain("_bg-transparent");
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it("takes the checked border off the boundary ramp entirely, so it is a fill and not a second outline", () => {
|
|
335
|
+
const { container } = renderWithProviders(
|
|
336
|
+
<CheckboxGlyphBox glyphSize={20} isMarked kbFocus={false} borderWidth={2} borderRadius={5} />,
|
|
337
|
+
);
|
|
338
|
+
const painted = classesOf(glyph(container));
|
|
339
|
+
expect(painted).not.toContain("_btc-color10");
|
|
340
|
+
expect(painted).not.toContain("_btc-color11");
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
it("moves the idle border from the boundary tier to the press tier on hover", () => {
|
|
344
|
+
// formControlColors.boundary = $color10 (DF-06: the edge that carries the
|
|
345
|
+
// shape, >=3:1), thumb.press = $color11.
|
|
346
|
+
const idle = renderWithProviders(
|
|
347
|
+
<CheckboxGlyphBox
|
|
348
|
+
glyphSize={20}
|
|
349
|
+
isMarked={false}
|
|
350
|
+
kbFocus={false}
|
|
351
|
+
borderWidth={2}
|
|
352
|
+
borderRadius={5}
|
|
353
|
+
/>,
|
|
354
|
+
);
|
|
355
|
+
expect(classesOf(glyph(idle.container))).toContain("_btc-color10");
|
|
356
|
+
cleanup();
|
|
357
|
+
const hovered = renderWithProviders(
|
|
358
|
+
<CheckboxGlyphBox
|
|
359
|
+
glyphSize={20}
|
|
360
|
+
isMarked={false}
|
|
361
|
+
kbFocus={false}
|
|
362
|
+
hovered
|
|
363
|
+
borderWidth={2}
|
|
364
|
+
borderRadius={5}
|
|
365
|
+
/>,
|
|
366
|
+
);
|
|
367
|
+
expect(classesOf(glyph(hovered.container))).toContain("_btc-color11");
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
it("takes its geometry from the props rather than a hardcoded box", () => {
|
|
371
|
+
const { container } = renderWithProviders(
|
|
372
|
+
<CheckboxGlyphBox
|
|
373
|
+
glyphSize={26}
|
|
374
|
+
isMarked={false}
|
|
375
|
+
kbFocus={false}
|
|
376
|
+
borderWidth={3}
|
|
377
|
+
borderRadius={7}
|
|
378
|
+
/>,
|
|
379
|
+
);
|
|
380
|
+
const node = glyph(container);
|
|
381
|
+
expect(cssOf(node, "width")).toBe("26px");
|
|
382
|
+
expect(cssOf(node, "height")).toBe("26px");
|
|
383
|
+
expect(cssOf(node, "border-top-width")).toBe("3px");
|
|
384
|
+
expect(classesOf(node)).toContain("_btlr-7px");
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
it("renders the check mark it is handed", () => {
|
|
388
|
+
const { container } = renderWithProviders(
|
|
389
|
+
<CheckboxGlyphBox glyphSize={20} isMarked kbFocus={false} borderWidth={2} borderRadius={5}>
|
|
390
|
+
<span data-mark>x</span>
|
|
391
|
+
</CheckboxGlyphBox>,
|
|
392
|
+
);
|
|
393
|
+
expect(container.querySelector("[data-mark]")).toBeTruthy();
|
|
394
|
+
});
|
|
395
|
+
});
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CheckboxCard — the SELECTION-CARD anatomy (LC-22) and its two derivations
|
|
3
|
+
* (MPO-143).
|
|
4
|
+
*
|
|
5
|
+
* These five parts are shared by `Checkboxes.Card`, `CheckboxGroup card` and
|
|
6
|
+
* `RadioGroup card`, so a change here moves three surfaces at once and nothing
|
|
7
|
+
* checked it. The two rules worth pinning are LC-71's "selected = fill, not an
|
|
8
|
+
* extra border" and T-HELPER's "the description is one step under the field
|
|
9
|
+
* size" — both are one-line edits away from silently regressing.
|
|
10
|
+
*/
|
|
11
|
+
import { cleanup } from "@testing-library/react";
|
|
12
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
13
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
14
|
+
import {
|
|
15
|
+
CheckboxCardContent,
|
|
16
|
+
CheckboxCardDescription,
|
|
17
|
+
CheckboxCardFrame,
|
|
18
|
+
CheckboxCardLabel,
|
|
19
|
+
getCardDescriptionSize,
|
|
20
|
+
getCheckboxCardLayout,
|
|
21
|
+
} from "./CheckboxCard";
|
|
22
|
+
|
|
23
|
+
afterEach(cleanup);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The styled parts paint through Tamagui atomic classes, so the class list is
|
|
27
|
+
* the honest read; `getComputedStyle` only resolves the subset whose CSS this
|
|
28
|
+
* environment injects.
|
|
29
|
+
*/
|
|
30
|
+
function classesOf(node: Element | null): string {
|
|
31
|
+
if (!node) throw new Error("expected a rendered node");
|
|
32
|
+
return Array.from(node.classList).join(" ");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function painted(container: HTMLElement, marker: string): string {
|
|
36
|
+
return classesOf(container.querySelector(`[class*='${marker}']`));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
describe("getCardDescriptionSize — T-HELPER is one step under the field", () => {
|
|
40
|
+
it("maps each field size onto its helper tier", () => {
|
|
41
|
+
expect(getCardDescriptionSize("$1")).toBe("$1");
|
|
42
|
+
expect(getCardDescriptionSize("$2")).toBe("$1");
|
|
43
|
+
expect(getCardDescriptionSize("$3")).toBe("$2");
|
|
44
|
+
expect(getCardDescriptionSize("$4")).toBe("$3");
|
|
45
|
+
expect(getCardDescriptionSize("$5")).toBe("$4");
|
|
46
|
+
expect(getCardDescriptionSize("$6")).toBe("$5");
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("treats $true as the default field size, not as an unknown", () => {
|
|
50
|
+
expect(getCardDescriptionSize("$true" as never)).toBe("$3");
|
|
51
|
+
expect(getCardDescriptionSize("$true" as never)).toBe(getCardDescriptionSize("$4"));
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("falls back to $2 for no size and for a size off the ladder", () => {
|
|
55
|
+
expect(getCardDescriptionSize(undefined)).toBe("$2");
|
|
56
|
+
expect(getCardDescriptionSize("$9" as never)).toBe("$2");
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("never returns a helper size at or above its own field size", () => {
|
|
60
|
+
for (const [field, helper] of [
|
|
61
|
+
["$3", "$2"],
|
|
62
|
+
["$4", "$3"],
|
|
63
|
+
["$5", "$4"],
|
|
64
|
+
["$6", "$5"],
|
|
65
|
+
] as const) {
|
|
66
|
+
expect(getCardDescriptionSize(field), field).toBe(helper);
|
|
67
|
+
expect(Number(String(helper).slice(1))).toBeLessThan(Number(field.slice(1)));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
describe("getCheckboxCardLayout — compact metrics off the space knob", () => {
|
|
73
|
+
it("gives each space stop its own padding and gap", () => {
|
|
74
|
+
expect(getCheckboxCardLayout("none")).toEqual({
|
|
75
|
+
paddingVertical: "$2.5",
|
|
76
|
+
paddingHorizontal: "$3",
|
|
77
|
+
gap: "$2.5",
|
|
78
|
+
});
|
|
79
|
+
expect(getCheckboxCardLayout("large")).toEqual({
|
|
80
|
+
paddingVertical: "$3.5",
|
|
81
|
+
paddingHorizontal: "$4",
|
|
82
|
+
gap: "$3.5",
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("makes small and medium deliberately identical", () => {
|
|
87
|
+
expect(getCheckboxCardLayout("small")).toEqual(getCheckboxCardLayout("medium"));
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("falls back to medium for an unknown stop rather than throwing", () => {
|
|
91
|
+
expect(getCheckboxCardLayout("enormous")).toEqual(getCheckboxCardLayout("medium"));
|
|
92
|
+
expect(getCheckboxCardLayout("")).toEqual(getCheckboxCardLayout("medium"));
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("grows monotonically from none to large", () => {
|
|
96
|
+
const stops = ["none", "small", "large"].map((s) => getCheckboxCardLayout(s));
|
|
97
|
+
const num = (token: string) => Number(token.replace("$", ""));
|
|
98
|
+
expect(num(stops[0].paddingVertical)).toBeLessThanOrEqual(num(stops[1].paddingVertical));
|
|
99
|
+
expect(num(stops[1].paddingVertical)).toBeLessThan(num(stops[2].paddingVertical));
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe("CheckboxCardFrame — control leading, whole card interactive", () => {
|
|
104
|
+
it("lays the control out in a row, top-aligned with the first label line", () => {
|
|
105
|
+
const { container } = renderWithProviders(<CheckboxCardFrame />);
|
|
106
|
+
const card = painted(container, "_fd-row");
|
|
107
|
+
expect(card).toContain("_fd-row");
|
|
108
|
+
expect(card).toContain("_ai-flex-start");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("reads as pressable across the whole card", () => {
|
|
112
|
+
const { container } = renderWithProviders(<CheckboxCardFrame />);
|
|
113
|
+
expect(painted(container, "_fd-row")).toContain("_cur-pointer");
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it("carries exactly one border at rest, on the $color6 seam", () => {
|
|
117
|
+
const { container } = renderWithProviders(<CheckboxCardFrame />);
|
|
118
|
+
const card = painted(container, "_fd-row");
|
|
119
|
+
expect(card).toContain("_btw-1px");
|
|
120
|
+
expect(card).toContain("_btc-color6");
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("moves the border one step up the ramp on hover, and only on hover", () => {
|
|
124
|
+
const { container } = renderWithProviders(<CheckboxCardFrame />);
|
|
125
|
+
const card = painted(container, "_fd-row");
|
|
126
|
+
expect(card).toContain("_btc-0hover-color7");
|
|
127
|
+
expect(card).toContain("_btc-color6");
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("LC-71: active changes the FILL and leaves the border exactly where it was", () => {
|
|
131
|
+
const rest = renderWithProviders(<CheckboxCardFrame />);
|
|
132
|
+
const restCard = painted(rest.container, "_fd-row");
|
|
133
|
+
expect(restCard).toContain("_bg-color2");
|
|
134
|
+
cleanup();
|
|
135
|
+
const active = renderWithProviders(<CheckboxCardFrame active />);
|
|
136
|
+
const activeCard = painted(active.container, "_fd-row");
|
|
137
|
+
expect(activeCard).toContain("_bg-color3");
|
|
138
|
+
expect(activeCard).not.toContain("_bg-color2");
|
|
139
|
+
// the border is untouched: same width, same colour, no second outline
|
|
140
|
+
expect(activeCard).toContain("_btw-1px");
|
|
141
|
+
expect(activeCard).toContain("_btc-color6");
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("renders the control and the text column it is given", () => {
|
|
145
|
+
const { container } = renderWithProviders(
|
|
146
|
+
<CheckboxCardFrame>
|
|
147
|
+
<span data-control />
|
|
148
|
+
<CheckboxCardContent>
|
|
149
|
+
<CheckboxCardLabel>Ship it</CheckboxCardLabel>
|
|
150
|
+
<CheckboxCardDescription>Sends the release out</CheckboxCardDescription>
|
|
151
|
+
</CheckboxCardContent>
|
|
152
|
+
</CheckboxCardFrame>,
|
|
153
|
+
);
|
|
154
|
+
expect(container.querySelector("[data-control]")).toBeTruthy();
|
|
155
|
+
expect(container.textContent).toContain("Ship it");
|
|
156
|
+
expect(container.textContent).toContain("Sends the release out");
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
describe("CheckboxCardContent — the text column", () => {
|
|
161
|
+
it("stacks the label over the description and can shrink under a long word", () => {
|
|
162
|
+
const { container } = renderWithProviders(<CheckboxCardContent />);
|
|
163
|
+
const column = painted(container, "_miw-0px");
|
|
164
|
+
expect(column).toContain("_fd-column");
|
|
165
|
+
expect(column).toContain("_miw-0px");
|
|
166
|
+
expect(column).toContain("_fg-1");
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
describe("CheckboxCardLabel and CheckboxCardDescription", () => {
|
|
171
|
+
it("makes the label the bold, full-contrast first line", () => {
|
|
172
|
+
const { container } = renderWithProviders(<CheckboxCardLabel>Label</CheckboxCardLabel>);
|
|
173
|
+
const label = classesOf(container.querySelector("p"));
|
|
174
|
+
expect(label).toContain("_fow-600");
|
|
175
|
+
expect(label).toContain("_lh-20px");
|
|
176
|
+
expect(label).toContain("_col-color12");
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("paints the description one ramp step down, in the muted tier", () => {
|
|
180
|
+
const label = renderWithProviders(<CheckboxCardLabel>Label</CheckboxCardLabel>);
|
|
181
|
+
expect(classesOf(label.container.querySelector("p"))).toContain("_col-color12");
|
|
182
|
+
cleanup();
|
|
183
|
+
const description = renderWithProviders(
|
|
184
|
+
<CheckboxCardDescription>Helper</CheckboxCardDescription>,
|
|
185
|
+
);
|
|
186
|
+
const muted = classesOf(description.container.querySelector("p"));
|
|
187
|
+
expect(muted).toContain("_col-color11");
|
|
188
|
+
expect(muted).not.toContain("_col-color12");
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it("leaves the description at the normal weight, so only the label is bold", () => {
|
|
192
|
+
const { container } = renderWithProviders(
|
|
193
|
+
<CheckboxCardDescription>Helper</CheckboxCardDescription>,
|
|
194
|
+
);
|
|
195
|
+
expect(classesOf(container.querySelector("p"))).not.toContain("_fow-600");
|
|
196
|
+
});
|
|
197
|
+
});
|