@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,867 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
import {Profiler, useState} from 'react';
|
|
4
|
-
import {describe, it, expect, beforeEach, afterEach, vi} from 'vitest';
|
|
5
|
-
import {act, render, screen, fireEvent} from '@testing-library/react';
|
|
6
|
-
import userEvent from '@testing-library/user-event';
|
|
7
|
-
import {Avatar} from './Avatar';
|
|
8
|
-
import {AvatarStatusDot} from './AvatarStatusDot';
|
|
9
|
-
import {AvatarGroup} from '../AvatarGroup';
|
|
10
|
-
|
|
11
|
-
describe('Avatar', () => {
|
|
12
|
-
it('exposes role="img" with the name as accessible name', () => {
|
|
13
|
-
render(<Avatar name="Ada Lovelace" data-testid="a" />);
|
|
14
|
-
expect(screen.getByRole('img', {name: 'Ada Lovelace'})).toBeInTheDocument();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('uses alt over name for the accessible name', () => {
|
|
18
|
-
render(<Avatar name="Ada" alt="Ada Lovelace, profile photo" />);
|
|
19
|
-
expect(
|
|
20
|
-
screen.getByRole('img', {name: 'Ada Lovelace, profile photo'}),
|
|
21
|
-
).toBeInTheDocument();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('is decorative (presentation + aria-hidden) when it has no name or alt (obs-9)', () => {
|
|
25
|
-
render(<Avatar data-testid="a" />);
|
|
26
|
-
const el = screen.getByTestId('a');
|
|
27
|
-
// No meaningful name → not announced as a generic "Avatar".
|
|
28
|
-
expect(el).toHaveAttribute('aria-hidden', 'true');
|
|
29
|
-
expect(el).not.toHaveAttribute('aria-label');
|
|
30
|
-
expect(screen.queryByRole('img')).not.toBeInTheDocument();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('does not double-announce: the inner img is decorative when the wrapper is named', () => {
|
|
34
|
-
render(<Avatar name="Ada" src="https://example.com/ada.jpg" />);
|
|
35
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
36
|
-
const innerImg = wrapper.querySelector('img');
|
|
37
|
-
expect(innerImg).not.toBeNull();
|
|
38
|
-
// The inner <img> carries an empty alt so it isn't announced separately.
|
|
39
|
-
expect(innerImg).toHaveAttribute('alt', '');
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('renders fallback initials at the proportional size via a StyleX class, not an inline property', () => {
|
|
43
|
-
render(<Avatar name="Ada Lovelace" size="sm" data-testid="a" />);
|
|
44
|
-
const initials = screen.getByText('AL');
|
|
45
|
-
// The default proportional size (sm = 24 × 0.4 = 9.6px) is fed to StyleX as
|
|
46
|
-
// a dynamic value: StyleX applies `font-size` through a class and sets only
|
|
47
|
-
// the computed value inline (as a custom property). Because the property
|
|
48
|
-
// lands via a class, a theme's `.astryx-avatar-fallback.<size>` rule in the
|
|
49
|
-
// theme layer overrides it per size tier — no internal var seam needed.
|
|
50
|
-
const style = initials.getAttribute('style') ?? '';
|
|
51
|
-
expect(style).toMatch(/9\.6\d*px/);
|
|
52
|
-
// Regression guard: the seam must NOT reintroduce the removed internal var.
|
|
53
|
-
expect(style).not.toContain('--_avatar-fallback-font-size');
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('marks the fallback surface with the stable theming class (initials and icon)', () => {
|
|
57
|
-
// The background is themed directly on `.astryx-avatar-fallback`, so both
|
|
58
|
-
// the initials and the default-icon fallback must carry the class.
|
|
59
|
-
const {rerender} = render(<Avatar name="Ada Lovelace" />);
|
|
60
|
-
expect(screen.getByText('AL').className).toContain(
|
|
61
|
-
'astryx-avatar-fallback',
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
rerender(<Avatar />);
|
|
65
|
-
const icon = document.querySelector('.astryx-avatar-fallback');
|
|
66
|
-
expect(icon).not.toBeNull();
|
|
67
|
-
expect(icon?.querySelector('svg')).not.toBeNull();
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('puts the avatar box on the element that carries the theme target', () => {
|
|
71
|
-
// T7: `.astryx-avatar` documents a `size` visual prop, so the width and
|
|
72
|
-
// height that prop selects on must live on the targeted element — a theme
|
|
73
|
-
// rule that resizes the target has to resize the whole avatar, not leave a
|
|
74
|
-
// fixed-size circle inside a grown box.
|
|
75
|
-
render(<Avatar name="Ada Lovelace" size="lg" data-testid="a" />);
|
|
76
|
-
const root = screen.getByTestId('a');
|
|
77
|
-
expect(root.className).toContain('astryx-avatar');
|
|
78
|
-
const rootStyle = root.getAttribute('style') ?? '';
|
|
79
|
-
expect(rootStyle).toContain('48px');
|
|
80
|
-
|
|
81
|
-
const content = root.firstElementChild as HTMLElement;
|
|
82
|
-
expect(content.getAttribute('style') ?? '').not.toContain('48px');
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('keeps the box on the root for an interactive avatar too', () => {
|
|
86
|
-
render(<Avatar name="Ada" size="lg" href="/ada" />);
|
|
87
|
-
const link = screen.getByRole('link', {name: 'Ada'});
|
|
88
|
-
expect(link.getAttribute('style') ?? '').toContain('48px');
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('does not split an emoji surrogate pair when generating initials', () => {
|
|
92
|
-
render(<Avatar name="😀 Ada" data-testid="avatar" />);
|
|
93
|
-
expect(screen.getByTestId('avatar')).toHaveTextContent('😀A');
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('preserves a complete character when generating initials', () => {
|
|
97
|
-
render(<Avatar name="🇬🇧 Ada" data-testid="avatar" />);
|
|
98
|
-
expect(screen.getByTestId('avatar')).toHaveTextContent('🇬🇧A');
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('keeps a ZWJ family emoji intact when generating initials', () => {
|
|
102
|
-
render(<Avatar name="👨👩👧👦 Ada" data-testid="avatar" />);
|
|
103
|
-
expect(screen.getByTestId('avatar')).toHaveTextContent('👨👩👧👦A');
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
describe('initials come from letters, digits and emoji, not punctuation', () => {
|
|
107
|
-
it.each([
|
|
108
|
-
['Northwind Workbench (automation)', 'NA'],
|
|
109
|
-
['Ada "The Countess" Lovelace', 'AL'],
|
|
110
|
-
['“Ada” Lovelace', 'AL'],
|
|
111
|
-
['Ada - Lovelace', 'AL'],
|
|
112
|
-
['Ada Lovelace —', 'AL'],
|
|
113
|
-
['Mary-Jane Watson', 'MW'],
|
|
114
|
-
['(Ada)', 'A'],
|
|
115
|
-
['Alice', 'A'],
|
|
116
|
-
['R2 D2', 'RD'],
|
|
117
|
-
['3M', '3'],
|
|
118
|
-
['émile zola', 'ÉZ'],
|
|
119
|
-
['😀 Ada', '😀A'],
|
|
120
|
-
['Ada (😀)', 'A😀'],
|
|
121
|
-
])('%s renders %s', (name, expected) => {
|
|
122
|
-
render(<Avatar name={name} data-testid="avatar" />);
|
|
123
|
-
expect(screen.getByTestId('avatar').textContent).toBe(expected);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('falls through to the default icon when no word yields an initial', () => {
|
|
127
|
-
render(<Avatar name="- ()" data-testid="a" />);
|
|
128
|
-
const el = screen.getByTestId('a');
|
|
129
|
-
expect(el.querySelector('svg')).not.toBeNull();
|
|
130
|
-
expect(el).toHaveTextContent('');
|
|
131
|
-
// The name still names the avatar.
|
|
132
|
-
expect(screen.getByRole('img', {name: '- ()'})).toBeInTheDocument();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('retries a new src after a previous src failed to load', () => {
|
|
137
|
-
const {rerender} = render(
|
|
138
|
-
<Avatar name="Ada" src="https://example.com/broken.jpg" />,
|
|
139
|
-
);
|
|
140
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
141
|
-
fireEvent.error(wrapper.querySelector('img')!);
|
|
142
|
-
// Broken image falls back to initials.
|
|
143
|
-
expect(wrapper.querySelector('img')).toBeNull();
|
|
144
|
-
expect(wrapper).toHaveTextContent('A');
|
|
145
|
-
|
|
146
|
-
// A different src must get a fresh load attempt, not the stale error.
|
|
147
|
-
rerender(<Avatar name="Ada" src="https://example.com/ada.jpg" />);
|
|
148
|
-
const img = wrapper.querySelector('img');
|
|
149
|
-
expect(img).not.toBeNull();
|
|
150
|
-
expect(img).toHaveAttribute('src', 'https://example.com/ada.jpg');
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
describe('status in the accessible name (WCAG 4.1.2)', () => {
|
|
154
|
-
// The avatar root is role="img", which prunes descendant semantics —
|
|
155
|
-
// a label inside the status subtree is never announced on its own.
|
|
156
|
-
// Avatar composes the status element's `label` into its own name.
|
|
157
|
-
it('composes the status label into the accessible name for image avatars', () => {
|
|
158
|
-
render(
|
|
159
|
-
<Avatar
|
|
160
|
-
name="Ada Lovelace"
|
|
161
|
-
src="https://example.com/ada.jpg"
|
|
162
|
-
status={<AvatarStatusDot variant="success" label="Online" />}
|
|
163
|
-
/>,
|
|
164
|
-
);
|
|
165
|
-
expect(
|
|
166
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
167
|
-
).toBeInTheDocument();
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it('composes the status label into the accessible name for initials avatars', () => {
|
|
171
|
-
render(
|
|
172
|
-
<Avatar
|
|
173
|
-
name="Ada Lovelace"
|
|
174
|
-
status={<AvatarStatusDot variant="error" label="Busy" />}
|
|
175
|
-
/>,
|
|
176
|
-
);
|
|
177
|
-
const avatar = screen.getByRole('img', {name: 'Ada Lovelace, Busy'});
|
|
178
|
-
expect(avatar).toBeInTheDocument();
|
|
179
|
-
expect(avatar).toHaveTextContent('AL');
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
it('composes the status label with alt when alt overrides name', () => {
|
|
183
|
-
render(
|
|
184
|
-
<Avatar
|
|
185
|
-
name="Ada"
|
|
186
|
-
alt="Ada Lovelace, profile photo"
|
|
187
|
-
status={<AvatarStatusDot label="Online" />}
|
|
188
|
-
/>,
|
|
189
|
-
);
|
|
190
|
-
expect(
|
|
191
|
-
screen.getByRole('img', {name: 'Ada Lovelace, profile photo, Online'}),
|
|
192
|
-
).toBeInTheDocument();
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it('keeps the plain name when there is no status', () => {
|
|
196
|
-
render(<Avatar name="Ada Lovelace" data-testid="a" />);
|
|
197
|
-
expect(screen.getByTestId('a')).toHaveAttribute(
|
|
198
|
-
'aria-label',
|
|
199
|
-
'Ada Lovelace',
|
|
200
|
-
);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('keeps the plain name when the status dot has no label', () => {
|
|
204
|
-
render(
|
|
205
|
-
<Avatar
|
|
206
|
-
name="Ada Lovelace"
|
|
207
|
-
data-testid="a"
|
|
208
|
-
status={<AvatarStatusDot variant="success" />}
|
|
209
|
-
/>,
|
|
210
|
-
);
|
|
211
|
-
expect(screen.getByTestId('a')).toHaveAttribute(
|
|
212
|
-
'aria-label',
|
|
213
|
-
'Ada Lovelace',
|
|
214
|
-
);
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it('keeps the plain name for custom status nodes without a label prop', () => {
|
|
218
|
-
render(<Avatar name="Ada Lovelace" data-testid="a" status={<span />} />);
|
|
219
|
-
expect(screen.getByTestId('a')).toHaveAttribute(
|
|
220
|
-
'aria-label',
|
|
221
|
-
'Ada Lovelace',
|
|
222
|
-
);
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it('announces a labelled status even on an otherwise decorative avatar', () => {
|
|
226
|
-
// A labelled status is meaningful information on its own — the avatar
|
|
227
|
-
// must not stay aria-hidden and swallow it.
|
|
228
|
-
render(
|
|
229
|
-
<Avatar data-testid="a" status={<AvatarStatusDot label="Online" />} />,
|
|
230
|
-
);
|
|
231
|
-
const el = screen.getByTestId('a');
|
|
232
|
-
expect(el).toHaveAttribute('role', 'img');
|
|
233
|
-
expect(el).toHaveAttribute('aria-label', 'Online');
|
|
234
|
-
expect(el).not.toHaveAttribute('aria-hidden');
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
it('stays decorative with an unlabelled status and no name', () => {
|
|
238
|
-
render(<Avatar data-testid="a" status={<AvatarStatusDot />} />);
|
|
239
|
-
const el = screen.getByTestId('a');
|
|
240
|
-
expect(el).toHaveAttribute('aria-hidden', 'true');
|
|
241
|
-
expect(el).not.toHaveAttribute('aria-label');
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
describe('status label through a consumer wrapper (P14)', () => {
|
|
246
|
-
// A consumer's own component around AvatarStatusDot. Its prop is
|
|
247
|
-
// deliberately not called `label`, so `status.props.label` introspection
|
|
248
|
-
// has nothing to read; the dot's own report through context reaches it.
|
|
249
|
-
function PresenceDot({presence = 'Online'}: {presence?: string}) {
|
|
250
|
-
return <AvatarStatusDot variant="success" label={presence} />;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
it('composes a label reported from inside a wrapper component', () => {
|
|
254
|
-
render(<Avatar name="Ada Lovelace" status={<PresenceDot />} />);
|
|
255
|
-
expect(
|
|
256
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
257
|
-
).toBeInTheDocument();
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
it('composes a label reported at any nesting depth', () => {
|
|
261
|
-
function Outer() {
|
|
262
|
-
return (
|
|
263
|
-
<span>
|
|
264
|
-
<PresenceDot presence="Away" />
|
|
265
|
-
</span>
|
|
266
|
-
);
|
|
267
|
-
}
|
|
268
|
-
render(<Avatar name="Ada Lovelace" status={<Outer />} />);
|
|
269
|
-
expect(
|
|
270
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Away'}),
|
|
271
|
-
).toBeInTheDocument();
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
it('follows a label that changes after mount', () => {
|
|
275
|
-
const {rerender} = render(
|
|
276
|
-
<Avatar
|
|
277
|
-
name="Ada Lovelace"
|
|
278
|
-
status={<PresenceDot presence="Online" />}
|
|
279
|
-
/>,
|
|
280
|
-
);
|
|
281
|
-
expect(
|
|
282
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
283
|
-
).toBeInTheDocument();
|
|
284
|
-
|
|
285
|
-
rerender(
|
|
286
|
-
<Avatar name="Ada Lovelace" status={<PresenceDot presence="Busy" />} />,
|
|
287
|
-
);
|
|
288
|
-
expect(
|
|
289
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Busy'}),
|
|
290
|
-
).toBeInTheDocument();
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
it('drops the label when the status element unmounts', () => {
|
|
294
|
-
const {rerender} = render(
|
|
295
|
-
<Avatar name="Ada Lovelace" status={<PresenceDot />} data-testid="a" />,
|
|
296
|
-
);
|
|
297
|
-
expect(
|
|
298
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
299
|
-
).toBeInTheDocument();
|
|
300
|
-
|
|
301
|
-
rerender(<Avatar name="Ada Lovelace" data-testid="a" />);
|
|
302
|
-
expect(screen.getByTestId('a')).toHaveAttribute(
|
|
303
|
-
'aria-label',
|
|
304
|
-
'Ada Lovelace',
|
|
305
|
-
);
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
it('announces a wrapped status on an otherwise decorative avatar', () => {
|
|
309
|
-
render(<Avatar data-testid="a" status={<PresenceDot />} />);
|
|
310
|
-
const el = screen.getByTestId('a');
|
|
311
|
-
expect(el).toHaveAttribute('role', 'img');
|
|
312
|
-
expect(el).toHaveAttribute('aria-label', 'Online');
|
|
313
|
-
expect(el).not.toHaveAttribute('aria-hidden');
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
it('lets a reported label win over introspection', () => {
|
|
317
|
-
// The wrapper's own `label` prop is not the string the dot renders with,
|
|
318
|
-
// so introspection and the dot's report disagree here.
|
|
319
|
-
function TranslatedDot({label}: {label: string}) {
|
|
320
|
-
return <AvatarStatusDot label={label === 'busy' ? 'Busy' : label} />;
|
|
321
|
-
}
|
|
322
|
-
render(
|
|
323
|
-
<Avatar name="Ada Lovelace" status={<TranslatedDot label="busy" />} />,
|
|
324
|
-
);
|
|
325
|
-
expect(
|
|
326
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Busy'}),
|
|
327
|
-
).toBeInTheDocument();
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
it('costs no extra render and does not loop', () => {
|
|
331
|
-
// The label arrives in the commit phase, after this render composed the
|
|
332
|
-
// name. It lands on the root element directly, so a wrapped status is
|
|
333
|
-
// named without a second render. `tooltip={false}` keeps the tooltip's
|
|
334
|
-
// own mount commit out of the count.
|
|
335
|
-
const commits: number[] = [];
|
|
336
|
-
render(
|
|
337
|
-
<Profiler id="avatar" onRender={() => commits.push(1)}>
|
|
338
|
-
<Avatar
|
|
339
|
-
name="Ada Lovelace"
|
|
340
|
-
tooltip={false}
|
|
341
|
-
status={<PresenceDot />}
|
|
342
|
-
/>
|
|
343
|
-
</Profiler>,
|
|
344
|
-
);
|
|
345
|
-
expect(
|
|
346
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
347
|
-
).toBeInTheDocument();
|
|
348
|
-
expect(commits).toHaveLength(1);
|
|
349
|
-
});
|
|
350
|
-
|
|
351
|
-
it('names a directly-passed dot on the first render, before any report', () => {
|
|
352
|
-
// Introspection answers render one; the dot's report then lands on the
|
|
353
|
-
// same name, still without a second render.
|
|
354
|
-
const commits: number[] = [];
|
|
355
|
-
render(
|
|
356
|
-
<Profiler id="avatar" onRender={() => commits.push(1)}>
|
|
357
|
-
<Avatar
|
|
358
|
-
name="Ada Lovelace"
|
|
359
|
-
tooltip={false}
|
|
360
|
-
status={<AvatarStatusDot label="Online" />}
|
|
361
|
-
/>
|
|
362
|
-
</Profiler>,
|
|
363
|
-
);
|
|
364
|
-
expect(
|
|
365
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
366
|
-
).toBeInTheDocument();
|
|
367
|
-
expect(commits).toHaveLength(1);
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
it('follows a label that changes without re-rendering the avatar', () => {
|
|
371
|
-
// State inside the consumer's wrapper: the dot re-renders alone, so the
|
|
372
|
-
// avatar never gets the chance to recompose during render.
|
|
373
|
-
let setPresence: (presence: string) => void = () => {};
|
|
374
|
-
function SelfUpdatingDot() {
|
|
375
|
-
const [presence, setter] = useState('Online');
|
|
376
|
-
setPresence = setter;
|
|
377
|
-
return <AvatarStatusDot label={presence} />;
|
|
378
|
-
}
|
|
379
|
-
render(<Avatar name="Ada Lovelace" status={<SelfUpdatingDot />} />);
|
|
380
|
-
expect(
|
|
381
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Online'}),
|
|
382
|
-
).toBeInTheDocument();
|
|
383
|
-
|
|
384
|
-
act(() => setPresence('Busy'));
|
|
385
|
-
expect(
|
|
386
|
-
screen.getByRole('img', {name: 'Ada Lovelace, Busy'}),
|
|
387
|
-
).toBeInTheDocument();
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
it('leaves a consumer aria-label alone when a wrapped status reports', () => {
|
|
391
|
-
render(
|
|
392
|
-
<Avatar
|
|
393
|
-
name="Ada Lovelace"
|
|
394
|
-
aria-label="Ada Lovelace, first programmer"
|
|
395
|
-
data-testid="a"
|
|
396
|
-
status={<PresenceDot />}
|
|
397
|
-
/>,
|
|
398
|
-
);
|
|
399
|
-
expect(screen.getByTestId('a')).toHaveAttribute(
|
|
400
|
-
'aria-label',
|
|
401
|
-
'Ada Lovelace, first programmer',
|
|
402
|
-
);
|
|
403
|
-
});
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
describe('a whitespace-only name carries no identity', () => {
|
|
407
|
-
it('falls through to the default icon instead of an empty plate', () => {
|
|
408
|
-
render(<Avatar name=" " data-testid="a" />);
|
|
409
|
-
const el = screen.getByTestId('a');
|
|
410
|
-
expect(el.querySelector('svg')).not.toBeNull();
|
|
411
|
-
expect(el).toHaveTextContent('');
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
it('is decorative rather than a role="img" with a blank name', () => {
|
|
415
|
-
render(<Avatar name=" " data-testid="a" />);
|
|
416
|
-
const el = screen.getByTestId('a');
|
|
417
|
-
expect(el).toHaveAttribute('aria-hidden', 'true');
|
|
418
|
-
expect(el).not.toHaveAttribute('aria-label');
|
|
419
|
-
});
|
|
420
|
-
|
|
421
|
-
it('keeps a meaningful alt as the accessible name and still shows the icon', () => {
|
|
422
|
-
render(<Avatar name=" " alt="Profile photo" data-testid="a" />);
|
|
423
|
-
const el = screen.getByRole('img', {name: 'Profile photo'});
|
|
424
|
-
expect(el).toBe(screen.getByTestId('a'));
|
|
425
|
-
expect(el.querySelector('svg')).not.toBeNull();
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
it('treats a whitespace-only alt the same way', () => {
|
|
429
|
-
render(<Avatar alt=" " name="Ada Lovelace" data-testid="a" />);
|
|
430
|
-
expect(
|
|
431
|
-
screen.getByRole('img', {name: 'Ada Lovelace'}),
|
|
432
|
-
).toBeInTheDocument();
|
|
433
|
-
});
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
it('retries a new fallbackSrc after a previous fallbackSrc failed to load', () => {
|
|
437
|
-
const {rerender} = render(
|
|
438
|
-
<Avatar name="Ada" fallbackSrc="https://example.com/broken.jpg" />,
|
|
439
|
-
);
|
|
440
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
441
|
-
fireEvent.error(wrapper.querySelector('img')!);
|
|
442
|
-
expect(wrapper.querySelector('img')).toBeNull();
|
|
443
|
-
|
|
444
|
-
rerender(<Avatar name="Ada" fallbackSrc="https://example.com/ada.jpg" />);
|
|
445
|
-
const img = wrapper.querySelector('img');
|
|
446
|
-
expect(img).not.toBeNull();
|
|
447
|
-
expect(img).toHaveAttribute('src', 'https://example.com/ada.jpg');
|
|
448
|
-
});
|
|
449
|
-
|
|
450
|
-
it('renders without error for all shape variants', () => {
|
|
451
|
-
const shapes = ['circle', 'rounded', 'square'] as const;
|
|
452
|
-
for (const shape of shapes) {
|
|
453
|
-
const {unmount} = render(
|
|
454
|
-
<Avatar
|
|
455
|
-
name="Ana Thomas"
|
|
456
|
-
shape={shape}
|
|
457
|
-
data-testid={`avatar-${shape}`}
|
|
458
|
-
/>,
|
|
459
|
-
);
|
|
460
|
-
expect(screen.getByTestId(`avatar-${shape}`)).toBeInTheDocument();
|
|
461
|
-
unmount();
|
|
462
|
-
}
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
it('defaults to circle shape (no shape prop)', () => {
|
|
466
|
-
render(<Avatar name="Lee" data-testid="avatar-default" />);
|
|
467
|
-
// Should still render with role="img" using the name as the accessible label.
|
|
468
|
-
expect(screen.getByRole('img', {name: 'Lee'})).toBeInTheDocument();
|
|
469
|
-
});
|
|
470
|
-
|
|
471
|
-
it('renders status dot for all shape variants', () => {
|
|
472
|
-
const shapes = ['circle', 'rounded', 'square'] as const;
|
|
473
|
-
const StatusDot = () => <span data-testid="status-dot" />;
|
|
474
|
-
for (const shape of shapes) {
|
|
475
|
-
const {unmount} = render(
|
|
476
|
-
<Avatar
|
|
477
|
-
name="Ana"
|
|
478
|
-
shape={shape}
|
|
479
|
-
status={<StatusDot />}
|
|
480
|
-
data-testid={`avatar-${shape}-status`}
|
|
481
|
-
/>,
|
|
482
|
-
);
|
|
483
|
-
expect(screen.getByTestId('status-dot')).toBeInTheDocument();
|
|
484
|
-
unmount();
|
|
485
|
-
}
|
|
486
|
-
});
|
|
487
|
-
|
|
488
|
-
it('applies shapeStyles to wrapper when rendered inside AvatarGroup', () => {
|
|
489
|
-
render(
|
|
490
|
-
<AvatarGroup>
|
|
491
|
-
<Avatar name="Alice" shape="rounded" data-testid="group-avatar" />
|
|
492
|
-
</AvatarGroup>,
|
|
493
|
-
);
|
|
494
|
-
expect(screen.getByTestId('group-avatar')).toBeInTheDocument();
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
it("an AvatarGroup's shape overrides an individual Avatar's own shape prop, matching how size already works", () => {
|
|
498
|
-
render(
|
|
499
|
-
<AvatarGroup shape="square">
|
|
500
|
-
<Avatar name="Alice" shape="rounded" data-testid="group-avatar" />
|
|
501
|
-
</AvatarGroup>,
|
|
502
|
-
);
|
|
503
|
-
expect(screen.getByTestId('group-avatar')).toHaveAttribute(
|
|
504
|
-
'data-shape',
|
|
505
|
-
'square',
|
|
506
|
-
);
|
|
507
|
-
});
|
|
508
|
-
|
|
509
|
-
it("an Avatar's own shape prop applies outside any AvatarGroup", () => {
|
|
510
|
-
render(<Avatar name="Ana" shape="rounded" data-testid="solo-avatar" />);
|
|
511
|
-
expect(screen.getByTestId('solo-avatar')).toHaveAttribute(
|
|
512
|
-
'data-shape',
|
|
513
|
-
'rounded',
|
|
514
|
-
);
|
|
515
|
-
});
|
|
516
|
-
|
|
517
|
-
it('defaults to circle shape inside an AvatarGroup with no explicit shape', () => {
|
|
518
|
-
render(
|
|
519
|
-
<AvatarGroup>
|
|
520
|
-
<Avatar name="Alice" shape="square" data-testid="group-avatar" />
|
|
521
|
-
</AvatarGroup>,
|
|
522
|
-
);
|
|
523
|
-
expect(screen.getByTestId('group-avatar')).toHaveAttribute(
|
|
524
|
-
'data-shape',
|
|
525
|
-
'circle',
|
|
526
|
-
);
|
|
527
|
-
});
|
|
528
|
-
|
|
529
|
-
// --- Name tooltip (tooltip?: string | boolean) ---
|
|
530
|
-
describe('name tooltip', () => {
|
|
531
|
-
const originalShowPopover = HTMLElement.prototype.showPopover;
|
|
532
|
-
const originalHidePopover = HTMLElement.prototype.hidePopover;
|
|
533
|
-
|
|
534
|
-
beforeEach(() => {
|
|
535
|
-
// jsdom does not implement the Popover API the tooltip layer uses.
|
|
536
|
-
HTMLElement.prototype.showPopover = vi.fn();
|
|
537
|
-
HTMLElement.prototype.hidePopover = vi.fn();
|
|
538
|
-
});
|
|
539
|
-
|
|
540
|
-
afterEach(() => {
|
|
541
|
-
HTMLElement.prototype.showPopover = originalShowPopover;
|
|
542
|
-
HTMLElement.prototype.hidePopover = originalHidePopover;
|
|
543
|
-
});
|
|
544
|
-
|
|
545
|
-
it('shows the name in a tooltip by default', () => {
|
|
546
|
-
render(<Avatar name="Ada Lovelace" />);
|
|
547
|
-
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
548
|
-
expect(tooltip).toHaveTextContent('Ada Lovelace');
|
|
549
|
-
});
|
|
550
|
-
|
|
551
|
-
it('shows a custom string tooltip instead of the name', () => {
|
|
552
|
-
render(<Avatar name="alovelace" tooltip="Ada Lovelace, Mathematician" />);
|
|
553
|
-
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
554
|
-
expect(tooltip).toHaveTextContent('Ada Lovelace, Mathematician');
|
|
555
|
-
expect(tooltip).not.toHaveTextContent('alovelace');
|
|
556
|
-
});
|
|
557
|
-
|
|
558
|
-
it('renders no tooltip when tooltip={false}', () => {
|
|
559
|
-
render(<Avatar name="Ada Lovelace" tooltip={false} />);
|
|
560
|
-
expect(screen.queryByRole('tooltip', {hidden: true})).toBeNull();
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
it('renders no tooltip for a decorative avatar (no name/alt)', () => {
|
|
564
|
-
render(<Avatar src="https://example.com/x.jpg" />);
|
|
565
|
-
expect(screen.queryByRole('tooltip', {hidden: true})).toBeNull();
|
|
566
|
-
});
|
|
567
|
-
|
|
568
|
-
it('renders no tooltip when tooltip is true/default but name is empty', () => {
|
|
569
|
-
render(<Avatar name=" " alt="Profile photo" data-testid="a" />);
|
|
570
|
-
// A whitespace-only name yields nothing to show, and the default tooltip
|
|
571
|
-
// uses `name` (not `alt`), so there is no tooltip.
|
|
572
|
-
expect(screen.queryByRole('tooltip', {hidden: true})).toBeNull();
|
|
573
|
-
// The accessible name still comes from alt, unaffected.
|
|
574
|
-
expect(
|
|
575
|
-
screen.getByRole('img', {name: 'Profile photo'}),
|
|
576
|
-
).toBeInTheDocument();
|
|
577
|
-
});
|
|
578
|
-
|
|
579
|
-
it('still shows a custom string tooltip when there is no name', () => {
|
|
580
|
-
render(<Avatar tooltip="Anonymous user" data-testid="a" />);
|
|
581
|
-
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
582
|
-
expect(tooltip).toHaveTextContent('Anonymous user');
|
|
583
|
-
});
|
|
584
|
-
|
|
585
|
-
it('makes the root focusable while a tooltip is attached', () => {
|
|
586
|
-
render(<Avatar name="Ada Lovelace" data-testid="a" />);
|
|
587
|
-
expect(screen.getByTestId('a')).toHaveAttribute('tabindex', '0');
|
|
588
|
-
});
|
|
589
|
-
|
|
590
|
-
it('does not add a tab stop when the tooltip is disabled', () => {
|
|
591
|
-
render(<Avatar name="Ada Lovelace" tooltip={false} data-testid="a" />);
|
|
592
|
-
expect(screen.getByTestId('a')).not.toHaveAttribute('tabindex');
|
|
593
|
-
});
|
|
594
|
-
|
|
595
|
-
it('keeps the accessible name on the root regardless of the tooltip', () => {
|
|
596
|
-
const {rerender} = render(<Avatar name="Ada Lovelace" />);
|
|
597
|
-
expect(
|
|
598
|
-
screen.getByRole('img', {name: 'Ada Lovelace'}),
|
|
599
|
-
).toBeInTheDocument();
|
|
600
|
-
|
|
601
|
-
rerender(<Avatar name="Ada Lovelace" tooltip={false} />);
|
|
602
|
-
expect(
|
|
603
|
-
screen.getByRole('img', {name: 'Ada Lovelace'}),
|
|
604
|
-
).toBeInTheDocument();
|
|
605
|
-
|
|
606
|
-
rerender(<Avatar name="alovelace" tooltip="Ada Lovelace, Eng" />);
|
|
607
|
-
// alt||name still drives the accessible name — not the custom tooltip.
|
|
608
|
-
expect(screen.getByRole('img', {name: 'alovelace'})).toBeInTheDocument();
|
|
609
|
-
|
|
610
|
-
rerender(<Avatar name="alovelace" alt="Ada's profile photo" />);
|
|
611
|
-
expect(
|
|
612
|
-
screen.getByRole('img', {name: "Ada's profile photo"}),
|
|
613
|
-
).toBeInTheDocument();
|
|
614
|
-
});
|
|
615
|
-
|
|
616
|
-
it('does not describe the root with the default name tooltip (no double-announce)', () => {
|
|
617
|
-
render(<Avatar name="Ada Lovelace" data-testid="a" />);
|
|
618
|
-
// The default name tooltip is visual-only: its text duplicates the root
|
|
619
|
-
// aria-label, so we deliberately do NOT wire aria-describedby (OQ-4).
|
|
620
|
-
expect(screen.getByTestId('a')).not.toHaveAttribute('aria-describedby');
|
|
621
|
-
});
|
|
622
|
-
|
|
623
|
-
it('describes the root with a custom string tooltip (matches Button)', () => {
|
|
624
|
-
render(
|
|
625
|
-
<Avatar
|
|
626
|
-
name="alovelace"
|
|
627
|
-
tooltip="Ada Lovelace, Mathematician"
|
|
628
|
-
data-testid="a"
|
|
629
|
-
/>,
|
|
630
|
-
);
|
|
631
|
-
const root = screen.getByTestId('a');
|
|
632
|
-
const describedBy = root.getAttribute('aria-describedby');
|
|
633
|
-
expect(describedBy).toBeTruthy();
|
|
634
|
-
// aria-describedby points at the rendered tooltip layer.
|
|
635
|
-
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
636
|
-
expect(tooltip.id).toBeTruthy();
|
|
637
|
-
expect(describedBy).toContain(tooltip.id);
|
|
638
|
-
});
|
|
639
|
-
|
|
640
|
-
it('composes a consumer aria-describedby with the custom tooltip description', () => {
|
|
641
|
-
render(
|
|
642
|
-
<>
|
|
643
|
-
<span id="extra-desc">extra description</span>
|
|
644
|
-
<Avatar
|
|
645
|
-
name="alovelace"
|
|
646
|
-
tooltip="Ada Lovelace, Eng"
|
|
647
|
-
aria-describedby="extra-desc"
|
|
648
|
-
data-testid="a"
|
|
649
|
-
/>
|
|
650
|
-
</>,
|
|
651
|
-
);
|
|
652
|
-
const describedBy = screen
|
|
653
|
-
.getByTestId('a')
|
|
654
|
-
.getAttribute('aria-describedby');
|
|
655
|
-
expect(describedBy).toContain('extra-desc');
|
|
656
|
-
});
|
|
657
|
-
|
|
658
|
-
it('preserves a consumer aria-describedby with the default name tooltip', () => {
|
|
659
|
-
render(
|
|
660
|
-
<>
|
|
661
|
-
<span id="extra-desc">extra description</span>
|
|
662
|
-
<Avatar
|
|
663
|
-
name="Ada Lovelace"
|
|
664
|
-
aria-describedby="extra-desc"
|
|
665
|
-
data-testid="a"
|
|
666
|
-
/>
|
|
667
|
-
</>,
|
|
668
|
-
);
|
|
669
|
-
// Default name tooltip does not touch aria-describedby, so the consumer
|
|
670
|
-
// value passes through untouched.
|
|
671
|
-
expect(screen.getByTestId('a')).toHaveAttribute(
|
|
672
|
-
'aria-describedby',
|
|
673
|
-
'extra-desc',
|
|
674
|
-
);
|
|
675
|
-
});
|
|
676
|
-
|
|
677
|
-
it('forwards the consumer ref to the root while a tooltip is attached', () => {
|
|
678
|
-
const ref = {current: null as HTMLDivElement | null};
|
|
679
|
-
render(<Avatar name="Ada Lovelace" ref={ref} data-testid="a" />);
|
|
680
|
-
expect(ref.current).toBe(screen.getByTestId('a'));
|
|
681
|
-
});
|
|
682
|
-
|
|
683
|
-
it('keeps its merged ref attached across unrelated rerenders', () => {
|
|
684
|
-
const ref = vi.fn();
|
|
685
|
-
const {rerender} = render(
|
|
686
|
-
<Avatar name="Ada Lovelace" size="sm" tooltip={false} ref={ref} />,
|
|
687
|
-
);
|
|
688
|
-
const avatar = screen.getByRole('img', {name: 'Ada Lovelace'});
|
|
689
|
-
expect(ref).toHaveBeenLastCalledWith(avatar);
|
|
690
|
-
ref.mockClear();
|
|
691
|
-
|
|
692
|
-
rerender(
|
|
693
|
-
<Avatar name="Ada Lovelace" size="lg" tooltip={false} ref={ref} />,
|
|
694
|
-
);
|
|
695
|
-
|
|
696
|
-
expect(ref).not.toHaveBeenCalled();
|
|
697
|
-
expect(screen.getByRole('img', {name: 'Ada Lovelace'})).toBe(avatar);
|
|
698
|
-
});
|
|
699
|
-
});
|
|
700
|
-
});
|
|
701
|
-
|
|
702
|
-
describe('Avatar — interactivity (Button trichotomy)', () => {
|
|
703
|
-
afterEach(() => {
|
|
704
|
-
vi.restoreAllMocks();
|
|
705
|
-
});
|
|
706
|
-
|
|
707
|
-
it('renders a link when `href` is set (default LinkComponent is <a>)', () => {
|
|
708
|
-
render(<Avatar name="Ada Lovelace" href="/users/ada" />);
|
|
709
|
-
const link = screen.getByRole('link', {name: 'Ada Lovelace'});
|
|
710
|
-
expect(link.tagName).toBe('A');
|
|
711
|
-
expect(link).toHaveAttribute('href', '/users/ada');
|
|
712
|
-
// The static img semantics are gone — it's a control now.
|
|
713
|
-
expect(screen.queryByRole('img')).not.toBeInTheDocument();
|
|
714
|
-
});
|
|
715
|
-
|
|
716
|
-
it('forwards target/rel on the link', () => {
|
|
717
|
-
render(
|
|
718
|
-
<Avatar
|
|
719
|
-
name="Ada"
|
|
720
|
-
href="https://example.com"
|
|
721
|
-
target="_blank"
|
|
722
|
-
rel="noopener noreferrer"
|
|
723
|
-
/>,
|
|
724
|
-
);
|
|
725
|
-
const link = screen.getByRole('link', {name: 'Ada'});
|
|
726
|
-
expect(link).toHaveAttribute('target', '_blank');
|
|
727
|
-
expect(link).toHaveAttribute('rel', 'noopener noreferrer');
|
|
728
|
-
});
|
|
729
|
-
|
|
730
|
-
it('renders a <button type="button"> when `onClick` is set (no href)', async () => {
|
|
731
|
-
const user = userEvent.setup();
|
|
732
|
-
const handleClick = vi.fn();
|
|
733
|
-
render(<Avatar name="Ada" onClick={handleClick} />);
|
|
734
|
-
const button = screen.getByRole('button', {name: 'Ada'});
|
|
735
|
-
expect(button.tagName).toBe('BUTTON');
|
|
736
|
-
expect(button).toHaveAttribute('type', 'button');
|
|
737
|
-
await user.click(button);
|
|
738
|
-
expect(handleClick).toHaveBeenCalledOnce();
|
|
739
|
-
});
|
|
740
|
-
|
|
741
|
-
it('href wins over onClick (link, not button)', () => {
|
|
742
|
-
render(<Avatar name="Ada" href="/ada" onClick={() => {}} />);
|
|
743
|
-
expect(screen.getByRole('link', {name: 'Ada'})).toBeInTheDocument();
|
|
744
|
-
expect(screen.queryByRole('button')).not.toBeInTheDocument();
|
|
745
|
-
});
|
|
746
|
-
|
|
747
|
-
it('stays a static element (no href, no onClick) — non-breaking default', () => {
|
|
748
|
-
render(<Avatar name="Ada" />);
|
|
749
|
-
expect(screen.getByRole('img', {name: 'Ada'})).toBeInTheDocument();
|
|
750
|
-
expect(screen.queryByRole('link')).not.toBeInTheDocument();
|
|
751
|
-
expect(screen.queryByRole('button')).not.toBeInTheDocument();
|
|
752
|
-
});
|
|
753
|
-
|
|
754
|
-
it('stamps the data-avatar-item marker on the interactive link', () => {
|
|
755
|
-
render(<Avatar name="Ada" href="/ada" />);
|
|
756
|
-
expect(screen.getByRole('link', {name: 'Ada'})).toHaveAttribute(
|
|
757
|
-
'data-avatar-item',
|
|
758
|
-
);
|
|
759
|
-
});
|
|
760
|
-
|
|
761
|
-
it('stamps the data-avatar-item marker on the interactive button', () => {
|
|
762
|
-
render(<Avatar name="Ada" onClick={() => {}} />);
|
|
763
|
-
expect(screen.getByRole('button', {name: 'Ada'})).toHaveAttribute(
|
|
764
|
-
'data-avatar-item',
|
|
765
|
-
);
|
|
766
|
-
});
|
|
767
|
-
|
|
768
|
-
it('does not stamp data-avatar-item on a static avatar', () => {
|
|
769
|
-
render(<Avatar name="Ada" data-testid="a" />);
|
|
770
|
-
expect(screen.getByTestId('a')).not.toHaveAttribute('data-avatar-item');
|
|
771
|
-
});
|
|
772
|
-
|
|
773
|
-
it('carries a focus-visible ring class on the interactive element', () => {
|
|
774
|
-
// The interactive element applies the shared focus-visible accent ring via
|
|
775
|
-
// its StyleX class. We assert the element is focusable and receives focus.
|
|
776
|
-
render(<Avatar name="Ada" onClick={() => {}} />);
|
|
777
|
-
const button = screen.getByRole('button', {name: 'Ada'});
|
|
778
|
-
button.focus();
|
|
779
|
-
expect(button).toHaveFocus();
|
|
780
|
-
// className carries the avatar theming target so themes can style it.
|
|
781
|
-
expect(button.className).toContain('astryx-avatar');
|
|
782
|
-
});
|
|
783
|
-
|
|
784
|
-
it('warns in dev when interactive without an accessible name (href)', () => {
|
|
785
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
786
|
-
render(<Avatar href="/somewhere" />);
|
|
787
|
-
expect(warn).toHaveBeenCalledWith(
|
|
788
|
-
expect.stringContaining('interactive avatar'),
|
|
789
|
-
);
|
|
790
|
-
});
|
|
791
|
-
|
|
792
|
-
it('warns in dev when interactive without an accessible name (onClick)', () => {
|
|
793
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
794
|
-
render(<Avatar onClick={() => {}} />);
|
|
795
|
-
expect(warn).toHaveBeenCalledWith(
|
|
796
|
-
expect.stringContaining('interactive avatar'),
|
|
797
|
-
);
|
|
798
|
-
});
|
|
799
|
-
|
|
800
|
-
it('does not warn when interactive with a name', () => {
|
|
801
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
802
|
-
render(<Avatar name="Ada" href="/ada" />);
|
|
803
|
-
expect(warn).not.toHaveBeenCalled();
|
|
804
|
-
});
|
|
805
|
-
|
|
806
|
-
it('does not warn for a static avatar without a name (decorative is fine)', () => {
|
|
807
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
808
|
-
render(<Avatar data-testid="a" />);
|
|
809
|
-
expect(warn).not.toHaveBeenCalled();
|
|
810
|
-
});
|
|
811
|
-
|
|
812
|
-
it('warns when the only accessible name is a status label', () => {
|
|
813
|
-
// A status is not an identity: "Online" alone is a worse control name than
|
|
814
|
-
// none, because it reads as a legitimate one.
|
|
815
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
816
|
-
render(
|
|
817
|
-
<Avatar
|
|
818
|
-
href="/somewhere"
|
|
819
|
-
src="https://example.com/ada.jpg"
|
|
820
|
-
status={<AvatarStatusDot label="Online" />}
|
|
821
|
-
/>,
|
|
822
|
-
);
|
|
823
|
-
expect(warn).toHaveBeenCalledWith(
|
|
824
|
-
expect.stringContaining('interactive avatar'),
|
|
825
|
-
);
|
|
826
|
-
});
|
|
827
|
-
|
|
828
|
-
it('warns when interactive with an empty-string name and alt', () => {
|
|
829
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
830
|
-
render(<Avatar href="/ada" name="" alt="" />);
|
|
831
|
-
expect(warn).toHaveBeenCalledWith(
|
|
832
|
-
expect.stringContaining('interactive avatar'),
|
|
833
|
-
);
|
|
834
|
-
});
|
|
835
|
-
|
|
836
|
-
it('does not warn when the consumer names the control with aria-label', () => {
|
|
837
|
-
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
838
|
-
render(<Avatar href="/ada" aria-label="Ada Lovelace" />);
|
|
839
|
-
expect(warn).not.toHaveBeenCalled();
|
|
840
|
-
});
|
|
841
|
-
});
|
|
842
|
-
|
|
843
|
-
describe('Avatar — consumer ARIA overrides win (Icon labelling pattern)', () => {
|
|
844
|
-
it('lets a consumer aria-label override the derived name on the static root', () => {
|
|
845
|
-
render(<Avatar name="Ada" aria-label="Ada Lovelace, on leave" />);
|
|
846
|
-
expect(
|
|
847
|
-
screen.getByRole('img', {name: 'Ada Lovelace, on leave'}),
|
|
848
|
-
).toBeInTheDocument();
|
|
849
|
-
});
|
|
850
|
-
|
|
851
|
-
it('lets a consumer role override the derived role', () => {
|
|
852
|
-
render(<Avatar name="Ada" role="presentation" data-testid="a" />);
|
|
853
|
-
expect(screen.getByTestId('a')).toHaveAttribute('role', 'presentation');
|
|
854
|
-
});
|
|
855
|
-
|
|
856
|
-
it('lets a consumer hide a named avatar with aria-hidden', () => {
|
|
857
|
-
render(<Avatar name="Ada" aria-hidden="true" data-testid="a" />);
|
|
858
|
-
expect(screen.getByTestId('a')).toHaveAttribute('aria-hidden', 'true');
|
|
859
|
-
});
|
|
860
|
-
|
|
861
|
-
it('lets a consumer aria-label override the derived name on an interactive root', () => {
|
|
862
|
-
render(<Avatar name="Ada" href="/ada" aria-label="Ada Lovelace profile" />);
|
|
863
|
-
expect(
|
|
864
|
-
screen.getByRole('link', {name: 'Ada Lovelace profile'}),
|
|
865
|
-
).toBeInTheDocument();
|
|
866
|
-
});
|
|
867
|
-
});
|