@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,864 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file Button.test.tsx
|
|
5
|
-
* @input Uses vitest, @testing-library/react, Button component
|
|
6
|
-
* @output Unit tests for Button component behavior
|
|
7
|
-
* @position Testing; validates Button.tsx implementation
|
|
8
|
-
*
|
|
9
|
-
* SYNC: When Button.tsx changes, update tests to match new behavior
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {readFileSync} from 'node:fs';
|
|
13
|
-
import {describe, it, expect, vi} from 'vitest';
|
|
14
|
-
import {
|
|
15
|
-
render,
|
|
16
|
-
screen,
|
|
17
|
-
fireEvent,
|
|
18
|
-
createEvent,
|
|
19
|
-
act,
|
|
20
|
-
waitFor,
|
|
21
|
-
} from '@testing-library/react';
|
|
22
|
-
import userEvent from '@testing-library/user-event';
|
|
23
|
-
import {Button} from './Button';
|
|
24
|
-
import * as stylex from '@stylexjs/stylex';
|
|
25
|
-
import {
|
|
26
|
-
hasPressedArm,
|
|
27
|
-
hasReleaseFade,
|
|
28
|
-
readsPressStrength,
|
|
29
|
-
} from '../__tests__/pressState';
|
|
30
|
-
import {Badge} from '../Badge/Badge';
|
|
31
|
-
import {ButtonGroup} from '../ButtonGroup';
|
|
32
|
-
import {InputGroup} from '../InputGroup';
|
|
33
|
-
import {TextInput} from '../TextInput';
|
|
34
|
-
import {IconButton} from '../IconButton';
|
|
35
|
-
import {InternationalizationProvider} from '../i18n';
|
|
36
|
-
|
|
37
|
-
const narrowRowProbe = stylex.create({
|
|
38
|
-
rigid: {flexShrink: 0, minWidth: 'auto'},
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
describe('Button', () => {
|
|
42
|
-
// Retained, narrowed: the shared contract proves the ROLE and the accessible
|
|
43
|
-
// NAME in a real engine (button.role.exposed, button.name.exposed), which is
|
|
44
|
-
// strictly stronger than asserting them here. What stays is the part it does
|
|
45
|
-
// not own — that Button renders `label` as text a person can read, rather
|
|
46
|
-
// than only as an accessible name.
|
|
47
|
-
it('renders label as visible text', () => {
|
|
48
|
-
render(<Button label="Click me" />);
|
|
49
|
-
expect(screen.getByRole('button')).toHaveTextContent('Click me');
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('uses InputGroup end-cap geometry and keeps its keyboard ring above adjacent members', () => {
|
|
53
|
-
const {rerender} = render(
|
|
54
|
-
<InputGroup label="Visibility">
|
|
55
|
-
<TextInput
|
|
56
|
-
label="Audience"
|
|
57
|
-
isLabelHidden
|
|
58
|
-
value="Members"
|
|
59
|
-
onChange={() => {}}
|
|
60
|
-
/>
|
|
61
|
-
<Button label="Save" />
|
|
62
|
-
</InputGroup>,
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
const addon = screen.getByRole('button', {name: 'Save'});
|
|
66
|
-
expect(addon.className).toContain('groupStyles.buttonAddon');
|
|
67
|
-
|
|
68
|
-
// jsdom cannot resolve this compound StyleX focus selector. Keep the
|
|
69
|
-
// direct-child keyboard stacking rule explicit at its definition instead.
|
|
70
|
-
const groupStylesSource = readFileSync(
|
|
71
|
-
'packages/core/src/InputGroup/groupStyles.ts',
|
|
72
|
-
'utf8',
|
|
73
|
-
);
|
|
74
|
-
expect(groupStylesSource).toContain(
|
|
75
|
-
'`${DIRECT_INPUT_GROUP_ADDON}:focus-visible`',
|
|
76
|
-
);
|
|
77
|
-
expect(groupStylesSource).toMatch(
|
|
78
|
-
/zIndex:\s*\{\s*default: null,\s*\[DIRECT_INPUT_GROUP_ADDON_FOCUS_VISIBLE\]: 2,/,
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
rerender(<Button label="Save" />);
|
|
82
|
-
const standalone = screen.getByRole('button', {name: 'Save'});
|
|
83
|
-
expect(standalone.className).not.toContain('groupStyles.buttonAddon');
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('renders children instead of label when provided', () => {
|
|
87
|
-
render(<Button label="Accessible name">Custom content</Button>);
|
|
88
|
-
const button = screen.getByRole('button');
|
|
89
|
-
expect(button).toHaveTextContent('Custom content');
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('renders with different variants', () => {
|
|
93
|
-
const {rerender} = render(<Button label="Primary" variant="primary" />);
|
|
94
|
-
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
95
|
-
|
|
96
|
-
rerender(<Button label="Secondary" variant="secondary" />);
|
|
97
|
-
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
98
|
-
|
|
99
|
-
rerender(<Button label="Ghost" variant="ghost" />);
|
|
100
|
-
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
101
|
-
|
|
102
|
-
rerender(<Button label="Destructive" variant="destructive" />);
|
|
103
|
-
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
// Retained, narrowed: the shared contract proves an icon-only button HAS an
|
|
107
|
-
// accessible name, computed by a real engine. What stays is Button's own
|
|
108
|
-
// mapping — `isIconOnly` routes `label` to `aria-label` instead of to text,
|
|
109
|
-
// and the icon is still rendered.
|
|
110
|
-
it('maps label to aria-label and keeps the icon when icon-only', () => {
|
|
111
|
-
render(
|
|
112
|
-
<Button
|
|
113
|
-
label="Settings"
|
|
114
|
-
icon={<span data-testid="icon">⚙</span>}
|
|
115
|
-
isIconOnly
|
|
116
|
-
/>,
|
|
117
|
-
);
|
|
118
|
-
const button = screen.getByRole('button');
|
|
119
|
-
expect(button).toHaveAttribute('aria-label', 'Settings');
|
|
120
|
-
expect(button).not.toHaveTextContent('Settings');
|
|
121
|
-
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it('renders icon with text when both icon and children provided', () => {
|
|
125
|
-
render(
|
|
126
|
-
<Button label="Settings" icon={<span data-testid="icon">⚙</span>} />,
|
|
127
|
-
);
|
|
128
|
-
const button = screen.getByRole('button');
|
|
129
|
-
expect(button).not.toHaveAttribute('aria-label');
|
|
130
|
-
expect(button).toHaveTextContent('Settings');
|
|
131
|
-
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('shows isLoading state with spinner', () => {
|
|
135
|
-
render(<Button label="Submit" isLoading />);
|
|
136
|
-
const button = screen.getByRole('button');
|
|
137
|
-
// Busy is aria-disabled (focusable), not native disabled — see #4871.
|
|
138
|
-
expect(button).not.toBeDisabled();
|
|
139
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
140
|
-
expect(button.className).toContain('styles.inactive');
|
|
141
|
-
expect(button.className).not.toContain('styles.disabled');
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('keeps the dimmed treatment for explicitly disabled buttons', () => {
|
|
145
|
-
render(<Button label="Submit" isDisabled />);
|
|
146
|
-
const button = screen.getByRole('button');
|
|
147
|
-
expect(button).toBeDisabled();
|
|
148
|
-
expect(button.className).toContain('styles.inactive');
|
|
149
|
-
expect(button.className).toContain('styles.disabled');
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it('keeps a caller-supplied aria-disabled and aria-busy', () => {
|
|
153
|
-
render(<Button label="Assign" aria-disabled="true" aria-busy={true} />);
|
|
154
|
-
const button = screen.getByRole('button', {name: 'Assign'});
|
|
155
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
156
|
-
expect(button).toHaveAttribute('aria-busy', 'true');
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
it('sets aria-busy synchronously while clickAction is pending', async () => {
|
|
160
|
-
// The spinner reveal is visually delayed (CSS animation-delay), but the
|
|
161
|
-
// loading DOM state — aria-busy and aria-disabled — must not be delayed.
|
|
162
|
-
const user = userEvent.setup();
|
|
163
|
-
let resolveAction: (() => void) | undefined;
|
|
164
|
-
const clickAction = vi.fn(
|
|
165
|
-
async () =>
|
|
166
|
-
new Promise<void>(resolve => {
|
|
167
|
-
resolveAction = resolve;
|
|
168
|
-
}),
|
|
169
|
-
);
|
|
170
|
-
render(<Button label="Save" clickAction={clickAction} />);
|
|
171
|
-
const button = screen.getByRole('button');
|
|
172
|
-
|
|
173
|
-
await user.click(button);
|
|
174
|
-
expect(button).toHaveAttribute('aria-busy', 'true');
|
|
175
|
-
// Busy is aria-disabled (focusable), not native disabled — see #4871.
|
|
176
|
-
expect(button).not.toBeDisabled();
|
|
177
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
178
|
-
|
|
179
|
-
await act(async () => {
|
|
180
|
-
resolveAction?.();
|
|
181
|
-
await Promise.resolve();
|
|
182
|
-
});
|
|
183
|
-
expect(button).not.toHaveAttribute('aria-busy', 'true');
|
|
184
|
-
expect(button).not.toBeDisabled();
|
|
185
|
-
expect(button).not.toHaveAttribute('aria-disabled');
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('renders the loading spinner with the inherit shade for every variant (#2717)', () => {
|
|
189
|
-
// The spinner must follow the button's resolved foreground color rather
|
|
190
|
-
// than a hardcoded white, so it keeps contrast on themed variants like the
|
|
191
|
-
// neutral theme's muted-red destructive button.
|
|
192
|
-
for (const variant of [
|
|
193
|
-
'primary',
|
|
194
|
-
'secondary',
|
|
195
|
-
'ghost',
|
|
196
|
-
'destructive',
|
|
197
|
-
] as const) {
|
|
198
|
-
const {container, unmount} = render(
|
|
199
|
-
<Button label="Submit" variant={variant} isLoading />,
|
|
200
|
-
);
|
|
201
|
-
const spinner = container.querySelector('.astryx-spinner');
|
|
202
|
-
expect(spinner).not.toBeNull();
|
|
203
|
-
expect(spinner).toHaveAttribute('data-shade', 'inherit');
|
|
204
|
-
unmount();
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
it('handles click events', async () => {
|
|
209
|
-
const user = userEvent.setup();
|
|
210
|
-
const handleClick = vi.fn();
|
|
211
|
-
render(<Button label="Click me" onClick={handleClick} />);
|
|
212
|
-
|
|
213
|
-
await user.click(screen.getByRole('button'));
|
|
214
|
-
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it('does not fire click when disabled', async () => {
|
|
218
|
-
const user = userEvent.setup();
|
|
219
|
-
const handleClick = vi.fn();
|
|
220
|
-
render(<Button label="Click me" isDisabled onClick={handleClick} />);
|
|
221
|
-
|
|
222
|
-
await user.click(screen.getByRole('button'));
|
|
223
|
-
expect(handleClick).not.toHaveBeenCalled();
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
it('does not fire click when loading', async () => {
|
|
227
|
-
const user = userEvent.setup();
|
|
228
|
-
const handleClick = vi.fn();
|
|
229
|
-
render(<Button label="Click me" isLoading onClick={handleClick} />);
|
|
230
|
-
|
|
231
|
-
await user.click(screen.getByRole('button'));
|
|
232
|
-
expect(handleClick).not.toHaveBeenCalled();
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it('forwards ref correctly', () => {
|
|
236
|
-
const ref = vi.fn();
|
|
237
|
-
render(<Button label="Test" ref={ref} />);
|
|
238
|
-
expect(ref).toHaveBeenCalledWith(expect.any(HTMLButtonElement));
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
it('keeps its merged ref attached across unrelated rerenders', () => {
|
|
242
|
-
const ref = vi.fn();
|
|
243
|
-
const {rerender} = render(<Button label="Test" ref={ref} />);
|
|
244
|
-
const button = screen.getByRole('button');
|
|
245
|
-
expect(ref).toHaveBeenLastCalledWith(button);
|
|
246
|
-
ref.mockClear();
|
|
247
|
-
|
|
248
|
-
rerender(<Button label="Test" variant="primary" ref={ref} />);
|
|
249
|
-
|
|
250
|
-
expect(ref).not.toHaveBeenCalled();
|
|
251
|
-
expect(screen.getByRole('button')).toBe(button);
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
// endContent tests
|
|
255
|
-
it('renders endContent after label', () => {
|
|
256
|
-
render(
|
|
257
|
-
<Button
|
|
258
|
-
label="Click me"
|
|
259
|
-
endContent={<Badge data-testid="end" label={3} />}
|
|
260
|
-
/>,
|
|
261
|
-
);
|
|
262
|
-
const button = screen.getByRole('button');
|
|
263
|
-
expect(button).toHaveTextContent('Click me');
|
|
264
|
-
expect(screen.getByTestId('end')).toBeInTheDocument();
|
|
265
|
-
expect(screen.getByTestId('end')).toHaveTextContent('3');
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it('renders endContent with children', () => {
|
|
269
|
-
render(
|
|
270
|
-
<Button
|
|
271
|
-
label="Accessible name"
|
|
272
|
-
endContent={<Badge data-testid="end" label="New" />}>
|
|
273
|
-
Custom content
|
|
274
|
-
</Button>,
|
|
275
|
-
);
|
|
276
|
-
const button = screen.getByRole('button');
|
|
277
|
-
expect(button).toHaveTextContent('Custom content');
|
|
278
|
-
expect(screen.getByTestId('end')).toBeInTheDocument();
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
it('renders endContent with icon and children', () => {
|
|
282
|
-
render(
|
|
283
|
-
<Button
|
|
284
|
-
label="Settings"
|
|
285
|
-
icon={<span data-testid="icon">⚙</span>}
|
|
286
|
-
endContent={<Badge data-testid="end" label="New" />}
|
|
287
|
-
/>,
|
|
288
|
-
);
|
|
289
|
-
const button = screen.getByRole('button');
|
|
290
|
-
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
291
|
-
expect(button).toHaveTextContent('Settings');
|
|
292
|
-
expect(screen.getByTestId('end')).toBeInTheDocument();
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it('does not render endContent for icon-only buttons', () => {
|
|
296
|
-
render(
|
|
297
|
-
<Button
|
|
298
|
-
label="Settings"
|
|
299
|
-
icon={<span data-testid="icon">⚙</span>}
|
|
300
|
-
endContent={<Badge data-testid="end" label={3} />}
|
|
301
|
-
isIconOnly
|
|
302
|
-
/>,
|
|
303
|
-
);
|
|
304
|
-
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
305
|
-
expect(screen.queryByTestId('end')).not.toBeInTheDocument();
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
it('wraps endContent in a container for color inheritance', () => {
|
|
309
|
-
render(
|
|
310
|
-
<Button
|
|
311
|
-
label="Test"
|
|
312
|
-
endContent={<Badge data-testid="end" label={3} />}
|
|
313
|
-
/>,
|
|
314
|
-
);
|
|
315
|
-
const badge = screen.getByTestId('end');
|
|
316
|
-
// The badge should be inside a wrapper span that inherits color
|
|
317
|
-
const wrapper = badge.parentElement;
|
|
318
|
-
expect(wrapper?.tagName).toBe('SPAN');
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
it('hides endContent content when loading', () => {
|
|
322
|
-
render(
|
|
323
|
-
<Button
|
|
324
|
-
label="Submit"
|
|
325
|
-
isLoading
|
|
326
|
-
endContent={<Badge data-testid="end" label={3} />}
|
|
327
|
-
/>,
|
|
328
|
-
);
|
|
329
|
-
// endContent should still be in the DOM
|
|
330
|
-
expect(screen.getByTestId('end')).toBeInTheDocument();
|
|
331
|
-
// Busy is aria-disabled (focusable), not native disabled — see #4871.
|
|
332
|
-
const button = screen.getByRole('button');
|
|
333
|
-
expect(button).not.toBeDisabled();
|
|
334
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
335
|
-
expect(button).toHaveAttribute('aria-busy', 'true');
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
it('renders astryx-* classes and data attributes for theme targeting', () => {
|
|
339
|
-
render(<Button label="Test" variant="secondary" size="sm" />);
|
|
340
|
-
const button = screen.getByRole('button');
|
|
341
|
-
expect(button.className).toContain('astryx-button');
|
|
342
|
-
expect(button).toHaveAttribute('data-variant', 'secondary');
|
|
343
|
-
expect(button).toHaveAttribute('data-size', 'sm');
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
it('applies string width as-is', () => {
|
|
347
|
-
render(<Button label="Sign in" width="100%" />);
|
|
348
|
-
const button = screen.getByRole('button');
|
|
349
|
-
// StyleX compiles the dynamic width to an inline CSS custom property.
|
|
350
|
-
expect(button.getAttribute('style')).toContain('100%');
|
|
351
|
-
expect(button.className).toContain('dynamicStyles.width');
|
|
352
|
-
});
|
|
353
|
-
|
|
354
|
-
it('applies numeric width as pixels', () => {
|
|
355
|
-
render(<Button label="Sign in" width={240} />);
|
|
356
|
-
expect(screen.getByRole('button').getAttribute('style')).toContain('240');
|
|
357
|
-
});
|
|
358
|
-
|
|
359
|
-
it('omits width styling when the prop is not provided', () => {
|
|
360
|
-
render(<Button label="Sign in" />);
|
|
361
|
-
expect(screen.getByRole('button').className).not.toContain(
|
|
362
|
-
'dynamicStyles.width',
|
|
363
|
-
);
|
|
364
|
-
});
|
|
365
|
-
|
|
366
|
-
it('applies width when rendered as a link via href', () => {
|
|
367
|
-
render(<Button label="Sign in" href="https://example.com" width="100%" />);
|
|
368
|
-
expect(
|
|
369
|
-
screen.getByRole('link', {name: 'Sign in'}).getAttribute('style'),
|
|
370
|
-
).toContain('100%');
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
// P0: onClick fires before clickAction, clickAction respects preventDefault
|
|
374
|
-
it('fires onClick before clickAction', async () => {
|
|
375
|
-
const user = userEvent.setup();
|
|
376
|
-
const order: string[] = [];
|
|
377
|
-
const handleClick = vi.fn(() => {
|
|
378
|
-
order.push('onClick');
|
|
379
|
-
});
|
|
380
|
-
const handleAction = vi.fn(() => {
|
|
381
|
-
order.push('clickAction');
|
|
382
|
-
});
|
|
383
|
-
render(
|
|
384
|
-
<Button label="Test" onClick={handleClick} clickAction={handleAction} />,
|
|
385
|
-
);
|
|
386
|
-
|
|
387
|
-
await user.click(screen.getByRole('button'));
|
|
388
|
-
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
389
|
-
expect(handleAction).toHaveBeenCalledTimes(1);
|
|
390
|
-
expect(order).toEqual(['onClick', 'clickAction']);
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
it('does not call clickAction when onClick calls preventDefault', async () => {
|
|
394
|
-
const user = userEvent.setup();
|
|
395
|
-
const handleClick = vi.fn((e: React.MouseEvent) => e.preventDefault());
|
|
396
|
-
const handleAction = vi.fn();
|
|
397
|
-
render(
|
|
398
|
-
<Button label="Test" onClick={handleClick} clickAction={handleAction} />,
|
|
399
|
-
);
|
|
400
|
-
|
|
401
|
-
await user.click(screen.getByRole('button'));
|
|
402
|
-
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
403
|
-
expect(handleAction).not.toHaveBeenCalled();
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
it('fires clickAction once on a fast double-click (no double-submit)', async () => {
|
|
407
|
-
let resolveAction: (() => void) | undefined;
|
|
408
|
-
const handleAction = vi.fn(
|
|
409
|
-
async () =>
|
|
410
|
-
new Promise<void>(resolve => {
|
|
411
|
-
resolveAction = resolve;
|
|
412
|
-
}),
|
|
413
|
-
);
|
|
414
|
-
render(<Button label="Pay" clickAction={handleAction} />);
|
|
415
|
-
|
|
416
|
-
const button = screen.getByRole('button');
|
|
417
|
-
await act(async () => {
|
|
418
|
-
fireEvent.click(button);
|
|
419
|
-
fireEvent.click(button);
|
|
420
|
-
});
|
|
421
|
-
expect(handleAction).toHaveBeenCalledTimes(1);
|
|
422
|
-
|
|
423
|
-
await act(async () => {
|
|
424
|
-
resolveAction?.();
|
|
425
|
-
await Promise.resolve();
|
|
426
|
-
});
|
|
427
|
-
});
|
|
428
|
-
|
|
429
|
-
it('stays clickable (not disabled) while a clickAction is pending when isInterruptible', async () => {
|
|
430
|
-
const user = userEvent.setup();
|
|
431
|
-
let resolveAction: (() => void) | undefined;
|
|
432
|
-
const clickAction = vi.fn(
|
|
433
|
-
async () =>
|
|
434
|
-
new Promise<void>(resolve => {
|
|
435
|
-
resolveAction = resolve;
|
|
436
|
-
}),
|
|
437
|
-
);
|
|
438
|
-
render(<Button label="Toggle" isInterruptible clickAction={clickAction} />);
|
|
439
|
-
const button = screen.getByRole('button');
|
|
440
|
-
|
|
441
|
-
await user.click(button);
|
|
442
|
-
// Loading is announced via aria-busy, but the button is not disabled so it
|
|
443
|
-
// can be re-clicked to interrupt the in-flight action.
|
|
444
|
-
expect(button).toHaveAttribute('aria-busy', 'true');
|
|
445
|
-
expect(button).not.toBeDisabled();
|
|
446
|
-
|
|
447
|
-
await act(async () => {
|
|
448
|
-
resolveAction?.();
|
|
449
|
-
await Promise.resolve();
|
|
450
|
-
});
|
|
451
|
-
expect(button).not.toHaveAttribute('aria-busy', 'true');
|
|
452
|
-
expect(button).not.toBeDisabled();
|
|
453
|
-
});
|
|
454
|
-
|
|
455
|
-
it('re-fires clickAction on re-click while pending when isInterruptible (no dedupe)', async () => {
|
|
456
|
-
// Unlike the fire-once default, an interruptible action is not deduped: a
|
|
457
|
-
// re-click while pending starts a fresh action that interrupts the prior.
|
|
458
|
-
const resolvers: (() => void)[] = [];
|
|
459
|
-
const clickAction = vi.fn(
|
|
460
|
-
async () =>
|
|
461
|
-
new Promise<void>(resolve => {
|
|
462
|
-
resolvers.push(resolve);
|
|
463
|
-
}),
|
|
464
|
-
);
|
|
465
|
-
render(<Button label="Toggle" isInterruptible clickAction={clickAction} />);
|
|
466
|
-
|
|
467
|
-
const button = screen.getByRole('button');
|
|
468
|
-
await act(async () => {
|
|
469
|
-
fireEvent.click(button);
|
|
470
|
-
});
|
|
471
|
-
await act(async () => {
|
|
472
|
-
fireEvent.click(button);
|
|
473
|
-
});
|
|
474
|
-
expect(clickAction).toHaveBeenCalledTimes(2);
|
|
475
|
-
|
|
476
|
-
await act(async () => {
|
|
477
|
-
resolvers.forEach(resolve => resolve());
|
|
478
|
-
await Promise.resolve();
|
|
479
|
-
});
|
|
480
|
-
});
|
|
481
|
-
|
|
482
|
-
// type/name/value/form props
|
|
483
|
-
it('defaults type to button', () => {
|
|
484
|
-
render(<Button label="Test" />);
|
|
485
|
-
expect(screen.getByRole('button')).toHaveAttribute('type', 'button');
|
|
486
|
-
});
|
|
487
|
-
|
|
488
|
-
it('passes type=submit', () => {
|
|
489
|
-
render(<Button label="Submit" type="submit" />);
|
|
490
|
-
expect(screen.getByRole('button')).toHaveAttribute('type', 'submit');
|
|
491
|
-
});
|
|
492
|
-
|
|
493
|
-
it('uses aria-disabled instead of disabled when tooltip is present and button is disabled', () => {
|
|
494
|
-
render(<Button label="Test" tooltip="Reason disabled" isDisabled />);
|
|
495
|
-
const button = screen.getByRole('button');
|
|
496
|
-
// Should NOT have native disabled (so it stays focusable for tooltip)
|
|
497
|
-
expect(button).not.toHaveAttribute('disabled');
|
|
498
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
499
|
-
});
|
|
500
|
-
|
|
501
|
-
it('does not fire handlers when aria-disabled via tooltip', async () => {
|
|
502
|
-
const user = userEvent.setup();
|
|
503
|
-
const handleClick = vi.fn();
|
|
504
|
-
render(
|
|
505
|
-
<Button
|
|
506
|
-
label="Test"
|
|
507
|
-
tooltip="Reason disabled"
|
|
508
|
-
isDisabled
|
|
509
|
-
onClick={handleClick}
|
|
510
|
-
/>,
|
|
511
|
-
);
|
|
512
|
-
await user.click(screen.getByRole('button'));
|
|
513
|
-
expect(handleClick).not.toHaveBeenCalled();
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
it('suppresses activation keys but passes other keys when aria-disabled via tooltip', async () => {
|
|
517
|
-
const user = userEvent.setup();
|
|
518
|
-
const handleKeyDown = vi.fn();
|
|
519
|
-
render(
|
|
520
|
-
<Button
|
|
521
|
-
label="Test"
|
|
522
|
-
tooltip="Reason disabled"
|
|
523
|
-
isDisabled
|
|
524
|
-
onKeyDown={handleKeyDown}
|
|
525
|
-
/>,
|
|
526
|
-
);
|
|
527
|
-
const button = screen.getByRole('button');
|
|
528
|
-
button.focus();
|
|
529
|
-
await user.keyboard('{Enter}');
|
|
530
|
-
// Activation keys (Enter) should be suppressed
|
|
531
|
-
expect(handleKeyDown).not.toHaveBeenCalled();
|
|
532
|
-
|
|
533
|
-
// Non-activation keys (Escape) should reach consumer handler
|
|
534
|
-
await user.keyboard('{Escape}');
|
|
535
|
-
expect(handleKeyDown).toHaveBeenCalledTimes(1);
|
|
536
|
-
});
|
|
537
|
-
|
|
538
|
-
it('uses aria-disabled instead of disabled while isLoading, so the button stays focusable (#4871)', () => {
|
|
539
|
-
render(<Button label="Save" isLoading />);
|
|
540
|
-
const button = screen.getByRole('button');
|
|
541
|
-
// Native disabled would move focus to <body> the moment the action
|
|
542
|
-
// starts, losing the keyboard user's place — busy must stay
|
|
543
|
-
// aria-disabled + focusable per the "Disabled vs Busy" convention.
|
|
544
|
-
expect(button).not.toHaveAttribute('disabled');
|
|
545
|
-
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
546
|
-
expect(button).toHaveAttribute('aria-busy', 'true');
|
|
547
|
-
button.focus();
|
|
548
|
-
expect(button).toHaveFocus();
|
|
549
|
-
});
|
|
550
|
-
|
|
551
|
-
it('does not fire onClick while aria-disabled via isLoading', async () => {
|
|
552
|
-
const user = userEvent.setup();
|
|
553
|
-
const handleClick = vi.fn();
|
|
554
|
-
render(<Button label="Save" isLoading onClick={handleClick} />);
|
|
555
|
-
await user.click(screen.getByRole('button'));
|
|
556
|
-
expect(handleClick).not.toHaveBeenCalled();
|
|
557
|
-
});
|
|
558
|
-
|
|
559
|
-
it('does not let a click on a busy button reach a wrapping ancestor handler', async () => {
|
|
560
|
-
// A native `disabled` element never dispatches a click, so it never
|
|
561
|
-
// reaches an ancestor either. aria-disabled (busy-only) is a real,
|
|
562
|
-
// interactive element that still dispatches one — preventDefault alone
|
|
563
|
-
// only cancels the button's own default action, not propagation, so
|
|
564
|
-
// an unrelated wrapper (a clickable row/card/backdrop) would otherwise
|
|
565
|
-
// still fire.
|
|
566
|
-
const user = userEvent.setup();
|
|
567
|
-
const ancestorClick = vi.fn();
|
|
568
|
-
render(
|
|
569
|
-
<div onClick={ancestorClick}>
|
|
570
|
-
<Button label="Save" isLoading />
|
|
571
|
-
</div>,
|
|
572
|
-
);
|
|
573
|
-
await user.click(screen.getByRole('button'));
|
|
574
|
-
expect(ancestorClick).not.toHaveBeenCalled();
|
|
575
|
-
});
|
|
576
|
-
|
|
577
|
-
it('does not let a click on a busy-only anchor Button reach a wrapping ancestor handler', async () => {
|
|
578
|
-
const user = userEvent.setup();
|
|
579
|
-
const ancestorClick = vi.fn();
|
|
580
|
-
render(
|
|
581
|
-
<div onClick={ancestorClick}>
|
|
582
|
-
<Button label="Docs" href="https://example.com" isLoading />
|
|
583
|
-
</div>,
|
|
584
|
-
);
|
|
585
|
-
await user.click(screen.getByRole('link'));
|
|
586
|
-
expect(ancestorClick).not.toHaveBeenCalled();
|
|
587
|
-
});
|
|
588
|
-
|
|
589
|
-
it('suppresses activation keys but passes other keys while aria-disabled via isLoading', async () => {
|
|
590
|
-
const user = userEvent.setup();
|
|
591
|
-
const handleKeyDown = vi.fn();
|
|
592
|
-
render(<Button label="Save" isLoading onKeyDown={handleKeyDown} />);
|
|
593
|
-
const button = screen.getByRole('button');
|
|
594
|
-
button.focus();
|
|
595
|
-
await user.keyboard('{Enter}');
|
|
596
|
-
expect(handleKeyDown).not.toHaveBeenCalled();
|
|
597
|
-
|
|
598
|
-
await user.keyboard('{Escape}');
|
|
599
|
-
expect(handleKeyDown).toHaveBeenCalledTimes(1);
|
|
600
|
-
});
|
|
601
|
-
|
|
602
|
-
it('suppresses activation keys but passes other keys on a busy-only anchor Button', async () => {
|
|
603
|
-
// The button-rendered path suppresses Enter/Space while aria-disabled;
|
|
604
|
-
// the anchor-rendered path (href set, busy-only) shares the same
|
|
605
|
-
// handleKeyDown but only wires onClick, so a consumer onKeyDown still
|
|
606
|
-
// received Enter/Space on a busy link.
|
|
607
|
-
const user = userEvent.setup();
|
|
608
|
-
const handleKeyDown = vi.fn();
|
|
609
|
-
render(
|
|
610
|
-
<Button
|
|
611
|
-
label="Docs"
|
|
612
|
-
href="https://example.com"
|
|
613
|
-
isLoading
|
|
614
|
-
onKeyDown={handleKeyDown}
|
|
615
|
-
/>,
|
|
616
|
-
);
|
|
617
|
-
const link = screen.getByRole('link');
|
|
618
|
-
link.focus();
|
|
619
|
-
await user.keyboard('{Enter}');
|
|
620
|
-
expect(handleKeyDown).not.toHaveBeenCalled();
|
|
621
|
-
|
|
622
|
-
await user.keyboard('{Escape}');
|
|
623
|
-
expect(handleKeyDown).toHaveBeenCalledTimes(1);
|
|
624
|
-
});
|
|
625
|
-
|
|
626
|
-
it('keeps native disabled (not aria-disabled) when isDisabled and not busy, even without a tooltip', () => {
|
|
627
|
-
render(<Button label="Save" isDisabled />);
|
|
628
|
-
const button = screen.getByRole('button');
|
|
629
|
-
expect(button).toHaveAttribute('disabled');
|
|
630
|
-
expect(button).not.toHaveAttribute('aria-disabled');
|
|
631
|
-
});
|
|
632
|
-
|
|
633
|
-
it('keeps native disabled when isDisabled and isLoading are both true (isDisabled wins)', () => {
|
|
634
|
-
render(<Button label="Save" isDisabled isLoading />);
|
|
635
|
-
const button = screen.getByRole('button');
|
|
636
|
-
// "isDisabled behavior unchanged: that stays native disabled" — busy-only
|
|
637
|
-
// aria-disabled is only for the case where busy is the SOLE reason the
|
|
638
|
-
// button can't be clicked, not when it's also genuinely isDisabled.
|
|
639
|
-
expect(button).toHaveAttribute('disabled');
|
|
640
|
-
expect(button).not.toHaveAttribute('aria-disabled');
|
|
641
|
-
});
|
|
642
|
-
|
|
643
|
-
it('has a live region that announces loading state', () => {
|
|
644
|
-
const {rerender} = render(<Button label="Submit" />);
|
|
645
|
-
const button = screen.getByRole('button');
|
|
646
|
-
const liveRegion = button.querySelector('[role="status"]');
|
|
647
|
-
expect(liveRegion).toBeInTheDocument();
|
|
648
|
-
expect(liveRegion).toHaveTextContent('');
|
|
649
|
-
|
|
650
|
-
rerender(<Button label="Submit" isLoading />);
|
|
651
|
-
expect(liveRegion).toHaveTextContent('Loading');
|
|
652
|
-
});
|
|
653
|
-
|
|
654
|
-
it('mounts the loading live region empty when first rendered loading, then fills it (spec:AST-086 FR3)', async () => {
|
|
655
|
-
render(<Button label="Submit" isLoading />);
|
|
656
|
-
const button = screen.getByRole('button');
|
|
657
|
-
// The Spinner also has role="status", so grab the live region explicitly.
|
|
658
|
-
const regions = button.querySelectorAll('[role="status"]');
|
|
659
|
-
const liveRegion = regions[regions.length - 1];
|
|
660
|
-
expect(liveRegion).toHaveTextContent('');
|
|
661
|
-
await waitFor(() => expect(liveRegion).toHaveTextContent('Loading'));
|
|
662
|
-
});
|
|
663
|
-
|
|
664
|
-
it('localizes the loading announcement through the i18n catalog', async () => {
|
|
665
|
-
render(
|
|
666
|
-
<InternationalizationProvider
|
|
667
|
-
locale="fr"
|
|
668
|
-
overrides={{fr: {'@astryx.button.loading': 'Chargement'}}}>
|
|
669
|
-
<Button label="Submit" isLoading />
|
|
670
|
-
</InternationalizationProvider>,
|
|
671
|
-
);
|
|
672
|
-
const button = screen.getByRole('button');
|
|
673
|
-
// The Spinner also has role="status", so grab the live region explicitly.
|
|
674
|
-
const regions = button.querySelectorAll('[role="status"]');
|
|
675
|
-
const liveRegion = regions[regions.length - 1];
|
|
676
|
-
await waitFor(() => expect(liveRegion).toHaveTextContent('Chargement'));
|
|
677
|
-
});
|
|
678
|
-
|
|
679
|
-
describe('in a narrow row', () => {
|
|
680
|
-
// jsdom has no layout, so these assert the computed declarations that
|
|
681
|
-
// produce the behavior. The real-browser widths are in the PR evidence.
|
|
682
|
-
it('lets a labelled button shrink so its label truncates', () => {
|
|
683
|
-
render(<Button label="A very long button label that should truncate" />);
|
|
684
|
-
const style = getComputedStyle(screen.getByRole('button'));
|
|
685
|
-
expect(style.minWidth).toBe('0');
|
|
686
|
-
expect(style.maxWidth).toBe('100%');
|
|
687
|
-
const label = screen.getByText(
|
|
688
|
-
'A very long button label that should truncate',
|
|
689
|
-
);
|
|
690
|
-
expect(getComputedStyle(label).textOverflow).toBe('ellipsis');
|
|
691
|
-
expect(getComputedStyle(label).overflow).toBe('hidden');
|
|
692
|
-
});
|
|
693
|
-
|
|
694
|
-
it('keeps the default flex-shrink so a row can shrink the button', () => {
|
|
695
|
-
render(<Button label="Save" icon={<span>+</span>} />);
|
|
696
|
-
const style = getComputedStyle(screen.getByRole('button'));
|
|
697
|
-
// No opt-out: a labelled button (with or without an icon) shrinks.
|
|
698
|
-
expect(style.flexShrink).not.toBe('0');
|
|
699
|
-
});
|
|
700
|
-
|
|
701
|
-
it('keeps an icon-only button square instead of shrinking it', () => {
|
|
702
|
-
render(<Button label="Settings" icon={<span>⚙</span>} isIconOnly />);
|
|
703
|
-
const style = getComputedStyle(screen.getByRole('button'));
|
|
704
|
-
expect(style.flexShrink).toBe('0');
|
|
705
|
-
expect(style.maxWidth).toBe('none');
|
|
706
|
-
expect(style.aspectRatio).toBe('var(--button-icon-only-aspect)');
|
|
707
|
-
});
|
|
708
|
-
|
|
709
|
-
it('keeps IconButton square too, since it renders the icon-only mode', () => {
|
|
710
|
-
render(<IconButton label="More actions" icon={<span>⋯</span>} />);
|
|
711
|
-
const style = getComputedStyle(
|
|
712
|
-
screen.getByRole('button', {name: 'More actions'}),
|
|
713
|
-
);
|
|
714
|
-
expect(style.flexShrink).toBe('0');
|
|
715
|
-
expect(style.maxWidth).toBe('none');
|
|
716
|
-
});
|
|
717
|
-
|
|
718
|
-
it('caps an explicit width at the container instead of dropping it', () => {
|
|
719
|
-
render(<Button label="Sign in" width={240} />);
|
|
720
|
-
const button = screen.getByRole('button');
|
|
721
|
-
expect(button.getAttribute('style')).toContain('240');
|
|
722
|
-
expect(getComputedStyle(button).maxWidth).toBe('100%');
|
|
723
|
-
});
|
|
724
|
-
|
|
725
|
-
it('applies the same cap in link mode', () => {
|
|
726
|
-
render(<Button label="Read the full release notes" href="#notes" />);
|
|
727
|
-
const style = getComputedStyle(
|
|
728
|
-
screen.getByRole('link', {name: 'Read the full release notes'}),
|
|
729
|
-
);
|
|
730
|
-
expect(style.minWidth).toBe('0');
|
|
731
|
-
expect(style.maxWidth).toBe('100%');
|
|
732
|
-
});
|
|
733
|
-
|
|
734
|
-
it('shrinks inside a ButtonGroup like a standalone button', () => {
|
|
735
|
-
render(
|
|
736
|
-
<ButtonGroup label="Draft actions">
|
|
737
|
-
<Button label="Save changes to draft" />
|
|
738
|
-
<Button label="Discard" />
|
|
739
|
-
</ButtonGroup>,
|
|
740
|
-
);
|
|
741
|
-
const style = getComputedStyle(
|
|
742
|
-
screen.getByRole('button', {name: 'Save changes to draft'}),
|
|
743
|
-
);
|
|
744
|
-
expect(style.minWidth).toBe('0');
|
|
745
|
-
expect(style.maxWidth).toBe('100%');
|
|
746
|
-
});
|
|
747
|
-
|
|
748
|
-
it('lets xstyle restore a rigid button', () => {
|
|
749
|
-
render(<Button label="Cancel" xstyle={narrowRowProbe.rigid} />);
|
|
750
|
-
const style = getComputedStyle(screen.getByRole('button'));
|
|
751
|
-
expect(style.flexShrink).toBe('0');
|
|
752
|
-
expect(style.minWidth).toBe('auto');
|
|
753
|
-
});
|
|
754
|
-
});
|
|
755
|
-
|
|
756
|
-
describe('elevation', () => {
|
|
757
|
-
it('reflects each elevation level as a theme attribute', () => {
|
|
758
|
-
const attrFor = (elevation: 'none' | 'low' | 'med' | 'high') => {
|
|
759
|
-
const {container} = render(
|
|
760
|
-
<Button label="Save" elevation={elevation} />,
|
|
761
|
-
);
|
|
762
|
-
return container
|
|
763
|
-
.querySelector('button')!
|
|
764
|
-
.getAttribute('data-elevation');
|
|
765
|
-
};
|
|
766
|
-
expect(attrFor('none')).toBe('none');
|
|
767
|
-
expect(attrFor('low')).toBe('low');
|
|
768
|
-
expect(attrFor('med')).toBe('med');
|
|
769
|
-
expect(attrFor('high')).toBe('high');
|
|
770
|
-
});
|
|
771
|
-
|
|
772
|
-
it('renders a distinct class for each elevation level', () => {
|
|
773
|
-
const classFor = (elevation: 'none' | 'low' | 'med' | 'high') => {
|
|
774
|
-
const {container} = render(
|
|
775
|
-
<Button label="Save" elevation={elevation} />,
|
|
776
|
-
);
|
|
777
|
-
return container.querySelector('button')!.className;
|
|
778
|
-
};
|
|
779
|
-
const classes = new Set([
|
|
780
|
-
classFor('none'),
|
|
781
|
-
classFor('low'),
|
|
782
|
-
classFor('med'),
|
|
783
|
-
classFor('high'),
|
|
784
|
-
]);
|
|
785
|
-
expect(classes.size).toBe(4);
|
|
786
|
-
});
|
|
787
|
-
|
|
788
|
-
it('defaults to flat (elevation none)', () => {
|
|
789
|
-
const {container} = render(<Button label="Save" />);
|
|
790
|
-
const button = container.querySelector('button')!;
|
|
791
|
-
expect(button).toHaveAttribute('data-elevation', 'none');
|
|
792
|
-
const {container: none} = render(
|
|
793
|
-
<Button label="Save" elevation="none" />,
|
|
794
|
-
);
|
|
795
|
-
expect(button.className).toBe(none.querySelector('button')!.className);
|
|
796
|
-
});
|
|
797
|
-
});
|
|
798
|
-
|
|
799
|
-
it('exposes aria-busy on the link-rendered button while loading', () => {
|
|
800
|
-
render(
|
|
801
|
-
<Button
|
|
802
|
-
label="Docs"
|
|
803
|
-
href="https://example.com"
|
|
804
|
-
isLoading
|
|
805
|
-
isInterruptible
|
|
806
|
-
/>,
|
|
807
|
-
);
|
|
808
|
-
const link = screen.getByRole('link');
|
|
809
|
-
expect(link).toHaveAttribute('aria-busy', 'true');
|
|
810
|
-
});
|
|
811
|
-
|
|
812
|
-
it('does not set aria-busy on the link-rendered button when not loading', () => {
|
|
813
|
-
render(<Button label="Docs" href="https://example.com" />);
|
|
814
|
-
const link = screen.getByRole('link');
|
|
815
|
-
expect(link).not.toHaveAttribute('aria-busy');
|
|
816
|
-
});
|
|
817
|
-
|
|
818
|
-
it('stays an anchor while busy-only, not a disabled <button> fallback (#4871)', () => {
|
|
819
|
-
// Non-interruptible busy is exactly the isBusyOnlyDisabled case: not
|
|
820
|
-
// isDisabled, blocked only because a fire-once action is in flight.
|
|
821
|
-
// Swapping the element to <button disabled> here would drop focus the
|
|
822
|
-
// same way the native disabled attribute did (credit @AKnassa, #4879).
|
|
823
|
-
render(<Button label="Docs" href="https://example.com" isLoading />);
|
|
824
|
-
const link = screen.getByRole('link', {name: 'Docs'});
|
|
825
|
-
expect(link.tagName).toBe('A');
|
|
826
|
-
expect(link).toHaveAttribute('href', 'https://example.com');
|
|
827
|
-
expect(link).toHaveAttribute('aria-busy', 'true');
|
|
828
|
-
expect(link).toHaveAttribute('aria-disabled', 'true');
|
|
829
|
-
expect(link).not.toHaveAttribute('disabled');
|
|
830
|
-
});
|
|
831
|
-
|
|
832
|
-
it('keeps a busy-only anchor focusable and guards its navigation', () => {
|
|
833
|
-
render(<Button label="Docs" href="https://example.com" isLoading />);
|
|
834
|
-
const link = screen.getByRole('link', {name: 'Docs'});
|
|
835
|
-
link.focus();
|
|
836
|
-
expect(link).toHaveFocus();
|
|
837
|
-
|
|
838
|
-
const event = createEvent.click(link);
|
|
839
|
-
fireEvent(link, event);
|
|
840
|
-
expect(event.defaultPrevented).toBe(true);
|
|
841
|
-
});
|
|
842
|
-
|
|
843
|
-
it('falls back to <button disabled> for a truly disabled href Button', () => {
|
|
844
|
-
render(<Button label="Docs" href="https://example.com" isDisabled />);
|
|
845
|
-
expect(screen.queryByRole('link')).not.toBeInTheDocument();
|
|
846
|
-
const button = screen.getByRole('button', {name: 'Docs'});
|
|
847
|
-
expect(button).toBeDisabled();
|
|
848
|
-
});
|
|
849
|
-
});
|
|
850
|
-
|
|
851
|
-
describe('Button pressed state (touch)', () => {
|
|
852
|
-
it('fades the touch press out over the release, painting the pressed token at its strength on both arms', () => {
|
|
853
|
-
render(<Button label="Save" />);
|
|
854
|
-
const button = screen.getByRole('button', {name: 'Save'});
|
|
855
|
-
// The touch arms the controller writes: `on` paints the pressed token at
|
|
856
|
-
// strength 1 on the first frame; `fading` keeps the paint and runs the
|
|
857
|
-
// release animation on the machine's clock. A mouse keeps `:active`.
|
|
858
|
-
expect(button).toHaveAttribute('data-astryx-pressable');
|
|
859
|
-
expect(hasPressedArm(button)).toBe(true);
|
|
860
|
-
expect(readsPressStrength(button, '[data-astryx-press="on"]')).toBe(true);
|
|
861
|
-
expect(readsPressStrength(button)).toBe(true);
|
|
862
|
-
expect(hasReleaseFade(button)).toBe(true);
|
|
863
|
-
});
|
|
864
|
-
});
|