@astryxdesign/core 0.7.6-canary.f73623d → 0.7.6-canary.f899313
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/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +2 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +8 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +17 -18
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +8 -4
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.js +2 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +27 -2
- package/dist/FieldStatus/FieldStatus.d.ts +3 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +1 -0
- package/dist/FileInput/FileInput.d.ts +3 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +59 -33
- package/dist/Layer/useTouchTrigger.d.ts +9 -0
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +1 -1
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +10 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +19 -9
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +11 -15
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +9 -6
- package/dist/Selector/hooks.js +2 -2
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +82 -10
- 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.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +16 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +10 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +36 -10
- package/dist/astryx.css +1 -1
- 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/package.json +18 -5
- package/src/Badge/Badge.tsx +2 -1
- package/src/Chat/ChatMessage.spec.md +64 -65
- package/src/Citation/Citation.spec.md +60 -47
- package/src/ComplexSelector/ComplexSelector.tsx +19 -2
- package/src/DateInput/DateInput.spec.md +74 -57
- package/src/DateInput/MonthScroller.tsx +15 -17
- package/src/DateRangeInput/DateRangeInput.tsx +18 -3
- package/src/DropdownMenu/DropdownMenuGroup.tsx +2 -1
- package/src/Field/Field.doc.mjs +2 -1
- package/src/Field/FieldLabel.doc.mjs +4 -2
- package/src/Field/FieldLabel.spec.md +30 -21
- package/src/Field/FieldLabel.tsx +37 -3
- package/src/FieldStatus/FieldStatus.tsx +7 -0
- package/src/FileInput/FileInput.tsx +69 -28
- package/src/FormLayout/FormLayout.spec.md +11 -19
- package/src/Layer/useTouchTrigger.ts +1 -1
- package/src/Lightbox/Lightbox.spec.md +249 -61
- package/src/Link/Link.tsx +9 -2
- package/src/MultiSelector/MultiSelector.spec.md +121 -114
- package/src/MultiSelector/MultiSelector.tsx +19 -5
- package/src/NumberInput/NumberInput.tsx +11 -18
- package/src/ProgressBar/ProgressBar.spec.md +143 -119
- package/src/Selector/Selector.tsx +16 -6
- package/src/Selector/hooks.ts +2 -2
- package/src/Slider/Slider.spec.md +18 -16
- package/src/Slider/Slider.tsx +101 -9
- package/src/Token/Token.spec.md +24 -23
- package/src/Token/Token.tsx +15 -0
- package/src/Tokenizer/Tokenizer.tsx +10 -0
- package/src/Typeahead/BaseTypeahead.tsx +18 -2
- package/src/Typeahead/Typeahead.tsx +40 -9
- package/src/i18n/useListFormatter.ts +42 -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.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.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.test.tsx +0 -398
- package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +0 -158
- package/src/Avatar/Avatar.test.tsx +0 -867
- package/src/Avatar/AvatarStatusDot.test.tsx +0 -306
- package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +0 -126
- package/src/AvatarGroup/AvatarGroup.test.tsx +0 -313
- package/src/AvatarGroup/AvatarGroupOverflow.test.tsx +0 -263
- package/src/Badge/Badge.test.tsx +0 -125
- package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +0 -260
- package/src/Banner/Banner.test.tsx +0 -879
- package/src/Blockquote/Blockquote.test.tsx +0 -121
- 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.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/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.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.test.tsx +0 -1025
- 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.test.tsx +0 -202
- 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.test.tsx +0 -406
- package/src/Chat/ChatComposer.test.tsx +0 -364
- package/src/Chat/ChatComposerDrawer.test.tsx +0 -130
- package/src/Chat/ChatComposerInput.test.tsx +0 -2136
- package/src/Chat/ChatComposerTokenElement.test.tsx +0 -85
- package/src/Chat/ChatDictationButton.test.tsx +0 -108
- package/src/Chat/ChatLayout.test.tsx +0 -311
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -99
- package/src/Chat/ChatMessage.test.tsx +0 -344
- package/src/Chat/ChatMessageBubble.test.tsx +0 -294
- package/src/Chat/ChatMessageList.test.tsx +0 -198
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -66
- package/src/Chat/ChatPastedTextToken.test.tsx +0 -71
- package/src/Chat/ChatSendButton.test.tsx +0 -309
- package/src/Chat/ChatSystemMessage.test.tsx +0 -189
- package/src/Chat/ChatTokenizedText.test.tsx +0 -163
- 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.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.test.tsx +0 -1159
- package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +0 -1998
- package/src/Citation/Citation.test.tsx +0 -361
- package/src/ClickableCard/ClickableCard.test.tsx +0 -382
- package/src/Code/Code.test.tsx +0 -75
- package/src/CodeBlock/CodeBlock.highlightStyles.test.tsx +0 -87
- 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.test.tsx +0 -620
- 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.test.tsx +0 -750
- 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.test.tsx +0 -539
- package/src/CommandPalette/CommandPaletteItem.test.tsx +0 -417
- 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.test.tsx +0 -1171
- package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +0 -965
- package/src/ContextMenu/ContextMenu.test.tsx +0 -1617
- package/src/ContextMenu/ContextMenu.triggerProps.test.tsx +0 -54
- 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.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.test.tsx +0 -1151
- package/src/DateTimeInput/DateTimeInput.fr10.test.tsx +0 -319
- 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.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/useImperativeDialog.test.tsx +0 -78
- package/src/Divider/Divider.test.tsx +0 -155
- package/src/Drawer/Drawer.test.tsx +0 -1335
- package/src/Drawer/DrawerDirection.test.tsx +0 -127
- 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.ssr.test.tsx +0 -93
- package/src/DropdownMenu/DropdownMenu.test.tsx +0 -4498
- package/src/DropdownMenu/DropdownMenuContext.public.test.ts +0 -22
- package/src/DropdownMenu/DropdownMenuLazySheet.test.tsx +0 -126
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +0 -635
- package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +0 -72
- 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/EmptyState/EmptyState.announce.test.tsx +0 -227
- package/src/EmptyState/EmptyState.test.tsx +0 -284
- package/src/Field/Field.test.tsx +0 -800
- 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.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.test.tsx +0 -1291
- package/src/FormLayout/FormLayout.test.tsx +0 -444
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -46
- package/src/Grid/Grid.test.tsx +0 -509
- package/src/HStack/HStack.test.tsx +0 -129
- package/src/Heading/Heading.test.tsx +0 -328
- package/src/HoverCard/HoverCard.test.tsx +0 -1339
- package/src/Icon/Icon.test.tsx +0 -990
- package/src/Icon/globalIconRegistry.test.tsx +0 -613
- package/src/IconButton/IconButton.test.tsx +0 -156
- package/src/Indicator/Indicator.test.tsx +0 -389
- package/src/Indicator/indicatorRegistry.test.tsx +0 -106
- package/src/InputGroup/InputGroup.test.tsx +0 -502
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Item/Item.source-build.test.mjs +0 -88
- 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.test.tsx +0 -299
- 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.test.tsx +0 -375
- 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.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.test.tsx +0 -457
- 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.test.tsx +0 -1052
- package/src/List/ListItem.source-build.test.mjs +0 -41
- 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.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/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.test.tsx +0 -383
- 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.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.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.test.tsx +0 -41
- 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.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.test.tsx +0 -1134
- package/src/Outline/OutlineFocus.a11y.chromium.spec.ts +0 -551
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -104
- package/src/OverflowList/OverflowList.test.tsx +0 -1073
- package/src/Overlay/Overlay.test.tsx +0 -424
- package/src/Pagination/Pagination.test.tsx +0 -1754
- 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.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.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.test.tsx +0 -1051
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +0 -80
- 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/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.test.tsx +0 -304
- package/src/Section/Section.test.tsx +0 -376
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -981
- 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.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.test.tsx +0 -4275
- package/src/SideNav/SideNavRailMotion.test.tsx +0 -620
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +0 -542
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/Skeleton/Skeleton.test.tsx +0 -148
- package/src/Slider/Slider.fr10.test.tsx +0 -93
- 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.test.tsx +0 -484
- package/src/Stack/Stack.test.tsx +0 -473
- package/src/Stack/StackItem.test.tsx +0 -105
- package/src/StatusDot/StatusDot.test.tsx +0 -213
- package/src/Stepper/Stepper.public.test.ts +0 -91
- package/src/Stepper/Stepper.test.tsx +0 -2130
- package/src/Switch/Switch.focusRing.source-build.test.mjs +0 -81
- 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/TabList.test.tsx +0 -1755
- 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.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/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/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.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/tableContextMenu.test.tsx +0 -208
- 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.test.tsx +0 -1317
- package/src/TextInput/TextInput.fr10.test.tsx +0 -21
- 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.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.test.tsx +0 -907
- package/src/Timer/Timer.test.tsx +0 -302
- package/src/Timestamp/Timestamp.test.tsx +0 -1661
- package/src/Timestamp/tooltipEntries.test.ts +0 -566
- 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.test.tsx +0 -1000
- 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.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.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.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.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.test.tsx +0 -863
- package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +0 -83
- package/src/TopNav/TopNavMegaMenu.test.tsx +0 -1153
- package/src/TopNav/TopNavMenu.test.tsx +0 -502
- package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +0 -75
- 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.test.tsx +0 -553
- package/src/Typeahead/Typeahead.fr10.test.tsx +0 -28
- 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.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/__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,1036 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
import {describe, it, expect, vi} from 'vitest';
|
|
4
|
-
import {createRef} from 'react';
|
|
5
|
-
import {act, render, screen, fireEvent} from '@testing-library/react';
|
|
6
|
-
import userEvent from '@testing-library/user-event';
|
|
7
|
-
import {Carousel, type CarouselHandle} from './Carousel';
|
|
8
|
-
|
|
9
|
-
// Mock ResizeObserver (not available in jsdom)
|
|
10
|
-
class MockResizeObserver {
|
|
11
|
-
/** The shared observer, so a test can deliver a resize. */
|
|
12
|
-
static last: MockResizeObserver | null = null;
|
|
13
|
-
callback: ResizeObserverCallback;
|
|
14
|
-
constructor(callback: ResizeObserverCallback) {
|
|
15
|
-
this.callback = callback;
|
|
16
|
-
MockResizeObserver.last = this;
|
|
17
|
-
}
|
|
18
|
-
observe() {}
|
|
19
|
-
unobserve() {}
|
|
20
|
-
disconnect() {}
|
|
21
|
-
}
|
|
22
|
-
vi.stubGlobal('ResizeObserver', MockResizeObserver);
|
|
23
|
-
|
|
24
|
-
describe('Carousel', () => {
|
|
25
|
-
// Retained local tests (AST-021 FR6): the carousel contract keeps the
|
|
26
|
-
// aria-roledescription outcomes ADVISORY until a current Carousel record
|
|
27
|
-
// adopts the APG parts, so these component assertions remain the gate for
|
|
28
|
-
// the slide and region role descriptions. Removal blocker: component:Carousel
|
|
29
|
-
// adopting APG Carousel's aria-roledescription as current.
|
|
30
|
-
it('has carousel ARIA attributes', () => {
|
|
31
|
-
render(
|
|
32
|
-
<Carousel aria-label="Photos">
|
|
33
|
-
<div>Item</div>
|
|
34
|
-
</Carousel>,
|
|
35
|
-
);
|
|
36
|
-
const region = screen.getByRole('region', {name: 'Photos'});
|
|
37
|
-
expect(region).toHaveAttribute('aria-roledescription', 'carousel');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('exposes each slide as a group with aria-roledescription="slide" and a positional name', () => {
|
|
41
|
-
render(
|
|
42
|
-
<Carousel aria-label="Photos">
|
|
43
|
-
<div>One</div>
|
|
44
|
-
<div>Two</div>
|
|
45
|
-
<div>Three</div>
|
|
46
|
-
</Carousel>,
|
|
47
|
-
);
|
|
48
|
-
// APG carousel pattern: each slide container is role=group with
|
|
49
|
-
// aria-roledescription="slide" and an "N of M" accessible name. (The
|
|
50
|
-
// scroll area around them is a group too, named like the carousel.)
|
|
51
|
-
const slides = screen.getAllByRole('group', {name: /^Slide /});
|
|
52
|
-
expect(slides).toHaveLength(3);
|
|
53
|
-
slides.forEach((slide, i) => {
|
|
54
|
-
expect(slide).toHaveAttribute('aria-roledescription', 'slide');
|
|
55
|
-
expect(slide).toHaveAccessibleName(`Slide ${i + 1} of 3`);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
describe('scroll area (spec:AST-025 FR12)', () => {
|
|
60
|
-
function getScroller() {
|
|
61
|
-
return screen.getByRole('group', {name: 'Photos'});
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function setOverflow(el: HTMLElement, overflowing: boolean) {
|
|
65
|
-
Object.defineProperty(el, 'scrollWidth', {
|
|
66
|
-
value: overflowing ? 500 : 200,
|
|
67
|
-
configurable: true,
|
|
68
|
-
});
|
|
69
|
-
Object.defineProperty(el, 'clientWidth', {
|
|
70
|
-
value: 200,
|
|
71
|
-
configurable: true,
|
|
72
|
-
});
|
|
73
|
-
fireEvent.scroll(el);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
it('is a group named like the carousel', () => {
|
|
77
|
-
render(
|
|
78
|
-
<Carousel aria-label="Photos">
|
|
79
|
-
<div>One</div>
|
|
80
|
-
<div>Two</div>
|
|
81
|
-
</Carousel>,
|
|
82
|
-
);
|
|
83
|
-
const scroller = getScroller();
|
|
84
|
-
expect(scroller).toHaveAttribute('role', 'group');
|
|
85
|
-
expect(scroller).toHaveAccessibleName('Photos');
|
|
86
|
-
// It is the region's scroll container, not a slide.
|
|
87
|
-
expect(scroller).not.toHaveAttribute('aria-roledescription');
|
|
88
|
-
expect(scroller.parentElement).toBe(
|
|
89
|
-
screen.getByRole('region', {name: 'Photos'}),
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
// Named by its owner (spec:AST-025 FR12): the caller's label above, else
|
|
94
|
-
// the carousel's translated default.
|
|
95
|
-
it("takes the carousel's translated default name when the caller gives none", () => {
|
|
96
|
-
render(
|
|
97
|
-
<Carousel>
|
|
98
|
-
<div>One</div>
|
|
99
|
-
<div>Two</div>
|
|
100
|
-
</Carousel>,
|
|
101
|
-
);
|
|
102
|
-
const scroller = screen.getByRole('group', {name: 'Carousel'});
|
|
103
|
-
expect(scroller).toHaveAccessibleName('Carousel');
|
|
104
|
-
expect(scroller.parentElement).toBe(
|
|
105
|
-
screen.getByRole('region', {name: 'Carousel'}),
|
|
106
|
-
);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('takes a tab stop only while its content overflows', () => {
|
|
110
|
-
render(
|
|
111
|
-
<Carousel aria-label="Photos">
|
|
112
|
-
<div>One</div>
|
|
113
|
-
<div>Two</div>
|
|
114
|
-
</Carousel>,
|
|
115
|
-
);
|
|
116
|
-
const scroller = getScroller();
|
|
117
|
-
// Fitting: out of the tab order, still focusable from script (FR2).
|
|
118
|
-
setOverflow(scroller, false);
|
|
119
|
-
expect(scroller).toHaveAttribute('tabindex', '-1');
|
|
120
|
-
act(() => scroller.focus());
|
|
121
|
-
expect(scroller).toHaveFocus();
|
|
122
|
-
act(() => scroller.blur());
|
|
123
|
-
// Overflowing: a tab stop.
|
|
124
|
-
setOverflow(scroller, true);
|
|
125
|
-
expect(scroller).toHaveAttribute('tabindex', '0');
|
|
126
|
-
// Fitting again: leaves the tab order.
|
|
127
|
-
setOverflow(scroller, false);
|
|
128
|
-
expect(scroller).toHaveAttribute('tabindex', '-1');
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// The content can come to overflow, or stop, with the scroll area
|
|
132
|
-
// keeping its size: the tab stop follows it.
|
|
133
|
-
it('follows its content: slides added or removed, or a slide that grows, move the tab stop', async () => {
|
|
134
|
-
const slides = (count: number) =>
|
|
135
|
-
Array.from({length: count}, (_, i) => <div key={i}>Slide {i}</div>);
|
|
136
|
-
const view = render(<Carousel aria-label="Photos">{slides(1)}</Carousel>);
|
|
137
|
-
const scroller = getScroller();
|
|
138
|
-
// A 200 px scroll area; 150 px of content per slide, plus what a slide
|
|
139
|
-
// grows by.
|
|
140
|
-
let grown = 0;
|
|
141
|
-
Object.defineProperty(scroller, 'clientWidth', {
|
|
142
|
-
value: 200,
|
|
143
|
-
configurable: true,
|
|
144
|
-
});
|
|
145
|
-
Object.defineProperty(scroller, 'scrollWidth', {
|
|
146
|
-
configurable: true,
|
|
147
|
-
get: () => scroller.children.length * 150 + grown,
|
|
148
|
-
});
|
|
149
|
-
expect(scroller).toHaveAttribute('tabindex', '-1');
|
|
150
|
-
|
|
151
|
-
view.rerender(<Carousel aria-label="Photos">{slides(2)}</Carousel>);
|
|
152
|
-
await act(async () => {});
|
|
153
|
-
expect(scroller).toHaveAttribute('tabindex', '0');
|
|
154
|
-
|
|
155
|
-
view.rerender(<Carousel aria-label="Photos">{slides(1)}</Carousel>);
|
|
156
|
-
await act(async () => {});
|
|
157
|
-
expect(scroller).toHaveAttribute('tabindex', '-1');
|
|
158
|
-
|
|
159
|
-
// The one slide's content grows past the scroll area.
|
|
160
|
-
grown = 100;
|
|
161
|
-
const observer = MockResizeObserver.last;
|
|
162
|
-
act(() => {
|
|
163
|
-
observer?.callback(
|
|
164
|
-
[
|
|
165
|
-
{
|
|
166
|
-
target: scroller.firstElementChild,
|
|
167
|
-
} as unknown as ResizeObserverEntry,
|
|
168
|
-
],
|
|
169
|
-
observer,
|
|
170
|
-
);
|
|
171
|
-
});
|
|
172
|
-
expect(scroller).toHaveAttribute('tabindex', '0');
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('renders children', () => {
|
|
177
|
-
render(
|
|
178
|
-
<Carousel aria-label="Test carousel">
|
|
179
|
-
<div data-testid="item-1">Item 1</div>
|
|
180
|
-
<div data-testid="item-2">Item 2</div>
|
|
181
|
-
</Carousel>,
|
|
182
|
-
);
|
|
183
|
-
expect(screen.getByTestId('item-1')).toBeInTheDocument();
|
|
184
|
-
expect(screen.getByTestId('item-2')).toBeInTheDocument();
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('reflects the rendered child count, skipping null and boolean children', () => {
|
|
188
|
-
render(
|
|
189
|
-
<Carousel aria-label="Photos">
|
|
190
|
-
<div>One</div>
|
|
191
|
-
{null}
|
|
192
|
-
{false}
|
|
193
|
-
<div>Two</div>
|
|
194
|
-
</Carousel>,
|
|
195
|
-
);
|
|
196
|
-
expect(
|
|
197
|
-
screen.getByRole('group', {name: 'Slide 1 of 2'}),
|
|
198
|
-
).toBeInTheDocument();
|
|
199
|
-
expect(
|
|
200
|
-
screen.getByRole('group', {name: 'Slide 2 of 2'}),
|
|
201
|
-
).toBeInTheDocument();
|
|
202
|
-
// Exactly two slides render: null and false children produce no empty
|
|
203
|
-
// slide (child filtering stays component-owned). The scroller is a named
|
|
204
|
-
// group too, so count the slides by their role description.
|
|
205
|
-
expect(
|
|
206
|
-
screen
|
|
207
|
-
.getAllByRole('group')
|
|
208
|
-
.filter(
|
|
209
|
-
group => group.getAttribute('aria-roledescription') === 'slide',
|
|
210
|
-
),
|
|
211
|
-
).toHaveLength(2);
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it('applies data-testid', () => {
|
|
215
|
-
render(
|
|
216
|
-
<Carousel data-testid="my-carousel">
|
|
217
|
-
<div>Item</div>
|
|
218
|
-
</Carousel>,
|
|
219
|
-
);
|
|
220
|
-
expect(screen.getByTestId('my-carousel')).toBeInTheDocument();
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
it('has correct astryx class name', () => {
|
|
224
|
-
render(
|
|
225
|
-
<Carousel data-testid="cls-test">
|
|
226
|
-
<div>Item</div>
|
|
227
|
-
</Carousel>,
|
|
228
|
-
);
|
|
229
|
-
const el = screen.getByTestId('cls-test');
|
|
230
|
-
expect(el.className).toContain('astryx-carousel');
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it('does not render button layer when hasButtons={false}', () => {
|
|
234
|
-
render(
|
|
235
|
-
<Carousel hasButtons={false} aria-label="No buttons">
|
|
236
|
-
<div>Item 1</div>
|
|
237
|
-
<div>Item 2</div>
|
|
238
|
-
</Carousel>,
|
|
239
|
-
);
|
|
240
|
-
expect(screen.queryByLabelText('Scroll left')).not.toBeInTheDocument();
|
|
241
|
-
expect(screen.queryByLabelText('Scroll right')).not.toBeInTheDocument();
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
it('renders buttons by default', () => {
|
|
245
|
-
render(
|
|
246
|
-
<Carousel aria-label="With buttons">
|
|
247
|
-
<div>Item 1</div>
|
|
248
|
-
<div>Item 2</div>
|
|
249
|
-
</Carousel>,
|
|
250
|
-
);
|
|
251
|
-
expect(screen.getByLabelText('Scroll left')).toBeInTheDocument();
|
|
252
|
-
expect(screen.getByLabelText('Scroll right')).toBeInTheDocument();
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
it('disables edge scroll buttons instead of removing them from the tab order', () => {
|
|
256
|
-
// In jsdom there is no measurable overflow, so both edges are at rest and
|
|
257
|
-
// the scroll buttons are in their hidden/inert state. They must stay
|
|
258
|
-
// mounted but be disabled — a disabled <button> is skipped by the tab
|
|
259
|
-
// order and hidden from the a11y tree, so keyboard users don't focus an
|
|
260
|
-
// invisible control (WCAG 2.4.7).
|
|
261
|
-
render(
|
|
262
|
-
<Carousel aria-label="Edge state">
|
|
263
|
-
<div>Item 1</div>
|
|
264
|
-
<div>Item 2</div>
|
|
265
|
-
</Carousel>,
|
|
266
|
-
);
|
|
267
|
-
const left = screen.getByLabelText('Scroll left');
|
|
268
|
-
const right = screen.getByLabelText('Scroll right');
|
|
269
|
-
expect(left).toBeInTheDocument();
|
|
270
|
-
expect(right).toBeInTheDocument();
|
|
271
|
-
expect(left).toBeDisabled();
|
|
272
|
-
expect(right).toBeDisabled();
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
describe('Shift + wheel horizontal scroll', () => {
|
|
276
|
-
// jsdom doesn't lay out elements, so we fake an overflowing scroll
|
|
277
|
-
// container and capture scrollBy calls.
|
|
278
|
-
function getScroller() {
|
|
279
|
-
const region = screen.getByRole('region');
|
|
280
|
-
return region.firstElementChild as HTMLElement;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
function makeOverflowing(el: HTMLElement) {
|
|
284
|
-
Object.defineProperty(el, 'scrollWidth', {
|
|
285
|
-
value: 500,
|
|
286
|
-
configurable: true,
|
|
287
|
-
});
|
|
288
|
-
Object.defineProperty(el, 'clientWidth', {
|
|
289
|
-
value: 200,
|
|
290
|
-
configurable: true,
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
it('maps Shift + vertical wheel to horizontal scroll', () => {
|
|
295
|
-
render(
|
|
296
|
-
<Carousel aria-label="Wheel">
|
|
297
|
-
<div>Item 1</div>
|
|
298
|
-
<div>Item 2</div>
|
|
299
|
-
</Carousel>,
|
|
300
|
-
);
|
|
301
|
-
const scroller = getScroller();
|
|
302
|
-
makeOverflowing(scroller);
|
|
303
|
-
const scrollBy = vi.fn();
|
|
304
|
-
scroller.scrollBy = scrollBy;
|
|
305
|
-
|
|
306
|
-
fireEvent.wheel(scroller, {shiftKey: true, deltaY: 120, deltaX: 0});
|
|
307
|
-
|
|
308
|
-
expect(scrollBy).toHaveBeenCalledWith({left: 120, behavior: 'auto'});
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
it('does not translate wheel without Shift held', () => {
|
|
312
|
-
render(
|
|
313
|
-
<Carousel aria-label="Wheel">
|
|
314
|
-
<div>Item 1</div>
|
|
315
|
-
<div>Item 2</div>
|
|
316
|
-
</Carousel>,
|
|
317
|
-
);
|
|
318
|
-
const scroller = getScroller();
|
|
319
|
-
makeOverflowing(scroller);
|
|
320
|
-
const scrollBy = vi.fn();
|
|
321
|
-
scroller.scrollBy = scrollBy;
|
|
322
|
-
|
|
323
|
-
fireEvent.wheel(scroller, {shiftKey: false, deltaY: 120, deltaX: 0});
|
|
324
|
-
|
|
325
|
-
expect(scrollBy).not.toHaveBeenCalled();
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
it('leaves native horizontal wheel deltas alone', () => {
|
|
329
|
-
// Trackpads emit deltaX directly — don't double-handle those.
|
|
330
|
-
render(
|
|
331
|
-
<Carousel aria-label="Wheel">
|
|
332
|
-
<div>Item 1</div>
|
|
333
|
-
<div>Item 2</div>
|
|
334
|
-
</Carousel>,
|
|
335
|
-
);
|
|
336
|
-
const scroller = getScroller();
|
|
337
|
-
makeOverflowing(scroller);
|
|
338
|
-
const scrollBy = vi.fn();
|
|
339
|
-
scroller.scrollBy = scrollBy;
|
|
340
|
-
|
|
341
|
-
fireEvent.wheel(scroller, {shiftKey: true, deltaY: 120, deltaX: 40});
|
|
342
|
-
|
|
343
|
-
expect(scrollBy).not.toHaveBeenCalled();
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
it('does not intercept when there is no horizontal overflow', () => {
|
|
347
|
-
render(
|
|
348
|
-
<Carousel aria-label="Wheel">
|
|
349
|
-
<div>Item 1</div>
|
|
350
|
-
</Carousel>,
|
|
351
|
-
);
|
|
352
|
-
const scroller = getScroller();
|
|
353
|
-
Object.defineProperty(scroller, 'scrollWidth', {
|
|
354
|
-
value: 200,
|
|
355
|
-
configurable: true,
|
|
356
|
-
});
|
|
357
|
-
Object.defineProperty(scroller, 'clientWidth', {
|
|
358
|
-
value: 200,
|
|
359
|
-
configurable: true,
|
|
360
|
-
});
|
|
361
|
-
const scrollBy = vi.fn();
|
|
362
|
-
scroller.scrollBy = scrollBy;
|
|
363
|
-
|
|
364
|
-
fireEvent.wheel(scroller, {shiftKey: true, deltaY: 120, deltaX: 0});
|
|
365
|
-
|
|
366
|
-
expect(scrollBy).not.toHaveBeenCalled();
|
|
367
|
-
});
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
describe('hasLoop', () => {
|
|
371
|
-
// jsdom doesn't lay out elements, so we fake an overflowing scroll
|
|
372
|
-
// container, force it to rest at an edge, and capture scrollBy calls.
|
|
373
|
-
function getScroller() {
|
|
374
|
-
const region = screen.getByRole('region');
|
|
375
|
-
return region.firstElementChild as HTMLElement;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
function makeOverflowing(el: HTMLElement, scrollLeft: number) {
|
|
379
|
-
Object.defineProperty(el, 'scrollWidth', {
|
|
380
|
-
value: 500,
|
|
381
|
-
configurable: true,
|
|
382
|
-
});
|
|
383
|
-
Object.defineProperty(el, 'clientWidth', {
|
|
384
|
-
value: 200,
|
|
385
|
-
configurable: true,
|
|
386
|
-
});
|
|
387
|
-
Object.defineProperty(el, 'scrollLeft', {
|
|
388
|
-
value: scrollLeft,
|
|
389
|
-
writable: true,
|
|
390
|
-
configurable: true,
|
|
391
|
-
});
|
|
392
|
-
// Drive the overflow hook's scroll listener so overflowStart/End settle.
|
|
393
|
-
fireEvent.scroll(el);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
it('keeps both navigation buttons enabled at the edges when looping', () => {
|
|
397
|
-
render(
|
|
398
|
-
<Carousel hasLoop aria-label="Looping">
|
|
399
|
-
<div>Item 1</div>
|
|
400
|
-
<div>Item 2</div>
|
|
401
|
-
</Carousel>,
|
|
402
|
-
);
|
|
403
|
-
const scroller = getScroller();
|
|
404
|
-
// At the start edge: without loop the left button would be disabled.
|
|
405
|
-
makeOverflowing(scroller, 0);
|
|
406
|
-
|
|
407
|
-
expect(screen.getByLabelText('Scroll left')).toBeEnabled();
|
|
408
|
-
expect(screen.getByLabelText('Scroll right')).toBeEnabled();
|
|
409
|
-
});
|
|
410
|
-
|
|
411
|
-
it('wraps to the start when pressing next at the end', () => {
|
|
412
|
-
render(
|
|
413
|
-
<Carousel hasLoop aria-label="Looping">
|
|
414
|
-
<div>Item 1</div>
|
|
415
|
-
<div>Item 2</div>
|
|
416
|
-
</Carousel>,
|
|
417
|
-
);
|
|
418
|
-
const scroller = getScroller();
|
|
419
|
-
// At the end edge (scrolled fully right): overflowEnd is false.
|
|
420
|
-
makeOverflowing(scroller, 300);
|
|
421
|
-
const scrollBy = vi.fn();
|
|
422
|
-
scroller.scrollBy = scrollBy;
|
|
423
|
-
|
|
424
|
-
fireEvent.click(screen.getByLabelText('Scroll right'));
|
|
425
|
-
|
|
426
|
-
// Overshoots toward the start by the full scroll width; the browser
|
|
427
|
-
// clamps to scrollLeft 0.
|
|
428
|
-
expect(scrollBy).toHaveBeenCalledWith({
|
|
429
|
-
left: -500,
|
|
430
|
-
behavior: 'smooth',
|
|
431
|
-
});
|
|
432
|
-
});
|
|
433
|
-
|
|
434
|
-
it('wraps to the end when pressing prev at the start', () => {
|
|
435
|
-
render(
|
|
436
|
-
<Carousel hasLoop aria-label="Looping">
|
|
437
|
-
<div>Item 1</div>
|
|
438
|
-
<div>Item 2</div>
|
|
439
|
-
</Carousel>,
|
|
440
|
-
);
|
|
441
|
-
const scroller = getScroller();
|
|
442
|
-
makeOverflowing(scroller, 0);
|
|
443
|
-
const scrollBy = vi.fn();
|
|
444
|
-
scroller.scrollBy = scrollBy;
|
|
445
|
-
|
|
446
|
-
fireEvent.click(screen.getByLabelText('Scroll left'));
|
|
447
|
-
|
|
448
|
-
// Overshoots toward the end by the full scroll width.
|
|
449
|
-
expect(scrollBy).toHaveBeenCalledWith({
|
|
450
|
-
left: 500,
|
|
451
|
-
behavior: 'smooth',
|
|
452
|
-
});
|
|
453
|
-
});
|
|
454
|
-
|
|
455
|
-
it('does not wrap when content fits without overflowing', () => {
|
|
456
|
-
render(
|
|
457
|
-
<Carousel hasLoop aria-label="Looping">
|
|
458
|
-
<div>Only item</div>
|
|
459
|
-
</Carousel>,
|
|
460
|
-
);
|
|
461
|
-
const scroller = getScroller();
|
|
462
|
-
Object.defineProperty(scroller, 'scrollWidth', {
|
|
463
|
-
value: 200,
|
|
464
|
-
configurable: true,
|
|
465
|
-
});
|
|
466
|
-
Object.defineProperty(scroller, 'clientWidth', {
|
|
467
|
-
value: 200,
|
|
468
|
-
configurable: true,
|
|
469
|
-
});
|
|
470
|
-
Object.defineProperty(scroller, 'scrollLeft', {
|
|
471
|
-
value: 0,
|
|
472
|
-
writable: true,
|
|
473
|
-
configurable: true,
|
|
474
|
-
});
|
|
475
|
-
fireEvent.scroll(scroller);
|
|
476
|
-
const scrollBy = vi.fn();
|
|
477
|
-
scroller.scrollBy = scrollBy;
|
|
478
|
-
|
|
479
|
-
// Buttons are hidden/disabled with no overflow; invoking scroll is a
|
|
480
|
-
// no-op wrap-wise — a normal (non-wrap) scrollBy still runs, but there
|
|
481
|
-
// is nothing to wrap to, so the overshoot branch must not fire.
|
|
482
|
-
fireEvent.click(screen.getByLabelText('Scroll right'));
|
|
483
|
-
|
|
484
|
-
// Either not called (button disabled) or called with a normal delta —
|
|
485
|
-
// never the full-scrollWidth overshoot.
|
|
486
|
-
if (scrollBy.mock.calls.length > 0) {
|
|
487
|
-
expect(scrollBy).not.toHaveBeenCalledWith(
|
|
488
|
-
expect.objectContaining({left: 500}),
|
|
489
|
-
);
|
|
490
|
-
expect(scrollBy).not.toHaveBeenCalledWith(
|
|
491
|
-
expect.objectContaining({left: -500}),
|
|
492
|
-
);
|
|
493
|
-
}
|
|
494
|
-
});
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
describe('handleRef', () => {
|
|
498
|
-
function getScroller() {
|
|
499
|
-
const region = screen.getByRole('region');
|
|
500
|
-
return region.firstElementChild as HTMLElement;
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
function makeOverflowing(el: HTMLElement, scrollLeft: number) {
|
|
504
|
-
Object.defineProperty(el, 'scrollWidth', {
|
|
505
|
-
value: 500,
|
|
506
|
-
configurable: true,
|
|
507
|
-
});
|
|
508
|
-
Object.defineProperty(el, 'clientWidth', {
|
|
509
|
-
value: 200,
|
|
510
|
-
configurable: true,
|
|
511
|
-
});
|
|
512
|
-
Object.defineProperty(el, 'scrollLeft', {
|
|
513
|
-
value: scrollLeft,
|
|
514
|
-
writable: true,
|
|
515
|
-
configurable: true,
|
|
516
|
-
});
|
|
517
|
-
fireEvent.scroll(el);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
it('exposes scrollNext/scrollPrev that drive the scroll container', () => {
|
|
521
|
-
const handle = createRef<CarouselHandle>();
|
|
522
|
-
render(
|
|
523
|
-
<Carousel handleRef={handle} aria-label="Handle">
|
|
524
|
-
<div>Item 1</div>
|
|
525
|
-
<div>Item 2</div>
|
|
526
|
-
</Carousel>,
|
|
527
|
-
);
|
|
528
|
-
const scroller = getScroller();
|
|
529
|
-
makeOverflowing(scroller, 100);
|
|
530
|
-
const scrollBy = vi.fn();
|
|
531
|
-
scroller.scrollBy = scrollBy;
|
|
532
|
-
|
|
533
|
-
handle.current?.scrollNext();
|
|
534
|
-
expect(scrollBy).toHaveBeenCalledTimes(1);
|
|
535
|
-
expect(scrollBy.mock.calls[0][0].left).toBeGreaterThan(0);
|
|
536
|
-
|
|
537
|
-
handle.current?.scrollPrev();
|
|
538
|
-
expect(scrollBy).toHaveBeenCalledTimes(2);
|
|
539
|
-
expect(scrollBy.mock.calls[1][0].left).toBeLessThan(0);
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
it('reports canScrollNext/canScrollPrev from live overflow state', () => {
|
|
543
|
-
const handle = createRef<CarouselHandle>();
|
|
544
|
-
render(
|
|
545
|
-
<Carousel handleRef={handle} aria-label="Handle">
|
|
546
|
-
<div>Item 1</div>
|
|
547
|
-
<div>Item 2</div>
|
|
548
|
-
</Carousel>,
|
|
549
|
-
);
|
|
550
|
-
const scroller = getScroller();
|
|
551
|
-
|
|
552
|
-
// At the start: can scroll toward the end, not the start.
|
|
553
|
-
makeOverflowing(scroller, 0);
|
|
554
|
-
expect(handle.current?.canScrollPrev()).toBe(false);
|
|
555
|
-
expect(handle.current?.canScrollNext()).toBe(true);
|
|
556
|
-
|
|
557
|
-
// Scroll into the middle: both directions available.
|
|
558
|
-
makeOverflowing(scroller, 150);
|
|
559
|
-
expect(handle.current?.canScrollPrev()).toBe(true);
|
|
560
|
-
expect(handle.current?.canScrollNext()).toBe(true);
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
it('reports both directions scrollable under hasLoop when overflowing', () => {
|
|
564
|
-
const handle = createRef<CarouselHandle>();
|
|
565
|
-
render(
|
|
566
|
-
<Carousel handleRef={handle} hasLoop aria-label="Handle">
|
|
567
|
-
<div>Item 1</div>
|
|
568
|
-
<div>Item 2</div>
|
|
569
|
-
</Carousel>,
|
|
570
|
-
);
|
|
571
|
-
const scroller = getScroller();
|
|
572
|
-
// Rest at the start edge — normally canScrollPrev would be false.
|
|
573
|
-
makeOverflowing(scroller, 0);
|
|
574
|
-
|
|
575
|
-
expect(handle.current?.canScrollPrev()).toBe(true);
|
|
576
|
-
expect(handle.current?.canScrollNext()).toBe(true);
|
|
577
|
-
});
|
|
578
|
-
|
|
579
|
-
it('scrollTo scrolls the container and clamps out-of-range indices', () => {
|
|
580
|
-
const handle = createRef<CarouselHandle>();
|
|
581
|
-
render(
|
|
582
|
-
<Carousel handleRef={handle} aria-label="Handle">
|
|
583
|
-
<div>Item 1</div>
|
|
584
|
-
<div>Item 2</div>
|
|
585
|
-
<div>Item 3</div>
|
|
586
|
-
</Carousel>,
|
|
587
|
-
);
|
|
588
|
-
const scroller = getScroller();
|
|
589
|
-
const scrollBy = vi.fn();
|
|
590
|
-
scroller.scrollBy = scrollBy;
|
|
591
|
-
|
|
592
|
-
// Out-of-range index is clamped to the last item — no throw, one call.
|
|
593
|
-
expect(() => handle.current?.scrollTo(99)).not.toThrow();
|
|
594
|
-
expect(scrollBy).toHaveBeenCalledTimes(1);
|
|
595
|
-
// Uses scrollBy (contained to the carousel), never scrollIntoView.
|
|
596
|
-
expect(scrollBy.mock.calls[0][0]).toHaveProperty('left');
|
|
597
|
-
});
|
|
598
|
-
});
|
|
599
|
-
|
|
600
|
-
describe('keyboard focus at the edges', () => {
|
|
601
|
-
function getScroller() {
|
|
602
|
-
const region = screen.getByRole('region');
|
|
603
|
-
return region.firstElementChild as HTMLElement;
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
// jsdom has no layout, so fake an overflowing container whose scrollBy
|
|
607
|
-
// moves scrollLeft and fires scroll, which is what drives the overflow
|
|
608
|
-
// state the buttons and the focus hand-off both read. `land` decides where
|
|
609
|
-
// the container comes to rest: the default clamps to the requested delta,
|
|
610
|
-
// and the snap arm overrides it to model mandatory scroll-snap carrying the
|
|
611
|
-
// container past what the press asked for.
|
|
612
|
-
function makeScrollable(
|
|
613
|
-
el: HTMLElement,
|
|
614
|
-
scrollWidth: number,
|
|
615
|
-
land?: (requested: number, maxScroll: number) => number,
|
|
616
|
-
) {
|
|
617
|
-
const clientWidth = 200;
|
|
618
|
-
const maxScroll = scrollWidth - clientWidth;
|
|
619
|
-
Object.defineProperty(el, 'scrollWidth', {
|
|
620
|
-
value: scrollWidth,
|
|
621
|
-
configurable: true,
|
|
622
|
-
});
|
|
623
|
-
Object.defineProperty(el, 'clientWidth', {
|
|
624
|
-
value: clientWidth,
|
|
625
|
-
configurable: true,
|
|
626
|
-
});
|
|
627
|
-
Object.defineProperty(el, 'scrollLeft', {
|
|
628
|
-
value: 0,
|
|
629
|
-
writable: true,
|
|
630
|
-
configurable: true,
|
|
631
|
-
});
|
|
632
|
-
el.scrollBy = ((options: ScrollToOptions) => {
|
|
633
|
-
const requested = Math.max(
|
|
634
|
-
0,
|
|
635
|
-
Math.min(maxScroll, el.scrollLeft + (options.left ?? 0)),
|
|
636
|
-
);
|
|
637
|
-
el.scrollLeft = land ? land(requested, maxScroll) : requested;
|
|
638
|
-
fireEvent.scroll(el);
|
|
639
|
-
}) as HTMLElement['scrollBy'];
|
|
640
|
-
fireEvent.scroll(el);
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
it('hands focus to the scroll area when the edge disables the one in use', async () => {
|
|
644
|
-
const user = userEvent.setup();
|
|
645
|
-
render(
|
|
646
|
-
<Carousel aria-label="Gallery">
|
|
647
|
-
<div>Item 1</div>
|
|
648
|
-
<div>Item 2</div>
|
|
649
|
-
<div>Item 3</div>
|
|
650
|
-
</Carousel>,
|
|
651
|
-
);
|
|
652
|
-
// clientWidth 200 against a 200px step, so one press lands exactly on the
|
|
653
|
-
// trailing edge and the trailing button disables.
|
|
654
|
-
makeScrollable(getScroller(), 400);
|
|
655
|
-
|
|
656
|
-
const next = screen.getByLabelText('Scroll right');
|
|
657
|
-
await user.click(next);
|
|
658
|
-
|
|
659
|
-
expect(next).toBeDisabled();
|
|
660
|
-
expect(document.activeElement).toBe(getScroller());
|
|
661
|
-
expect(document.activeElement).not.toBe(document.body);
|
|
662
|
-
});
|
|
663
|
-
|
|
664
|
-
it('hands off in the leading direction too', async () => {
|
|
665
|
-
const user = userEvent.setup();
|
|
666
|
-
render(
|
|
667
|
-
<Carousel aria-label="Gallery">
|
|
668
|
-
<div>Item 1</div>
|
|
669
|
-
<div>Item 2</div>
|
|
670
|
-
<div>Item 3</div>
|
|
671
|
-
</Carousel>,
|
|
672
|
-
);
|
|
673
|
-
const scroller = getScroller();
|
|
674
|
-
makeScrollable(scroller, 400);
|
|
675
|
-
// Park at the far end so the leading button is the one that runs out.
|
|
676
|
-
scroller.scrollLeft = 200;
|
|
677
|
-
fireEvent.scroll(scroller);
|
|
678
|
-
|
|
679
|
-
const previous = screen.getByLabelText('Scroll left');
|
|
680
|
-
await user.click(previous);
|
|
681
|
-
|
|
682
|
-
expect(previous).toBeDisabled();
|
|
683
|
-
expect(document.activeElement).toBe(getScroller());
|
|
684
|
-
});
|
|
685
|
-
|
|
686
|
-
it('hands off under RTL, where the scroll axis is inverted', async () => {
|
|
687
|
-
const user = userEvent.setup();
|
|
688
|
-
render(
|
|
689
|
-
<Carousel aria-label="Gallery">
|
|
690
|
-
<div>Item 1</div>
|
|
691
|
-
<div>Item 2</div>
|
|
692
|
-
<div>Item 3</div>
|
|
693
|
-
</Carousel>,
|
|
694
|
-
);
|
|
695
|
-
const scroller = getScroller();
|
|
696
|
-
// The component resolves direction with getComputedStyle, and jsdom does
|
|
697
|
-
// not inherit `dir` down to it, so set it on the element itself. RTL then
|
|
698
|
-
// scrolls negative, which the mock below mirrors.
|
|
699
|
-
scroller.style.direction = 'rtl';
|
|
700
|
-
const maxScroll = 200;
|
|
701
|
-
Object.defineProperty(scroller, 'scrollWidth', {
|
|
702
|
-
value: 400,
|
|
703
|
-
configurable: true,
|
|
704
|
-
});
|
|
705
|
-
Object.defineProperty(scroller, 'clientWidth', {
|
|
706
|
-
value: 200,
|
|
707
|
-
configurable: true,
|
|
708
|
-
});
|
|
709
|
-
Object.defineProperty(scroller, 'scrollLeft', {
|
|
710
|
-
value: 0,
|
|
711
|
-
writable: true,
|
|
712
|
-
configurable: true,
|
|
713
|
-
});
|
|
714
|
-
scroller.scrollBy = ((options: ScrollToOptions) => {
|
|
715
|
-
scroller.scrollLeft = Math.max(
|
|
716
|
-
-maxScroll,
|
|
717
|
-
Math.min(0, scroller.scrollLeft + (options.left ?? 0)),
|
|
718
|
-
);
|
|
719
|
-
fireEvent.scroll(scroller);
|
|
720
|
-
}) as HTMLElement['scrollBy'];
|
|
721
|
-
fireEvent.scroll(scroller);
|
|
722
|
-
|
|
723
|
-
const next = screen.getByLabelText('Scroll right');
|
|
724
|
-
await user.click(next);
|
|
725
|
-
|
|
726
|
-
expect(next).toBeDisabled();
|
|
727
|
-
expect(document.activeElement).toBe(getScroller());
|
|
728
|
-
});
|
|
729
|
-
|
|
730
|
-
it('hands off when scroll-snap carries the container past what the press asked for', async () => {
|
|
731
|
-
const user = userEvent.setup();
|
|
732
|
-
render(
|
|
733
|
-
<Carousel hasSnap aria-label="Gallery">
|
|
734
|
-
<div>Item 1</div>
|
|
735
|
-
<div>Item 2</div>
|
|
736
|
-
<div>Item 3</div>
|
|
737
|
-
</Carousel>,
|
|
738
|
-
);
|
|
739
|
-
// 700 gives 500 of travel against a 200 step, so the press alone lands
|
|
740
|
-
// mid-run. Mandatory snapping then carries it to the end, which is the
|
|
741
|
-
// landing position no press can predict.
|
|
742
|
-
makeScrollable(getScroller(), 700, (_requested, maxScroll) => maxScroll);
|
|
743
|
-
|
|
744
|
-
const next = screen.getByLabelText('Scroll right');
|
|
745
|
-
await user.click(next);
|
|
746
|
-
|
|
747
|
-
expect(next).toBeDisabled();
|
|
748
|
-
expect(document.activeElement).toBe(getScroller());
|
|
749
|
-
});
|
|
750
|
-
|
|
751
|
-
it('falls back to the scroll container when the carousel stops overflowing', async () => {
|
|
752
|
-
const user = userEvent.setup();
|
|
753
|
-
render(
|
|
754
|
-
<Carousel aria-label="Gallery">
|
|
755
|
-
<div>Item 1</div>
|
|
756
|
-
<div>Item 2</div>
|
|
757
|
-
</Carousel>,
|
|
758
|
-
);
|
|
759
|
-
const scroller = getScroller();
|
|
760
|
-
// The content shrinks to fit during the press, so BOTH buttons disable
|
|
761
|
-
// and there is no opposite control left to receive focus.
|
|
762
|
-
makeScrollable(scroller, 400, () => {
|
|
763
|
-
Object.defineProperty(scroller, 'scrollWidth', {
|
|
764
|
-
value: 200,
|
|
765
|
-
configurable: true,
|
|
766
|
-
});
|
|
767
|
-
return 0;
|
|
768
|
-
});
|
|
769
|
-
|
|
770
|
-
await user.click(screen.getByLabelText('Scroll right'));
|
|
771
|
-
|
|
772
|
-
expect(screen.getByLabelText('Scroll right')).toBeDisabled();
|
|
773
|
-
expect(screen.getByLabelText('Scroll left')).toBeDisabled();
|
|
774
|
-
expect(document.activeElement).toBe(scroller);
|
|
775
|
-
expect(document.activeElement).not.toBe(document.body);
|
|
776
|
-
});
|
|
777
|
-
|
|
778
|
-
it('does not pull focus back after the person has left the button', () => {
|
|
779
|
-
render(
|
|
780
|
-
<Carousel aria-label="Gallery">
|
|
781
|
-
<div>Item 1</div>
|
|
782
|
-
<div>Item 2</div>
|
|
783
|
-
<div>Item 3</div>
|
|
784
|
-
</Carousel>,
|
|
785
|
-
);
|
|
786
|
-
const scroller = getScroller();
|
|
787
|
-
makeScrollable(scroller, 400);
|
|
788
|
-
|
|
789
|
-
// Touch an arrow, then leave it without pressing it. Landing on <body> is
|
|
790
|
-
// the case that matters: focus somewhere else is already ignored, so a
|
|
791
|
-
// stale tracker only bites when there is nothing else holding focus.
|
|
792
|
-
const next = screen.getByLabelText('Scroll right');
|
|
793
|
-
next.focus();
|
|
794
|
-
next.blur();
|
|
795
|
-
expect(document.activeElement).toBe(document.body);
|
|
796
|
-
|
|
797
|
-
// The carousel reaches the edge on its own: a swipe, a resize, anything
|
|
798
|
-
// that is not this person. Their focus is not the carousel's to take.
|
|
799
|
-
scroller.scrollLeft = 200;
|
|
800
|
-
fireEvent.scroll(scroller);
|
|
801
|
-
|
|
802
|
-
expect(screen.getByLabelText('Scroll right')).toBeDisabled();
|
|
803
|
-
expect(document.activeElement).toBe(document.body);
|
|
804
|
-
});
|
|
805
|
-
|
|
806
|
-
it('hands off on a press, with the blur handlers in place', async () => {
|
|
807
|
-
const user = userEvent.setup();
|
|
808
|
-
render(
|
|
809
|
-
<Carousel aria-label="Gallery">
|
|
810
|
-
<div>Item 1</div>
|
|
811
|
-
<div>Item 2</div>
|
|
812
|
-
<div>Item 3</div>
|
|
813
|
-
</Carousel>,
|
|
814
|
-
);
|
|
815
|
-
makeScrollable(getScroller(), 400);
|
|
816
|
-
|
|
817
|
-
// The Effect clears the tracker itself before focusing, so the commit's
|
|
818
|
-
// own blur finds nothing left to clear and the guard is not what makes
|
|
819
|
-
// this pass. It is here so that deleting the blur handlers outright --
|
|
820
|
-
// rather than loosening the guard -- is caught.
|
|
821
|
-
await user.click(screen.getByLabelText('Scroll right'));
|
|
822
|
-
|
|
823
|
-
expect(document.activeElement).toBe(getScroller());
|
|
824
|
-
});
|
|
825
|
-
|
|
826
|
-
it('does not move focus on a press that leaves the direction available', async () => {
|
|
827
|
-
const user = userEvent.setup();
|
|
828
|
-
render(
|
|
829
|
-
<Carousel aria-label="Gallery">
|
|
830
|
-
<div>Item 1</div>
|
|
831
|
-
<div>Item 2</div>
|
|
832
|
-
<div>Item 3</div>
|
|
833
|
-
</Carousel>,
|
|
834
|
-
);
|
|
835
|
-
makeScrollable(getScroller(), 600);
|
|
836
|
-
|
|
837
|
-
const next = screen.getByLabelText('Scroll right');
|
|
838
|
-
await user.click(next);
|
|
839
|
-
|
|
840
|
-
expect(next).toBeEnabled();
|
|
841
|
-
expect(document.activeElement).toBe(next);
|
|
842
|
-
});
|
|
843
|
-
|
|
844
|
-
it('does not move focus when hasLoop keeps both buttons enabled', async () => {
|
|
845
|
-
const user = userEvent.setup();
|
|
846
|
-
render(
|
|
847
|
-
<Carousel hasLoop aria-label="Looping">
|
|
848
|
-
<div>Item 1</div>
|
|
849
|
-
<div>Item 2</div>
|
|
850
|
-
</Carousel>,
|
|
851
|
-
);
|
|
852
|
-
makeScrollable(getScroller(), 400);
|
|
853
|
-
|
|
854
|
-
const next = screen.getByLabelText('Scroll right');
|
|
855
|
-
await user.click(next);
|
|
856
|
-
|
|
857
|
-
expect(next).toBeEnabled();
|
|
858
|
-
expect(document.activeElement).toBe(next);
|
|
859
|
-
});
|
|
860
|
-
|
|
861
|
-
it('takes focus without scrolling the receiver into view', async () => {
|
|
862
|
-
const user = userEvent.setup();
|
|
863
|
-
render(
|
|
864
|
-
<Carousel aria-label="Gallery">
|
|
865
|
-
<div>Item 1</div>
|
|
866
|
-
<div>Item 2</div>
|
|
867
|
-
</Carousel>,
|
|
868
|
-
);
|
|
869
|
-
makeScrollable(getScroller(), 400);
|
|
870
|
-
const focus = vi.spyOn(getScroller(), 'focus');
|
|
871
|
-
|
|
872
|
-
await user.click(screen.getByLabelText('Scroll right'));
|
|
873
|
-
|
|
874
|
-
// A plain focus() scrolls its element into view, which on the scroll
|
|
875
|
-
// container cancels the scroll the same press started.
|
|
876
|
-
expect(focus).toHaveBeenCalledWith({preventScroll: true});
|
|
877
|
-
});
|
|
878
|
-
|
|
879
|
-
it('leaves focus alone when the imperative handle drives the scroll', () => {
|
|
880
|
-
const handle = createRef<CarouselHandle>();
|
|
881
|
-
render(
|
|
882
|
-
<Carousel handleRef={handle} aria-label="Gallery">
|
|
883
|
-
<div>Item 1</div>
|
|
884
|
-
<div>Item 2</div>
|
|
885
|
-
</Carousel>,
|
|
886
|
-
);
|
|
887
|
-
makeScrollable(getScroller(), 400);
|
|
888
|
-
const outside = document.createElement('button');
|
|
889
|
-
document.body.appendChild(outside);
|
|
890
|
-
outside.focus();
|
|
891
|
-
|
|
892
|
-
handle.current?.scrollNext();
|
|
893
|
-
|
|
894
|
-
expect(document.activeElement).toBe(outside);
|
|
895
|
-
outside.remove();
|
|
896
|
-
});
|
|
897
|
-
|
|
898
|
-
it('does not move focus a second time for one transition', async () => {
|
|
899
|
-
const user = userEvent.setup();
|
|
900
|
-
const {rerender} = render(
|
|
901
|
-
<Carousel aria-label="Gallery">
|
|
902
|
-
<div>Item 1</div>
|
|
903
|
-
<div>Item 2</div>
|
|
904
|
-
<div>Item 3</div>
|
|
905
|
-
</Carousel>,
|
|
906
|
-
);
|
|
907
|
-
makeScrollable(getScroller(), 400);
|
|
908
|
-
await user.click(screen.getByLabelText('Scroll right'));
|
|
909
|
-
|
|
910
|
-
expect(document.activeElement).toBe(getScroller());
|
|
911
|
-
// Park focus outside and re-render: the transition is spent, so nothing
|
|
912
|
-
// may pull focus back in.
|
|
913
|
-
const outside = document.createElement('button');
|
|
914
|
-
document.body.appendChild(outside);
|
|
915
|
-
outside.focus();
|
|
916
|
-
rerender(
|
|
917
|
-
<Carousel aria-label="Gallery">
|
|
918
|
-
<div>Item 1</div>
|
|
919
|
-
<div>Item 2</div>
|
|
920
|
-
<div>Item 3</div>
|
|
921
|
-
</Carousel>,
|
|
922
|
-
);
|
|
923
|
-
|
|
924
|
-
expect(document.activeElement).toBe(outside);
|
|
925
|
-
outside.remove();
|
|
926
|
-
});
|
|
927
|
-
|
|
928
|
-
it('reflects the scroll container as a theme target carrying its style-driving props', () => {
|
|
929
|
-
render(
|
|
930
|
-
<Carousel gap={2} padding={3} hasSnap aria-label="Gallery">
|
|
931
|
-
<div>Item 1</div>
|
|
932
|
-
</Carousel>,
|
|
933
|
-
);
|
|
934
|
-
const scroller = getScroller();
|
|
935
|
-
expect(scroller).toHaveClass('astryx-carousel-scroller');
|
|
936
|
-
expect(scroller).toHaveAttribute('data-gap', '2');
|
|
937
|
-
expect(scroller).toHaveAttribute('data-padding', '3');
|
|
938
|
-
expect(scroller).toHaveAttribute('data-snap', 'snap');
|
|
939
|
-
expect(scroller).toHaveAttribute('data-edge-fade', 'edge-fade');
|
|
940
|
-
});
|
|
941
|
-
|
|
942
|
-
it('omits the opt-out attributes a theme should not see', () => {
|
|
943
|
-
render(
|
|
944
|
-
<Carousel hasEdgeFade={false} aria-label="Gallery">
|
|
945
|
-
<div>Item 1</div>
|
|
946
|
-
</Carousel>,
|
|
947
|
-
);
|
|
948
|
-
const scroller = getScroller();
|
|
949
|
-
expect(scroller).not.toHaveAttribute('data-edge-fade');
|
|
950
|
-
expect(scroller).not.toHaveAttribute('data-snap');
|
|
951
|
-
expect(scroller).not.toHaveAttribute('data-padding');
|
|
952
|
-
});
|
|
953
|
-
});
|
|
954
|
-
|
|
955
|
-
describe('edge fade', () => {
|
|
956
|
-
function getScroller() {
|
|
957
|
-
const region = screen.getByRole('region');
|
|
958
|
-
return region.firstElementChild as HTMLElement;
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
function makeOverflowing(el: HTMLElement, scrollLeft: number) {
|
|
962
|
-
Object.defineProperty(el, 'scrollWidth', {
|
|
963
|
-
value: 500,
|
|
964
|
-
configurable: true,
|
|
965
|
-
});
|
|
966
|
-
Object.defineProperty(el, 'clientWidth', {
|
|
967
|
-
value: 200,
|
|
968
|
-
configurable: true,
|
|
969
|
-
});
|
|
970
|
-
Object.defineProperty(el, 'scrollLeft', {
|
|
971
|
-
value: scrollLeft,
|
|
972
|
-
writable: true,
|
|
973
|
-
configurable: true,
|
|
974
|
-
});
|
|
975
|
-
fireEvent.scroll(el);
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
function injectedCss(): string {
|
|
979
|
-
let out = '';
|
|
980
|
-
for (const sheet of Array.from(document.styleSheets)) {
|
|
981
|
-
try {
|
|
982
|
-
for (const rule of Array.from(sheet.cssRules)) {
|
|
983
|
-
out += rule.cssText + '\n';
|
|
984
|
-
}
|
|
985
|
-
} catch {
|
|
986
|
-
// Ignore cross-origin sheets.
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
return out;
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
it('fades the physical left edge when only the start overflows (LTR)', () => {
|
|
993
|
-
render(
|
|
994
|
-
<Carousel aria-label="Fade">
|
|
995
|
-
<div>Item 1</div>
|
|
996
|
-
<div>Item 2</div>
|
|
997
|
-
</Carousel>,
|
|
998
|
-
);
|
|
999
|
-
const scroller = getScroller();
|
|
1000
|
-
makeOverflowing(scroller, 300);
|
|
1001
|
-
expect(getComputedStyle(scroller).maskImage).toContain(
|
|
1002
|
-
'linear-gradient(to right',
|
|
1003
|
-
);
|
|
1004
|
-
});
|
|
1005
|
-
|
|
1006
|
-
it('fades the physical right edge when only the end overflows (LTR)', () => {
|
|
1007
|
-
render(
|
|
1008
|
-
<Carousel aria-label="Fade">
|
|
1009
|
-
<div>Item 1</div>
|
|
1010
|
-
<div>Item 2</div>
|
|
1011
|
-
</Carousel>,
|
|
1012
|
-
);
|
|
1013
|
-
const scroller = getScroller();
|
|
1014
|
-
makeOverflowing(scroller, 0);
|
|
1015
|
-
expect(getComputedStyle(scroller).maskImage).toContain(
|
|
1016
|
-
'linear-gradient(to left',
|
|
1017
|
-
);
|
|
1018
|
-
});
|
|
1019
|
-
|
|
1020
|
-
it('mirrors both single-edge fade gradients under RTL', () => {
|
|
1021
|
-
render(
|
|
1022
|
-
<Carousel aria-label="Fade">
|
|
1023
|
-
<div>Item 1</div>
|
|
1024
|
-
<div>Item 2</div>
|
|
1025
|
-
</Carousel>,
|
|
1026
|
-
);
|
|
1027
|
-
const css = injectedCss();
|
|
1028
|
-
expect(css).toMatch(
|
|
1029
|
-
/:is\(\[dir="rtl"\][^)]*\)[^{]*\{\s*mask-image:\s*linear-gradient\(to left/,
|
|
1030
|
-
);
|
|
1031
|
-
expect(css).toMatch(
|
|
1032
|
-
/:is\(\[dir="rtl"\][^)]*\)[^{]*\{\s*mask-image:\s*linear-gradient\(to right/,
|
|
1033
|
-
);
|
|
1034
|
-
});
|
|
1035
|
-
});
|
|
1036
|
-
});
|