@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4
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/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +18 -20
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +53 -55
- package/dist/AspectRatio/AspectRatio.d.ts +10 -48
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +12 -33
- package/dist/AspectRatio/index.d.ts +1 -1
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +25 -27
- package/dist/Avatar/AvatarStatusDot.js +5 -5
- package/dist/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +25 -32
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.js +19 -19
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +48 -68
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +2 -2
- package/dist/Card/Card.d.ts +2 -4
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +10 -18
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +21 -24
- package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
- package/dist/Carousel/carousel.markers.stylex.js +12 -0
- package/dist/Center/Center.js +3 -3
- package/dist/Chat/ChatComposer.js +23 -23
- package/dist/Chat/ChatComposerDrawer.js +14 -14
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +15 -27
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +11 -13
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +10 -12
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +12 -14
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +15 -24
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +74 -81
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +23 -25
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +6 -8
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +9 -32
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +1 -10
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +52 -88
- package/dist/Collapsible/Collapsible.d.ts +3 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +22 -110
- package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +12 -73
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
- package/dist/Collapsible/index.d.ts +0 -1
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +1 -4
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +6 -20
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +34 -36
- package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
- package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
- package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
- package/dist/CommandPalette/CommandPaletteInput.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/CommandPalette/CommandPaletteList.js +3 -3
- package/dist/ContextMenu/ContextMenu.d.ts +2 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +43 -76
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +26 -30
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +3 -4
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +12 -29
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.d.ts +1 -5
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +12 -16
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.d.ts +2 -29
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +31 -44
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +31 -55
- package/dist/Lightbox/useLightbox.js +3 -3
- package/dist/Link/Link.js +15 -15
- package/dist/Link/LinkProvider.js +3 -3
- package/dist/Link/useLinkify.js +3 -3
- package/dist/List/List.js +11 -11
- package/dist/List/ListItem.js +11 -11
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +102 -102
- package/dist/MetadataList/MetadataList.js +10 -10
- package/dist/MetadataList/MetadataListItem.js +15 -15
- package/dist/MobileNav/MobileNav.js +15 -15
- package/dist/MobileNav/MobileNavToggle.js +5 -5
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.js +56 -56
- package/dist/NavIcon/NavIcon.js +3 -3
- package/dist/NavMenu/NavHeadingMenu.js +5 -5
- package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +32 -48
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.js +3 -3
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +72 -125
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +92 -110
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -25
- package/dist/RadioList/RadioList.js +7 -7
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +21 -24
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +10 -28
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +10 -32
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.js +46 -46
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +34 -38
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +6 -8
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +16 -18
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.js +23 -23
- package/dist/Spinner/Spinner.js +9 -9
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +4 -8
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +29 -34
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +30 -57
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +39 -50
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +5 -9
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +5 -9
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +5 -9
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +1 -5
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
- package/dist/Table/plugins/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
- package/dist/Table/tableContextMenu.js +9 -9
- package/dist/Text/Text.js +10 -10
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +2 -3
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +29 -30
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -26
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +26 -37
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +17 -25
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +11 -23
- package/dist/Toast/useToast.js +4 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +34 -36
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +1 -5
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -3
- package/dist/TopNav/TopNav.js +32 -32
- package/dist/TopNav/TopNavHeading.js +67 -67
- package/dist/TopNav/TopNavItem.js +5 -5
- package/dist/TopNav/TopNavMegaMenu.js +30 -30
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +20 -23
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/astryx.css +0 -7
- package/dist/astryx.umd.js +60 -60
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +2 -8
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +0 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/useFocusTrap.d.ts +0 -3
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +1 -38
- package/dist/hooks/useInteractiveRole.d.ts +2 -6
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +2 -6
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +1 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +5 -14
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +3 -10
- package/dist/theme/hct.d.ts +15 -0
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +2 -10
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +4 -220
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -8
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
- package/src/AlertDialog/AlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +0 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
- package/src/AspectRatio/AspectRatio.test.tsx +1 -142
- package/src/AspectRatio/AspectRatio.tsx +10 -70
- package/src/AspectRatio/index.ts +1 -5
- package/src/Avatar/Avatar.doc.mjs +0 -11
- package/src/Avatar/Avatar.test.tsx +1 -32
- package/src/Avatar/Avatar.tsx +20 -12
- package/src/Banner/Banner.doc.mjs +0 -8
- package/src/Banner/Banner.test.tsx +0 -38
- package/src/Banner/Banner.tsx +1 -8
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +17 -122
- package/src/Calendar/Calendar.tsx +5 -26
- package/src/Calendar/dayCellUtils.ts +1 -3
- package/src/Calendar/styles.ts +2 -12
- package/src/Card/Card.tsx +6 -16
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +0 -13
- package/src/Carousel/Carousel.tsx +2 -4
- package/src/Carousel/carousel.markers.stylex.ts +10 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +1 -27
- package/src/Chat/ChatComposerInput.tsx +15 -20
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
- package/src/Chat/ChatMessageMetadata.tsx +6 -4
- package/src/Chat/ChatSystemMessage.test.tsx +11 -26
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +16 -29
- package/src/Chat/ChatTokenizedText.tsx +8 -15
- package/src/Chat/ChatToolCalls.test.tsx +0 -55
- package/src/Chat/ChatToolCalls.tsx +12 -10
- package/src/Chat/index.ts +4 -1
- package/src/Chat/useTriggerMenu.tsx +4 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
- package/src/CheckboxInput/CheckboxInput.tsx +0 -2
- package/src/CheckboxList/CheckboxList.test.tsx +0 -19
- package/src/CheckboxList/CheckboxListItem.tsx +2 -11
- package/src/Citation/Citation.doc.mjs +0 -5
- package/src/ClickableCard/ClickableCard.tsx +2 -45
- package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
- package/src/CodeBlock/CodeBlock.test.tsx +3 -122
- package/src/CodeBlock/CodeBlock.tsx +4 -62
- package/src/Collapsible/Collapsible.doc.mjs +4 -8
- package/src/Collapsible/Collapsible.tsx +10 -86
- package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
- package/src/Collapsible/CollapsibleGroup.tsx +9 -107
- package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
- package/src/Collapsible/index.ts +0 -4
- package/src/Collapsible/useCollapsible.ts +6 -20
- package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
- package/src/CommandPalette/CommandPalette.tsx +3 -5
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
- package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
- package/src/ContextMenu/ContextMenu.test.tsx +0 -87
- package/src/ContextMenu/ContextMenu.tsx +28 -87
- package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
- package/src/DateInput/DateInput.test.tsx +20 -11
- package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
- package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
- package/src/DateTimeInput/DateTimeInput.tsx +2 -8
- package/src/DateTimeInput/index.ts +0 -1
- package/src/Dialog/Dialog.doc.mjs +0 -4
- package/src/Dialog/DialogHeader.doc.mjs +0 -45
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
- package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
- package/src/Field/Field.test.tsx +4 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
- package/src/Grid/Grid.test.tsx +18 -43
- package/src/Grid/Grid.tsx +9 -26
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +2 -9
- package/src/Icon/Icon.test.tsx +29 -41
- package/src/Icon/Icon.tsx +2 -6
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +2 -221
- package/src/Layer/useLayer.tsx +30 -69
- package/src/Layout/LayoutContent.doc.mjs +0 -12
- package/src/Layout/LayoutPanel.doc.mjs +0 -40
- package/src/Lightbox/Lightbox.doc.mjs +0 -5
- package/src/Lightbox/Lightbox.test.tsx +2 -123
- package/src/Lightbox/Lightbox.tsx +1 -29
- package/src/Markdown/Markdown.tsx +7 -9
- package/src/Markdown/parser.perf.test.ts +12 -34
- package/src/NavMenu/NavMenu.doc.mjs +0 -15
- package/src/NumberInput/NumberInput.test.tsx +3 -48
- package/src/NumberInput/NumberInput.tsx +15 -32
- package/src/Overlay/Overlay.doc.mjs +0 -6
- package/src/Pagination/Pagination.test.tsx +0 -162
- package/src/Pagination/Pagination.tsx +26 -80
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +0 -65
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +1 -109
- package/src/PowerSearch/PowerSearch.tsx +16 -37
- package/src/ProgressBar/ProgressBar.test.tsx +0 -30
- package/src/ProgressBar/ProgressBar.tsx +5 -12
- package/src/RadioList/RadioList.test.tsx +0 -19
- package/src/RadioList/RadioListItem.tsx +4 -9
- package/src/Resizable/ResizeHandle.tsx +4 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
- package/src/SegmentedControl/SegmentedControl.tsx +5 -27
- package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +1 -27
- package/src/SideNav/SideNav.doc.mjs +1 -7
- package/src/SideNav/SideNav.test.tsx +0 -66
- package/src/SideNav/SideNav.tsx +2 -6
- package/src/SideNav/SideNavCollapseButton.tsx +3 -4
- package/src/SideNav/SideNavSection.tsx +4 -6
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +3 -102
- package/src/Switch/Switch.tsx +7 -20
- package/src/TabList/TabList.test.tsx +1 -185
- package/src/TabList/TabMenu.tsx +9 -45
- package/src/Table/BaseTable.tsx +2 -13
- package/src/Table/Table.test.tsx +0 -87
- package/src/Table/TableBody.tsx +2 -15
- package/src/Table/TableFooter.tsx +2 -15
- package/src/Table/TableHeader.tsx +2 -15
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
- package/src/Table/plugins/pagination/paginateData.ts +1 -5
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
- package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
- package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +2 -36
- package/src/Thumbnail/Thumbnail.tsx +2 -4
- package/src/TimeInput/TimeInput.test.tsx +0 -37
- package/src/TimeInput/TimeInput.tsx +1 -11
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +0 -52
- package/src/Timestamp/Timestamp.tsx +16 -30
- package/src/Toast/Toast.tsx +3 -11
- package/src/Toast/ToastViewport.test.tsx +0 -64
- package/src/Toast/ToastViewport.tsx +0 -12
- package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +0 -54
- package/src/Tokenizer/Tokenizer.tsx +4 -5
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +2 -12
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +7 -23
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
- package/src/Typeahead/BaseTypeahead.tsx +2 -5
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +1 -45
- package/src/docs-types.ts +1 -9
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +0 -3
- package/src/hooks/useFocusTrap.doc.mjs +2 -4
- package/src/hooks/useFocusTrap.test.tsx +1 -149
- package/src/hooks/useFocusTrap.ts +1 -50
- package/src/hooks/useInteractiveRole.ts +4 -12
- package/src/hooks/useStreamingText.test.ts +19 -54
- package/src/hooks/useStreamingText.ts +5 -16
- package/src/hooks/useTreeFocus.test.tsx +3 -1
- package/src/reset.css +0 -29
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +13 -4
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +0 -29
- package/src/theme/expandColorScale.ts +6 -11
- package/src/theme/hct.ts +17 -9
- package/src/theme/tokens.test.ts +9 -182
- package/src/theme/tokens.ts +4 -239
- package/src/theme/useTheme.test.tsx +0 -20
- package/src/utils/index.ts +0 -4
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +0 -13
- package/src/utils/timeParser.ts +5 -8
- package/dist/hooks/useHotkeys.d.ts +0 -51
- package/dist/hooks/useHotkeys.d.ts.map +0 -1
- package/dist/hooks/useHotkeys.js +0 -160
- package/dist/utils/color.d.ts +0 -42
- package/dist/utils/color.d.ts.map +0 -1
- package/dist/utils/color.js +0 -150
- package/dist/utils/composeEventHandlers.d.ts +0 -30
- package/dist/utils/composeEventHandlers.d.ts.map +0 -1
- package/dist/utils/composeEventHandlers.js +0 -40
- package/src/Chat/ChatDictationButton.test.tsx +0 -43
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
- package/src/Collapsible/Collapsible.test.tsx +0 -405
- package/src/FieldStatus/FieldStatus.test.tsx +0 -282
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Layout/Layout.test.tsx +0 -285
- package/src/Layout/LayoutSlots.test.tsx +0 -364
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
- package/src/OverflowList/OverflowList.test.tsx +0 -416
- package/src/Overlay/Overlay.test.tsx +0 -356
- package/src/Resizable/ResizeHandle.test.tsx +0 -218
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/docPropReferences.test.ts +0 -178
- package/src/hooks/useHotkeys.doc.mjs +0 -52
- package/src/hooks/useHotkeys.test.ts +0 -245
- package/src/hooks/useHotkeys.ts +0 -203
- package/src/utils/color.test.ts +0 -133
- package/src/utils/color.ts +0 -148
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/composeEventHandlers.ts +0 -44
- package/src/utils/mergeProps.test.ts +0 -166
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @file AspectRatio.tsx
|
|
7
7
|
* @input Uses React, stylex
|
|
8
|
-
* @output Exports AspectRatio component
|
|
8
|
+
* @output Exports AspectRatio component and AspectRatioProps
|
|
9
9
|
* @position AspectRatio component; maintains a specific aspect ratio for its children
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update these files to stay in sync:
|
|
12
12
|
* - /packages/core/src/AspectRatio/AspectRatio.doc.mjs
|
|
13
13
|
* - /packages/core/src/AspectRatio/AspectRatio.test.tsx
|
|
14
|
-
* - /packages/core/src/reset.css (AspectRatio fit baseline rules)
|
|
15
14
|
* - /apps/storybook/stories/AspectRatio.stories.tsx
|
|
16
15
|
* - /packages/cli/templates/blocks/components/AspectRatio/ (showcase blocks)
|
|
17
16
|
*/
|
|
@@ -30,16 +29,6 @@ import {themeProps} from '../utils/themeProps';
|
|
|
30
29
|
*/
|
|
31
30
|
export type AspectRatioShape = 'rectangle' | 'ellipse';
|
|
32
31
|
|
|
33
|
-
/**
|
|
34
|
-
* How the child is sized and positioned inside the ratio box.
|
|
35
|
-
* - `cover`: the child fills the box; media is cropped to preserve its own
|
|
36
|
-
* aspect ratio (`object-fit: cover`).
|
|
37
|
-
* - `contain`: the child fills the box; media is letterboxed to stay fully
|
|
38
|
-
* visible (`object-fit: contain`).
|
|
39
|
-
* - `center`: the child keeps its natural size and sits centered in the box.
|
|
40
|
-
*/
|
|
41
|
-
export type AspectRatioFit = 'cover' | 'contain' | 'center';
|
|
42
|
-
|
|
43
32
|
export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
|
|
44
33
|
/** Ref forwarded to the root element */
|
|
45
34
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -52,45 +41,20 @@ export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
|
|
|
52
41
|
* The shape of the container. Both shapes respect the provided `ratio`.
|
|
53
42
|
* - `rectangle` (default): a standard rectangular container.
|
|
54
43
|
* - `ellipse`: clips the container to an ellipse — a circle when `ratio={1}`,
|
|
55
|
-
* or an oval at other ratios. Pair with
|
|
56
|
-
*
|
|
44
|
+
* or an oval at other ratios. Pair with a child that fills the container
|
|
45
|
+
* (e.g. an image with `objectFit: 'cover'`).
|
|
57
46
|
*
|
|
58
47
|
* @default 'rectangle'
|
|
59
48
|
*
|
|
60
49
|
* @example
|
|
61
50
|
* ```
|
|
62
|
-
* <AspectRatio ratio={1} shape="ellipse"
|
|
63
|
-
* <img src="avatar.jpg" alt="" />
|
|
51
|
+
* <AspectRatio ratio={1} shape="ellipse">
|
|
52
|
+
* <img src="avatar.jpg" alt="" style={{objectFit: 'cover'}} />
|
|
64
53
|
* </AspectRatio>
|
|
65
54
|
* ```
|
|
66
55
|
*/
|
|
67
56
|
shape?: AspectRatioShape;
|
|
68
57
|
|
|
69
|
-
/**
|
|
70
|
-
* How the child is laid out inside the ratio box, so the child does not
|
|
71
|
-
* have to declare `width`/`height`/`objectFit` itself.
|
|
72
|
-
* - `cover`: child fills the box; media is cropped (`object-fit: cover`).
|
|
73
|
-
* - `contain`: child fills the box; media is letterboxed
|
|
74
|
-
* (`object-fit: contain`).
|
|
75
|
-
* - `center`: child keeps its natural size, centered in the box.
|
|
76
|
-
*
|
|
77
|
-
* `cover`/`contain` child sizing ships as zero-specificity baseline rules
|
|
78
|
-
* in `reset.css`, keyed on the `data-astryx-aspect-ratio-override`
|
|
79
|
-
* attribute the component sets on the child's direct parent. Any styles
|
|
80
|
-
* the child sets itself still win, so children that already size
|
|
81
|
-
* themselves keep their behavior. When omitted, the child is left
|
|
82
|
-
* unstyled (the pre-existing contract). `fit` is structural, not visual,
|
|
83
|
-
* so it is not exposed on the theming surface.
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```
|
|
87
|
-
* <AspectRatio ratio={16 / 9} fit="cover">
|
|
88
|
-
* <img src="image.jpg" alt="Widescreen image" />
|
|
89
|
-
* </AspectRatio>
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
fit?: AspectRatioFit;
|
|
93
|
-
|
|
94
58
|
/**
|
|
95
59
|
* Content to render inside the aspect ratio container.
|
|
96
60
|
* The child element will be positioned absolutely to fill the container.
|
|
@@ -118,16 +82,6 @@ const styles = stylex.create({
|
|
|
118
82
|
width: '100%',
|
|
119
83
|
height: '100%',
|
|
120
84
|
},
|
|
121
|
-
// fit="center" centers the child at its natural size from the wrapper —
|
|
122
|
-
// no styles on the child itself. The `cover`/`contain` child sizing can't
|
|
123
|
-
// live here (StyleX has no descendant selectors); it ships as baseline
|
|
124
|
-
// rules in reset.css keyed on the `data-astryx-aspect-ratio-override`
|
|
125
|
-
// attribute the wrapper carries (see below).
|
|
126
|
-
childCenter: {
|
|
127
|
-
display: 'flex',
|
|
128
|
-
alignItems: 'center',
|
|
129
|
-
justifyContent: 'center',
|
|
130
|
-
},
|
|
131
85
|
});
|
|
132
86
|
|
|
133
87
|
/**
|
|
@@ -137,32 +91,27 @@ const styles = stylex.create({
|
|
|
137
91
|
* is positioned absolutely to fill the container, which is useful for images,
|
|
138
92
|
* videos, embeds, and placeholders.
|
|
139
93
|
*
|
|
140
|
-
* Use `fit` to let the component size the child: `cover`/`contain` stretch
|
|
141
|
-
* the child to fill the box (cropping or letterboxing media), `center` keeps
|
|
142
|
-
* the child at its natural size. Without `fit`, the child styles itself.
|
|
143
|
-
*
|
|
144
94
|
* Use `shape="ellipse"` to clip the container into an ellipse — a circle at
|
|
145
95
|
* `ratio={1}` or an oval at other ratios. Both shapes respect the provided
|
|
146
96
|
* `ratio`.
|
|
147
97
|
*
|
|
148
98
|
* @example
|
|
149
99
|
* ```
|
|
150
|
-
* <AspectRatio ratio={16 / 9}
|
|
151
|
-
* <img src="image.jpg" alt="Widescreen image" />
|
|
100
|
+
* <AspectRatio ratio={16 / 9}>
|
|
101
|
+
* <img src="image.jpg" alt="Widescreen image" style={{objectFit: 'cover'}} />
|
|
152
102
|
* </AspectRatio>
|
|
153
103
|
* ```
|
|
154
104
|
*
|
|
155
105
|
* @example
|
|
156
106
|
* ```
|
|
157
|
-
* <AspectRatio ratio={1} shape="ellipse"
|
|
158
|
-
* <img src="avatar.jpg" alt="" />
|
|
107
|
+
* <AspectRatio ratio={1} shape="ellipse">
|
|
108
|
+
* <img src="avatar.jpg" alt="" style={{objectFit: 'cover'}} />
|
|
159
109
|
* </AspectRatio>
|
|
160
110
|
* ```
|
|
161
111
|
*/
|
|
162
112
|
export function AspectRatio({
|
|
163
113
|
ratio,
|
|
164
114
|
shape = 'rectangle',
|
|
165
|
-
fit,
|
|
166
115
|
children,
|
|
167
116
|
xstyle,
|
|
168
117
|
className,
|
|
@@ -184,16 +133,7 @@ export function AspectRatio({
|
|
|
184
133
|
{...style, aspectRatio: ratio},
|
|
185
134
|
)}
|
|
186
135
|
{...props}>
|
|
187
|
-
{
|
|
188
|
-
sizing can use direct-child selectors on this wrapper — the child's
|
|
189
|
-
actual parent — without depending on AspectRatio's internal
|
|
190
|
-
structure or on the theming surface (fit is structural, not
|
|
191
|
-
themeable). The name is namespaced to avoid collisions. */}
|
|
192
|
-
<div
|
|
193
|
-
data-astryx-aspect-ratio-override={fit}
|
|
194
|
-
{...stylex.props(styles.child, fit === 'center' && styles.childCenter)}>
|
|
195
|
-
{children}
|
|
196
|
-
</div>
|
|
136
|
+
<div {...stylex.props(styles.child)}>{children}</div>
|
|
197
137
|
</div>
|
|
198
138
|
);
|
|
199
139
|
}
|
package/src/AspectRatio/index.ts
CHANGED
|
@@ -106,15 +106,4 @@ export const docsDense = {
|
|
|
106
106
|
{guidance: false, description: 'Force a square or custom shape. Avatars are always circular.'},
|
|
107
107
|
],
|
|
108
108
|
},
|
|
109
|
-
propDescriptions: {
|
|
110
|
-
src: 'primary image source URL',
|
|
111
|
-
fallbackSrc: 'fallback image when primary fails',
|
|
112
|
-
name: 'user name for initials and alt text',
|
|
113
|
-
alt: 'alt text; falls back to name',
|
|
114
|
-
size: "avatar size. Named ('tiny', 'xsmall', 'small', 'medium', 'large') or numeric px. Short names 'sm'/'md'/'lg' are NOT valid; use full words.",
|
|
115
|
-
status: 'corner content for status indicators',
|
|
116
|
-
},
|
|
117
|
-
components: [
|
|
118
|
-
{name: 'AvatarStatusDot', description: 'size-aware status indicator rendered in the Avatar corner'},
|
|
119
|
-
],
|
|
120
109
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
import {describe, it, expect} from 'vitest';
|
|
4
|
-
import {render, screen
|
|
4
|
+
import {render, screen} from '@testing-library/react';
|
|
5
5
|
import {Avatar} from './Avatar';
|
|
6
6
|
|
|
7
7
|
describe('Avatar', () => {
|
|
@@ -34,35 +34,4 @@ describe('Avatar', () => {
|
|
|
34
34
|
// The inner <img> carries an empty alt so it isn't announced separately.
|
|
35
35
|
expect(innerImg).toHaveAttribute('alt', '');
|
|
36
36
|
});
|
|
37
|
-
|
|
38
|
-
it('retries a new src after a previous src failed to load', () => {
|
|
39
|
-
const {rerender} = render(
|
|
40
|
-
<Avatar name="Ada" src="https://example.com/broken.jpg" />,
|
|
41
|
-
);
|
|
42
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
43
|
-
fireEvent.error(wrapper.querySelector('img')!);
|
|
44
|
-
// Broken image falls back to initials.
|
|
45
|
-
expect(wrapper.querySelector('img')).toBeNull();
|
|
46
|
-
expect(wrapper).toHaveTextContent('A');
|
|
47
|
-
|
|
48
|
-
// A different src must get a fresh load attempt, not the stale error.
|
|
49
|
-
rerender(<Avatar name="Ada" src="https://example.com/ada.jpg" />);
|
|
50
|
-
const img = wrapper.querySelector('img');
|
|
51
|
-
expect(img).not.toBeNull();
|
|
52
|
-
expect(img).toHaveAttribute('src', 'https://example.com/ada.jpg');
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('retries a new fallbackSrc after a previous fallbackSrc failed to load', () => {
|
|
56
|
-
const {rerender} = render(
|
|
57
|
-
<Avatar name="Ada" fallbackSrc="https://example.com/broken.jpg" />,
|
|
58
|
-
);
|
|
59
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
60
|
-
fireEvent.error(wrapper.querySelector('img')!);
|
|
61
|
-
expect(wrapper.querySelector('img')).toBeNull();
|
|
62
|
-
|
|
63
|
-
rerender(<Avatar name="Ada" fallbackSrc="https://example.com/ada.jpg" />);
|
|
64
|
-
const img = wrapper.querySelector('img');
|
|
65
|
-
expect(img).not.toBeNull();
|
|
66
|
-
expect(img).toHaveAttribute('src', 'https://example.com/ada.jpg');
|
|
67
|
-
});
|
|
68
37
|
});
|
package/src/Avatar/Avatar.tsx
CHANGED
|
@@ -63,7 +63,20 @@ type AvatarNamedSize = 'tiny' | 'xsmall' | 'small' | 'medium' | 'large';
|
|
|
63
63
|
* Numeric size options (in pixels)
|
|
64
64
|
*/
|
|
65
65
|
type AvatarNumericSize =
|
|
66
|
-
|
|
66
|
+
| 16
|
|
67
|
+
| 20
|
|
68
|
+
| 24
|
|
69
|
+
| 32
|
|
70
|
+
| 36
|
|
71
|
+
| 40
|
|
72
|
+
| 48
|
|
73
|
+
| 60
|
|
74
|
+
| 64
|
|
75
|
+
| 72
|
|
76
|
+
| 96
|
|
77
|
+
| 128
|
|
78
|
+
| 144
|
|
79
|
+
| 180;
|
|
67
80
|
|
|
68
81
|
/**
|
|
69
82
|
* Avatar size - can be a named size or a specific pixel value
|
|
@@ -276,16 +289,11 @@ export function Avatar({
|
|
|
276
289
|
ref,
|
|
277
290
|
...props
|
|
278
291
|
}: AvatarProps) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const [erroredSrc, setErroredSrc] = useState<string | undefined>(undefined);
|
|
282
|
-
const [erroredFallbackSrc, setErroredFallbackSrc] = useState<
|
|
283
|
-
string | undefined
|
|
284
|
-
>(undefined);
|
|
292
|
+
const [imageError, setImageError] = useState(false);
|
|
293
|
+
const [fallbackError, setFallbackError] = useState(false);
|
|
285
294
|
|
|
286
|
-
const showImage = src &&
|
|
287
|
-
const showFallbackImage =
|
|
288
|
-
!showImage && fallbackSrc && erroredFallbackSrc !== fallbackSrc;
|
|
295
|
+
const showImage = src && !imageError;
|
|
296
|
+
const showFallbackImage = !showImage && fallbackSrc && !fallbackError;
|
|
289
297
|
const showInitials = !showImage && !showFallbackImage && name;
|
|
290
298
|
const showIcon = !showImage && !showFallbackImage && !name;
|
|
291
299
|
|
|
@@ -324,7 +332,7 @@ export function Avatar({
|
|
|
324
332
|
<img
|
|
325
333
|
src={src}
|
|
326
334
|
alt=""
|
|
327
|
-
onError={() =>
|
|
335
|
+
onError={() => setImageError(true)}
|
|
328
336
|
{...stylex.props(styles.image)}
|
|
329
337
|
/>
|
|
330
338
|
)}
|
|
@@ -332,7 +340,7 @@ export function Avatar({
|
|
|
332
340
|
<img
|
|
333
341
|
src={fallbackSrc}
|
|
334
342
|
alt=""
|
|
335
|
-
onError={() =>
|
|
343
|
+
onError={() => setFallbackError(true)}
|
|
336
344
|
{...stylex.props(styles.image)}
|
|
337
345
|
/>
|
|
338
346
|
)}
|
|
@@ -113,7 +113,6 @@ export const docs = {
|
|
|
113
113
|
targets: [
|
|
114
114
|
{className: 'astryx-banner', visualProps: ['container', 'status']},
|
|
115
115
|
{className: 'astryx-banner-icon', visualProps: ['status']},
|
|
116
|
-
{className: 'astryx-banner-content', visualProps: ['container', 'status']},
|
|
117
116
|
],
|
|
118
117
|
vars: [
|
|
119
118
|
{name: '--_banner-radius', description: 'Border radius (card container only)', default: 'var(--radius-container)', private: true},
|
|
@@ -181,13 +180,6 @@ export const docsZh = {
|
|
|
181
180
|
'status',
|
|
182
181
|
],
|
|
183
182
|
},
|
|
184
|
-
{
|
|
185
|
-
className: 'astryx-banner-content',
|
|
186
|
-
visualProps: [
|
|
187
|
-
'container',
|
|
188
|
-
'status',
|
|
189
|
-
],
|
|
190
|
-
},
|
|
191
183
|
],
|
|
192
184
|
vars: [
|
|
193
185
|
{name: '--_banner-radius', description: 'Border radius (card container only)', default: 'var(--radius-container)', private: true},
|
|
@@ -270,44 +270,6 @@ describe('Banner', () => {
|
|
|
270
270
|
expect(expandIndex).toBeLessThan(dismissIndex);
|
|
271
271
|
});
|
|
272
272
|
|
|
273
|
-
it('links the expand toggle to its content region via aria-controls', () => {
|
|
274
|
-
render(
|
|
275
|
-
<Banner status="info" title="Controls Test" defaultIsExpanded>
|
|
276
|
-
<div data-testid="region-content">Region content</div>
|
|
277
|
-
</Banner>,
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
const toggle = screen.getByRole('button', {name: 'Collapse'});
|
|
281
|
-
const controlsId = toggle.getAttribute('aria-controls');
|
|
282
|
-
// aria-controls must be present and point at the real content region.
|
|
283
|
-
expect(controlsId).toBeTruthy();
|
|
284
|
-
const region = document.getElementById(controlsId as string);
|
|
285
|
-
expect(region).not.toBeNull();
|
|
286
|
-
expect(region).toContainElement(screen.getByTestId('region-content'));
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
it('sets aria-controls only while the content region is mounted', async () => {
|
|
290
|
-
const user = userEvent.setup();
|
|
291
|
-
render(
|
|
292
|
-
<Banner status="info" title="Controls Toggle">
|
|
293
|
-
<div data-testid="region-content">Region content</div>
|
|
294
|
-
</Banner>,
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
// Collapsed: the region is unmounted, so no dangling aria-controls target.
|
|
298
|
-
const collapsedToggle = screen.getByRole('button', {name: 'Expand'});
|
|
299
|
-
expect(collapsedToggle).not.toHaveAttribute('aria-controls');
|
|
300
|
-
|
|
301
|
-
// Expanded: aria-controls resolves to the mounted region with the children.
|
|
302
|
-
await user.click(collapsedToggle);
|
|
303
|
-
const expandedToggle = screen.getByRole('button', {name: 'Collapse'});
|
|
304
|
-
const controlsId = expandedToggle.getAttribute('aria-controls');
|
|
305
|
-
expect(controlsId).toBeTruthy();
|
|
306
|
-
const region = document.getElementById(controlsId as string);
|
|
307
|
-
expect(region).not.toBeNull();
|
|
308
|
-
expect(region).toContainElement(screen.getByTestId('region-content'));
|
|
309
|
-
});
|
|
310
|
-
|
|
311
273
|
it('does not render content area when no children', () => {
|
|
312
274
|
const {container} = render(<Banner status="info" title="No Children" />);
|
|
313
275
|
const root = container.firstElementChild;
|
package/src/Banner/Banner.tsx
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* - /packages/cli/templates/blocks/components/Banner/ (showcase blocks)
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
|
-
import {
|
|
34
|
+
import {useState, type ReactNode} from 'react';
|
|
35
35
|
import * as stylex from '@stylexjs/stylex';
|
|
36
36
|
import type {BaseProps} from '../BaseProps';
|
|
37
37
|
import {Button} from '../Button';
|
|
@@ -387,11 +387,6 @@ export function Banner({
|
|
|
387
387
|
}: BannerProps) {
|
|
388
388
|
const [isDismissed, setIsDismissed] = useState(false);
|
|
389
389
|
const [isExpanded, setIsExpanded] = useState(defaultIsExpanded);
|
|
390
|
-
// Links the expand/collapse toggle to the content region it shows/hides so
|
|
391
|
-
// assistive tech can move from the button to its controlled content
|
|
392
|
-
// (disclosure pattern). The region is conditionally rendered, so aria-controls
|
|
393
|
-
// below is set only while it's mounted to avoid a dangling reference.
|
|
394
|
-
const contentId = useId();
|
|
395
390
|
const defaultIconName = defaultIconNames[status];
|
|
396
391
|
const role = statusRole[status];
|
|
397
392
|
const iconColor = statusIconColor[status];
|
|
@@ -482,7 +477,6 @@ export function Banner({
|
|
|
482
477
|
}
|
|
483
478
|
onClick={handleToggleExpand}
|
|
484
479
|
aria-expanded={isExpanded}
|
|
485
|
-
aria-controls={showContent ? contentId : undefined}
|
|
486
480
|
isIconOnly
|
|
487
481
|
/>
|
|
488
482
|
)}
|
|
@@ -503,7 +497,6 @@ export function Banner({
|
|
|
503
497
|
{/* Content area: collapsible card background — theme target ('banner-content') */}
|
|
504
498
|
{showContent && (
|
|
505
499
|
<div
|
|
506
|
-
id={contentId}
|
|
507
500
|
{...mergeProps(
|
|
508
501
|
themeProps('banner-content', {container, status}),
|
|
509
502
|
stylex.props(styles.contentArea, isCard && styles.contentAreaCard),
|
|
@@ -19,7 +19,7 @@ export const docs = {
|
|
|
19
19
|
{guidance: false, description: 'Disable large blocks of dates without context. The user should understand why dates are unavailable.'},
|
|
20
20
|
],
|
|
21
21
|
anatomy: [
|
|
22
|
-
{name: 'Month header', required: true, description: 'The month name and year with navigation arrows to move between months.
|
|
22
|
+
{name: 'Month header', required: true, description: 'The month name and year with navigation arrows to move between months.'},
|
|
23
23
|
{name: 'Day grid', required: true, description: 'A 7-column grid of days with column headers for the day names.'},
|
|
24
24
|
{name: 'Selected day', required: false, description: 'The currently selected date, highlighted. In range mode, the start and end dates plus the days between them.'},
|
|
25
25
|
{name: 'Today marker', required: false, description: 'A subtle indicator on the current date for orientation.'},
|
|
@@ -12,11 +12,8 @@
|
|
|
12
12
|
import {describe, it, expect, vi} from 'vitest';
|
|
13
13
|
import {act, render, screen, within} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
|
-
import {getButton} from '../__tests__/fastRoleQueries';
|
|
16
|
-
import * as stylex from '@stylexjs/stylex';
|
|
17
15
|
import {Calendar} from './Calendar';
|
|
18
16
|
import type {CalendarHandle} from './Calendar';
|
|
19
|
-
import {calendarStyles} from './styles';
|
|
20
17
|
|
|
21
18
|
/**
|
|
22
19
|
* Helper to find a day button by its day number.
|
|
@@ -27,7 +24,7 @@ import {calendarStyles} from './styles';
|
|
|
27
24
|
function getDayButton(day: number, month = 'January', year = 2026) {
|
|
28
25
|
// Match the full date pattern with the day number
|
|
29
26
|
const pattern = new RegExp(`${month}\\s+${day},\\s+${year}`);
|
|
30
|
-
return
|
|
27
|
+
return screen.getByRole('button', {name: pattern});
|
|
31
28
|
}
|
|
32
29
|
|
|
33
30
|
describe('Calendar', () => {
|
|
@@ -74,24 +71,6 @@ describe('Calendar', () => {
|
|
|
74
71
|
expect(screen.getByText(expectedLabel)).toBeInTheDocument();
|
|
75
72
|
});
|
|
76
73
|
|
|
77
|
-
it("marks today's cell with aria-current='date'", () => {
|
|
78
|
-
render(<Calendar />);
|
|
79
|
-
|
|
80
|
-
const now = new Date();
|
|
81
|
-
const iso = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
|
|
82
|
-
|
|
83
|
-
const todayCell = document.querySelector(`button[data-date="${iso}"]`);
|
|
84
|
-
expect(todayCell).not.toBeNull();
|
|
85
|
-
expect(todayCell).toHaveAttribute('aria-current', 'date');
|
|
86
|
-
|
|
87
|
-
// Only today's cell is marked current.
|
|
88
|
-
const others = Array.from(
|
|
89
|
-
document.querySelectorAll('button[data-date]'),
|
|
90
|
-
).filter(el => el.getAttribute('data-date') !== iso);
|
|
91
|
-
expect(others.length).toBeGreaterThan(0);
|
|
92
|
-
others.forEach(el => expect(el).not.toHaveAttribute('aria-current'));
|
|
93
|
-
});
|
|
94
|
-
|
|
95
74
|
it('displays day names', () => {
|
|
96
75
|
render(<Calendar />);
|
|
97
76
|
|
|
@@ -118,11 +97,7 @@ describe('Calendar', () => {
|
|
|
118
97
|
render(<Calendar value="2026-01-15" focusDate="2026-01-01" />);
|
|
119
98
|
|
|
120
99
|
const day15 = getDayButton(15);
|
|
121
|
-
|
|
122
|
-
// (a plain button role does not permit aria-selected).
|
|
123
|
-
const gridcell15 = day15.closest('[role="gridcell"]');
|
|
124
|
-
expect(gridcell15).toHaveAttribute('aria-selected', 'true');
|
|
125
|
-
expect(day15).not.toHaveAttribute('aria-selected');
|
|
100
|
+
expect(day15).toHaveAttribute('aria-selected', 'true');
|
|
126
101
|
});
|
|
127
102
|
|
|
128
103
|
it('calls onChange when date is selected', async () => {
|
|
@@ -148,7 +123,7 @@ describe('Calendar', () => {
|
|
|
148
123
|
// Verify we start on February
|
|
149
124
|
expect(screen.getByText('February 2026')).toBeInTheDocument();
|
|
150
125
|
|
|
151
|
-
const prevButton =
|
|
126
|
+
const prevButton = screen.getByRole('button', {name: 'Previous month'});
|
|
152
127
|
await user.click(prevButton);
|
|
153
128
|
|
|
154
129
|
expect(screen.getByText('January 2026')).toBeInTheDocument();
|
|
@@ -162,7 +137,7 @@ describe('Calendar', () => {
|
|
|
162
137
|
// Verify we start on January
|
|
163
138
|
expect(screen.getByText('January 2026')).toBeInTheDocument();
|
|
164
139
|
|
|
165
|
-
const nextButton =
|
|
140
|
+
const nextButton = screen.getByRole('button', {name: 'Next month'});
|
|
166
141
|
await user.click(nextButton);
|
|
167
142
|
|
|
168
143
|
expect(screen.getByText('February 2026')).toBeInTheDocument();
|
|
@@ -176,7 +151,7 @@ describe('Calendar', () => {
|
|
|
176
151
|
<Calendar focusDate="2026-01-01" onFocusDateChange={handleFocusChange} />,
|
|
177
152
|
);
|
|
178
153
|
|
|
179
|
-
const nextButton =
|
|
154
|
+
const nextButton = screen.getByRole('button', {name: 'Next month'});
|
|
180
155
|
await user.click(nextButton);
|
|
181
156
|
|
|
182
157
|
expect(handleFocusChange).toHaveBeenCalledWith('2026-02-01');
|
|
@@ -234,39 +209,12 @@ describe('Calendar', () => {
|
|
|
234
209
|
|
|
235
210
|
render(<Calendar numberOfMonths={2} focusDate="2026-01-01" />);
|
|
236
211
|
|
|
237
|
-
const nextButton =
|
|
212
|
+
const nextButton = screen.getByRole('button', {name: 'Next month'});
|
|
238
213
|
await user.click(nextButton);
|
|
239
214
|
|
|
240
215
|
expect(screen.getByText(/February 2026.*March 2026/)).toBeInTheDocument();
|
|
241
216
|
});
|
|
242
217
|
|
|
243
|
-
it('clamps out-of-range numberOfMonths to a single month', () => {
|
|
244
|
-
// 1000 would otherwise try to render 1000 month grids and lock the page up.
|
|
245
|
-
render(
|
|
246
|
-
<Calendar
|
|
247
|
-
numberOfMonths={1000 as unknown as 1 | 2}
|
|
248
|
-
focusDate="2026-01-01"
|
|
249
|
-
/>,
|
|
250
|
-
);
|
|
251
|
-
|
|
252
|
-
// Only the focused month renders — no second month, no range separator.
|
|
253
|
-
expect(screen.getByText('January 2026')).toBeInTheDocument();
|
|
254
|
-
expect(screen.queryByText(/February 2026/)).not.toBeInTheDocument();
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
it('clamps numberOfMonths={0} to a single month', () => {
|
|
258
|
-
render(
|
|
259
|
-
<Calendar
|
|
260
|
-
numberOfMonths={0 as unknown as 1 | 2}
|
|
261
|
-
focusDate="2026-01-01"
|
|
262
|
-
/>,
|
|
263
|
-
);
|
|
264
|
-
|
|
265
|
-
// 0 previously rendered no months at all; now falls back to one.
|
|
266
|
-
expect(screen.getByText('January 2026')).toBeInTheDocument();
|
|
267
|
-
expect(screen.getAllByRole('gridcell').length).toBeGreaterThan(0);
|
|
268
|
-
});
|
|
269
|
-
|
|
270
218
|
// ─── Display Options ─────────────────────────────────────────
|
|
271
219
|
|
|
272
220
|
it('shows week numbers when hasWeekNumbers is true', () => {
|
|
@@ -362,22 +310,9 @@ describe('Calendar', () => {
|
|
|
362
310
|
const day12 = getDayButton(12);
|
|
363
311
|
const day15 = getDayButton(15);
|
|
364
312
|
|
|
365
|
-
|
|
366
|
-
expect(
|
|
367
|
-
|
|
368
|
-
'true',
|
|
369
|
-
);
|
|
370
|
-
expect(day12.closest('[role="gridcell"]')).toHaveAttribute(
|
|
371
|
-
'aria-selected',
|
|
372
|
-
'true',
|
|
373
|
-
);
|
|
374
|
-
expect(day15.closest('[role="gridcell"]')).toHaveAttribute(
|
|
375
|
-
'aria-selected',
|
|
376
|
-
'true',
|
|
377
|
-
);
|
|
378
|
-
expect(day10).not.toHaveAttribute('aria-selected');
|
|
379
|
-
expect(day12).not.toHaveAttribute('aria-selected');
|
|
380
|
-
expect(day15).not.toHaveAttribute('aria-selected');
|
|
313
|
+
expect(day10).toHaveAttribute('aria-selected', 'true');
|
|
314
|
+
expect(day12).toHaveAttribute('aria-selected', 'true');
|
|
315
|
+
expect(day15).toHaveAttribute('aria-selected', 'true');
|
|
381
316
|
});
|
|
382
317
|
|
|
383
318
|
it('caps the range highlight next to a disabled mid-range day (#2715)', () => {
|
|
@@ -541,8 +476,12 @@ describe('Calendar', () => {
|
|
|
541
476
|
it('has navigation buttons with accessible labels', () => {
|
|
542
477
|
render(<Calendar />);
|
|
543
478
|
|
|
544
|
-
expect(
|
|
545
|
-
|
|
479
|
+
expect(
|
|
480
|
+
screen.getByRole('button', {name: 'Previous month'}),
|
|
481
|
+
).toBeInTheDocument();
|
|
482
|
+
expect(
|
|
483
|
+
screen.getByRole('button', {name: 'Next month'}),
|
|
484
|
+
).toBeInTheDocument();
|
|
546
485
|
});
|
|
547
486
|
|
|
548
487
|
// ─── Bug Regression Tests ───────────────────────────────────
|
|
@@ -650,14 +589,14 @@ describe('Calendar', () => {
|
|
|
650
589
|
it('prev button is disabled when focusDate month contains min', () => {
|
|
651
590
|
render(<Calendar focusDate="2026-01-01" min="2026-01-15" />);
|
|
652
591
|
|
|
653
|
-
const prevButton =
|
|
592
|
+
const prevButton = screen.getByRole('button', {name: 'Previous month'});
|
|
654
593
|
expect(prevButton).toBeDisabled();
|
|
655
594
|
});
|
|
656
595
|
|
|
657
596
|
it('next button is disabled when focusDate month contains max', () => {
|
|
658
597
|
render(<Calendar focusDate="2026-01-01" max="2026-01-15" />);
|
|
659
598
|
|
|
660
|
-
const nextButton =
|
|
599
|
+
const nextButton = screen.getByRole('button', {name: 'Next month'});
|
|
661
600
|
expect(nextButton).toBeDisabled();
|
|
662
601
|
});
|
|
663
602
|
|
|
@@ -736,48 +675,4 @@ describe('Calendar', () => {
|
|
|
736
675
|
}
|
|
737
676
|
}
|
|
738
677
|
});
|
|
739
|
-
|
|
740
|
-
// ─── RTL (#3388) ─────────────────────────────────────────────
|
|
741
|
-
|
|
742
|
-
describe('RTL month navigation', () => {
|
|
743
|
-
// jsdom does not apply compiled StyleX CSS, so the scaleX(-1) mirror
|
|
744
|
-
// itself is only observable in a browser (see the dir="rtl" Storybook
|
|
745
|
-
// story). These tests pin the structure the fix depends on: both nav
|
|
746
|
-
// chevrons render inside the navIcon wrapper that carries the
|
|
747
|
-
// ':is([dir="rtl"] *)' conditional transform.
|
|
748
|
-
it('wraps both nav chevrons in the RTL-mirroring navIcon wrapper', () => {
|
|
749
|
-
render(<Calendar focusDate="2026-01-01" />);
|
|
750
|
-
|
|
751
|
-
const {className: navIconClass} = stylex.props(calendarStyles.navIcon);
|
|
752
|
-
expect(navIconClass).toBeTruthy();
|
|
753
|
-
|
|
754
|
-
for (const name of ['Previous month', 'Next month']) {
|
|
755
|
-
const button = getButton(name);
|
|
756
|
-
const wrappers = Array.from(button.querySelectorAll('span')).filter(
|
|
757
|
-
span => span.className === navIconClass,
|
|
758
|
-
);
|
|
759
|
-
expect(wrappers.length).toBe(1);
|
|
760
|
-
}
|
|
761
|
-
});
|
|
762
|
-
|
|
763
|
-
it('keeps navigation semantics unchanged under dir="rtl"', async () => {
|
|
764
|
-
const user = userEvent.setup();
|
|
765
|
-
|
|
766
|
-
render(
|
|
767
|
-
<div dir="rtl">
|
|
768
|
-
<Calendar focusDate="2026-02-01" />
|
|
769
|
-
</div>,
|
|
770
|
-
);
|
|
771
|
-
|
|
772
|
-
expect(screen.getByText('February 2026')).toBeInTheDocument();
|
|
773
|
-
|
|
774
|
-
// DOM order and handlers must not change in RTL: flexbox already
|
|
775
|
-
// places "Previous month" at the visual right; only the glyph mirrors.
|
|
776
|
-
await user.click(getButton('Previous month'));
|
|
777
|
-
expect(screen.getByText('January 2026')).toBeInTheDocument();
|
|
778
|
-
|
|
779
|
-
await user.click(getButton('Next month'));
|
|
780
|
-
expect(screen.getByText('February 2026')).toBeInTheDocument();
|
|
781
|
-
});
|
|
782
|
-
});
|
|
783
678
|
});
|