@astryxdesign/core 0.7.6-canary.f73623d → 0.7.6-canary.f77aaf2
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/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +0 -6
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +2 -1
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +6 -2
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +36 -9
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +1 -1
- package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
- package/dist/BottomSheet/useMobileKeyboard.js +44 -8
- package/dist/BottomSheet/useSheetGestures.d.ts +36 -6
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +67 -10
- package/dist/Breadcrumbs/BreadcrumbItem.js +4 -2
- package/dist/Center/Center.d.ts +1 -1
- package/dist/Center/Center.js +1 -1
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +10 -5
- package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
- package/dist/Chat/ChatComposerDrawer.js +1 -1
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.js +1 -1
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +1 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +3 -1
- package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
- package/dist/Chat/ChatPastedTextToken.js +15 -4
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +2 -1
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +5 -2
- package/dist/CheckboxList/CheckboxListContext.d.ts +8 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +5 -2
- package/dist/Code/Code.d.ts +1 -1
- package/dist/Code/Code.js +1 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +8 -5
- package/dist/ComplexSelector/ComplexSelector.d.ts +2 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +7 -2
- package/dist/DateInput/DateInput.d.ts +3 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +17 -18
- package/dist/DateRangeInput/DateRangeInput.d.ts +3 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +8 -4
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +10 -15
- package/dist/Drawer/Drawer.d.ts +1 -1
- package/dist/Drawer/Drawer.js +1 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +19 -8
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.js +2 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +9 -3
- package/dist/Field/Field.d.ts +2 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +19 -2
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +10 -5
- package/dist/Field/fieldStatusPlacement.d.ts +15 -0
- package/dist/Field/fieldStatusPlacement.d.ts.map +1 -0
- package/dist/Field/fieldStatusPlacement.js +1 -0
- package/dist/FieldStatus/FieldStatus.d.ts +16 -28
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +25 -3
- package/dist/FieldStatus/index.d.ts +7 -0
- package/dist/FieldStatus/index.d.ts.map +1 -1
- package/dist/FileInput/FileInput.d.ts +10 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +86 -35
- package/dist/Item/Item.js +5 -5
- package/dist/Item/ItemSwipeLayer.d.ts.map +1 -1
- package/dist/Item/ItemSwipeLayer.js +8 -2
- package/dist/Layer/useTouchTrigger.d.ts +35 -3
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +80 -11
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +10 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +1 -0
- package/dist/MetadataList/MetadataList.d.ts.map +1 -1
- package/dist/MetadataList/MetadataList.js +2 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +2 -1
- package/dist/MultiSelector/MultiSelector.d.ts +2 -2
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +35 -25
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +4 -2
- package/dist/NumberInput/NumberInput.d.ts +3 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +11 -15
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +2 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Popover/Popover.js +2 -2
- package/dist/Popover/usePopover.d.ts +7 -1
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +8 -2
- package/dist/PowerSearch/PowerSearch.d.ts +3 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +4 -2
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +7 -2
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +8 -2
- package/dist/RadioList/RadioListReasonContext.d.ts +2 -0
- package/dist/RadioList/RadioListReasonContext.d.ts.map +1 -0
- package/dist/RadioList/RadioListReasonContext.js +22 -0
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +53 -10
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +22 -5
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +6 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +16 -3
- package/dist/Selector/Selector.d.ts +3 -3
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +14 -8
- package/dist/Selector/hooks.js +2 -2
- package/dist/Selector/useSelectorPresentation.d.ts +7 -1
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +2 -1
- package/dist/SideNav/railMotion.d.ts +5 -5
- package/dist/SideNav/railMotion.d.ts.map +1 -1
- package/dist/SideNav/railMotion.js +69 -177
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +100 -17
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +7 -6
- package/dist/Table/glidingDivider.d.ts +8 -1
- package/dist/Table/glidingDivider.d.ts.map +1 -1
- package/dist/Table/glidingDivider.js +8 -3
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +1 -2
- package/dist/TextArea/TextArea.d.ts +2 -2
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextInput/TextInput.d.ts +3 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.d.ts +3 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/Timer/Timer.js +1 -1
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +8 -2
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +11 -3
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +15 -0
- package/dist/Tokenizer/Tokenizer.d.ts +3 -2
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +73 -50
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +9 -15
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +4 -3
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +6 -3
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +4 -3
- package/dist/Typeahead/BaseTypeahead.d.ts +4 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +262 -43
- package/dist/Typeahead/Typeahead.d.ts +3 -2
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +36 -10
- package/dist/Typeahead/index.d.ts +1 -1
- package/dist/Typeahead/index.d.ts.map +1 -1
- package/dist/Typeahead/types.d.ts +26 -3
- package/dist/Typeahead/types.d.ts.map +1 -1
- package/dist/astryx.css +1 -2
- package/dist/gestures/haptics.d.ts.map +1 -1
- package/dist/gestures/haptics.js +1 -5
- package/dist/hooks/menuPressMarker.d.ts +13 -0
- package/dist/hooks/menuPressMarker.d.ts.map +1 -0
- package/dist/hooks/menuPressMarker.js +15 -0
- package/dist/hooks/useClickableContainer.d.ts +24 -4
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +41 -14
- package/dist/hooks/useFocusReturnVisibility.d.ts +8 -1
- package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -1
- package/dist/hooks/useFocusReturnVisibility.js +14 -8
- package/dist/hooks/useInputStatusIcon.d.ts +2 -2
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +1 -2
- package/dist/hooks/useListFocus.d.ts +19 -0
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +26 -1
- package/dist/hooks/useMenuPress.d.ts +2 -2
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +5 -6
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +13 -5
- package/dist/hooks/useTypeahead.d.ts +3 -1
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +21 -15
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +6 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +6 -0
- package/dist/i18n/useListFormatter.d.ts +9 -0
- package/dist/i18n/useListFormatter.d.ts.map +1 -0
- package/dist/i18n/useListFormatter.js +41 -0
- package/dist/motion/animatedLayout.d.ts +130 -5
- package/dist/motion/animatedLayout.d.ts.map +1 -1
- package/dist/motion/animatedLayout.js +771 -44
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +38 -2
- package/dist/privateAttributes/segmentDisabled.stylex.d.ts +5 -0
- package/dist/privateAttributes/segmentDisabled.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/segmentDisabled.stylex.js +28 -0
- package/dist/theme/Theme.d.ts +10 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +8 -4
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +7 -1
- package/dist/utils/focusReturn.d.ts +5 -3
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +6 -4
- package/dist/utils/getNodeText.d.ts.map +1 -1
- package/dist/utils/getNodeText.js +2 -1
- package/dist/utils/interactionModality.d.ts +78 -7
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +125 -42
- package/dist/utils/pressDisabled.d.ts +21 -0
- package/dist/utils/pressDisabled.d.ts.map +1 -0
- package/dist/utils/pressDisabled.js +32 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +5 -3
- package/dist/utils/typeaheadMatch.d.ts +24 -0
- package/dist/utils/typeaheadMatch.d.ts.map +1 -0
- package/dist/utils/typeaheadMatch.js +112 -0
- package/locales/en.json +25 -1
- package/locales/pseudo.json +18 -0
- package/package.json +19 -5
- package/src/AppShell/AppShell.tsx +0 -9
- package/src/Badge/Badge.tsx +2 -1
- package/src/BottomSheet/BottomSheet.tsx +4 -2
- package/src/BottomSheet/BottomSheetPanel.tsx +39 -8
- package/src/BottomSheet/BottomSheetSwitcher.tsx +1 -1
- package/src/BottomSheet/useMobileKeyboard.ts +51 -10
- package/src/BottomSheet/useSheetGestures.ts +92 -15
- package/src/Breadcrumbs/BreadcrumbItem.tsx +2 -1
- package/src/Center/Center.tsx +1 -1
- package/src/Chat/ChatComposer.tsx +7 -10
- package/src/Chat/ChatComposerDrawer.tsx +1 -1
- package/src/Chat/ChatComposerInput.tsx +1 -1
- package/src/Chat/ChatLayout.tsx +1 -6
- package/src/Chat/ChatMessageList.tsx +1 -0
- package/src/Chat/ChatPastedTextToken.tsx +14 -4
- package/src/Chat/ChatSystemMessage.tsx +4 -1
- package/src/Chat/ChatToolCalls.tsx +5 -0
- package/src/CheckboxList/CheckboxList.tsx +7 -1
- package/src/CheckboxList/CheckboxListContext.tsx +8 -0
- package/src/CheckboxList/CheckboxListItem.tsx +8 -2
- package/src/Code/Code.tsx +1 -1
- package/src/CommandPalette/CommandPaletteInput.tsx +5 -8
- package/src/ComplexSelector/ComplexSelector.tsx +22 -4
- package/src/DateInput/DateInput.tsx +2 -2
- package/src/DateInput/MonthScroller.tsx +15 -17
- package/src/DateRangeInput/DateRangeInput.tsx +20 -5
- package/src/Dialog/Dialog.tsx +9 -25
- package/src/Drawer/Drawer.tsx +1 -1
- package/src/DropdownMenu/DropdownMenu.tsx +24 -9
- package/src/DropdownMenu/DropdownMenuGroup.tsx +2 -1
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +3 -1
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -3
- package/src/Field/Field.doc.mjs +2 -1
- package/src/Field/Field.tsx +2 -2
- package/src/Field/FieldLabel.doc.mjs +4 -2
- package/src/Field/FieldLabel.tsx +18 -2
- package/src/Field/PanelSearchInput.tsx +7 -8
- package/src/Field/fieldStatusPlacement.ts +18 -0
- package/src/FieldStatus/FieldStatus.tsx +33 -3
- package/src/FieldStatus/index.ts +7 -0
- package/src/FileInput/FileInput.doc.mjs +3 -3
- package/src/FileInput/FileInput.tsx +103 -36
- package/src/HoverCard/HoverCard.doc.mjs +3 -3
- package/src/HoverCard/useHoverCard.doc.mjs +1 -1
- package/src/Item/Item.tsx +5 -5
- package/src/Item/ItemSwipeLayer.tsx +8 -1
- package/src/Layer/useTouchTrigger.ts +107 -18
- package/src/Link/Link.tsx +9 -2
- package/src/Markdown/Markdown.tsx +1 -0
- package/src/MetadataList/MetadataList.tsx +4 -2
- package/src/MetadataList/MetadataListItem.tsx +2 -1
- package/src/MultiSelector/MultiSelector.tsx +57 -36
- package/src/MultiSelector/hooks.ts +7 -5
- package/src/NumberInput/NumberInput.tsx +13 -20
- package/src/OverflowList/OverflowList.tsx +2 -1
- package/src/Pagination/Pagination.tsx +1 -0
- package/src/Popover/Popover.tsx +2 -2
- package/src/Popover/usePopover.tsx +7 -2
- package/src/PowerSearch/PowerSearch.tsx +4 -2
- package/src/RadioList/RadioList.tsx +13 -2
- package/src/RadioList/RadioListItem.tsx +9 -1
- package/src/RadioList/RadioListReasonContext.ts +25 -0
- package/src/Resizable/useResizable.ts +50 -7
- package/src/SegmentedControl/SegmentedControl.tsx +43 -8
- package/src/SegmentedControl/SegmentedControlContext.ts +6 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +12 -1
- package/src/Selector/Selector.tsx +23 -9
- package/src/Selector/hooks.ts +2 -2
- package/src/Selector/useSelectorPresentation.ts +8 -1
- package/src/SideNav/railMotion.ts +73 -179
- package/src/Slider/Slider.tsx +116 -19
- package/src/Table/BaseTable.tsx +10 -6
- package/src/Table/glidingDivider.ts +8 -3
- package/src/Table/plugins/sortable/useTableSortable.tsx +2 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/TextArea/TextArea.tsx +3 -2
- package/src/TextInput/TextInput.tsx +2 -2
- package/src/TimeInput/TimeInput.tsx +2 -2
- package/src/Timer/Timer.tsx +1 -1
- package/src/Toast/useToast.tsx +8 -3
- package/src/ToggleButton/ToggleButton.tsx +10 -3
- package/src/Token/Token.tsx +15 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +12 -8
- package/src/Tokenizer/Tokenizer.tsx +81 -53
- package/src/Tokenizer/TokenizerBottomSheet.tsx +9 -15
- package/src/Tooltip/Tooltip.doc.mjs +3 -3
- package/src/Tooltip/useTooltip.doc.mjs +1 -1
- package/src/TopNav/TopNavMegaMenu.tsx +4 -3
- package/src/TreeList/TreeList.tsx +6 -3
- package/src/TreeList/TreeListItem.tsx +5 -3
- package/src/Typeahead/BaseTypeahead.doc.mjs +7 -4
- package/src/Typeahead/BaseTypeahead.tsx +314 -40
- package/src/Typeahead/Typeahead.doc.mjs +21 -4
- package/src/Typeahead/Typeahead.tsx +42 -11
- package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
- package/src/Typeahead/index.ts +1 -1
- package/src/Typeahead/types.ts +27 -3
- package/src/gestures/haptics.ts +1 -8
- package/src/hooks/menuPressMarker.ts +15 -0
- package/src/hooks/useClickableContainer.ts +48 -17
- package/src/hooks/useFocusReturnVisibility.ts +15 -12
- package/src/hooks/useInputStatusIcon.tsx +2 -2
- package/src/hooks/useListFocus.ts +38 -1
- package/src/hooks/useMenuPress.ts +5 -5
- package/src/hooks/useTreeFocus.doc.mjs +2 -2
- package/src/hooks/useTreeFocus.ts +16 -10
- package/src/hooks/useTypeahead.doc.mjs +2 -2
- package/src/hooks/useTypeahead.ts +21 -20
- package/src/i18n/generated-locales/en.generated.ts +8 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +8 -0
- package/src/i18n/useListFormatter.ts +42 -0
- package/src/motion/animatedLayout.ts +977 -45
- package/src/motion/animator.ts +55 -2
- package/src/privateAttributes/segmentDisabled.stylex.ts +28 -0
- package/src/theme/Theme.tsx +8 -4
- package/src/theme/useTheme.ts +6 -1
- package/src/utils/focusReturn.ts +6 -4
- package/src/utils/getNodeText.ts +2 -1
- package/src/utils/interactionModality.ts +165 -44
- package/src/utils/pressDisabled.ts +32 -0
- package/src/utils/pressFeedback.ts +5 -3
- package/src/utils/typeaheadMatch.ts +141 -0
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts +0 -2
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.js +0 -132
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts +0 -2
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.js +0 -78
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts +0 -2
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +0 -66
- package/dist/List/ListMarkers.a11y.chromium.spec.d.ts +0 -2
- package/dist/List/ListMarkers.a11y.chromium.spec.js +0 -677
- package/dist/Markdown/Markdown.fr23.bench.d.ts +0 -2
- package/dist/Markdown/Markdown.fr23.bench.d.ts.map +0 -1
- package/dist/Markdown/Markdown.fr23.bench.js +0 -152
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.d.ts +0 -2
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.js +0 -590
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.d.ts +0 -2
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +0 -657
- package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.d.ts +0 -2
- package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.js +0 -153
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.d.ts +0 -2
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +0 -117
- package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.d.ts +0 -2
- package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.js +0 -49
- package/dist/MultiSelector/OptionActions.a11y.chromium.spec.d.ts +0 -2
- package/dist/MultiSelector/OptionActions.a11y.chromium.spec.js +0 -273
- package/dist/Outline/OutlineFocus.a11y.chromium.spec.d.ts +0 -2
- package/dist/Outline/OutlineFocus.a11y.chromium.spec.js +0 -421
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts +0 -2
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.js +0 -118
- package/dist/reset.a11y.chromium.spec.d.ts +0 -2
- package/dist/reset.a11y.chromium.spec.js +0 -231
- package/dist/reset.until-found.a11y.browser.spec.d.ts +0 -2
- package/dist/reset.until-found.a11y.browser.spec.js +0 -72
- package/src/AlertDialog/AlertDialog.spec.md +0 -259
- package/src/AlertDialog/AlertDialog.test.tsx +0 -519
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +0 -128
- package/src/AlertDialog/__tests__/AlertDialog.a11y.renders.tsx +0 -52
- package/src/AlertDialog/__tests__/AlertDialog.a11y.states.ts +0 -68
- package/src/AlertDialog/__tests__/AlertDialog.a11y.test.tsx +0 -144
- package/src/AlertDialog/useImperativeAlertDialog.test.tsx +0 -163
- package/src/AppShell/AppShell.spec.md +0 -331
- package/src/AppShell/AppShell.test.tsx +0 -1310
- package/src/AppShell/__tests__/AppShellMainKeyboard.a11y.browser.spec.ts +0 -534
- package/src/AppShell/observeMainOverflow.test.ts +0 -173
- package/src/AspectRatio/AspectRatio.spec.md +0 -179
- package/src/AspectRatio/AspectRatio.test.tsx +0 -398
- package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +0 -158
- package/src/Avatar/Avatar.spec.md +0 -253
- package/src/Avatar/Avatar.test.tsx +0 -867
- package/src/Avatar/AvatarStatusDot.spec.md +0 -208
- package/src/Avatar/AvatarStatusDot.test.tsx +0 -306
- package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +0 -126
- package/src/AvatarGroup/AvatarGroup.spec.md +0 -205
- package/src/AvatarGroup/AvatarGroup.test.tsx +0 -313
- package/src/AvatarGroup/AvatarGroupOverflow.spec.md +0 -210
- package/src/AvatarGroup/AvatarGroupOverflow.test.tsx +0 -263
- package/src/Badge/Badge.spec.md +0 -207
- package/src/Badge/Badge.test.tsx +0 -125
- package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +0 -260
- package/src/Banner/Banner.spec.md +0 -282
- package/src/Banner/Banner.test.tsx +0 -879
- package/src/Blockquote/Blockquote.spec.md +0 -171
- package/src/Blockquote/Blockquote.test.tsx +0 -121
- package/src/BottomSheet/BottomSheet.spec.md +0 -457
- package/src/BottomSheet/BottomSheet.test.tsx +0 -3154
- package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +0 -248
- package/src/BottomSheet/BottomSheetKeyboard.test.tsx +0 -195
- package/src/BottomSheet/BottomSheetPanel.test.tsx +0 -549
- package/src/BottomSheet/BottomSheetReplace.test.tsx +0 -1638
- package/src/BottomSheet/BottomSheetStacking.announce.test.tsx +0 -246
- package/src/BottomSheet/BottomSheetStacking.test.tsx +0 -3184
- package/src/BottomSheet/BottomSheetSwitcher.spec.md +0 -367
- package/src/BottomSheet/BottomSheetSwitcher.test.tsx +0 -2010
- package/src/BottomSheet/__tests__/BottomSheetDrag.a11y.chromium.spec.ts +0 -129
- package/src/BottomSheet/__tests__/BottomSheetFocusReturn.a11y.browser.spec.ts +0 -97
- package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +0 -415
- package/src/BottomSheet/__tests__/BottomSheetNativeModal.a11y.browser.spec.ts +0 -462
- package/src/BottomSheet/__tests__/BottomSheetPinchZoom.a11y.chromium.spec.ts +0 -247
- package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +0 -83
- package/src/BottomSheet/snapOffsets.test.ts +0 -254
- package/src/BottomSheet/useSheetGestures.test.ts +0 -1690
- package/src/Breadcrumbs/BreadcrumbItem.spec.md +0 -269
- package/src/Breadcrumbs/Breadcrumbs.spec.md +0 -165
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +0 -921
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +0 -132
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.renders.tsx +0 -45
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.states.ts +0 -81
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.test.tsx +0 -125
- package/src/Button/Button.spec.md +0 -322
- package/src/Button/Button.test.tsx +0 -864
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +0 -355
- package/src/Button/__tests__/Button.a11y.harnesses.tsx +0 -47
- package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -25
- package/src/Button/__tests__/Button.a11y.renders.tsx +0 -139
- package/src/Button/__tests__/Button.a11y.states.ts +0 -317
- package/src/Button/__tests__/Button.a11y.test.tsx +0 -187
- package/src/ButtonGroup/ButtonGroup.spec.md +0 -220
- package/src/ButtonGroup/ButtonGroup.test.tsx +0 -1025
- package/src/Calendar/Calendar.spec.md +0 -248
- package/src/Calendar/Calendar.test.tsx +0 -2186
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +0 -141
- package/src/Calendar/__tests__/Calendar.a11y.known-failures.ts +0 -12
- package/src/Calendar/__tests__/Calendar.a11y.renders.tsx +0 -57
- package/src/Calendar/__tests__/Calendar.a11y.states.ts +0 -139
- package/src/Calendar/__tests__/Calendar.a11y.test.tsx +0 -137
- package/src/Calendar/dayCellUtils.test.ts +0 -520
- package/src/Calendar/getInitialFocusDate.test.ts +0 -94
- package/src/Calendar/getStandaloneShortWeekdayNames.test.ts +0 -54
- package/src/Calendar/hooks/useCalendarConstraints.test.ts +0 -153
- package/src/Calendar/hooks/useCalendarDays.test.ts +0 -265
- package/src/Calendar/hooks/useCalendarNavigation.test.ts +0 -252
- package/src/Card/Card.spec.md +0 -205
- package/src/Card/Card.test.tsx +0 -202
- package/src/Carousel/Carousel.spec.md +0 -146
- package/src/Carousel/Carousel.test.tsx +0 -1036
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +0 -207
- package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +0 -12
- package/src/Carousel/__tests__/Carousel.a11y.renders.tsx +0 -39
- package/src/Carousel/__tests__/Carousel.a11y.states.ts +0 -139
- package/src/Carousel/__tests__/Carousel.a11y.test.tsx +0 -127
- package/src/Center/Center.spec.md +0 -205
- package/src/Center/Center.test.tsx +0 -406
- package/src/Chat/ChatComposer.spec.md +0 -246
- package/src/Chat/ChatComposer.test.tsx +0 -364
- package/src/Chat/ChatComposerDrawer.spec.md +0 -267
- package/src/Chat/ChatComposerDrawer.test.tsx +0 -130
- package/src/Chat/ChatComposerInput.spec.md +0 -224
- package/src/Chat/ChatComposerInput.test.tsx +0 -2136
- package/src/Chat/ChatComposerTokenElement.spec.md +0 -164
- package/src/Chat/ChatComposerTokenElement.test.tsx +0 -85
- package/src/Chat/ChatDictationButton.spec.md +0 -205
- package/src/Chat/ChatDictationButton.test.tsx +0 -108
- package/src/Chat/ChatLayout.spec.md +0 -276
- package/src/Chat/ChatLayout.test.tsx +0 -311
- package/src/Chat/ChatLayoutScrollButton.spec.md +0 -322
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -99
- package/src/Chat/ChatMessage.spec.md +0 -265
- package/src/Chat/ChatMessage.test.tsx +0 -344
- package/src/Chat/ChatMessageBubble.spec.md +0 -263
- package/src/Chat/ChatMessageBubble.test.tsx +0 -294
- package/src/Chat/ChatMessageList.spec.md +0 -222
- package/src/Chat/ChatMessageList.test.tsx +0 -198
- package/src/Chat/ChatMessageMetadata.spec.md +0 -220
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -66
- package/src/Chat/ChatPastedTextToken.test.tsx +0 -71
- package/src/Chat/ChatSendButton.spec.md +0 -238
- package/src/Chat/ChatSendButton.test.tsx +0 -309
- package/src/Chat/ChatSystemMessage.spec.md +0 -224
- package/src/Chat/ChatSystemMessage.test.tsx +0 -189
- package/src/Chat/ChatTokenizedText.spec.md +0 -190
- package/src/Chat/ChatTokenizedText.test.tsx +0 -163
- package/src/Chat/ChatToolCalls.spec.md +0 -194
- package/src/Chat/ChatToolCalls.test.tsx +0 -413
- package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +0 -577
- package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +0 -740
- package/src/Chat/__tests__/ChatMessageBubble.a11y.chromium.spec.ts +0 -457
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.test.ts +0 -91
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.ts +0 -91
- package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +0 -465
- package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +0 -416
- package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +0 -1523
- package/src/Chat/__tests__/ChatSystemMessage.a11y.chromium.spec.ts +0 -1004
- package/src/Chat/__tests__/ChatTokenizedText.a11y.chromium.spec.ts +0 -574
- package/src/Chat/__tests__/useChatStreamScroll.a11y.chromium.spec.ts +0 -263
- package/src/Chat/__tests__/useChatStreamScroll.fixture.tsx +0 -61
- package/src/Chat/useChatDictation.test.tsx +0 -369
- package/src/Chat/useChatNewMessages.test.tsx +0 -209
- package/src/Chat/useChatPasteAsToken.test.ts +0 -191
- package/src/Chat/useChatStreamScroll.test.tsx +0 -381
- package/src/Chat/useTriggerMenu.test.tsx +0 -994
- package/src/CheckboxInput/CheckboxInput.spec.md +0 -218
- package/src/CheckboxInput/CheckboxInput.test.tsx +0 -926
- package/src/CheckboxInput/__tests__/Checkbox.a11y.chromium.spec.ts +0 -354
- package/src/CheckboxInput/__tests__/Checkbox.a11y.known-failures.ts +0 -54
- package/src/CheckboxInput/__tests__/Checkbox.a11y.renders.tsx +0 -310
- package/src/CheckboxInput/__tests__/Checkbox.a11y.states.ts +0 -404
- package/src/CheckboxInput/__tests__/Checkbox.a11y.test.tsx +0 -128
- package/src/CheckboxList/CheckboxList.fr10.test.tsx +0 -51
- package/src/CheckboxList/CheckboxList.spec.md +0 -332
- package/src/CheckboxList/CheckboxList.test.tsx +0 -1159
- package/src/CheckboxList/CheckboxListItem.spec.md +0 -302
- package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +0 -1998
- package/src/Citation/Citation.spec.md +0 -179
- package/src/Citation/Citation.test.tsx +0 -361
- package/src/ClickableCard/ClickableCard.spec.md +0 -241
- package/src/ClickableCard/ClickableCard.test.tsx +0 -382
- package/src/Code/Code.spec.md +0 -170
- package/src/Code/Code.test.tsx +0 -75
- package/src/CodeBlock/CodeBlock.highlightStyles.test.tsx +0 -87
- package/src/CodeBlock/CodeBlock.spec.md +0 -243
- package/src/CodeBlock/CodeBlock.test.tsx +0 -752
- package/src/CodeBlock/CodeLanguage.test.tsx +0 -173
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +0 -325
- package/src/CodeBlock/__tests__/CodeBlockLanguages.a11y.chromium.spec.ts +0 -64
- package/src/CodeBlock/__tests__/CodeBlockOverflowStop.a11y.chromium.spec.ts +0 -126
- package/src/CodeBlock/__tests__/DiffRowPaint.a11y.chromium.spec.ts +0 -94
- package/src/CodeBlock/highlightRanges.test.ts +0 -253
- package/src/CodeBlock/languages.test.ts +0 -402
- package/src/CodeBlock/tokenizer.test.ts +0 -280
- package/src/CodeBlock/tokenizerBudget.test.ts +0 -112
- package/src/Collapsible/Collapsible.spec.md +0 -247
- package/src/Collapsible/Collapsible.test.tsx +0 -620
- package/src/Collapsible/CollapsibleGroup.spec.md +0 -229
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -656
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +0 -194
- package/src/Collapsible/__tests__/Collapsible.a11y.states.ts +0 -117
- package/src/Collapsible/__tests__/Collapsible.a11y.test.tsx +0 -140
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.chromium.spec.ts +0 -559
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.renders.tsx +0 -45
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.states.ts +0 -139
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.test.tsx +0 -135
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +0 -141
- package/src/Collapsible/useCollapsible.test.tsx +0 -236
- package/src/CommandPalette/CommandPalette.perf.test.ts +0 -100
- package/src/CommandPalette/CommandPalette.spec.md +0 -278
- package/src/CommandPalette/CommandPalette.test.tsx +0 -750
- package/src/CommandPalette/CommandPaletteEmpty.spec.md +0 -190
- package/src/CommandPalette/CommandPaletteEmpty.test.tsx +0 -101
- package/src/CommandPalette/CommandPaletteFooter.test.tsx +0 -122
- package/src/CommandPalette/CommandPaletteGroup.test.tsx +0 -129
- package/src/CommandPalette/CommandPaletteInput.spec.md +0 -215
- package/src/CommandPalette/CommandPaletteInput.test.tsx +0 -539
- package/src/CommandPalette/CommandPaletteItem.spec.md +0 -223
- package/src/CommandPalette/CommandPaletteItem.test.tsx +0 -417
- package/src/CommandPalette/CommandPaletteList.spec.md +0 -194
- package/src/CommandPalette/CommandPaletteList.test.tsx +0 -184
- package/src/CommandPalette/__tests__/CommandPalette.a11y.chromium.spec.ts +0 -600
- package/src/CommandPalette/__tests__/CommandPaletteEmptyAudit.a11y.chromium.spec.ts +0 -715
- package/src/CommandPalette/__tests__/CommandPaletteFooter.a11y.chromium.spec.ts +0 -582
- package/src/CommandPalette/__tests__/CommandPaletteInputAudit.a11y.chromium.spec.ts +0 -336
- package/src/CommandPalette/__tests__/CommandPaletteItemAudit.a11y.chromium.spec.ts +0 -523
- package/src/ComplexSelector/ComplexSelector.focusableDisabled.test.tsx +0 -76
- package/src/ComplexSelector/ComplexSelector.fr10.test.tsx +0 -262
- package/src/ComplexSelector/ComplexSelector.spec.md +0 -266
- package/src/ComplexSelector/ComplexSelector.test.tsx +0 -1171
- package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +0 -965
- package/src/ContextMenu/ContextMenu.spec.md +0 -279
- package/src/ContextMenu/ContextMenu.test.tsx +0 -1617
- package/src/ContextMenu/ContextMenu.triggerProps.test.tsx +0 -54
- package/src/ContextMenu/ContextMenuItem.spec.md +0 -132
- package/src/ContextMenu/__tests__/ContextMenuAudit.a11y.chromium.spec.ts +0 -439
- package/src/ContextMenu/__tests__/ContextMenuCursorAnchor.a11y.browser.spec.ts +0 -154
- package/src/ContextMenu/__tests__/ContextMenuLongPress.a11y.chromium.spec.ts +0 -117
- package/src/DateInput/DateInput.fr10.test.tsx +0 -283
- package/src/DateInput/DateInput.spec.md +0 -319
- package/src/DateInput/DateInput.test.tsx +0 -1571
- package/src/DateInput/DateInputTouch.test.tsx +0 -2948
- package/src/DateInput/MonthScrollerSettle.test.tsx +0 -165
- package/src/DateInput/NativeDateField.test.tsx +0 -741
- package/src/DateInput/Presentation.test.tsx +0 -121
- package/src/DateInput/__tests__/DateInputAudit.a11y.chromium.spec.ts +0 -577
- package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +0 -312
- package/src/DateInput/__tests__/WheelPinchZoom.a11y.chromium.spec.ts +0 -171
- package/src/DateRangeInput/DateRangeInput.fr10.test.tsx +0 -165
- package/src/DateRangeInput/DateRangeInput.spec.md +0 -203
- package/src/DateRangeInput/DateRangeInput.test.tsx +0 -1151
- package/src/DateTimeInput/DateTimeInput.fr10.test.tsx +0 -319
- package/src/DateTimeInput/DateTimeInput.spec.md +0 -270
- package/src/DateTimeInput/DateTimeInput.test.tsx +0 -2656
- package/src/DateTimeInput/DateTimeInputTouch.test.tsx +0 -1071
- package/src/DateTimeInput/NativePickerSegments.test.tsx +0 -657
- package/src/DateTimeInput/Presentation.test.tsx +0 -89
- package/src/Dialog/Dialog.source-build.test.mjs +0 -43
- package/src/Dialog/Dialog.spec.md +0 -189
- package/src/Dialog/Dialog.test.tsx +0 -1599
- package/src/Dialog/DialogHeader.test.tsx +0 -477
- package/src/Dialog/__tests__/Dialog.a11y.browser.spec.ts +0 -111
- package/src/Dialog/__tests__/Dialog.a11y.chromium.spec.ts +0 -218
- package/src/Dialog/__tests__/Dialog.a11y.known-failures.ts +0 -28
- package/src/Dialog/__tests__/Dialog.a11y.renders.tsx +0 -107
- package/src/Dialog/__tests__/Dialog.a11y.states.ts +0 -104
- package/src/Dialog/__tests__/Dialog.a11y.test.tsx +0 -102
- package/src/Dialog/__tests__/Dialog.reduced-motion.a11y.browser.spec.ts +0 -252
- package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +0 -202
- package/src/Dialog/modules/DialogHeader.spec.md +0 -211
- package/src/Dialog/useImperativeDialog.test.tsx +0 -78
- package/src/Divider/Divider.spec.md +0 -252
- package/src/Divider/Divider.test.tsx +0 -155
- package/src/Drawer/Drawer.spec.md +0 -388
- package/src/Drawer/Drawer.test.tsx +0 -1335
- package/src/Drawer/DrawerDirection.test.tsx +0 -127
- package/src/Drawer/DrawerHeader.spec.md +0 -181
- package/src/Drawer/DrawerHeader.test.tsx +0 -102
- package/src/Drawer/__tests__/DrawerAudit.a11y.chromium.spec.ts +0 -402
- package/src/Drawer/__tests__/DrawerHeaderAudit.a11y.chromium.spec.ts +0 -298
- package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +0 -267
- package/src/DropdownMenu/DropdownMenu.spec.md +0 -562
- package/src/DropdownMenu/DropdownMenu.ssr.test.tsx +0 -93
- package/src/DropdownMenu/DropdownMenu.test.tsx +0 -4498
- package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +0 -192
- package/src/DropdownMenu/DropdownMenuContext.public.test.ts +0 -22
- package/src/DropdownMenu/DropdownMenuDivider.spec.md +0 -186
- package/src/DropdownMenu/DropdownMenuGroup.spec.md +0 -145
- package/src/DropdownMenu/DropdownMenuItem.spec.md +0 -215
- package/src/DropdownMenu/DropdownMenuLazySheet.test.tsx +0 -126
- package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +0 -187
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +0 -227
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +0 -635
- package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +0 -72
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +0 -231
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +0 -2442
- package/src/DropdownMenu/__tests__/DropdownMenuDividerAudit.a11y.chromium.spec.ts +0 -281
- package/src/DropdownMenu/__tests__/DropdownMenuDrillIn.a11y.chromium.spec.ts +0 -175
- package/src/DropdownMenu/__tests__/DropdownMenuFocusReturn.a11y.browser.spec.ts +0 -74
- package/src/DropdownMenu/__tests__/DropdownMenuGroupAudit.a11y.chromium.spec.ts +0 -335
- package/src/DropdownMenu/__tests__/DropdownMenuItemAudit.a11y.chromium.spec.ts +0 -367
- package/src/DropdownMenu/__tests__/DropdownMenuRadioGroupAudit.a11y.chromium.spec.ts +0 -328
- package/src/DropdownMenu/__tests__/DropdownMenuRadioItemAudit.a11y.chromium.spec.ts +0 -540
- package/src/DropdownMenu/__tests__/DropdownMenuSubMenuAudit.a11y.chromium.spec.ts +0 -671
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +0 -158
- package/src/DropdownMenu/__tests__/Menu.a11y.known-failures.ts +0 -26
- package/src/DropdownMenu/__tests__/Menu.a11y.renders.tsx +0 -65
- package/src/DropdownMenu/__tests__/Menu.a11y.states.ts +0 -138
- package/src/DropdownMenu/__tests__/Menu.a11y.test.tsx +0 -136
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +0 -149
- package/src/DropdownMenu/__tests__/MenuButton.a11y.known-failures.ts +0 -12
- package/src/DropdownMenu/__tests__/MenuButton.a11y.renders.tsx +0 -67
- package/src/DropdownMenu/__tests__/MenuButton.a11y.states.ts +0 -141
- package/src/DropdownMenu/__tests__/MenuButton.a11y.test.tsx +0 -138
- package/src/DropdownMenu/__tests__/MenuHeaderFooter.a11y.chromium.spec.ts +0 -231
- package/src/DropdownMenu/__tests__/MenuHoverFocus.a11y.chromium.spec.ts +0 -238
- package/src/DropdownMenu/__tests__/MenuPinchZoom.a11y.chromium.spec.ts +0 -173
- package/src/DropdownMenu/__tests__/MenuPress.a11y.chromium.spec.ts +0 -503
- package/src/DropdownMenu/__tests__/SubMenuHeaderFooter.a11y.chromium.spec.ts +0 -268
- package/src/DropdownMenu/__tests__/warmMenuBottomSheet.tsx +0 -43
- package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +0 -60
- package/src/DropdownMenu/modules/useMenuHover.spec.md +0 -283
- package/src/DropdownMenu/modules/useMenuPress.spec.md +0 -348
- package/src/EmptyState/EmptyState.announce.test.tsx +0 -227
- package/src/EmptyState/EmptyState.spec.md +0 -203
- package/src/EmptyState/EmptyState.test.tsx +0 -284
- package/src/Field/Field.spec.md +0 -226
- package/src/Field/Field.test.tsx +0 -800
- package/src/Field/FieldLabel.spec.md +0 -183
- package/src/Field/FieldLabel.test.tsx +0 -244
- package/src/Field/InputClearButton.test.tsx +0 -395
- package/src/Field/__tests__/FieldLabelAudit.a11y.chromium.spec.ts +0 -297
- package/src/Field/fieldInputFamily.test.tsx +0 -160
- package/src/FieldStatus/FieldStatus.spec.md +0 -224
- package/src/FieldStatus/FieldStatus.test.tsx +0 -482
- package/src/FieldStatus/__tests__/StatusMessage.a11y.chromium.spec.ts +0 -206
- package/src/FieldStatus/__tests__/StatusMessage.a11y.known-failures.ts +0 -13
- package/src/FieldStatus/__tests__/StatusMessage.a11y.renders.tsx +0 -287
- package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +0 -302
- package/src/FieldStatus/__tests__/StatusMessage.a11y.test.tsx +0 -154
- package/src/FileInput/FileInput.fr10.test.tsx +0 -21
- package/src/FileInput/FileInput.spec.md +0 -199
- package/src/FileInput/FileInput.test.tsx +0 -1291
- package/src/FormLayout/FormLayout.spec.md +0 -209
- package/src/FormLayout/FormLayout.test.tsx +0 -444
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -46
- package/src/Grid/Grid.spec.md +0 -193
- package/src/Grid/Grid.test.tsx +0 -509
- package/src/Grid/GridSpan.spec.md +0 -158
- package/src/HStack/HStack.test.tsx +0 -129
- package/src/Heading/Heading.spec.md +0 -198
- package/src/Heading/Heading.test.tsx +0 -328
- package/src/HoverCard/HoverCard.spec.md +0 -244
- package/src/HoverCard/HoverCard.test.tsx +0 -1339
- package/src/Icon/Icon.spec.md +0 -244
- package/src/Icon/Icon.test.tsx +0 -990
- package/src/Icon/globalIconRegistry.test.tsx +0 -613
- package/src/IconButton/IconButton.spec.md +0 -197
- package/src/IconButton/IconButton.test.tsx +0 -156
- package/src/Indicator/CheckIndicator.spec.md +0 -164
- package/src/Indicator/CheckboxIndicator.spec.md +0 -164
- package/src/Indicator/Indicator.spec.md +0 -188
- package/src/Indicator/Indicator.test.tsx +0 -389
- package/src/Indicator/indicatorRegistry.test.tsx +0 -106
- package/src/InputGroup/InputGroup.spec.md +0 -199
- package/src/InputGroup/InputGroup.test.tsx +0 -502
- package/src/InputGroup/InputGroupText.spec.md +0 -139
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Item/Item.source-build.test.mjs +0 -88
- package/src/Item/Item.spec.md +0 -226
- package/src/Item/Item.swipeLayer.test.tsx +0 -74
- package/src/Item/Item.test.tsx +0 -1515
- package/src/Item/ItemMarkerColumns.a11y.chromium.spec.ts +0 -211
- package/src/Item/__tests__/ItemSwipeActions.a11y.chromium.spec.ts +0 -337
- package/src/Item/__tests__/ItemSwipePinchZoom.a11y.chromium.spec.ts +0 -186
- package/src/Kbd/Kbd.spec.md +0 -185
- package/src/Kbd/Kbd.test.tsx +0 -299
- package/src/Layer/LayerProvider.spec.md +0 -149
- package/src/Layer/LayerProvider.test.tsx +0 -143
- package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +0 -126
- package/src/Layer/__tests__/LayerReducedMotion.a11y.chromium.spec.ts +0 -176
- package/src/Layer/__tests__/TouchTrigger.a11y.chromium.spec.ts +0 -200
- package/src/Layer/anchorName.test.ts +0 -146
- package/src/Layer/layerDismissalFamilies.test.tsx +0 -487
- package/src/Layer/layerDismissalInvariants.test.tsx +0 -501
- package/src/Layer/layerHost.test.ts +0 -117
- package/src/Layer/layerScopedContext.test.tsx +0 -499
- package/src/Layer/layerViewportInset.source-build.test.mjs +0 -90
- package/src/Layer/layerViewportInset.test.ts +0 -120
- package/src/Layer/popoverOperations.test.ts +0 -205
- package/src/Layer/useLayer.test.tsx +0 -2845
- package/src/Layer/useLayerDismissal.test.tsx +0 -580
- package/src/Layer/useTouchTrigger.test.ts +0 -70
- package/src/Layout/Layout.spec.md +0 -243
- package/src/Layout/Layout.test.tsx +0 -375
- package/src/Layout/LayoutContent.spec.md +0 -205
- package/src/Layout/LayoutFooter.spec.md +0 -190
- package/src/Layout/LayoutHeader.spec.md +0 -193
- package/src/Layout/LayoutPanel.spec.md +0 -194
- package/src/Layout/LayoutSlots.test.tsx +0 -376
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +0 -134
- package/src/Layout/__tests__/Layout.a11y.renders.tsx +0 -110
- package/src/Layout/__tests__/Layout.a11y.states.ts +0 -93
- package/src/Layout/__tests__/Layout.a11y.test.tsx +0 -142
- package/src/Layout/__tests__/childrenAsContent.test.tsx +0 -59
- package/src/Layout/__tests__/contentWidth.test.tsx +0 -303
- package/src/Layout/__tests__/edgeCompensation.test.tsx +0 -191
- package/src/Layout/__tests__/nestedPadding.test.tsx +0 -264
- package/src/Layout/overlayPaddingReset.test.tsx +0 -224
- package/src/Lightbox/Lightbox.spec.md +0 -199
- package/src/Lightbox/Lightbox.test.tsx +0 -837
- package/src/Lightbox/LightboxKeyboard.a11y.browser.spec.ts +0 -78
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +0 -74
- package/src/Lightbox/useLightbox.test.tsx +0 -263
- package/src/Link/Link.spec.md +0 -230
- package/src/Link/Link.test.tsx +0 -457
- package/src/Link/LinkProvider.spec.md +0 -167
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +0 -153
- package/src/Link/__tests__/Link.a11y.renders.tsx +0 -97
- package/src/Link/__tests__/Link.a11y.states.ts +0 -104
- package/src/Link/__tests__/Link.a11y.test.tsx +0 -127
- package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +0 -262
- package/src/Link/__tests__/Link.truncation.a11y.chromium.spec.ts +0 -58
- package/src/Link/useLinkComponent.test.tsx +0 -572
- package/src/Link/useLinkify.test.tsx +0 -146
- package/src/List/List.spec.md +0 -336
- package/src/List/List.test.tsx +0 -1052
- package/src/List/ListItem.source-build.test.mjs +0 -41
- package/src/List/ListItem.spec.md +0 -205
- package/src/List/ListMarkers.a11y.chromium.spec.ts +0 -904
- package/src/Markdown/Markdown.codeLanguages.test.tsx +0 -137
- package/src/Markdown/Markdown.fr23.bench.ts +0 -176
- package/src/Markdown/Markdown.fr23.perf.test.ts +0 -484
- package/src/Markdown/Markdown.helpers.perf.test.ts +0 -495
- package/src/Markdown/Markdown.public.test.ts +0 -309
- package/src/Markdown/Markdown.renderBoundary.test.tsx +0 -72
- package/src/Markdown/Markdown.rerender.test.tsx +0 -143
- package/src/Markdown/Markdown.spec.md +0 -595
- package/src/Markdown/Markdown.test.tsx +0 -1383
- package/src/Markdown/MarkdownTable.a11y.chromium.spec.ts +0 -727
- package/src/Markdown/__tests__/MarkdownNesting.a11y.chromium.spec.ts +0 -102
- package/src/Markdown/angleDestinations.test.tsx +0 -104
- package/src/Markdown/ast.test.ts +0 -374
- package/src/Markdown/atxHeadingIndentation.test.tsx +0 -53
- package/src/Markdown/blockNesting.test.tsx +0 -124
- package/src/Markdown/blockquoteMarkers.test.tsx +0 -69
- package/src/Markdown/characterReferences.test.ts +0 -47
- package/src/Markdown/codeSpans.test.tsx +0 -65
- package/src/Markdown/emphasis.test.tsx +0 -214
- package/src/Markdown/fenceInfo.test.tsx +0 -47
- package/src/Markdown/imageAlt.test.tsx +0 -84
- package/src/Markdown/incremental.test.ts +0 -1198
- package/src/Markdown/incrementalIndentation.test.tsx +0 -36
- package/src/Markdown/indentedFences.test.tsx +0 -374
- package/src/Markdown/indentedTables.test.tsx +0 -53
- package/src/Markdown/linkBrackets.test.tsx +0 -116
- package/src/Markdown/linkDestinationLinear.test.tsx +0 -54
- package/src/Markdown/linkDestinations.test.tsx +0 -127
- package/src/Markdown/linkTextCode.test.tsx +0 -65
- package/src/Markdown/listBullets.test.tsx +0 -55
- package/src/Markdown/listContinuation.test.tsx +0 -94
- package/src/Markdown/listThematicBreak.test.tsx +0 -49
- package/src/Markdown/longLinkLabels.test.tsx +0 -49
- package/src/Markdown/modules/headingLinks.spec.md +0 -262
- package/src/Markdown/modules/remark.spec.md +0 -269
- package/src/Markdown/modules/softBreaks.spec.md +0 -137
- package/src/Markdown/modules/sourceLines.spec.md +0 -162
- package/src/Markdown/openFenceFinalNewline.test.tsx +0 -85
- package/src/Markdown/parser.perf.test.ts +0 -398
- package/src/Markdown/parser.public.test.ts +0 -144
- package/src/Markdown/parser.test.ts +0 -1925
- package/src/Markdown/plugin-renderer/MarkdownPluginNodeRenderer.test.tsx +0 -300
- package/src/Markdown/plugins/frontmatter.test.tsx +0 -150
- package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +0 -856
- package/src/Markdown/plugins/headingLinks.ssr.test.tsx +0 -143
- package/src/Markdown/plugins/headingLinks.test.tsx +0 -637
- package/src/Markdown/plugins/protocol.test.tsx +0 -1083
- package/src/Markdown/plugins/semanticFence.test.tsx +0 -655
- package/src/Markdown/plugins/softBreaks.test.tsx +0 -172
- package/src/Markdown/plugins/sourceDecoration.test.tsx +0 -799
- package/src/Markdown/plugins/sourceLines.test.tsx +0 -715
- package/src/Markdown/plugins/textTransform.test.ts +0 -467
- package/src/Markdown/remark.test.tsx +0 -1877
- package/src/Markdown/streaming.test.ts +0 -148
- package/src/Markdown/streamingListShapes.test.tsx +0 -93
- package/src/Markdown/trailingSpaces.test.tsx +0 -45
- package/src/MetadataList/MetadataList.spec.md +0 -187
- package/src/MetadataList/MetadataList.test.tsx +0 -383
- package/src/MetadataList/MetadataListItem.spec.md +0 -165
- package/src/MobileNav/MobileNav.spec.md +0 -306
- package/src/MobileNav/MobileNav.test.tsx +0 -296
- package/src/MobileNav/MobileNavCloseEdgeCases.test.tsx +0 -584
- package/src/MobileNav/MobileNavCloseTiming.test.ts +0 -58
- package/src/MobileNav/MobileNavCloseVisibility.test.tsx +0 -172
- package/src/MobileNav/MobileNavEntryAnimation.test.tsx +0 -212
- package/src/MobileNav/MobileNavFocus.test.tsx +0 -553
- package/src/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.ts +0 -147
- package/src/MobileNav/MobileNavReopen.test.tsx +0 -118
- package/src/MobileNav/MobileNavScrollbarGutter.test.tsx +0 -109
- package/src/MobileNav/MobileNavToggle.test.tsx +0 -179
- package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +0 -89
- package/src/MobileNav/__tests__/MobileNavWidth.a11y.chromium.spec.ts +0 -103
- package/src/MoreMenu/MoreMenu.spec.md +0 -268
- package/src/MoreMenu/MoreMenu.test.tsx +0 -367
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +0 -148
- package/src/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.ts +0 -72
- package/src/MultiSelector/MultiSelector.focusableDisabled.test.tsx +0 -121
- package/src/MultiSelector/MultiSelector.fr10.test.tsx +0 -221
- package/src/MultiSelector/MultiSelector.spec.md +0 -357
- package/src/MultiSelector/MultiSelector.test.tsx +0 -4971
- package/src/MultiSelector/OptionActions.a11y.chromium.spec.ts +0 -310
- package/src/MultiSelector/__tests__/MultiSelector.a11y.chromium.spec.ts +0 -46
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +0 -135
- package/src/NavIcon/NavIcon.spec.md +0 -158
- package/src/NavIcon/NavIcon.test.tsx +0 -41
- package/src/NavMenu/NavHeadingMenu.spec.md +0 -264
- package/src/NavMenu/NavHeadingMenu.test.tsx +0 -714
- package/src/NavMenu/__tests__/NavMenusSlideSelection.a11y.chromium.spec.ts +0 -137
- package/src/NumberInput/NumberInput.fr10.test.tsx +0 -21
- package/src/NumberInput/NumberInput.spec.md +0 -270
- package/src/NumberInput/NumberInput.test.tsx +0 -2697
- package/src/NumberInput/__tests__/NumberInput.a11y.chromium.spec.ts +0 -124
- package/src/NumberInput/__tests__/NumberInput.a11y.known-failures.ts +0 -26
- package/src/NumberInput/__tests__/NumberInput.a11y.renders.tsx +0 -77
- package/src/NumberInput/__tests__/NumberInput.a11y.states.ts +0 -116
- package/src/NumberInput/__tests__/NumberInput.a11y.test.tsx +0 -154
- package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +0 -102
- package/src/NumberInput/numberInputCommit.test.ts +0 -72
- package/src/NumberInput/numberParser.docblock.test.ts +0 -234
- package/src/NumberInput/numberParser.test.ts +0 -222
- package/src/Outline/Outline.spec.md +0 -258
- package/src/Outline/Outline.test.tsx +0 -1134
- package/src/Outline/OutlineFocus.a11y.chromium.spec.ts +0 -551
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +0 -150
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -104
- package/src/OverflowList/OverflowList.spec.md +0 -204
- package/src/OverflowList/OverflowList.test.tsx +0 -1073
- package/src/Overlay/Overlay.spec.md +0 -304
- package/src/Overlay/Overlay.test.tsx +0 -424
- package/src/Pagination/Pagination.spec.md +0 -300
- package/src/Pagination/Pagination.test.tsx +0 -1754
- package/src/Popover/Popover.spec.md +0 -525
- package/src/Popover/Popover.test.tsx +0 -1508
- package/src/Popover/PopoverPresentation.test.tsx +0 -952
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +0 -267
- package/src/PowerSearch/PowerSearch.spec.md +0 -661
- package/src/PowerSearch/PowerSearch.test.tsx +0 -1027
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +0 -1190
- package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +0 -377
- package/src/PowerSearch/PowerSearchToken.test.tsx +0 -230
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +0 -754
- package/src/PowerSearch/formatFilterValue.test.ts +0 -339
- package/src/PowerSearch/resolveDateTimeRangePart.test.ts +0 -40
- package/src/PowerSearch/usePowerSearchConfig.test.ts +0 -832
- package/src/PowerSearch/usePowerSearchSource.test.ts +0 -621
- package/src/ProgressBar/ProgressBar.spec.md +0 -261
- package/src/ProgressBar/ProgressBar.test.tsx +0 -928
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +0 -127
- package/src/ProgressBar/__tests__/ProgressBar.a11y.known-failures.ts +0 -12
- package/src/ProgressBar/__tests__/ProgressBar.a11y.renders.tsx +0 -38
- package/src/ProgressBar/__tests__/ProgressBar.a11y.states.ts +0 -123
- package/src/ProgressBar/__tests__/ProgressBar.a11y.test.tsx +0 -107
- package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +0 -831
- package/src/RadioList/RadioList.fr10.test.tsx +0 -67
- package/src/RadioList/RadioList.spec.md +0 -227
- package/src/RadioList/RadioList.test.tsx +0 -1051
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +0 -80
- package/src/RadioList/RadioListItem.spec.md +0 -223
- package/src/RadioList/__tests__/RadioGroup.a11y.chromium.spec.ts +0 -274
- package/src/RadioList/__tests__/RadioGroup.a11y.known-failures.ts +0 -12
- package/src/RadioList/__tests__/RadioGroup.a11y.renders.tsx +0 -232
- package/src/RadioList/__tests__/RadioGroup.a11y.states.ts +0 -503
- package/src/RadioList/__tests__/RadioGroup.a11y.test.tsx +0 -217
- package/src/Resizable/Resizable.spec.md +0 -298
- package/src/Resizable/ResizeHandle.test.tsx +0 -1067
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +0 -127
- package/src/Resizable/__tests__/ResizeHandle.a11y.known-failures.ts +0 -39
- package/src/Resizable/__tests__/ResizeHandle.a11y.renders.tsx +0 -80
- package/src/Resizable/__tests__/ResizeHandle.a11y.states.ts +0 -197
- package/src/Resizable/__tests__/ResizeHandle.a11y.test.tsx +0 -123
- package/src/Resizable/shippedDirections.test.ts +0 -462
- package/src/Resizable/useResizable.test.ts +0 -1725
- package/src/Resizable/utils.test.ts +0 -74
- package/src/ScrollableArea/ScrollableArea.spec.md +0 -190
- package/src/ScrollableArea/ScrollableArea.test.tsx +0 -304
- package/src/ScrollableArea/modules/useScrollableArea.spec.md +0 -149
- package/src/Section/Section.spec.md +0 -197
- package/src/Section/Section.test.tsx +0 -376
- package/src/SegmentedControl/SegmentedControl.spec.md +0 -261
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -981
- package/src/SegmentedControl/SegmentedControlItem.spec.md +0 -206
- package/src/SelectableCard/SelectableCard.spec.md +0 -230
- package/src/SelectableCard/SelectableCard.test.tsx +0 -216
- package/src/Selector/Selector.focusableDisabled.test.tsx +0 -127
- package/src/Selector/Selector.fr10.test.tsx +0 -149
- package/src/Selector/Selector.sheetActiveDescendant.test.tsx +0 -95
- package/src/Selector/Selector.source-build.test.mjs +0 -79
- package/src/Selector/Selector.spec.md +0 -379
- package/src/Selector/Selector.test.tsx +0 -5117
- package/src/Selector/__tests__/Combobox.a11y.known-failures.ts +0 -27
- package/src/Selector/__tests__/Combobox.a11y.states.ts +0 -145
- package/src/Selector/__tests__/ComboboxField.a11y.chromium.spec.ts +0 -458
- package/src/Selector/__tests__/EmptyStateAnnouncement.a11y.chromium.spec.ts +0 -91
- package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +0 -131
- package/src/Selector/__tests__/Listbox.a11y.dom.ts +0 -38
- package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +0 -63
- package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +0 -12
- package/src/Selector/__tests__/Listbox.a11y.states.ts +0 -232
- package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +0 -46
- package/src/Selector/__tests__/Selector.combobox.a11y.chromium.spec.ts +0 -109
- package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +0 -133
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +0 -128
- package/src/Selector/useCombobox.public.test.tsx +0 -89
- package/src/Selector/useCombobox.test.tsx +0 -444
- package/src/SideNav/SideNav.spec.md +0 -247
- package/src/SideNav/SideNav.test.tsx +0 -4275
- package/src/SideNav/SideNavCollapseButton.spec.md +0 -161
- package/src/SideNav/SideNavHeading.spec.md +0 -226
- package/src/SideNav/SideNavItem.spec.md +0 -236
- package/src/SideNav/SideNavRailMotion.test.tsx +0 -620
- package/src/SideNav/SideNavSection.spec.md +0 -153
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +0 -542
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/Skeleton/Skeleton.spec.md +0 -184
- package/src/Skeleton/Skeleton.test.tsx +0 -148
- package/src/Slider/Slider.fr10.test.tsx +0 -93
- package/src/Slider/Slider.spec.md +0 -285
- package/src/Slider/Slider.test.tsx +0 -1661
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +0 -125
- package/src/Slider/__tests__/Slider.a11y.known-failures.ts +0 -12
- package/src/Slider/__tests__/Slider.a11y.renders.tsx +0 -42
- package/src/Slider/__tests__/Slider.a11y.states.ts +0 -106
- package/src/Slider/__tests__/Slider.a11y.test.tsx +0 -105
- package/src/Spinner/Spinner.spec.md +0 -231
- package/src/Spinner/Spinner.test.tsx +0 -484
- package/src/Stack/Stack.spec.md +0 -203
- package/src/Stack/Stack.test.tsx +0 -473
- package/src/Stack/StackItem.test.tsx +0 -105
- package/src/StatusDot/StatusDot.spec.md +0 -224
- package/src/StatusDot/StatusDot.test.tsx +0 -213
- package/src/Stepper/Step.spec.md +0 -200
- package/src/Stepper/Stepper.public.test.ts +0 -91
- package/src/Stepper/Stepper.spec.md +0 -327
- package/src/Stepper/Stepper.test.tsx +0 -2130
- package/src/Switch/Switch.focusRing.source-build.test.mjs +0 -81
- package/src/Switch/Switch.spec.md +0 -277
- package/src/Switch/Switch.test.tsx +0 -1136
- package/src/Switch/__tests__/Switch.a11y.chromium.spec.ts +0 -211
- package/src/Switch/__tests__/Switch.a11y.known-failures.ts +0 -28
- package/src/Switch/__tests__/Switch.a11y.states.ts +0 -275
- package/src/Switch/__tests__/Switch.a11y.test.tsx +0 -144
- package/src/TabList/Tab.spec.md +0 -201
- package/src/TabList/TabList.spec.md +0 -217
- package/src/TabList/TabList.test.tsx +0 -1755
- package/src/TabList/TabMenu.spec.md +0 -198
- package/src/TabList/__tests__/TabListOverflow.interaction.browser.spec.ts +0 -99
- package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +0 -163
- package/src/TabList/__tests__/Tabs.a11y.chromium.spec.ts +0 -199
- package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +0 -12
- package/src/TabList/__tests__/Tabs.a11y.renders.tsx +0 -92
- package/src/TabList/__tests__/Tabs.a11y.states.ts +0 -247
- package/src/TabList/__tests__/Tabs.a11y.test.tsx +0 -153
- package/src/Table/Table.perf.test.tsx +0 -569
- package/src/Table/Table.spec.md +0 -395
- package/src/Table/Table.test.tsx +0 -1883
- package/src/Table/TableHeaderCell.test.tsx +0 -291
- package/src/Table/TableSelectionToolbar.test.tsx +0 -109
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +0 -141
- package/src/Table/__tests__/Table.a11y.contracts.ts +0 -35
- package/src/Table/__tests__/Table.a11y.renders.tsx +0 -112
- package/src/Table/__tests__/Table.a11y.states.ts +0 -136
- package/src/Table/__tests__/Table.a11y.test.tsx +0 -198
- package/src/Table/__tests__/TableMinWidth.a11y.chromium.spec.ts +0 -75
- package/src/Table/__tests__/TableRowGlide.a11y.browser.spec.ts +0 -382
- package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +0 -138
- package/src/Table/__tests__/TableStickyDividers.a11y.browser.spec.ts +0 -560
- package/src/Table/plugins/activation/useTableActivation.spec.md +0 -254
- package/src/Table/plugins/columnResize/useTableColumnResize.spec.md +0 -373
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -941
- package/src/Table/plugins/columnSettings/useTableColumnSettings.test.tsx +0 -175
- package/src/Table/plugins/columnSettings/useTableColumnSettingsState.test.tsx +0 -296
- package/src/Table/plugins/filtering/useTableFilterState.test.tsx +0 -143
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +0 -357
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +0 -112
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +0 -409
- package/src/Table/plugins/infiniteScroll/useTableInfiniteScroll.spec.md +0 -244
- package/src/Table/plugins/pagination/useTablePagination-perf.test.tsx +0 -232
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -666
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.glide.test.tsx +0 -280
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +0 -681
- package/src/Table/plugins/rowIndex/useTableRowIndex.test.tsx +0 -132
- package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +0 -92
- package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +0 -355
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +0 -519
- package/src/Table/plugins/selection/useTableSelection-perf.test.tsx +0 -258
- package/src/Table/plugins/selection/useTableSelection.test.tsx +0 -424
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -451
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.test.tsx +0 -174
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.ts +0 -86
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +0 -786
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +0 -580
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +0 -334
- package/src/Table/plugins/tree/useTableTreeData-perf.test.tsx +0 -163
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +0 -992
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +0 -740
- package/src/Table/plugins/virtualization/useTableVirtualization.spec.md +0 -266
- package/src/Table/tableContextMenu.test.tsx +0 -208
- package/src/Text/Text.spec.md +0 -193
- package/src/Text/Text.test.tsx +0 -405
- package/src/Text/useTruncation.test.tsx +0 -196
- package/src/TextArea/TextArea.fr10.test.tsx +0 -21
- package/src/TextArea/TextArea.spec.md +0 -300
- package/src/TextArea/TextArea.test.tsx +0 -1317
- package/src/TextInput/TextInput.fr10.test.tsx +0 -21
- package/src/TextInput/TextInput.spec.md +0 -260
- package/src/TextInput/TextInput.test.tsx +0 -1280
- package/src/TextInput/__tests__/TextInput.a11y.chromium.spec.ts +0 -214
- package/src/TextInput/__tests__/TextInput.a11y.known-failures.ts +0 -40
- package/src/TextInput/__tests__/TextInput.a11y.renders.tsx +0 -202
- package/src/TextInput/__tests__/TextInput.a11y.states.ts +0 -384
- package/src/TextInput/__tests__/TextInput.a11y.test.tsx +0 -130
- package/src/Thumbnail/Thumbnail.spec.md +0 -244
- package/src/Thumbnail/Thumbnail.test.tsx +0 -384
- package/src/TimeInput/NativeTimeInput.test.tsx +0 -343
- package/src/TimeInput/Presentation.test.tsx +0 -192
- package/src/TimeInput/TimeInput.fr10.test.tsx +0 -312
- package/src/TimeInput/TimeInput.spec.md +0 -270
- package/src/TimeInput/TimeInput.test.tsx +0 -907
- package/src/Timer/Timer.spec.md +0 -215
- package/src/Timer/Timer.test.tsx +0 -302
- package/src/Timestamp/Timestamp.spec.md +0 -246
- package/src/Timestamp/Timestamp.test.tsx +0 -1661
- package/src/Timestamp/tooltipEntries.test.ts +0 -566
- package/src/Toast/Toast.spec.md +0 -291
- package/src/Toast/ToastViewport.modalHost.test.tsx +0 -891
- package/src/Toast/ToastViewport.test.tsx +0 -3130
- package/src/Toast/useToast.test.tsx +0 -258
- package/src/ToggleButton/ToggleButton.spec.md +0 -256
- package/src/ToggleButton/ToggleButton.test.tsx +0 -1000
- package/src/ToggleButton/ToggleButtonGroup.spec.md +0 -195
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +0 -177
- package/src/ToggleButton/__tests__/ToggleButton.a11y.renders.tsx +0 -133
- package/src/ToggleButton/__tests__/ToggleButton.a11y.states.ts +0 -167
- package/src/ToggleButton/__tests__/ToggleButton.a11y.test.tsx +0 -103
- package/src/Token/Token.spec.md +0 -261
- package/src/Token/Token.test.tsx +0 -707
- package/src/Token/__tests__/TokenRemoveTarget.a11y.chromium.spec.ts +0 -87
- package/src/Tokenizer/Tokenizer.fr10.test.tsx +0 -28
- package/src/Tokenizer/Tokenizer.props-type.test.tsx +0 -126
- package/src/Tokenizer/Tokenizer.spec.md +0 -615
- package/src/Tokenizer/Tokenizer.ssr.test.tsx +0 -196
- package/src/Tokenizer/Tokenizer.test.tsx +0 -2216
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +0 -2738
- package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +0 -505
- package/src/Toolbar/Toolbar.spec.md +0 -227
- package/src/Toolbar/Toolbar.test.tsx +0 -600
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +0 -176
- package/src/Toolbar/__tests__/Toolbar.a11y.renders.tsx +0 -63
- package/src/Toolbar/__tests__/Toolbar.a11y.states.ts +0 -142
- package/src/Toolbar/__tests__/Toolbar.a11y.test.tsx +0 -126
- package/src/Tooltip/Tooltip.spec.md +0 -267
- package/src/Tooltip/Tooltip.test.tsx +0 -819
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +0 -141
- package/src/Tooltip/__tests__/Tooltip.a11y.renders.tsx +0 -86
- package/src/Tooltip/__tests__/Tooltip.a11y.states.ts +0 -132
- package/src/Tooltip/__tests__/Tooltip.a11y.test.tsx +0 -126
- package/src/Tooltip/__tests__/TooltipFocusReturn.a11y.chromium.spec.ts +0 -130
- package/src/Tooltip/__tests__/TooltipHoverBridge.a11y.chromium.spec.ts +0 -75
- package/src/Tooltip/__tests__/TooltipTallContent.a11y.browser.spec.ts +0 -673
- package/src/Tooltip/__tests__/TooltipTallContentTracking.a11y.browser.spec.ts +0 -1162
- package/src/Tooltip/useTooltip.test.tsx +0 -483
- package/src/TopNav/TopNav.spec.md +0 -190
- package/src/TopNav/TopNav.test.tsx +0 -863
- package/src/TopNav/TopNavHeading.spec.md +0 -211
- package/src/TopNav/TopNavItem.spec.md +0 -189
- package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +0 -83
- package/src/TopNav/TopNavMegaMenu.spec.md +0 -190
- package/src/TopNav/TopNavMegaMenu.test.tsx +0 -1153
- package/src/TopNav/TopNavMegaMenuFeaturedCard.spec.md +0 -150
- package/src/TopNav/TopNavMegaMenuItem.spec.md +0 -155
- package/src/TopNav/TopNavMenu.spec.md +0 -202
- package/src/TopNav/TopNavMenu.test.tsx +0 -502
- package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +0 -75
- package/src/TreeList/TreeList.spec.md +0 -328
- package/src/TreeList/TreeList.test.tsx +0 -1737
- package/src/TreeList/__tests__/TreeList.a11y.chromium.spec.ts +0 -138
- package/src/TreeList/__tests__/TreeList.a11y.renders.tsx +0 -44
- package/src/TreeList/__tests__/TreeList.a11y.states.ts +0 -164
- package/src/TreeList/__tests__/TreeList.a11y.test.tsx +0 -138
- package/src/TreeList/__tests__/TreeListGuideAlignment.interaction.browser.spec.ts +0 -127
- package/src/TreeList/__tests__/TreeListRowNames.a11y.chromium.spec.ts +0 -83
- package/src/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.ts +0 -138
- package/src/Typeahead/BaseTypeahead.spec.md +0 -270
- package/src/Typeahead/BaseTypeahead.test.tsx +0 -553
- package/src/Typeahead/Typeahead.fr10.test.tsx +0 -28
- package/src/Typeahead/Typeahead.spec.md +0 -257
- package/src/Typeahead/Typeahead.test.tsx +0 -2984
- package/src/Typeahead/TypeaheadItem.test.tsx +0 -134
- package/src/VStack/VStack.test.tsx +0 -128
- package/src/VisuallyHidden/VisuallyHidden.spec.md +0 -170
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +0 -115
- package/src/__tests__/BusyOwnerAnnouncement.test.tsx +0 -853
- package/src/__tests__/CardPress.a11y.chromium.spec.ts +0 -353
- package/src/__tests__/DisabledTriggerFocus.a11y.chromium.spec.ts +0 -87
- package/src/__tests__/PressModality.a11y.chromium.spec.ts +0 -392
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +0 -814
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/babelPluginAddExtensions.test.ts +0 -190
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/__tests__/forcedColors.ts +0 -60
- package/src/__tests__/internalModulesNotExperimental.test.ts +0 -88
- package/src/__tests__/pressState.ts +0 -216
- package/src/__tests__/stubMatchMedia.test.ts +0 -79
- package/src/__tests__/stubMatchMedia.ts +0 -95
- package/src/__tests__/stylexDeclarations.ts +0 -51
- package/src/__tests__/unthemedLength.ts +0 -34
- package/src/docPropLiterals.test.ts +0 -964
- package/src/docPropReferences.test.ts +0 -178
- package/src/docs-script.test.mjs +0 -55
- package/src/gestures/__tests__/GestureHost.test.ts +0 -2136
- package/src/gestures/__tests__/LongPressGestureRecognizer.test.ts +0 -141
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +0 -327
- package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +0 -74
- package/src/gestures/__tests__/PressTracker.test.ts +0 -275
- package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +0 -498
- package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +0 -108
- package/src/gestures/__tests__/TapGestureRecognizer.test.ts +0 -154
- package/src/gestures/__tests__/VelocityTracker.streams.test.ts +0 -243
- package/src/gestures/__tests__/VelocityTracker.test.ts +0 -261
- package/src/gestures/__tests__/arena.test.ts +0 -864
- package/src/gestures/__tests__/arenaContinuous.test.ts +0 -207
- package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +0 -193
- package/src/gestures/__tests__/arenaTapLongPress.test.ts +0 -211
- package/src/gestures/__tests__/browser/build-fixture.mjs +0 -46
- package/src/gestures/__tests__/browser/fixture.ts +0 -307
- package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +0 -1137
- package/src/gestures/__tests__/browserNegotiation.test.ts +0 -293
- package/src/gestures/__tests__/fixtures/pointer-streams/README.md +0 -82
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-fling.json +0 -130
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-slow.json +0 -860
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-stop-release.json +0 -357
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-fling.json +0 -66
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-slow.json +0 -268
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-stop-release.json +0 -128
- package/src/gestures/__tests__/fixtures/pointer-streams/capture.html +0 -123
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-fling.json +0 -64
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-slow.json +0 -268
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-stop-release.json +0 -124
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-fling.json +0 -64
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-slow.json +0 -268
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-stop-release.json +0 -124
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-fling.json +0 -84
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-slow.json +0 -381
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-stop-release.json +0 -171
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-fling.json +0 -45
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-slow.json +0 -101
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-stop-release.json +0 -130
- package/src/gestures/__tests__/haptics.test.ts +0 -187
- package/src/gestures/__tests__/harness.ts +0 -252
- package/src/gestures/__tests__/pressTrackerFactory.test.ts +0 -59
- package/src/gestures/__tests__/recognizerKind.test.ts +0 -78
- package/src/gestures/__tests__/touchActionRule.test.ts +0 -54
- package/src/gestures/__tests__/useGestureRecognizer.test.tsx +0 -570
- package/src/hooks/__tests__/MenuPressShadowRoot.a11y.chromium.spec.ts +0 -144
- package/src/hooks/__tests__/menuLinkClicks.ts +0 -71
- package/src/hooks/actionGroupTracker.exports.test.ts +0 -28
- package/src/hooks/actionGroupTracker.test.ts +0 -510
- package/src/hooks/computeOverflow.test.ts +0 -422
- package/src/hooks/deprecatedApis.public.test.ts +0 -33
- package/src/hooks/menuPressGesture.test.ts +0 -253
- package/src/hooks/scrollKeyboardDelegation.test.ts +0 -188
- package/src/hooks/scrollbarGutter.test.ts +0 -167
- package/src/hooks/useAnnounce.modal.test.tsx +0 -1291
- package/src/hooks/useAnnounce.replace.test.tsx +0 -516
- package/src/hooks/useAnnounce.test.tsx +0 -293
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +0 -235
- package/src/hooks/useAutoMediaMode.test.ts +0 -109
- package/src/hooks/useBusyAnnouncement.adopters.test.tsx +0 -69
- package/src/hooks/useBusyAnnouncement.test.tsx +0 -112
- package/src/hooks/useClickableContainer.test.tsx +0 -236
- package/src/hooks/useClipboard.test.tsx +0 -151
- package/src/hooks/useContainerReveal.test.tsx +0 -163
- package/src/hooks/useDevWarning.test.tsx +0 -45
- package/src/hooks/useEntryAnimation.ssr.test.tsx +0 -143
- package/src/hooks/useFocusTrap.test.tsx +0 -635
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +0 -166
- package/src/hooks/useGridFocus.test.tsx +0 -165
- package/src/hooks/useHotkeys.test.ts +0 -265
- package/src/hooks/useImageMode.test.ts +0 -133
- package/src/hooks/useInputContainer.test.tsx +0 -180
- package/src/hooks/useInputStatusIcon.test.tsx +0 -240
- package/src/hooks/useIsHydrating.test.tsx +0 -70
- package/src/hooks/useKeyboardHint.test.tsx +0 -92
- package/src/hooks/useListFocus.test.tsx +0 -664
- package/src/hooks/useLongPress.test.tsx +0 -152
- package/src/hooks/useMediaQuery.test.ts +0 -165
- package/src/hooks/useMenuHover.test.tsx +0 -536
- package/src/hooks/useMenuPress.test.tsx +0 -565
- package/src/hooks/useMergedRefs.test.tsx +0 -62
- package/src/hooks/useOverflow.test.ts +0 -504
- package/src/hooks/useRenamedProp.test.tsx +0 -95
- package/src/hooks/useScrollLock.test.ts +0 -248
- package/src/hooks/useScrollOverflow.test.tsx +0 -323
- package/src/hooks/useScrollableArea.test.tsx +0 -836
- package/src/hooks/useStreamingText.test.ts +0 -237
- package/src/hooks/useTreeFocus.test.tsx +0 -351
- package/src/hooks/useTypeahead.test.tsx +0 -351
- package/src/i18n/InternationalizationProvider.spec.md +0 -252
- package/src/i18n/__tests__/InternationalizationProvider.test.tsx +0 -128
- package/src/i18n/__tests__/e2e-pagination.test.tsx +0 -172
- package/src/i18n/__tests__/e2e-powersearch.test.tsx +0 -166
- package/src/i18n/__tests__/getLocaleDirection.test.ts +0 -40
- package/src/i18n/__tests__/resolve.test.ts +0 -325
- package/src/i18n/__tests__/useCollator.test.tsx +0 -115
- package/src/i18n/__tests__/useDirection.test.tsx +0 -66
- package/src/i18n/__tests__/useLocale.test.tsx +0 -52
- package/src/i18n/useTranslator.test.tsx +0 -267
- package/src/inputFontFloor.test.ts +0 -106
- package/src/internal/tokenizer-presentation.test.ts +0 -29
- package/src/internal/touch.test.ts +0 -44
- package/src/motion/__tests__/animatedLayout.interaction.browser.spec.ts +0 -1613
- package/src/motion/__tests__/animatedLayoutAdopters.interaction.browser.spec.ts +0 -217
- package/src/motion/__tests__/animatedLayoutBundle.ts +0 -17
- package/src/motion/__tests__/animator.interaction.browser.spec.ts +0 -843
- package/src/motion/__tests__/motionBundle.ts +0 -14
- package/src/motion/animatedLayout.boundary.test.ts +0 -155
- package/src/motion/animatedLayout.swap.test.ts +0 -827
- package/src/motion/animatedLayout.test.ts +0 -1154
- package/src/motion/animatedLayoutAdopters.test.tsx +0 -500
- package/src/motion/animator.test.ts +0 -3746
- package/src/motion/bezier.test.ts +0 -52
- package/src/motion/coast.test.ts +0 -99
- package/src/motion/decay.test.ts +0 -120
- package/src/motion/projection.test.ts +0 -107
- package/src/motion/reducedMotion.test.ts +0 -129
- package/src/motion/reducedMotionPlan.test.ts +0 -208
- package/src/motion/resolveMotion.test.ts +0 -123
- package/src/motion/resolveSnapPoint.test.ts +0 -189
- package/src/motion/roles.test.ts +0 -273
- package/src/motion/rubberBand.test.ts +0 -88
- package/src/motion/selectPage.test.ts +0 -31
- package/src/motion/spring.test.ts +0 -650
- package/src/motion/uikit/gestures.test.ts +0 -89
- package/src/motion/uikit/springRows.test.ts +0 -71
- package/src/motion/uikit/tableImports.test.ts +0 -293
- package/src/motion/uikit/uikit.test.ts +0 -364
- package/src/motion/uikit/values.test.ts +0 -121
- package/src/naming.test.ts +0 -44
- package/src/postinstall.test.mjs +0 -216
- package/src/reset.a11y.chromium.spec.ts +0 -238
- package/src/reset.test.ts +0 -205
- package/src/reset.until-found.a11y.browser.spec.ts +0 -76
- package/src/reset.until-found.test.ts +0 -32
- package/src/serverSafeComponents.test.ts +0 -675
- package/src/stylexValidation.source-build.test.mjs +0 -42
- package/src/tailwind-theme.test.ts +0 -153
- package/src/theme/MediaTheme.dom.test.tsx +0 -97
- package/src/theme/Theme.test.tsx +0 -337
- package/src/theme/__tests__/SpacingRootFontSize.a11y.chromium.spec.ts +0 -199
- package/src/theme/contrast.test.ts +0 -94
- package/src/theme/declarationBoundary.test.ts +0 -126
- package/src/theme/defineTheme.test.ts +0 -2028
- package/src/theme/derivedVarRegistry.test.ts +0 -592
- package/src/theme/expandColorScale.test.ts +0 -651
- package/src/theme/expandMotionScale.test.ts +0 -145
- package/src/theme/expandRadiusScale.test.ts +0 -59
- package/src/theme/expandTypeScale.test.ts +0 -351
- package/src/theme/extensibleAxes.test.ts +0 -432
- package/src/theme/generateThemeRules.test.ts +0 -1870
- package/src/theme/hct.test.ts +0 -93
- package/src/theme/onMediaTokens.test.ts +0 -431
- package/src/theme/publicThemeHelperContract.test.ts +0 -67
- package/src/theme/syntax/defineSyntaxTheme.diff.test.ts +0 -91
- package/src/theme/syntax/serverSafeSyntax.test.ts +0 -68
- package/src/theme/syntax/useSyntaxTheme.diff.test.tsx +0 -40
- package/src/theme/themeAdaptations.test.ts +0 -1795
- package/src/theme/themeMotion.test.ts +0 -620
- package/src/theme/themeRegistry.test.ts +0 -59
- package/src/theme/themingTargets.test.ts +0 -589
- package/src/theme/tokenValueCompat.test.ts +0 -204
- package/src/theme/tokens.test.ts +0 -441
- package/src/theme/useTheme.test.tsx +0 -322
- package/src/unicodePropertyEscapes.source-build.test.mjs +0 -69
- package/src/utils/chainEventHandlers.test.ts +0 -39
- package/src/utils/characters.test.ts +0 -141
- package/src/utils/color.test.ts +0 -233
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/customPropertyArmLayering.test.ts +0 -131
- package/src/utils/dateParser.test.ts +0 -402
- package/src/utils/dateTypes.test.ts +0 -40
- package/src/utils/devWarning.test.ts +0 -56
- package/src/utils/edgeAutoscroll.test.ts +0 -192
- package/src/utils/focusReturn.test.ts +0 -119
- package/src/utils/getKey.test.ts +0 -25
- package/src/utils/getNodeText.test.ts +0 -24
- package/src/utils/hitArea.test.ts +0 -628
- package/src/utils/ime.test.ts +0 -32
- package/src/utils/inputAria.test.ts +0 -39
- package/src/utils/interactionModality.test.ts +0 -144
- package/src/utils/isApplePlatform.test.ts +0 -61
- package/src/utils/mergeProps.test.ts +0 -166
- package/src/utils/mergeRefs.test.ts +0 -48
- package/src/utils/parseStyleKey.test.ts +0 -56
- package/src/utils/plainDate.test.ts +0 -938
- package/src/utils/presentation.test.ts +0 -380
- package/src/utils/pressFeedback.test.ts +0 -1012
- package/src/utils/pressGesture.test.ts +0 -332
- package/src/utils/pressPaintPriority.test.ts +0 -80
- package/src/utils/pressPaintSource.test.ts +0 -65
- package/src/utils/pressableCoverage.test.ts +0 -192
- package/src/utils/primaryClick.test.ts +0 -38
- package/src/utils/safeUrl.test.ts +0 -101
- package/src/utils/sharedMutationObserver.test.ts +0 -106
- package/src/utils/sharedResizeObserver.test.ts +0 -283
- package/src/utils/themeProps.test.ts +0 -62
- package/src/utils/timeFormat.test.ts +0 -204
- package/src/utils/timeParser.test.ts +0 -295
- package/src/utils/touchPresentation.test.ts +0 -462
- package/src/utils/unicodeDigits.test.ts +0 -44
|
@@ -1,1571 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file DateInput.test.tsx
|
|
5
|
-
* @input Uses vitest, @testing-library/react, DateInput component
|
|
6
|
-
* @output Unit tests for DateInput component behavior
|
|
7
|
-
* @position Testing; validates DateInput.tsx implementation
|
|
8
|
-
*
|
|
9
|
-
* SYNC: When DateInput.tsx changes, update tests to match new behavior
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {useState} from 'react';
|
|
13
|
-
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
14
|
-
import {
|
|
15
|
-
render,
|
|
16
|
-
screen,
|
|
17
|
-
fireEvent,
|
|
18
|
-
waitFor,
|
|
19
|
-
within,
|
|
20
|
-
act,
|
|
21
|
-
} from '@testing-library/react';
|
|
22
|
-
import userEvent from '@testing-library/user-event';
|
|
23
|
-
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
24
|
-
import {DateInput, type DateInputProps} from './DateInput';
|
|
25
|
-
import {Icon} from '../Icon';
|
|
26
|
-
import {InputGroup} from '../InputGroup';
|
|
27
|
-
import {InputGroupText} from '../InputGroup/InputGroupText';
|
|
28
|
-
import {defineTheme} from '../theme/defineTheme';
|
|
29
|
-
import {generateThemeCSS} from '../theme/generateThemeRules';
|
|
30
|
-
import {InternationalizationProvider} from '../i18n';
|
|
31
|
-
import type {ISODateString} from '../utils';
|
|
32
|
-
|
|
33
|
-
function generateThemeTestCSS(theme: Parameters<typeof generateThemeCSS>[0]) {
|
|
34
|
-
const {prose, component} = generateThemeCSS(theme);
|
|
35
|
-
return [prose, component].filter(Boolean).join('\n\n');
|
|
36
|
-
}
|
|
37
|
-
describe('DateInput', () => {
|
|
38
|
-
it('renders with label', () => {
|
|
39
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
40
|
-
expect(screen.getByLabelText('Date')).toBeInTheDocument();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('renders with placeholder', () => {
|
|
44
|
-
render(
|
|
45
|
-
<DateInput label="Date" onChange={() => {}} placeholder="Pick a date" />,
|
|
46
|
-
);
|
|
47
|
-
expect(screen.getByPlaceholderText('Pick a date')).toBeInTheDocument();
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('displays formatted date when value is provided', () => {
|
|
51
|
-
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
52
|
-
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('forwards ref correctly', () => {
|
|
56
|
-
const ref = vi.fn();
|
|
57
|
-
render(<DateInput ref={ref} label="Date" onChange={() => {}} />);
|
|
58
|
-
expect(ref).toHaveBeenCalledWith(expect.any(HTMLInputElement));
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('visually hides label when isLabelHidden is true', () => {
|
|
62
|
-
render(<DateInput label="Date" isLabelHidden onChange={() => {}} />);
|
|
63
|
-
const label = screen.getByText('Date');
|
|
64
|
-
expect(label).toBeInTheDocument();
|
|
65
|
-
expect(screen.getByLabelText('Date')).toBeInTheDocument();
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('shows label visually by default', () => {
|
|
69
|
-
render(<DateInput label="Event date" onChange={() => {}} />);
|
|
70
|
-
const label = screen.getByText('Event date');
|
|
71
|
-
expect(label).toBeVisible();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('sets aria-required when isRequired is true', () => {
|
|
75
|
-
render(<DateInput label="Date" isRequired onChange={() => {}} />);
|
|
76
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
77
|
-
'aria-required',
|
|
78
|
-
'true',
|
|
79
|
-
);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('does not set aria-required when isRequired is false', () => {
|
|
83
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
84
|
-
expect(screen.getByRole('combobox')).not.toHaveAttribute('aria-required');
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('keeps a disabled input focusable without native disabled (AST-085 FR1)', () => {
|
|
88
|
-
render(<DateInput label="Date" isDisabled onChange={() => {}} />);
|
|
89
|
-
const input = screen.getByRole('combobox');
|
|
90
|
-
expect(input).not.toHaveAttribute('disabled');
|
|
91
|
-
expect(input).toHaveAttribute('aria-disabled', 'true');
|
|
92
|
-
expect(input).toHaveAttribute('readonly');
|
|
93
|
-
input.focus();
|
|
94
|
-
expect(input).toHaveFocus();
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('is not disabled by default', () => {
|
|
98
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
99
|
-
expect(screen.getByRole('combobox')).not.toBeDisabled();
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('renders calendar icon', () => {
|
|
103
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
104
|
-
const svg = document.querySelector('svg');
|
|
105
|
-
expect(svg).toBeInTheDocument();
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('combobox input has aria-haspopup="dialog" attribute', () => {
|
|
109
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
110
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
111
|
-
'aria-haspopup',
|
|
112
|
-
'dialog',
|
|
113
|
-
);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('calendar button is focusable and clickable', () => {
|
|
117
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
118
|
-
const button = getButton('Open calendar');
|
|
119
|
-
expect(button).toBeInTheDocument();
|
|
120
|
-
expect(button).not.toBeDisabled();
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('calendar button is focusable-disabled when isDisabled is true', () => {
|
|
124
|
-
render(<DateInput label="Date" isDisabled onChange={() => {}} />);
|
|
125
|
-
const button = getButton('Open calendar');
|
|
126
|
-
expect(button).not.toHaveAttribute('disabled');
|
|
127
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
128
|
-
fireEvent.click(button);
|
|
129
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
130
|
-
'aria-expanded',
|
|
131
|
-
'false',
|
|
132
|
-
);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
it('does not call onChange while typing invalid input', async () => {
|
|
136
|
-
const onChange = vi.fn();
|
|
137
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
138
|
-
|
|
139
|
-
const input = screen.getByRole('combobox');
|
|
140
|
-
fireEvent.change(input, {target: {value: 'invalid'}});
|
|
141
|
-
|
|
142
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it('sets aria-invalid="true" when typed input is unparseable', () => {
|
|
146
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
147
|
-
|
|
148
|
-
const input = screen.getByRole('combobox');
|
|
149
|
-
fireEvent.change(input, {target: {value: '13/45/2024'}});
|
|
150
|
-
|
|
151
|
-
expect(input).toHaveAttribute('aria-invalid', 'true');
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('does not set aria-invalid when typed input is a valid date', () => {
|
|
155
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
156
|
-
|
|
157
|
-
const input = screen.getByRole('combobox');
|
|
158
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
159
|
-
|
|
160
|
-
expect(input).not.toHaveAttribute('aria-invalid');
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('announces an alert message when typed input is invalid', () => {
|
|
164
|
-
// Scope to the component's own container: the embedded Calendar uses the
|
|
165
|
-
// shared `useAnnounce` hook, whose global polite/assertive live-region pair
|
|
166
|
-
// (both mounted on document.body by any announce) would otherwise make a
|
|
167
|
-
// document-wide `getByRole('alert')` ambiguous.
|
|
168
|
-
const {container} = render(<DateInput label="Date" onChange={() => {}} />);
|
|
169
|
-
|
|
170
|
-
const input = screen.getByRole('combobox');
|
|
171
|
-
fireEvent.change(input, {target: {value: '13/45/2024'}});
|
|
172
|
-
|
|
173
|
-
expect(within(container).getByRole('alert')).toHaveTextContent(
|
|
174
|
-
'Invalid date',
|
|
175
|
-
);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it('does not announce an alert message when input is valid', () => {
|
|
179
|
-
const {container} = render(<DateInput label="Date" onChange={() => {}} />);
|
|
180
|
-
|
|
181
|
-
const input = screen.getByRole('combobox');
|
|
182
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
183
|
-
|
|
184
|
-
expect(within(container).getByRole('alert')).toHaveTextContent('');
|
|
185
|
-
expect(screen.queryByText('Invalid date')).not.toBeInTheDocument();
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('resolves the invalid-date announcement from the i18n catalog', () => {
|
|
189
|
-
const {container} = render(
|
|
190
|
-
<InternationalizationProvider
|
|
191
|
-
locale="en"
|
|
192
|
-
overrides={{en: {'@astryx.dateInput.invalidDate': 'Ungültiges Datum'}}}>
|
|
193
|
-
<DateInput label="Date" onChange={() => {}} />
|
|
194
|
-
</InternationalizationProvider>,
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
fireEvent.change(screen.getByRole('combobox'), {
|
|
198
|
-
target: {value: '13/45/2024'},
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
expect(within(container).getByRole('alert')).toHaveTextContent(
|
|
202
|
-
'Ungültiges Datum',
|
|
203
|
-
);
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it('reverts to previous value on blur when input is invalid', async () => {
|
|
207
|
-
const onChange = vi.fn();
|
|
208
|
-
render(<DateInput label="Date" value="2026-01-25" onChange={onChange} />);
|
|
209
|
-
|
|
210
|
-
const input = screen.getByRole('combobox');
|
|
211
|
-
fireEvent.change(input, {target: {value: 'not a date'}});
|
|
212
|
-
fireEvent.blur(input);
|
|
213
|
-
|
|
214
|
-
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
215
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
it('calls onChange on blur when input is valid', async () => {
|
|
219
|
-
const onChange = vi.fn();
|
|
220
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
221
|
-
|
|
222
|
-
const input = screen.getByRole('combobox');
|
|
223
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
224
|
-
fireEvent.blur(input);
|
|
225
|
-
|
|
226
|
-
expect(onChange).toHaveBeenCalledWith('2026-03-15');
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it('calls onChange immediately when input becomes valid', async () => {
|
|
230
|
-
const onChange = vi.fn();
|
|
231
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
232
|
-
|
|
233
|
-
const input = screen.getByRole('combobox');
|
|
234
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
235
|
-
|
|
236
|
-
expect(onChange).toHaveBeenCalledWith('2026-03-15');
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
it('runs changeAction after onChange for a typed date', async () => {
|
|
240
|
-
const calls: string[] = [];
|
|
241
|
-
let resolveAction: () => void = () => {};
|
|
242
|
-
const changeAction = vi.fn(
|
|
243
|
-
async () =>
|
|
244
|
-
new Promise<void>(resolve => {
|
|
245
|
-
calls.push('changeAction');
|
|
246
|
-
resolveAction = resolve;
|
|
247
|
-
}),
|
|
248
|
-
);
|
|
249
|
-
const onChange = vi.fn(() => calls.push('onChange'));
|
|
250
|
-
render(
|
|
251
|
-
<DateInput
|
|
252
|
-
label="Date"
|
|
253
|
-
onChange={onChange}
|
|
254
|
-
changeAction={changeAction}
|
|
255
|
-
/>,
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
const input = screen.getByRole('combobox');
|
|
259
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
260
|
-
|
|
261
|
-
expect(calls).toEqual(['onChange', 'changeAction']);
|
|
262
|
-
expect(changeAction).toHaveBeenCalledExactlyOnceWith('2026-03-15');
|
|
263
|
-
expect(input).toHaveAttribute('aria-busy', 'true');
|
|
264
|
-
await act(async () => resolveAction());
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
// --- P0: Text input respects min/max/dateConstraints ---
|
|
268
|
-
|
|
269
|
-
it('does not call onChange when typed date is before min', () => {
|
|
270
|
-
const onChange = vi.fn();
|
|
271
|
-
render(
|
|
272
|
-
<DateInput
|
|
273
|
-
label="Date"
|
|
274
|
-
onChange={onChange}
|
|
275
|
-
min="2026-03-01"
|
|
276
|
-
max="2026-12-31"
|
|
277
|
-
/>,
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
const input = screen.getByRole('combobox');
|
|
281
|
-
fireEvent.change(input, {target: {value: '02/15/2026'}});
|
|
282
|
-
|
|
283
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
it('does not call onChange when typed date is after max', () => {
|
|
287
|
-
const onChange = vi.fn();
|
|
288
|
-
render(
|
|
289
|
-
<DateInput
|
|
290
|
-
label="Date"
|
|
291
|
-
onChange={onChange}
|
|
292
|
-
min="2026-01-01"
|
|
293
|
-
max="2026-03-01"
|
|
294
|
-
/>,
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
const input = screen.getByRole('combobox');
|
|
298
|
-
fireEvent.change(input, {target: {value: '04/15/2026'}});
|
|
299
|
-
|
|
300
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
it('does not call onChange when typed date fails dateConstraints', () => {
|
|
304
|
-
const onChange = vi.fn();
|
|
305
|
-
// Constraint: no weekends
|
|
306
|
-
const noWeekends = (date: Date) =>
|
|
307
|
-
date.getDay() !== 0 && date.getDay() !== 6;
|
|
308
|
-
render(
|
|
309
|
-
<DateInput
|
|
310
|
-
label="Date"
|
|
311
|
-
onChange={onChange}
|
|
312
|
-
dateConstraints={[noWeekends]}
|
|
313
|
-
/>,
|
|
314
|
-
);
|
|
315
|
-
|
|
316
|
-
const input = screen.getByRole('combobox');
|
|
317
|
-
// 2026-03-15 is a Sunday
|
|
318
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
319
|
-
|
|
320
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
it('calls onChange when typed date is within min/max range', () => {
|
|
324
|
-
const onChange = vi.fn();
|
|
325
|
-
render(
|
|
326
|
-
<DateInput
|
|
327
|
-
label="Date"
|
|
328
|
-
onChange={onChange}
|
|
329
|
-
min="2026-01-01"
|
|
330
|
-
max="2026-12-31"
|
|
331
|
-
/>,
|
|
332
|
-
);
|
|
333
|
-
|
|
334
|
-
const input = screen.getByRole('combobox');
|
|
335
|
-
fireEvent.change(input, {target: {value: '06/15/2026'}});
|
|
336
|
-
|
|
337
|
-
expect(onChange).toHaveBeenCalledWith('2026-06-15');
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
it('reverts on blur when typed date violates constraints', () => {
|
|
341
|
-
const onChange = vi.fn();
|
|
342
|
-
render(
|
|
343
|
-
<DateInput
|
|
344
|
-
label="Date"
|
|
345
|
-
onChange={onChange}
|
|
346
|
-
value="2026-03-10"
|
|
347
|
-
min="2026-03-01"
|
|
348
|
-
max="2026-03-31"
|
|
349
|
-
/>,
|
|
350
|
-
);
|
|
351
|
-
|
|
352
|
-
const input = screen.getByRole('combobox');
|
|
353
|
-
fireEvent.change(input, {target: {value: '04/15/2026'}});
|
|
354
|
-
fireEvent.blur(input);
|
|
355
|
-
|
|
356
|
-
// Should revert to previous value
|
|
357
|
-
expect(screen.getByDisplayValue('March 10, 2026')).toBeInTheDocument();
|
|
358
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
359
|
-
});
|
|
360
|
-
|
|
361
|
-
// --- P1: Input disabled during isBusy (isLoading) ---
|
|
362
|
-
|
|
363
|
-
it('blocks input and button without native disabled when isLoading is true', () => {
|
|
364
|
-
render(<DateInput label="Date" isLoading onChange={() => {}} />);
|
|
365
|
-
expect(screen.getByRole('combobox')).not.toHaveAttribute('disabled');
|
|
366
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
367
|
-
'aria-disabled',
|
|
368
|
-
'true',
|
|
369
|
-
);
|
|
370
|
-
expect(getButton('Open calendar')).not.toHaveAttribute('disabled');
|
|
371
|
-
expect(getButton('Open calendar')).toHaveAttribute('aria-disabled', 'true');
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
it('shows spinner when isLoading is true', () => {
|
|
375
|
-
const {container} = render(
|
|
376
|
-
<DateInput label="Date" isLoading onChange={() => {}} />,
|
|
377
|
-
);
|
|
378
|
-
// Spinner renders with role="status" or an SVG animation
|
|
379
|
-
const spinner = container.querySelector('[aria-busy="true"]');
|
|
380
|
-
expect(spinner).toBeInTheDocument();
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
// --- P1: Escape key handler ---
|
|
384
|
-
|
|
385
|
-
it('handles Escape keydown without error', () => {
|
|
386
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
387
|
-
const input = screen.getByRole('combobox');
|
|
388
|
-
|
|
389
|
-
// Escape should not throw even when popover isn't open.
|
|
390
|
-
// Full popover open/close behavior tested in Storybook.
|
|
391
|
-
fireEvent.keyDown(input, {key: 'Escape'});
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
// --- P2: Input has role="combobox" ---
|
|
395
|
-
|
|
396
|
-
it('input has role="combobox"', () => {
|
|
397
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
398
|
-
expect(screen.getByRole('combobox')).toBeInTheDocument();
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
it('input has aria-expanded attribute', () => {
|
|
402
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
403
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
404
|
-
'aria-expanded',
|
|
405
|
-
'false',
|
|
406
|
-
);
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
it('opens the calendar popover on ArrowDown (keyboard, forms-13)', () => {
|
|
410
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
411
|
-
const input = screen.getByRole('combobox');
|
|
412
|
-
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
413
|
-
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
414
|
-
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
it('opens the calendar popover on Alt+ArrowDown (keyboard, forms-13)', () => {
|
|
418
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
419
|
-
const input = screen.getByRole('combobox');
|
|
420
|
-
fireEvent.keyDown(input, {key: 'ArrowDown', altKey: true});
|
|
421
|
-
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
422
|
-
});
|
|
423
|
-
|
|
424
|
-
it('does not open on ArrowDown when disabled', () => {
|
|
425
|
-
render(<DateInput label="Date" isDisabled onChange={() => {}} />);
|
|
426
|
-
const input = screen.getByRole('combobox');
|
|
427
|
-
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
428
|
-
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
it('input has aria-haspopup="dialog"', () => {
|
|
432
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
433
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
434
|
-
'aria-haspopup',
|
|
435
|
-
'dialog',
|
|
436
|
-
);
|
|
437
|
-
});
|
|
438
|
-
|
|
439
|
-
// --- P1: Tab order: calendar button first, then input ---
|
|
440
|
-
|
|
441
|
-
it('renders calendar button before input in DOM order', () => {
|
|
442
|
-
const {container} = render(<DateInput label="Date" onChange={() => {}} />);
|
|
443
|
-
const input = container.querySelector('input');
|
|
444
|
-
const button = container.querySelector('button');
|
|
445
|
-
// Calendar button should come before input in the DOM
|
|
446
|
-
expect(button!.compareDocumentPosition(input!)).toBe(
|
|
447
|
-
Node.DOCUMENT_POSITION_FOLLOWING,
|
|
448
|
-
);
|
|
449
|
-
});
|
|
450
|
-
|
|
451
|
-
// --- P2: Status rendering ---
|
|
452
|
-
|
|
453
|
-
it('renders status icon for error status', () => {
|
|
454
|
-
render(
|
|
455
|
-
<DateInput
|
|
456
|
-
label="Date"
|
|
457
|
-
onChange={() => {}}
|
|
458
|
-
status={{type: 'error', message: 'Bad date'}}
|
|
459
|
-
/>,
|
|
460
|
-
);
|
|
461
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
462
|
-
'aria-invalid',
|
|
463
|
-
'true',
|
|
464
|
-
);
|
|
465
|
-
});
|
|
466
|
-
|
|
467
|
-
it('renders status icon for warning status', () => {
|
|
468
|
-
render(
|
|
469
|
-
<DateInput
|
|
470
|
-
label="Date"
|
|
471
|
-
onChange={() => {}}
|
|
472
|
-
status={{type: 'warning', message: 'Watch out'}}
|
|
473
|
-
/>,
|
|
474
|
-
);
|
|
475
|
-
// Should not be aria-invalid for warnings
|
|
476
|
-
expect(screen.getByRole('combobox')).not.toHaveAttribute('aria-invalid');
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
it('renders status icon for success status', () => {
|
|
480
|
-
render(
|
|
481
|
-
<DateInput
|
|
482
|
-
label="Date"
|
|
483
|
-
onChange={() => {}}
|
|
484
|
-
status={{type: 'success', message: 'Looks good'}}
|
|
485
|
-
/>,
|
|
486
|
-
);
|
|
487
|
-
expect(screen.getByRole('combobox')).not.toHaveAttribute('aria-invalid');
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
// --- P1: Description and aria-describedby ---
|
|
491
|
-
|
|
492
|
-
it('renders description and links via aria-describedby', () => {
|
|
493
|
-
render(
|
|
494
|
-
<DateInput
|
|
495
|
-
label="Date"
|
|
496
|
-
description="Pick your preferred date"
|
|
497
|
-
onChange={() => {}}
|
|
498
|
-
/>,
|
|
499
|
-
);
|
|
500
|
-
const input = screen.getByRole('combobox');
|
|
501
|
-
expect(screen.getByText('Pick your preferred date')).toBeInTheDocument();
|
|
502
|
-
expect(input).toHaveAttribute('aria-describedby');
|
|
503
|
-
const describedBy = input.getAttribute('aria-describedby')!;
|
|
504
|
-
const descEl = document.getElementById(describedBy);
|
|
505
|
-
expect(descEl).toHaveTextContent('Pick your preferred date');
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
it('links status message via aria-describedby', () => {
|
|
509
|
-
render(
|
|
510
|
-
<DateInput
|
|
511
|
-
label="Date"
|
|
512
|
-
onChange={() => {}}
|
|
513
|
-
status={{type: 'error', message: 'Invalid date'}}
|
|
514
|
-
/>,
|
|
515
|
-
);
|
|
516
|
-
const input = screen.getByRole('combobox');
|
|
517
|
-
const describedBy = input.getAttribute('aria-describedby')!;
|
|
518
|
-
const ids = describedBy.split(' ');
|
|
519
|
-
const found = ids.some(id => {
|
|
520
|
-
const el = document.getElementById(id);
|
|
521
|
-
return el?.textContent?.includes('Invalid date');
|
|
522
|
-
});
|
|
523
|
-
expect(found).toBe(true);
|
|
524
|
-
});
|
|
525
|
-
|
|
526
|
-
// --- P1: Clearing value on empty blur ---
|
|
527
|
-
|
|
528
|
-
it('calls onChange with undefined when input is cleared and blurred', () => {
|
|
529
|
-
const onChange = vi.fn();
|
|
530
|
-
render(<DateInput label="Date" value="2026-01-25" onChange={onChange} />);
|
|
531
|
-
|
|
532
|
-
const input = screen.getByRole('combobox');
|
|
533
|
-
fireEvent.change(input, {target: {value: ''}});
|
|
534
|
-
fireEvent.blur(input);
|
|
535
|
-
|
|
536
|
-
expect(onChange).toHaveBeenCalledWith(undefined);
|
|
537
|
-
});
|
|
538
|
-
|
|
539
|
-
// --- P1: Disabled prevents onChange ---
|
|
540
|
-
|
|
541
|
-
it('disables input when isDisabled is true', () => {
|
|
542
|
-
render(<DateInput label="Date" isDisabled onChange={() => {}} />);
|
|
543
|
-
|
|
544
|
-
const input = screen.getByRole('combobox');
|
|
545
|
-
expect(input).toHaveAttribute('aria-disabled', 'true');
|
|
546
|
-
expect(input).not.toHaveAttribute('disabled');
|
|
547
|
-
});
|
|
548
|
-
|
|
549
|
-
// --- P1: aria-busy on input ---
|
|
550
|
-
|
|
551
|
-
it('sets aria-busy on input when isLoading is true', () => {
|
|
552
|
-
render(<DateInput label="Date" isLoading onChange={() => {}} />);
|
|
553
|
-
expect(screen.getByRole('combobox')).toHaveAttribute('aria-busy', 'true');
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
it('does not set aria-busy when not loading', () => {
|
|
557
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
558
|
-
expect(screen.getByRole('combobox')).not.toHaveAttribute('aria-busy');
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
// --- P1: Popover does not open when disabled ---
|
|
562
|
-
|
|
563
|
-
it('does not open popover when clicking calendar button while disabled', () => {
|
|
564
|
-
render(<DateInput label="Date" isDisabled onChange={() => {}} />);
|
|
565
|
-
const button = getButton('Open calendar');
|
|
566
|
-
fireEvent.click(button);
|
|
567
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
568
|
-
'aria-expanded',
|
|
569
|
-
'false',
|
|
570
|
-
);
|
|
571
|
-
});
|
|
572
|
-
|
|
573
|
-
it('blocks selection in an open picker after the field becomes disabled', async () => {
|
|
574
|
-
const user = userEvent.setup();
|
|
575
|
-
const props = {
|
|
576
|
-
label: 'Date',
|
|
577
|
-
value: '2026-10-15',
|
|
578
|
-
presentation: 'popover',
|
|
579
|
-
onChange: vi.fn(),
|
|
580
|
-
changeAction: vi.fn(),
|
|
581
|
-
} satisfies DateInputProps;
|
|
582
|
-
const {rerender} = render(<DateInput {...props} />);
|
|
583
|
-
const input = screen.getByRole('combobox');
|
|
584
|
-
act(() => input.focus());
|
|
585
|
-
await user.keyboard('{ArrowDown}');
|
|
586
|
-
const day = getButton(/October 16, 2026/);
|
|
587
|
-
act(() => day.focus());
|
|
588
|
-
|
|
589
|
-
rerender(<DateInput {...props} isDisabled />);
|
|
590
|
-
expect(day).toHaveFocus();
|
|
591
|
-
await user.click(day);
|
|
592
|
-
await user.keyboard(' ');
|
|
593
|
-
|
|
594
|
-
rerender(
|
|
595
|
-
<DateInput
|
|
596
|
-
{...props}
|
|
597
|
-
isDisabled
|
|
598
|
-
disabledMessage="Scheduling is locked"
|
|
599
|
-
/>,
|
|
600
|
-
);
|
|
601
|
-
expect(day).toHaveFocus();
|
|
602
|
-
await user.keyboard('{Enter}');
|
|
603
|
-
expect(props.onChange).not.toHaveBeenCalled();
|
|
604
|
-
expect(props.changeAction).not.toHaveBeenCalled();
|
|
605
|
-
expect(input).toHaveValue('October 15, 2026');
|
|
606
|
-
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
607
|
-
expect(day).toHaveFocus();
|
|
608
|
-
});
|
|
609
|
-
|
|
610
|
-
it('dismisses an open picker without committing while loading', async () => {
|
|
611
|
-
const user = userEvent.setup();
|
|
612
|
-
const props = {
|
|
613
|
-
label: 'Date',
|
|
614
|
-
value: '2026-10-15',
|
|
615
|
-
presentation: 'popover',
|
|
616
|
-
onChange: vi.fn(),
|
|
617
|
-
changeAction: vi.fn(),
|
|
618
|
-
} satisfies DateInputProps;
|
|
619
|
-
const {rerender} = render(<DateInput {...props} />);
|
|
620
|
-
await user.click(getButton('Open calendar'));
|
|
621
|
-
const day = getButton(/October 16, 2026/);
|
|
622
|
-
|
|
623
|
-
rerender(<DateInput {...props} isLoading />);
|
|
624
|
-
await user.click(day);
|
|
625
|
-
expect(props.onChange).not.toHaveBeenCalled();
|
|
626
|
-
expect(props.changeAction).not.toHaveBeenCalled();
|
|
627
|
-
expect(screen.getByRole('combobox')).toHaveValue('October 15, 2026');
|
|
628
|
-
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
629
|
-
'aria-expanded',
|
|
630
|
-
'false',
|
|
631
|
-
);
|
|
632
|
-
});
|
|
633
|
-
|
|
634
|
-
// --- Enter key commits typed date ---
|
|
635
|
-
|
|
636
|
-
it('commits typed date and fires onChange on Enter key', () => {
|
|
637
|
-
const onChange = vi.fn();
|
|
638
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
639
|
-
|
|
640
|
-
const input = screen.getByRole('combobox');
|
|
641
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
642
|
-
onChange.mockClear();
|
|
643
|
-
fireEvent.keyDown(input, {key: 'Enter'});
|
|
644
|
-
|
|
645
|
-
expect(onChange).toHaveBeenCalledWith('2026-03-15');
|
|
646
|
-
});
|
|
647
|
-
|
|
648
|
-
it('does not commit on a composing Enter (IME)', () => {
|
|
649
|
-
const onChange = vi.fn();
|
|
650
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
651
|
-
|
|
652
|
-
const input = screen.getByRole('combobox');
|
|
653
|
-
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
654
|
-
onChange.mockClear();
|
|
655
|
-
|
|
656
|
-
// The composing keydown (isComposing / legacy keyCode 229) that commits an
|
|
657
|
-
// IME candidate fires before compositionend; it must not be read as
|
|
658
|
-
// "commit the typed date".
|
|
659
|
-
fireEvent.keyDown(input, {key: 'Enter', isComposing: true});
|
|
660
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
661
|
-
fireEvent.keyDown(input, {key: 'Enter', keyCode: 229});
|
|
662
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
663
|
-
|
|
664
|
-
// A real, non-composing Enter still commits.
|
|
665
|
-
fireEvent.keyDown(input, {key: 'Enter'});
|
|
666
|
-
expect(onChange).toHaveBeenCalledWith('2026-03-15');
|
|
667
|
-
});
|
|
668
|
-
|
|
669
|
-
// --- Arrow-down opens calendar popover ---
|
|
670
|
-
|
|
671
|
-
// Note: Tests involving popover rendering (show/hide with calendar)
|
|
672
|
-
// are limited because jsdom doesn't support the Popover API.
|
|
673
|
-
// Full popover interaction is tested in the browser via Storybook.
|
|
674
|
-
|
|
675
|
-
describe('hasClear', () => {
|
|
676
|
-
it('shows no selected calendar days after clearing', async () => {
|
|
677
|
-
const user = userEvent.setup();
|
|
678
|
-
|
|
679
|
-
function ControlledDateInput() {
|
|
680
|
-
const [value, setValue] = useState<ISODateString | undefined>(
|
|
681
|
-
'2026-01-01',
|
|
682
|
-
);
|
|
683
|
-
return (
|
|
684
|
-
<DateInput
|
|
685
|
-
label="Date"
|
|
686
|
-
value={value}
|
|
687
|
-
onChange={setValue}
|
|
688
|
-
min="2026-01-01"
|
|
689
|
-
max="2026-01-31"
|
|
690
|
-
presentation="popover"
|
|
691
|
-
hasClear
|
|
692
|
-
/>
|
|
693
|
-
);
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
render(<ControlledDateInput />);
|
|
697
|
-
const toggle = getButton('Open calendar');
|
|
698
|
-
await user.click(toggle);
|
|
699
|
-
await user.click(getButton(/January 15, 2026/));
|
|
700
|
-
// The calendar mounts only while open; reopen it to read the selection.
|
|
701
|
-
await user.click(toggle);
|
|
702
|
-
expect(
|
|
703
|
-
screen.getAllByRole('gridcell', {selected: true, hidden: true}),
|
|
704
|
-
).toHaveLength(1);
|
|
705
|
-
await user.click(toggle);
|
|
706
|
-
|
|
707
|
-
await user.click(getButton('Clear Date'));
|
|
708
|
-
expect(screen.getByRole('combobox')).toHaveValue('');
|
|
709
|
-
await user.click(toggle);
|
|
710
|
-
|
|
711
|
-
expect(
|
|
712
|
-
screen.queryAllByRole('gridcell', {selected: true, hidden: true}),
|
|
713
|
-
).toHaveLength(0);
|
|
714
|
-
});
|
|
715
|
-
|
|
716
|
-
it('shows clear button when hasClear is true and value exists', () => {
|
|
717
|
-
render(
|
|
718
|
-
<DateInput
|
|
719
|
-
label="Date"
|
|
720
|
-
value="2026-01-15"
|
|
721
|
-
onChange={() => {}}
|
|
722
|
-
hasClear
|
|
723
|
-
/>,
|
|
724
|
-
);
|
|
725
|
-
expect(getButton('Clear Date')).toBeInTheDocument();
|
|
726
|
-
});
|
|
727
|
-
|
|
728
|
-
it('does not show clear button when value is undefined', () => {
|
|
729
|
-
render(<DateInput label="Date" onChange={() => {}} hasClear />);
|
|
730
|
-
expect(queryButton('Clear Date')).not.toBeInTheDocument();
|
|
731
|
-
});
|
|
732
|
-
|
|
733
|
-
it('does not show clear button when hasClear is false', () => {
|
|
734
|
-
render(<DateInput label="Date" value="2026-01-15" onChange={() => {}} />);
|
|
735
|
-
expect(queryButton('Clear Date')).not.toBeInTheDocument();
|
|
736
|
-
});
|
|
737
|
-
|
|
738
|
-
it('does not show clear button when disabled', () => {
|
|
739
|
-
render(
|
|
740
|
-
<DateInput
|
|
741
|
-
label="Date"
|
|
742
|
-
value="2026-01-15"
|
|
743
|
-
onChange={() => {}}
|
|
744
|
-
hasClear
|
|
745
|
-
isDisabled
|
|
746
|
-
/>,
|
|
747
|
-
);
|
|
748
|
-
expect(queryButton('Clear Date')).not.toBeInTheDocument();
|
|
749
|
-
});
|
|
750
|
-
|
|
751
|
-
it('calls onChange with undefined when clear is clicked', () => {
|
|
752
|
-
const onChange = vi.fn();
|
|
753
|
-
render(
|
|
754
|
-
<DateInput
|
|
755
|
-
label="Date"
|
|
756
|
-
value="2026-01-15"
|
|
757
|
-
onChange={onChange}
|
|
758
|
-
hasClear
|
|
759
|
-
/>,
|
|
760
|
-
);
|
|
761
|
-
fireEvent.click(getButton('Clear Date'));
|
|
762
|
-
expect(onChange).toHaveBeenCalledWith(undefined);
|
|
763
|
-
});
|
|
764
|
-
});
|
|
765
|
-
|
|
766
|
-
// --- Regression: in-progress / leading-zero input must not crash ---
|
|
767
|
-
|
|
768
|
-
describe('incomplete typed input', () => {
|
|
769
|
-
it('does not crash or fire onChange when first digit typed is 0', () => {
|
|
770
|
-
const onChange = vi.fn();
|
|
771
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
772
|
-
|
|
773
|
-
const input = screen.getByRole('combobox');
|
|
774
|
-
// Typing a leading "0" (e.g. starting "01" for January) must be treated
|
|
775
|
-
// as incomplete input, not coerced into an (invalid) date that crashes.
|
|
776
|
-
expect(() =>
|
|
777
|
-
fireEvent.change(input, {target: {value: '0'}}),
|
|
778
|
-
).not.toThrow();
|
|
779
|
-
|
|
780
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
781
|
-
expect(input).toHaveValue('0');
|
|
782
|
-
});
|
|
783
|
-
|
|
784
|
-
it('does not crash or fire onChange when first digit typed is 1', () => {
|
|
785
|
-
const onChange = vi.fn();
|
|
786
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
787
|
-
|
|
788
|
-
const input = screen.getByRole('combobox');
|
|
789
|
-
expect(() =>
|
|
790
|
-
fireEvent.change(input, {target: {value: '1'}}),
|
|
791
|
-
).not.toThrow();
|
|
792
|
-
|
|
793
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
794
|
-
expect(input).toHaveValue('1');
|
|
795
|
-
});
|
|
796
|
-
|
|
797
|
-
it('does not crash while progressively typing a numeric date', () => {
|
|
798
|
-
const onChange = vi.fn();
|
|
799
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
800
|
-
|
|
801
|
-
const input = screen.getByRole('combobox');
|
|
802
|
-
// Simulate keystroke-by-keystroke entry of "01/15/2026". The leading
|
|
803
|
-
// single-digit keystrokes must not crash (the original bug).
|
|
804
|
-
for (const partial of ['0', '01', '01/', '01/1', '01/15', '01/15/']) {
|
|
805
|
-
expect(() =>
|
|
806
|
-
fireEvent.change(input, {target: {value: partial}}),
|
|
807
|
-
).not.toThrow();
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
// Completing the date commits it without error.
|
|
811
|
-
expect(() =>
|
|
812
|
-
fireEvent.change(input, {target: {value: '01/15/2026'}}),
|
|
813
|
-
).not.toThrow();
|
|
814
|
-
expect(onChange).toHaveBeenCalledWith('2026-01-15');
|
|
815
|
-
});
|
|
816
|
-
|
|
817
|
-
it('does not crash on blur after typing an incomplete value', () => {
|
|
818
|
-
const onChange = vi.fn();
|
|
819
|
-
render(<DateInput label="Date" onChange={onChange} />);
|
|
820
|
-
|
|
821
|
-
const input = screen.getByRole('combobox');
|
|
822
|
-
fireEvent.change(input, {target: {value: '0'}});
|
|
823
|
-
expect(() => fireEvent.blur(input)).not.toThrow();
|
|
824
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
825
|
-
});
|
|
826
|
-
});
|
|
827
|
-
|
|
828
|
-
describe('external value changes', () => {
|
|
829
|
-
it('clears pending input when value changes externally', () => {
|
|
830
|
-
const onChange = vi.fn();
|
|
831
|
-
const {rerender} = render(
|
|
832
|
-
<DateInput label="Date" value="2026-01-15" onChange={onChange} />,
|
|
833
|
-
);
|
|
834
|
-
|
|
835
|
-
const input = screen.getByRole('combobox');
|
|
836
|
-
expect(input).toHaveValue('January 15, 2026');
|
|
837
|
-
|
|
838
|
-
// User starts typing — sets pending input
|
|
839
|
-
fireEvent.change(input, {target: {value: 'Feb'}});
|
|
840
|
-
expect(input).toHaveValue('Feb');
|
|
841
|
-
|
|
842
|
-
// Value changes externally (e.g. parent resets the date)
|
|
843
|
-
rerender(
|
|
844
|
-
<DateInput label="Date" value="2026-03-20" onChange={onChange} />,
|
|
845
|
-
);
|
|
846
|
-
|
|
847
|
-
// Pending input should be cleared, showing the new formatted value
|
|
848
|
-
expect(input).toHaveValue('March 20, 2026');
|
|
849
|
-
});
|
|
850
|
-
});
|
|
851
|
-
|
|
852
|
-
describe('InputGroup', () => {
|
|
853
|
-
it('uses group ARIA and skips standalone Field chrome when grouped', () => {
|
|
854
|
-
render(
|
|
855
|
-
<InputGroup
|
|
856
|
-
label="Availability"
|
|
857
|
-
description="Choose a start date"
|
|
858
|
-
status={{type: 'error', message: 'Date is required'}}>
|
|
859
|
-
<InputGroupText>Starts</InputGroupText>
|
|
860
|
-
<DateInput label="Date" isLabelHidden onChange={() => {}} />
|
|
861
|
-
</InputGroup>,
|
|
862
|
-
);
|
|
863
|
-
|
|
864
|
-
const group = screen.getByRole('group', {name: 'Availability'});
|
|
865
|
-
const input = screen.getByRole('combobox', {
|
|
866
|
-
name: 'Availability Date',
|
|
867
|
-
});
|
|
868
|
-
|
|
869
|
-
expect(document.querySelectorAll('.astryx-field')).toHaveLength(1);
|
|
870
|
-
expect(input).toHaveAttribute('aria-labelledby');
|
|
871
|
-
expect(input.getAttribute('aria-labelledby')).toContain(
|
|
872
|
-
group.getAttribute('aria-labelledby'),
|
|
873
|
-
);
|
|
874
|
-
expect(input).toHaveAttribute(
|
|
875
|
-
'aria-describedby',
|
|
876
|
-
group.getAttribute('aria-describedby'),
|
|
877
|
-
);
|
|
878
|
-
expect(input).not.toHaveAttribute('aria-invalid');
|
|
879
|
-
expect(screen.getByText('Date is required')).toBeInTheDocument();
|
|
880
|
-
});
|
|
881
|
-
|
|
882
|
-
it('preserves disabledMessage tooltip wiring when grouped', () => {
|
|
883
|
-
render(
|
|
884
|
-
<InputGroup label="Availability">
|
|
885
|
-
<InputGroupText>Starts</InputGroupText>
|
|
886
|
-
<DateInput
|
|
887
|
-
label="Date"
|
|
888
|
-
isLabelHidden
|
|
889
|
-
isDisabled
|
|
890
|
-
disabledMessage="Scheduling is locked"
|
|
891
|
-
onChange={() => {}}
|
|
892
|
-
/>
|
|
893
|
-
</InputGroup>,
|
|
894
|
-
);
|
|
895
|
-
|
|
896
|
-
const input = screen.getByRole('combobox', {name: 'Availability Date'});
|
|
897
|
-
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
898
|
-
|
|
899
|
-
expect(input).not.toBeDisabled();
|
|
900
|
-
expect(input).toHaveAttribute('aria-disabled', 'true');
|
|
901
|
-
expect(input.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
902
|
-
expect(tooltip).toHaveTextContent('Scheduling is locked');
|
|
903
|
-
expect(getButton('Open calendar')).toHaveAttribute(
|
|
904
|
-
'aria-disabled',
|
|
905
|
-
'true',
|
|
906
|
-
);
|
|
907
|
-
});
|
|
908
|
-
});
|
|
909
|
-
|
|
910
|
-
describe('disabledMessage', () => {
|
|
911
|
-
// jsdom does not implement the Popover API used by the tooltip, so mock
|
|
912
|
-
// showPopover/hidePopover to toggle a `popover-open` attribute the tests
|
|
913
|
-
// can assert on.
|
|
914
|
-
beforeEach(() => {
|
|
915
|
-
HTMLElement.prototype.showPopover = vi.fn(function (this: HTMLElement) {
|
|
916
|
-
this.setAttribute('popover-open', '');
|
|
917
|
-
});
|
|
918
|
-
HTMLElement.prototype.hidePopover = vi.fn(function (this: HTMLElement) {
|
|
919
|
-
this.removeAttribute('popover-open');
|
|
920
|
-
});
|
|
921
|
-
});
|
|
922
|
-
|
|
923
|
-
// jsdom popover content is in the DOM but not "visible" in the
|
|
924
|
-
// accessibility tree; use hidden: true to find it.
|
|
925
|
-
const h = {hidden: true} as const;
|
|
926
|
-
|
|
927
|
-
it('shows the reason tooltip on hover when disabled with a reason', async () => {
|
|
928
|
-
render(
|
|
929
|
-
<DateInput
|
|
930
|
-
label="Date"
|
|
931
|
-
isDisabled
|
|
932
|
-
disabledMessage="You need the Editor role"
|
|
933
|
-
/>,
|
|
934
|
-
);
|
|
935
|
-
|
|
936
|
-
const container = screen.getByRole('combobox')
|
|
937
|
-
.parentElement as HTMLElement;
|
|
938
|
-
const tooltip = screen.getByRole('tooltip', h);
|
|
939
|
-
expect(tooltip).toHaveTextContent('You need the Editor role');
|
|
940
|
-
|
|
941
|
-
fireEvent.mouseEnter(container);
|
|
942
|
-
await waitFor(() => {
|
|
943
|
-
expect(tooltip).toHaveAttribute('popover-open');
|
|
944
|
-
});
|
|
945
|
-
|
|
946
|
-
fireEvent.mouseLeave(container);
|
|
947
|
-
await waitFor(() => {
|
|
948
|
-
expect(tooltip).not.toHaveAttribute('popover-open');
|
|
949
|
-
});
|
|
950
|
-
});
|
|
951
|
-
|
|
952
|
-
it('shows the reason tooltip on keyboard focus', async () => {
|
|
953
|
-
const user = userEvent.setup();
|
|
954
|
-
render(
|
|
955
|
-
<DateInput
|
|
956
|
-
label="Date"
|
|
957
|
-
isDisabled
|
|
958
|
-
disabledMessage="You need the Editor role"
|
|
959
|
-
/>,
|
|
960
|
-
);
|
|
961
|
-
|
|
962
|
-
const tooltip = screen.getByRole('tooltip', h);
|
|
963
|
-
// The calendar button keeps its enabled tab stop (spec:AST-085 FR1),
|
|
964
|
-
// so the input is the second stop.
|
|
965
|
-
await user.tab();
|
|
966
|
-
expect(getButton('Open calendar')).toHaveFocus();
|
|
967
|
-
await user.tab();
|
|
968
|
-
expect(screen.getByRole('combobox')).toHaveFocus();
|
|
969
|
-
await waitFor(() => {
|
|
970
|
-
expect(tooltip).toHaveAttribute('popover-open');
|
|
971
|
-
});
|
|
972
|
-
});
|
|
973
|
-
|
|
974
|
-
it('does not render a tooltip when not disabled', () => {
|
|
975
|
-
render(
|
|
976
|
-
<DateInput label="Date" disabledMessage="You need the Editor role" />,
|
|
977
|
-
);
|
|
978
|
-
expect(screen.queryByRole('tooltip', h)).not.toBeInTheDocument();
|
|
979
|
-
});
|
|
980
|
-
|
|
981
|
-
it('does not render a tooltip when disabled without a reason', () => {
|
|
982
|
-
render(<DateInput label="Date" isDisabled />);
|
|
983
|
-
expect(screen.queryByRole('tooltip', h)).not.toBeInTheDocument();
|
|
984
|
-
});
|
|
985
|
-
|
|
986
|
-
it('keeps the input focusable via aria-disabled when a reason is provided', () => {
|
|
987
|
-
render(
|
|
988
|
-
<DateInput
|
|
989
|
-
label="Date"
|
|
990
|
-
isDisabled
|
|
991
|
-
disabledMessage="You need the Editor role"
|
|
992
|
-
/>,
|
|
993
|
-
);
|
|
994
|
-
const input = screen.getByRole('combobox');
|
|
995
|
-
expect(input).not.toBeDisabled();
|
|
996
|
-
expect(input).toHaveAttribute('aria-disabled', 'true');
|
|
997
|
-
expect(input).toHaveAttribute('readonly');
|
|
998
|
-
});
|
|
999
|
-
|
|
1000
|
-
it('does not call a caller onClick while disabled (AST-085 FR2)', () => {
|
|
1001
|
-
const onClick = vi.fn();
|
|
1002
|
-
render(<DateInput label="Date" isDisabled onClick={onClick} />);
|
|
1003
|
-
fireEvent.click(screen.getByRole('combobox'));
|
|
1004
|
-
expect(onClick).not.toHaveBeenCalled();
|
|
1005
|
-
});
|
|
1006
|
-
|
|
1007
|
-
it('links the reason tooltip from the calendar button too (AST-085 FR5)', () => {
|
|
1008
|
-
render(
|
|
1009
|
-
<DateInput
|
|
1010
|
-
label="Date"
|
|
1011
|
-
isDisabled
|
|
1012
|
-
disabledMessage="You need the Editor role"
|
|
1013
|
-
/>,
|
|
1014
|
-
);
|
|
1015
|
-
const tooltip = screen.getByRole('tooltip', h);
|
|
1016
|
-
expect(
|
|
1017
|
-
getButton('Open calendar').getAttribute('aria-describedby'),
|
|
1018
|
-
).toContain(tooltip.id);
|
|
1019
|
-
});
|
|
1020
|
-
|
|
1021
|
-
it('drops a draft instead of committing it when the field becomes disabled (AST-085 FR2)', async () => {
|
|
1022
|
-
const user = userEvent.setup();
|
|
1023
|
-
const onChange = vi.fn();
|
|
1024
|
-
const {rerender} = render(
|
|
1025
|
-
<DateInput label="Date" value="2026-03-10" onChange={onChange} />,
|
|
1026
|
-
);
|
|
1027
|
-
const input = screen.getByRole('combobox');
|
|
1028
|
-
await user.click(input);
|
|
1029
|
-
await user.clear(input);
|
|
1030
|
-
rerender(
|
|
1031
|
-
<DateInput
|
|
1032
|
-
label="Date"
|
|
1033
|
-
value="2026-03-10"
|
|
1034
|
-
onChange={onChange}
|
|
1035
|
-
isDisabled
|
|
1036
|
-
/>,
|
|
1037
|
-
);
|
|
1038
|
-
expect(input).toHaveFocus();
|
|
1039
|
-
await user.keyboard('{Enter}');
|
|
1040
|
-
await user.tab();
|
|
1041
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
1042
|
-
});
|
|
1043
|
-
|
|
1044
|
-
it('links the reason tooltip from the input via aria-describedby', () => {
|
|
1045
|
-
render(
|
|
1046
|
-
<DateInput
|
|
1047
|
-
label="Date"
|
|
1048
|
-
isDisabled
|
|
1049
|
-
disabledMessage="You need the Editor role"
|
|
1050
|
-
/>,
|
|
1051
|
-
);
|
|
1052
|
-
const input = screen.getByRole('combobox');
|
|
1053
|
-
const tooltip = screen.getByRole('tooltip', h);
|
|
1054
|
-
expect(input.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
1055
|
-
});
|
|
1056
|
-
|
|
1057
|
-
it('blocks value changes and opening while focusable-disabled', async () => {
|
|
1058
|
-
const user = userEvent.setup();
|
|
1059
|
-
const onChange = vi.fn();
|
|
1060
|
-
render(
|
|
1061
|
-
<DateInput
|
|
1062
|
-
label="Date"
|
|
1063
|
-
onChange={onChange}
|
|
1064
|
-
isDisabled
|
|
1065
|
-
disabledMessage="You need the Editor role"
|
|
1066
|
-
/>,
|
|
1067
|
-
);
|
|
1068
|
-
|
|
1069
|
-
const input = screen.getByRole('combobox');
|
|
1070
|
-
await user.click(input);
|
|
1071
|
-
await user.type(input, '2026-03-15');
|
|
1072
|
-
expect(input).toHaveValue('');
|
|
1073
|
-
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
1074
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
1075
|
-
});
|
|
1076
|
-
|
|
1077
|
-
it('blocks value changes and opening when disabled without a reason (AST-085 FR1, FR2)', async () => {
|
|
1078
|
-
const user = userEvent.setup();
|
|
1079
|
-
const onChange = vi.fn();
|
|
1080
|
-
render(<DateInput label="Date" onChange={onChange} isDisabled />);
|
|
1081
|
-
const input = screen.getByRole('combobox');
|
|
1082
|
-
expect(input).not.toHaveAttribute('disabled');
|
|
1083
|
-
await user.click(input);
|
|
1084
|
-
await user.type(input, '2026-03-15');
|
|
1085
|
-
await user.keyboard('{ArrowDown}');
|
|
1086
|
-
expect(input).toHaveValue('');
|
|
1087
|
-
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
1088
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
1089
|
-
});
|
|
1090
|
-
});
|
|
1091
|
-
|
|
1092
|
-
describe('format', () => {
|
|
1093
|
-
it('defaults to the long-month date_long shape', () => {
|
|
1094
|
-
// Non-breaking default: byte-identical to the historical hardcoded
|
|
1095
|
-
// DATE_FORMAT_LONG rendering. `format` now defaults to 'date_long'.
|
|
1096
|
-
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
1097
|
-
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
1098
|
-
});
|
|
1099
|
-
|
|
1100
|
-
it('renders the long-month shape for explicit format="date_long"', () => {
|
|
1101
|
-
// Explicit date_long is identical to the unset default above and to the
|
|
1102
|
-
// old hardcoded long-month output — real named parity with Timestamp.
|
|
1103
|
-
render(
|
|
1104
|
-
<DateInput
|
|
1105
|
-
label="Date"
|
|
1106
|
-
value="2026-01-25"
|
|
1107
|
-
onChange={() => {}}
|
|
1108
|
-
format="date_long"
|
|
1109
|
-
/>,
|
|
1110
|
-
);
|
|
1111
|
-
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
1112
|
-
});
|
|
1113
|
-
|
|
1114
|
-
it('renders the short-month shape for format="date"', () => {
|
|
1115
|
-
// Same literal + same shape as <Timestamp format="date" />.
|
|
1116
|
-
render(
|
|
1117
|
-
<DateInput
|
|
1118
|
-
label="Date"
|
|
1119
|
-
value="2026-01-25"
|
|
1120
|
-
onChange={() => {}}
|
|
1121
|
-
format="date"
|
|
1122
|
-
/>,
|
|
1123
|
-
);
|
|
1124
|
-
expect(screen.getByDisplayValue('Jan 25, 2026')).toBeInTheDocument();
|
|
1125
|
-
});
|
|
1126
|
-
|
|
1127
|
-
it('updates when the InternationalizationProvider locale changes (#5074)', () => {
|
|
1128
|
-
const renderDateInput = (locale: 'en-US' | 'es-ES') => (
|
|
1129
|
-
<InternationalizationProvider locale={locale}>
|
|
1130
|
-
<DateInput
|
|
1131
|
-
label="Date"
|
|
1132
|
-
value="2026-01-25"
|
|
1133
|
-
onChange={() => {}}
|
|
1134
|
-
format="date_long"
|
|
1135
|
-
/>
|
|
1136
|
-
</InternationalizationProvider>
|
|
1137
|
-
);
|
|
1138
|
-
const {rerender} = render(renderDateInput('en-US'));
|
|
1139
|
-
|
|
1140
|
-
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
1141
|
-
|
|
1142
|
-
rerender(renderDateInput('es-ES'));
|
|
1143
|
-
expect(
|
|
1144
|
-
screen.getByDisplayValue('25 de enero de 2026'),
|
|
1145
|
-
).toBeInTheDocument();
|
|
1146
|
-
});
|
|
1147
|
-
|
|
1148
|
-
it('renders the ISO shape for format="system_date"', () => {
|
|
1149
|
-
render(
|
|
1150
|
-
<DateInput
|
|
1151
|
-
label="Date"
|
|
1152
|
-
value="2026-01-25"
|
|
1153
|
-
onChange={() => {}}
|
|
1154
|
-
format="system_date"
|
|
1155
|
-
/>,
|
|
1156
|
-
);
|
|
1157
|
-
expect(screen.getByDisplayValue('2026-01-25')).toBeInTheDocument();
|
|
1158
|
-
});
|
|
1159
|
-
|
|
1160
|
-
it('renders a weekday prefix for format="date_weekday"', () => {
|
|
1161
|
-
render(
|
|
1162
|
-
<DateInput
|
|
1163
|
-
label="Date"
|
|
1164
|
-
value="2026-01-25"
|
|
1165
|
-
onChange={() => {}}
|
|
1166
|
-
format="date_weekday"
|
|
1167
|
-
/>,
|
|
1168
|
-
);
|
|
1169
|
-
// 2026-01-25 is a Sunday; assert the weekday-prefixed shape without
|
|
1170
|
-
// over-fitting locale punctuation.
|
|
1171
|
-
const input = screen.getByRole('combobox');
|
|
1172
|
-
expect(input).toHaveValue('Sun, Jan 25, 2026');
|
|
1173
|
-
});
|
|
1174
|
-
|
|
1175
|
-
it('supports a custom function format', () => {
|
|
1176
|
-
render(
|
|
1177
|
-
<DateInput
|
|
1178
|
-
label="Date"
|
|
1179
|
-
value="2026-01-25"
|
|
1180
|
-
onChange={() => {}}
|
|
1181
|
-
format={iso => `custom:${iso}`}
|
|
1182
|
-
/>,
|
|
1183
|
-
);
|
|
1184
|
-
expect(screen.getByDisplayValue('custom:2026-01-25')).toBeInTheDocument();
|
|
1185
|
-
});
|
|
1186
|
-
|
|
1187
|
-
it('does not apply format to in-progress typed input', async () => {
|
|
1188
|
-
const user = userEvent.setup();
|
|
1189
|
-
render(
|
|
1190
|
-
<DateInput label="Date" onChange={() => {}} format="system_date" />,
|
|
1191
|
-
);
|
|
1192
|
-
const input = screen.getByRole('combobox');
|
|
1193
|
-
await user.click(input);
|
|
1194
|
-
await user.type(input, 'January 25');
|
|
1195
|
-
// While typing, the raw text is shown verbatim — not reformatted.
|
|
1196
|
-
expect(input).toHaveValue('January 25');
|
|
1197
|
-
});
|
|
1198
|
-
|
|
1199
|
-
it('recomputes the display in format on external value change', () => {
|
|
1200
|
-
const {rerender} = render(
|
|
1201
|
-
<DateInput
|
|
1202
|
-
label="Date"
|
|
1203
|
-
value="2026-01-25"
|
|
1204
|
-
onChange={() => {}}
|
|
1205
|
-
format="date"
|
|
1206
|
-
/>,
|
|
1207
|
-
);
|
|
1208
|
-
expect(screen.getByDisplayValue('Jan 25, 2026')).toBeInTheDocument();
|
|
1209
|
-
rerender(
|
|
1210
|
-
<DateInput
|
|
1211
|
-
label="Date"
|
|
1212
|
-
value="2026-03-10"
|
|
1213
|
-
onChange={() => {}}
|
|
1214
|
-
format="date"
|
|
1215
|
-
/>,
|
|
1216
|
-
);
|
|
1217
|
-
expect(screen.getByDisplayValue('Mar 10, 2026')).toBeInTheDocument();
|
|
1218
|
-
});
|
|
1219
|
-
});
|
|
1220
|
-
describe('calendar while the popover is closed', () => {
|
|
1221
|
-
const calendarGrid = () => document.querySelector('[role="grid"]');
|
|
1222
|
-
|
|
1223
|
-
it('renders no calendar until the popover opens, and none after it closes', () => {
|
|
1224
|
-
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
1225
|
-
const toggle = getButton('Open calendar');
|
|
1226
|
-
expect(calendarGrid()).toBeNull();
|
|
1227
|
-
|
|
1228
|
-
fireEvent.click(toggle);
|
|
1229
|
-
expect(calendarGrid()).not.toBeNull();
|
|
1230
|
-
|
|
1231
|
-
fireEvent.click(toggle);
|
|
1232
|
-
expect(calendarGrid()).toBeNull();
|
|
1233
|
-
});
|
|
1234
|
-
|
|
1235
|
-
it('opens on the month of a date typed while closed', () => {
|
|
1236
|
-
function Controlled() {
|
|
1237
|
-
const [value, setValue] = useState<ISODateString | undefined>(
|
|
1238
|
-
'2026-01-25',
|
|
1239
|
-
);
|
|
1240
|
-
return <DateInput label="Date" value={value} onChange={setValue} />;
|
|
1241
|
-
}
|
|
1242
|
-
render(<Controlled />);
|
|
1243
|
-
const input = screen.getByRole('combobox');
|
|
1244
|
-
|
|
1245
|
-
fireEvent.change(input, {target: {value: 'March 5, 2027'}});
|
|
1246
|
-
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
1247
|
-
|
|
1248
|
-
expect(calendarGrid()).toHaveAccessibleName('March 2027');
|
|
1249
|
-
});
|
|
1250
|
-
|
|
1251
|
-
it('moves focus into the calendar on each open from the toggle', async () => {
|
|
1252
|
-
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
1253
|
-
const toggle = getButton('Open calendar');
|
|
1254
|
-
|
|
1255
|
-
for (let i = 0; i < 2; i++) {
|
|
1256
|
-
fireEvent.click(toggle);
|
|
1257
|
-
// The first calendar control takes focus, not the dialog surface.
|
|
1258
|
-
await waitFor(() => {
|
|
1259
|
-
expect(getButton('Previous month')).toHaveFocus();
|
|
1260
|
-
});
|
|
1261
|
-
fireEvent.click(toggle);
|
|
1262
|
-
expect(calendarGrid()).toBeNull();
|
|
1263
|
-
}
|
|
1264
|
-
});
|
|
1265
|
-
});
|
|
1266
|
-
|
|
1267
|
-
describe('weekStartsOn', () => {
|
|
1268
|
-
// The calendar popover renders in the top layer; jsdom keeps the content in
|
|
1269
|
-
// the DOM but role queries skip it, so read the columnheaders directly.
|
|
1270
|
-
const openAndReadWeekdays = (container: HTMLElement): (string | null)[] => {
|
|
1271
|
-
fireEvent.keyDown(screen.getByRole('combobox'), {key: 'ArrowDown'});
|
|
1272
|
-
return Array.from(container.querySelectorAll('[role="columnheader"]'))
|
|
1273
|
-
.slice(0, 7)
|
|
1274
|
-
.map(h => h.textContent);
|
|
1275
|
-
};
|
|
1276
|
-
|
|
1277
|
-
it('defaults to a Sunday-first week', () => {
|
|
1278
|
-
const {container} = render(
|
|
1279
|
-
<DateInput label="Date" onChange={() => {}} />,
|
|
1280
|
-
);
|
|
1281
|
-
expect(openAndReadWeekdays(container)).toEqual([
|
|
1282
|
-
'Su',
|
|
1283
|
-
'Mo',
|
|
1284
|
-
'Tu',
|
|
1285
|
-
'We',
|
|
1286
|
-
'Th',
|
|
1287
|
-
'Fr',
|
|
1288
|
-
'Sa',
|
|
1289
|
-
]);
|
|
1290
|
-
});
|
|
1291
|
-
|
|
1292
|
-
it('forwards a numeric weekStartsOn to the calendar', () => {
|
|
1293
|
-
const {container} = render(
|
|
1294
|
-
<DateInput label="Date" onChange={() => {}} weekStartsOn={1} />,
|
|
1295
|
-
);
|
|
1296
|
-
expect(openAndReadWeekdays(container)).toEqual([
|
|
1297
|
-
'Mo',
|
|
1298
|
-
'Tu',
|
|
1299
|
-
'We',
|
|
1300
|
-
'Th',
|
|
1301
|
-
'Fr',
|
|
1302
|
-
'Sa',
|
|
1303
|
-
'Su',
|
|
1304
|
-
]);
|
|
1305
|
-
});
|
|
1306
|
-
|
|
1307
|
-
it('accepts a three-letter day name', () => {
|
|
1308
|
-
const {container} = render(
|
|
1309
|
-
<DateInput label="Date" onChange={() => {}} weekStartsOn="mon" />,
|
|
1310
|
-
);
|
|
1311
|
-
expect(openAndReadWeekdays(container)).toEqual([
|
|
1312
|
-
'Mo',
|
|
1313
|
-
'Tu',
|
|
1314
|
-
'We',
|
|
1315
|
-
'Th',
|
|
1316
|
-
'Fr',
|
|
1317
|
-
'Sa',
|
|
1318
|
-
'Su',
|
|
1319
|
-
]);
|
|
1320
|
-
});
|
|
1321
|
-
});
|
|
1322
|
-
});
|
|
1323
|
-
|
|
1324
|
-
describe('DateInput statusVariant forwarding', () => {
|
|
1325
|
-
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
1326
|
-
const {container} = render(
|
|
1327
|
-
<DateInput
|
|
1328
|
-
label="Date"
|
|
1329
|
-
onChange={() => {}}
|
|
1330
|
-
status={{type: 'error', message: 'Bad date'}}
|
|
1331
|
-
/>,
|
|
1332
|
-
);
|
|
1333
|
-
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
1334
|
-
'data-variant',
|
|
1335
|
-
'attached',
|
|
1336
|
-
);
|
|
1337
|
-
});
|
|
1338
|
-
|
|
1339
|
-
it('forwards statusVariant="detached" to the underlying Field status', () => {
|
|
1340
|
-
const {container} = render(
|
|
1341
|
-
<DateInput
|
|
1342
|
-
label="Date"
|
|
1343
|
-
onChange={() => {}}
|
|
1344
|
-
status={{type: 'error', message: 'Bad date'}}
|
|
1345
|
-
statusVariant="detached"
|
|
1346
|
-
/>,
|
|
1347
|
-
);
|
|
1348
|
-
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
1349
|
-
'data-variant',
|
|
1350
|
-
'detached',
|
|
1351
|
-
);
|
|
1352
|
-
});
|
|
1353
|
-
});
|
|
1354
|
-
|
|
1355
|
-
describe('DateInput clear icon theme target', () => {
|
|
1356
|
-
// Resolve the clear glyph span (the astryx-icon element inside the clear
|
|
1357
|
-
// button), independent of the theme target class.
|
|
1358
|
-
const getClearIcon = (): HTMLElement => {
|
|
1359
|
-
const button = getButton('Clear Date');
|
|
1360
|
-
const icon = button.querySelector('.astryx-icon');
|
|
1361
|
-
if (icon == null) {
|
|
1362
|
-
throw new Error('clear icon not found');
|
|
1363
|
-
}
|
|
1364
|
-
return icon as HTMLElement;
|
|
1365
|
-
};
|
|
1366
|
-
|
|
1367
|
-
it('renders only the astryx-input-clear-icon target on the clear glyph', () => {
|
|
1368
|
-
render(
|
|
1369
|
-
<DateInput
|
|
1370
|
-
label="Date"
|
|
1371
|
-
value="2026-01-15"
|
|
1372
|
-
onChange={() => {}}
|
|
1373
|
-
hasClear
|
|
1374
|
-
/>,
|
|
1375
|
-
);
|
|
1376
|
-
// The canonical target lands on the icon element itself (not the button),
|
|
1377
|
-
// so a theme can restyle just this glyph (color, size, hover) via
|
|
1378
|
-
// `defineTheme` — a button-level target could not reach the icon's own
|
|
1379
|
-
// color/size.
|
|
1380
|
-
const icon = getClearIcon();
|
|
1381
|
-
expect(icon).toHaveClass('astryx-input-clear-icon');
|
|
1382
|
-
expect(icon).not.toHaveClass('astryx-date-input-clear-icon');
|
|
1383
|
-
expect(icon).toHaveClass('astryx-icon');
|
|
1384
|
-
});
|
|
1385
|
-
|
|
1386
|
-
it('keeps the clear button functional alongside the target', () => {
|
|
1387
|
-
const onChange = vi.fn();
|
|
1388
|
-
render(
|
|
1389
|
-
<DateInput
|
|
1390
|
-
label="Date"
|
|
1391
|
-
value="2026-01-15"
|
|
1392
|
-
onChange={onChange}
|
|
1393
|
-
hasClear
|
|
1394
|
-
/>,
|
|
1395
|
-
);
|
|
1396
|
-
const clear = getButton('Clear Date');
|
|
1397
|
-
expect(clear.tagName).toBe('BUTTON');
|
|
1398
|
-
fireEvent.click(clear);
|
|
1399
|
-
expect(onChange).toHaveBeenCalledWith(undefined);
|
|
1400
|
-
});
|
|
1401
|
-
|
|
1402
|
-
it('routes the clear glyph through the shared clear button', () => {
|
|
1403
|
-
// The clear affordance composes the shared InputClearButton (a ghost Button
|
|
1404
|
-
// with a secondary/sm glyph), so the icon carries the canonical
|
|
1405
|
-
// `astryx-input-clear-icon` target. Aside from that target class it matches
|
|
1406
|
-
// the shared button's own `close`/`sm`/`secondary` glyph exactly, so the
|
|
1407
|
-
// default look is defined in one place.
|
|
1408
|
-
render(
|
|
1409
|
-
<DateInput
|
|
1410
|
-
label="Date"
|
|
1411
|
-
value="2026-01-15"
|
|
1412
|
-
onChange={() => {}}
|
|
1413
|
-
hasClear
|
|
1414
|
-
/>,
|
|
1415
|
-
);
|
|
1416
|
-
const icon = getClearIcon();
|
|
1417
|
-
expect(icon).toHaveClass('astryx-input-clear-icon');
|
|
1418
|
-
expect(icon).not.toHaveClass('astryx-date-input-clear-icon');
|
|
1419
|
-
|
|
1420
|
-
const {container: refContainer} = render(
|
|
1421
|
-
<Icon icon="close" size="sm" color="secondary" />,
|
|
1422
|
-
);
|
|
1423
|
-
const refIcon = refContainer.querySelector('.astryx-icon') as HTMLElement;
|
|
1424
|
-
|
|
1425
|
-
const styleClasses = (el: HTMLElement) =>
|
|
1426
|
-
el.className
|
|
1427
|
-
.split(' ')
|
|
1428
|
-
.filter(c => c !== 'astryx-input-clear-icon')
|
|
1429
|
-
.sort();
|
|
1430
|
-
|
|
1431
|
-
expect(styleClasses(icon)).toEqual(styleClasses(refIcon));
|
|
1432
|
-
});
|
|
1433
|
-
|
|
1434
|
-
it('uses input-clear-icon so a theme reaches the icon color, size, and hover', () => {
|
|
1435
|
-
// jsdom cannot resolve the @layer cascade, so the DOM-class assertion above
|
|
1436
|
-
// (target lands on the icon element) plus this generation assertion (the
|
|
1437
|
-
// theme emits same-element icon rules in @layer astryx-theme) together
|
|
1438
|
-
// prove the seam: a same-element theme rule wins over the icon's own
|
|
1439
|
-
// base-layer color/size.
|
|
1440
|
-
const theme = defineTheme({
|
|
1441
|
-
name: 'date-input-shared-clear-icon-test',
|
|
1442
|
-
components: {
|
|
1443
|
-
'input-clear-icon': {
|
|
1444
|
-
base: {
|
|
1445
|
-
width: '12px',
|
|
1446
|
-
height: '12px',
|
|
1447
|
-
fontSize: '12px',
|
|
1448
|
-
color: 'var(--color-icon-secondary)',
|
|
1449
|
-
':hover': {color: 'var(--color-icon-primary)'},
|
|
1450
|
-
},
|
|
1451
|
-
},
|
|
1452
|
-
},
|
|
1453
|
-
});
|
|
1454
|
-
const css = generateThemeTestCSS(theme);
|
|
1455
|
-
expect(css).toContain('.astryx-input-clear-icon {');
|
|
1456
|
-
expect(css).toContain('width: 12px');
|
|
1457
|
-
expect(css).toContain('height: 12px');
|
|
1458
|
-
expect(css).toContain('.astryx-input-clear-icon:hover');
|
|
1459
|
-
expect(css).toContain('color: var(--color-icon-primary)');
|
|
1460
|
-
});
|
|
1461
|
-
});
|
|
1462
|
-
|
|
1463
|
-
describe('DateInput calendar-toggle icon theme target', () => {
|
|
1464
|
-
const iconIn = (button: HTMLElement): HTMLElement => {
|
|
1465
|
-
const icon = button.querySelector('.astryx-icon');
|
|
1466
|
-
if (icon == null) {
|
|
1467
|
-
throw new Error('toggle icon not found');
|
|
1468
|
-
}
|
|
1469
|
-
return icon as HTMLElement;
|
|
1470
|
-
};
|
|
1471
|
-
|
|
1472
|
-
it('renders the astryx-date-input-toggle-icon target on the toggle glyph', () => {
|
|
1473
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
1474
|
-
const icon = iconIn(getButton('Open calendar'));
|
|
1475
|
-
// The stable theme target lands on the icon element itself (not the
|
|
1476
|
-
// button), so a theme can restyle just this glyph (color, size, hover) —
|
|
1477
|
-
// and each open/closed state — via `defineTheme`. A button-level target
|
|
1478
|
-
// could not reach the icon's own color/size.
|
|
1479
|
-
expect(icon).toHaveClass('astryx-date-input-toggle-icon');
|
|
1480
|
-
expect(icon).toHaveClass('astryx-icon');
|
|
1481
|
-
// Open/closed state is reflected so a theme can target each state alone.
|
|
1482
|
-
expect(icon).toHaveAttribute('data-state', 'collapsed');
|
|
1483
|
-
});
|
|
1484
|
-
|
|
1485
|
-
it('reflects the expanded state on the toggle icon when the popover is open', async () => {
|
|
1486
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
1487
|
-
// Capture the toggle before opening — its aria-label changes to the close
|
|
1488
|
-
// label once open, but the element reference (and its icon) is stable.
|
|
1489
|
-
const toggle = getButton('Open calendar');
|
|
1490
|
-
fireEvent.click(toggle);
|
|
1491
|
-
await waitFor(() => {
|
|
1492
|
-
expect(iconIn(toggle)).toHaveAttribute('data-state', 'expanded');
|
|
1493
|
-
});
|
|
1494
|
-
});
|
|
1495
|
-
|
|
1496
|
-
it('keeps the calendar-toggle button functional alongside the target', () => {
|
|
1497
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
1498
|
-
const toggle = getButton('Open calendar');
|
|
1499
|
-
expect(toggle.tagName).toBe('BUTTON');
|
|
1500
|
-
});
|
|
1501
|
-
|
|
1502
|
-
it('renders the default icon (secondary color, sm size) byte-identically', () => {
|
|
1503
|
-
// Pixel-identical default guard: the toggle glyph must carry the exact same
|
|
1504
|
-
// StyleX color/size classes as a standalone secondary/sm icon. The added
|
|
1505
|
-
// target class + data-state are purely additive — they change nothing until
|
|
1506
|
-
// a theme targets them.
|
|
1507
|
-
render(<DateInput label="Date" onChange={() => {}} />);
|
|
1508
|
-
const icon = iconIn(getButton('Open calendar'));
|
|
1509
|
-
|
|
1510
|
-
const {container: refContainer} = render(
|
|
1511
|
-
<Icon icon="calendar" size="sm" color="secondary" />,
|
|
1512
|
-
);
|
|
1513
|
-
const refIcon = refContainer.querySelector('.astryx-icon') as HTMLElement;
|
|
1514
|
-
|
|
1515
|
-
// Exclude the additive theme-target classes (the stable target + its
|
|
1516
|
-
// reflected state class) so only the StyleX color/size classes remain.
|
|
1517
|
-
const themeTargetClasses = new Set([
|
|
1518
|
-
'astryx-date-input-toggle-icon',
|
|
1519
|
-
'collapsed',
|
|
1520
|
-
'expanded',
|
|
1521
|
-
]);
|
|
1522
|
-
const styleClasses = (el: HTMLElement) =>
|
|
1523
|
-
el.className
|
|
1524
|
-
.split(' ')
|
|
1525
|
-
.filter(c => !themeTargetClasses.has(c))
|
|
1526
|
-
.sort();
|
|
1527
|
-
|
|
1528
|
-
expect(styleClasses(icon)).toEqual(styleClasses(refIcon));
|
|
1529
|
-
});
|
|
1530
|
-
|
|
1531
|
-
it('exposes date-input-toggle-icon so a theme reaches the icon size and per-state color', () => {
|
|
1532
|
-
// jsdom cannot resolve the @layer cascade, so the DOM-class assertions
|
|
1533
|
-
// above (target lands on the icon element) plus this generation assertion
|
|
1534
|
-
// (the theme emits same-element icon rules in @layer astryx-theme) together
|
|
1535
|
-
// prove the seam: a same-element theme rule wins over the icon's own
|
|
1536
|
-
// base-layer color/size.
|
|
1537
|
-
const theme = defineTheme({
|
|
1538
|
-
name: 'date-input-toggle-icon-test',
|
|
1539
|
-
components: {
|
|
1540
|
-
'date-input-toggle-icon': {
|
|
1541
|
-
base: {width: '14px', height: '14px', fontSize: '14px'},
|
|
1542
|
-
'state:expanded': {color: 'var(--color-icon-primary)'},
|
|
1543
|
-
},
|
|
1544
|
-
},
|
|
1545
|
-
});
|
|
1546
|
-
const css = generateThemeTestCSS(theme);
|
|
1547
|
-
expect(css).toContain('.astryx-date-input-toggle-icon {');
|
|
1548
|
-
expect(css).toContain('width: 14px');
|
|
1549
|
-
expect(css).toContain('height: 14px');
|
|
1550
|
-
expect(css).toContain(
|
|
1551
|
-
'.astryx-date-input-toggle-icon[data-state="expanded"]',
|
|
1552
|
-
);
|
|
1553
|
-
expect(css).toContain('color: var(--color-icon-primary)');
|
|
1554
|
-
});
|
|
1555
|
-
});
|
|
1556
|
-
|
|
1557
|
-
describe('DateInput disabled theme state', () => {
|
|
1558
|
-
it('reflects disabled on the root target so themes can gate paint on it', () => {
|
|
1559
|
-
const {container} = render(
|
|
1560
|
-
<DateInput label="Date" onChange={() => {}} isDisabled />,
|
|
1561
|
-
);
|
|
1562
|
-
const root = container.querySelector('.astryx-date-input');
|
|
1563
|
-
expect(root).toHaveAttribute('data-disabled', 'disabled');
|
|
1564
|
-
});
|
|
1565
|
-
|
|
1566
|
-
it('omits data-disabled when enabled, like status does', () => {
|
|
1567
|
-
const {container} = render(<DateInput label="Date" onChange={() => {}} />);
|
|
1568
|
-
const root = container.querySelector('.astryx-date-input');
|
|
1569
|
-
expect(root).not.toHaveAttribute('data-disabled');
|
|
1570
|
-
});
|
|
1571
|
-
});
|