@astryxdesign/core 0.1.4-canary.ff77e1c → 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.d.ts +1 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +23 -26
- 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.d.ts.map +1 -1
- package/dist/Toast/useToast.js +4 -44
- 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 +59 -59
- 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/theme/useTheme.d.ts +2 -3
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +6 -73
- 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/AvatarGroup/AvatarGroup.doc.mjs +0 -1
- 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.doc.mjs +1 -1
- 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 -5
- 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/EmptyState/EmptyState.doc.mjs +1 -1
- 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.doc.mjs +0 -1
- 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/MobileNav/MobileNav.test.tsx +0 -56
- package/src/MobileNav/MobileNav.tsx +8 -13
- 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/Outline/Outline.doc.mjs +0 -2
- 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.doc.mjs +0 -2
- 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.doc.mjs +0 -5
- 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/Toast/useToast.tsx +0 -41
- 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 +2 -126
- package/src/theme/useTheme.ts +6 -87
- 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/Toast/useToast.test.tsx +0 -258
- 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/theme/themingTargets.test.ts +0 -353
- 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
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file SizeContext.test.tsx
|
|
5
|
-
* @input Uses vitest, @testing-library/react, SizeContext module
|
|
6
|
-
* @output Characterization tests for SizeContext / useSize / SizeProvider
|
|
7
|
-
* @position Testing; validates the size-cascade resolution contract
|
|
8
|
-
*
|
|
9
|
-
* SYNC: When SizeContext.ts changes, update tests to match new behavior
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {describe, it, expect} from 'vitest';
|
|
13
|
-
import {renderHook, render, screen} from '@testing-library/react';
|
|
14
|
-
import {createElement, type ReactNode} from 'react';
|
|
15
|
-
import {
|
|
16
|
-
SizeContext,
|
|
17
|
-
SizeProvider,
|
|
18
|
-
useSize,
|
|
19
|
-
type ElementSize,
|
|
20
|
-
} from './SizeContext';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Wrap children in a SizeProvider set to `size`. Passing `null` mimics
|
|
24
|
-
* "no container is providing a size".
|
|
25
|
-
*/
|
|
26
|
-
function withProvider(size: ElementSize | null) {
|
|
27
|
-
return function Wrapper({children}: {children: ReactNode}) {
|
|
28
|
-
return <SizeProvider value={size}>{children}</SizeProvider>;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
describe('SizeContext', () => {
|
|
33
|
-
describe('context identity', () => {
|
|
34
|
-
it('defaults to null when read outside any provider', () => {
|
|
35
|
-
const {result} = renderHook(() => useSize());
|
|
36
|
-
// No provider + no prop + no explicit default → the 'md' fallback.
|
|
37
|
-
expect(result.current).toBe('md');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('exposes a displayName for devtools', () => {
|
|
41
|
-
expect(SizeContext.displayName).toBe('SizeContext');
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('SizeProvider is the context Provider itself', () => {
|
|
45
|
-
expect(SizeProvider).toBe(SizeContext.Provider);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
describe('useSize — resolution priority', () => {
|
|
50
|
-
it('returns the default "md" with no prop and no provider', () => {
|
|
51
|
-
const {result} = renderHook(() => useSize());
|
|
52
|
-
expect(result.current).toBe('md');
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('honors an explicit defaultSize when neither prop nor context is set', () => {
|
|
56
|
-
const {result} = renderHook(() => useSize(undefined, 'lg'));
|
|
57
|
-
expect(result.current).toBe('lg');
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('returns the explicit size prop when provided', () => {
|
|
61
|
-
const {result} = renderHook(() => useSize('sm'));
|
|
62
|
-
expect(result.current).toBe('sm');
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('prop wins over the explicit default', () => {
|
|
66
|
-
const {result} = renderHook(() => useSize('sm', 'lg'));
|
|
67
|
-
expect(result.current).toBe('sm');
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('inherits the size from an enclosing provider when no prop is passed', () => {
|
|
71
|
-
const {result} = renderHook(() => useSize(), {
|
|
72
|
-
wrapper: withProvider('lg'),
|
|
73
|
-
});
|
|
74
|
-
expect(result.current).toBe('lg');
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('prop wins over the inherited provider size', () => {
|
|
78
|
-
const {result} = renderHook(() => useSize('sm'), {
|
|
79
|
-
wrapper: withProvider('lg'),
|
|
80
|
-
});
|
|
81
|
-
expect(result.current).toBe('sm');
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('inherited context wins over the explicit default fallback', () => {
|
|
85
|
-
const {result} = renderHook(() => useSize(undefined, 'sm'), {
|
|
86
|
-
wrapper: withProvider('lg'),
|
|
87
|
-
});
|
|
88
|
-
expect(result.current).toBe('lg');
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('falls back to default when the provider value is explicitly null', () => {
|
|
92
|
-
const {result} = renderHook(() => useSize(undefined, 'sm'), {
|
|
93
|
-
wrapper: withProvider(null),
|
|
94
|
-
});
|
|
95
|
-
expect(result.current).toBe('sm');
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('falls back to "md" when provider is null and no default is given', () => {
|
|
99
|
-
const {result} = renderHook(() => useSize(), {
|
|
100
|
-
wrapper: withProvider(null),
|
|
101
|
-
});
|
|
102
|
-
expect(result.current).toBe('md');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
describe('useSize — every standard ElementSize resolves', () => {
|
|
107
|
-
const sizes: ElementSize[] = ['sm', 'md', 'lg'];
|
|
108
|
-
|
|
109
|
-
it.each(sizes)('resolves explicit prop "%s"', size => {
|
|
110
|
-
const {result} = renderHook(() => useSize(size));
|
|
111
|
-
expect(result.current).toBe(size);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it.each(sizes)('resolves inherited provider "%s"', size => {
|
|
115
|
-
const {result} = renderHook(() => useSize(), {
|
|
116
|
-
wrapper: withProvider(size),
|
|
117
|
-
});
|
|
118
|
-
expect(result.current).toBe(size);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
describe('useSize — nested providers', () => {
|
|
123
|
-
it('resolves to the nearest provider', () => {
|
|
124
|
-
function Nested({children}: {children: ReactNode}) {
|
|
125
|
-
return (
|
|
126
|
-
<SizeProvider value="sm">
|
|
127
|
-
<SizeProvider value="lg">{children}</SizeProvider>
|
|
128
|
-
</SizeProvider>
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
const {result} = renderHook(() => useSize(), {wrapper: Nested});
|
|
132
|
-
expect(result.current).toBe('lg');
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
it('a prop still overrides the nearest provider', () => {
|
|
136
|
-
function Nested({children}: {children: ReactNode}) {
|
|
137
|
-
return (
|
|
138
|
-
<SizeProvider value="sm">
|
|
139
|
-
<SizeProvider value="lg">{children}</SizeProvider>
|
|
140
|
-
</SizeProvider>
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
const {result} = renderHook(() => useSize('md'), {wrapper: Nested});
|
|
144
|
-
expect(result.current).toBe('md');
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
describe('useSize — generic (non-ElementSize) values', () => {
|
|
149
|
-
it('supports a custom string union via the type parameter', () => {
|
|
150
|
-
type Custom = 'compact' | 'comfortable';
|
|
151
|
-
const {result} = renderHook(() =>
|
|
152
|
-
useSize<Custom>('compact', 'comfortable'),
|
|
153
|
-
);
|
|
154
|
-
expect(result.current).toBe('compact');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('returns the custom default when no prop is given', () => {
|
|
158
|
-
type Custom = 'compact' | 'comfortable';
|
|
159
|
-
const {result} = renderHook(() =>
|
|
160
|
-
useSize<Custom>(undefined, 'comfortable'),
|
|
161
|
-
);
|
|
162
|
-
expect(result.current).toBe('comfortable');
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('empty-string prop is a real value and does NOT fall through to default', () => {
|
|
166
|
-
// '' ?? x === '' because nullish coalescing only catches null/undefined.
|
|
167
|
-
const {result} = renderHook(() => useSize('' as ElementSize, 'lg'));
|
|
168
|
-
expect(result.current).toBe('');
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
describe('integration — components consuming the cascade', () => {
|
|
173
|
-
function SizedProbe({size}: {size?: ElementSize}) {
|
|
174
|
-
const resolved = useSize(size);
|
|
175
|
-
return <span data-testid="probe">{resolved}</span>;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
it('a child with no size prop reads the container size', () => {
|
|
179
|
-
render(
|
|
180
|
-
<SizeProvider value="lg">
|
|
181
|
-
<SizedProbe />
|
|
182
|
-
</SizeProvider>,
|
|
183
|
-
);
|
|
184
|
-
expect(screen.getByTestId('probe')).toHaveTextContent('lg');
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('sibling children resolve independently against the same provider', () => {
|
|
188
|
-
render(
|
|
189
|
-
<SizeProvider value="lg">
|
|
190
|
-
<span data-testid="a">
|
|
191
|
-
<SizedProbe />
|
|
192
|
-
</span>
|
|
193
|
-
<span data-testid="b">
|
|
194
|
-
<SizedProbe size="sm" />
|
|
195
|
-
</span>
|
|
196
|
-
</SizeProvider>,
|
|
197
|
-
);
|
|
198
|
-
expect(screen.getByTestId('a')).toHaveTextContent('lg');
|
|
199
|
-
expect(screen.getByTestId('b')).toHaveTextContent('sm');
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it('re-renders with the new size when the provider value changes', () => {
|
|
203
|
-
const {rerender} = render(
|
|
204
|
-
<SizeProvider value="sm">
|
|
205
|
-
<SizedProbe />
|
|
206
|
-
</SizeProvider>,
|
|
207
|
-
);
|
|
208
|
-
expect(screen.getByTestId('probe')).toHaveTextContent('sm');
|
|
209
|
-
|
|
210
|
-
rerender(
|
|
211
|
-
<SizeProvider value="lg">
|
|
212
|
-
<SizedProbe />
|
|
213
|
-
</SizeProvider>,
|
|
214
|
-
);
|
|
215
|
-
expect(screen.getByTestId('probe')).toHaveTextContent('lg');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
it('works with createElement (no JSX) call form', () => {
|
|
219
|
-
const {result} = renderHook(() => useSize(), {
|
|
220
|
-
wrapper: ({children}: {children: ReactNode}) =>
|
|
221
|
-
createElement(SizeProvider, {value: 'sm'}, children),
|
|
222
|
-
});
|
|
223
|
-
expect(result.current).toBe('sm');
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
});
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file useToast.test.tsx
|
|
5
|
-
* @input Uses vitest, @testing-library/react, useToast/ToastViewport/Theme
|
|
6
|
-
* @output Unit tests for the fallback viewport's theme mode resolution
|
|
7
|
-
* @position Testing; validates useToast.tsx's attribute mirroring onto the
|
|
8
|
-
* fallback container, plus useTheme.ts's <html data-theme> fallback (which
|
|
9
|
-
* is what actually resolves Toast's JS-computed mode; see useTheme.test.tsx
|
|
10
|
-
* for direct coverage of that half)
|
|
11
|
-
*
|
|
12
|
-
* SYNC: When useToast.tsx's fallback container setup changes, update these tests
|
|
13
|
-
*
|
|
14
|
-
* The fallback viewport root is a module-level singleton, so it's mounted
|
|
15
|
-
* once (by whichever test runs first) and persists across every test in the
|
|
16
|
-
* file below — mirroring a real app whose root <Theme> mode changes over
|
|
17
|
-
* time. Each test dismisses its own toast in afterEach (see
|
|
18
|
-
* dismissAllFallbackToasts) so none linger as a useTheme subscriber into the
|
|
19
|
-
* next test.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import {describe, it, expect, vi, afterEach} from 'vitest';
|
|
23
|
-
import {render, screen, fireEvent, act, waitFor} from '@testing-library/react';
|
|
24
|
-
import React from 'react';
|
|
25
|
-
import {Theme} from '../theme/Theme';
|
|
26
|
-
import {defineTheme} from '../theme/defineTheme';
|
|
27
|
-
import {ToastViewport} from './ToastViewport';
|
|
28
|
-
import {useToast} from './useToast';
|
|
29
|
-
import type {ToastOptions} from './types';
|
|
30
|
-
|
|
31
|
-
const testTheme = defineTheme({name: 'test', tokens: {}});
|
|
32
|
-
const NO_AUTO_HIDE: ToastOptions = {body: 'hello', isAutoHide: false};
|
|
33
|
-
|
|
34
|
-
function mockMatchMedia(prefersDark: boolean) {
|
|
35
|
-
window.matchMedia = vi.fn().mockImplementation((query: string) => ({
|
|
36
|
-
matches: query.includes('dark') ? prefersDark : false,
|
|
37
|
-
media: query,
|
|
38
|
-
onchange: null,
|
|
39
|
-
addEventListener: vi.fn(),
|
|
40
|
-
removeEventListener: vi.fn(),
|
|
41
|
-
dispatchEvent: vi.fn(),
|
|
42
|
-
}));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function ShowToastButton({label = 'Trigger'}: {label?: string}) {
|
|
46
|
-
const toast = useToast();
|
|
47
|
-
return (
|
|
48
|
-
<button type="button" onClick={() => toast(NO_AUTO_HIDE)}>
|
|
49
|
-
{label}
|
|
50
|
-
</button>
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// The fallback's toasts accumulate in one persistent viewport across tests
|
|
55
|
-
// (see file header) — take the most recently added one.
|
|
56
|
-
function newestMediaAttr(scope: ParentNode): string | null {
|
|
57
|
-
const nodes = scope.querySelectorAll('[data-astryx-media]');
|
|
58
|
-
const last = nodes[nodes.length - 1];
|
|
59
|
-
return last ? last.getAttribute('data-astryx-media') : null;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Fire the transition-end that ToastViewport listens for to unmount an
|
|
63
|
-
// exiting toast (jsdom does not run CSS transitions) — mirrors
|
|
64
|
-
// ToastViewport.test.tsx's completeExit helper.
|
|
65
|
-
function completeExit(toastId: string) {
|
|
66
|
-
const node = document.querySelector<HTMLElement>(
|
|
67
|
-
`[data-toast-id="${toastId}"]`,
|
|
68
|
-
);
|
|
69
|
-
if (node) {
|
|
70
|
-
fireEvent.transitionEnd(node, {propertyName: 'grid-template-rows'});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Dismisses every toast still mounted in the fallback viewport so none of
|
|
75
|
-
// them remain subscribed to useTheme's shared MutationObserver by the time
|
|
76
|
-
// RTL's own cleanup unmounts this test's <Theme> — that unmount would
|
|
77
|
-
// otherwise notify a lingering subscriber outside any act scope.
|
|
78
|
-
async function dismissAllFallbackToasts(): Promise<void> {
|
|
79
|
-
const fallback = document.querySelector('[data-astryx-toast-fallback]');
|
|
80
|
-
const ids = Array.from(
|
|
81
|
-
fallback?.querySelectorAll<HTMLElement>('[data-toast-id]') ?? [],
|
|
82
|
-
).map(node => node.getAttribute('data-toast-id')!);
|
|
83
|
-
|
|
84
|
-
await act(async () => {
|
|
85
|
-
for (const id of ids) {
|
|
86
|
-
fallback
|
|
87
|
-
?.querySelector<HTMLElement>(
|
|
88
|
-
`[data-toast-id="${id}"] button[aria-label="Dismiss notification"]`,
|
|
89
|
-
)
|
|
90
|
-
?.click();
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
await act(async () => {
|
|
95
|
-
for (const id of ids) {
|
|
96
|
-
completeExit(id);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
describe('useToast fallback viewport theme mode', () => {
|
|
102
|
-
afterEach(async () => {
|
|
103
|
-
mockMatchMedia(false);
|
|
104
|
-
await dismissAllFallbackToasts();
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it('resolves the app mode (light) instead of OS preference (dark) with no LayerProvider', async () => {
|
|
108
|
-
mockMatchMedia(true); // OS prefers dark
|
|
109
|
-
|
|
110
|
-
render(
|
|
111
|
-
<Theme theme={testTheme} mode="light">
|
|
112
|
-
<ShowToastButton />
|
|
113
|
-
</Theme>,
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
// This is the very first click in the whole file, so it's the one that
|
|
117
|
-
// finds the fallback proxy still pending: addToast queues the entry and
|
|
118
|
-
// kicks off the ctxReady.then(...) microtask that later delivers it to
|
|
119
|
-
// the real context. Awaiting an async act() here flushes that chain
|
|
120
|
-
// instead of letting it resolve outside any act scope.
|
|
121
|
-
await act(async () => {
|
|
122
|
-
fireEvent.click(screen.getByText('Trigger'));
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
await waitFor(() => {
|
|
126
|
-
expect(
|
|
127
|
-
document.querySelector(
|
|
128
|
-
'[data-astryx-toast-fallback] [data-astryx-media]',
|
|
129
|
-
),
|
|
130
|
-
).not.toBeNull();
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// App mode is light, so the toast's inverted surface must be dark — if
|
|
134
|
-
// the fallback fell back to OS preference (dark) instead, this would be
|
|
135
|
-
// 'light' and the toast's text/icon would compute the same color as its
|
|
136
|
-
// own background (the invisible-toast bug).
|
|
137
|
-
expect(
|
|
138
|
-
newestMediaAttr(document.querySelector('[data-astryx-toast-fallback]')!),
|
|
139
|
-
).toBe('dark');
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('keeps the OS-preference fallback for mode="system" with no LayerProvider', async () => {
|
|
143
|
-
mockMatchMedia(true); // OS prefers dark
|
|
144
|
-
|
|
145
|
-
render(
|
|
146
|
-
<Theme theme={testTheme} mode="system">
|
|
147
|
-
<ShowToastButton label="Trigger System" />
|
|
148
|
-
</Theme>,
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
// The fallback viewport is a persistent module singleton (see file
|
|
152
|
-
// header), so earlier tests may have already added toasts to it — count
|
|
153
|
-
// beforehand instead of assuming a fixed prior count, so this test
|
|
154
|
-
// survives running alone (.only, -t, shuffle) as well as in sequence.
|
|
155
|
-
const countBefore = document.querySelectorAll(
|
|
156
|
-
'[data-astryx-toast-fallback] [data-astryx-media]',
|
|
157
|
-
).length;
|
|
158
|
-
|
|
159
|
-
act(() => {
|
|
160
|
-
fireEvent.click(screen.getByText('Trigger System'));
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
await waitFor(() => {
|
|
164
|
-
const nodes = document.querySelectorAll(
|
|
165
|
-
'[data-astryx-toast-fallback] [data-astryx-media]',
|
|
166
|
-
);
|
|
167
|
-
expect(nodes.length).toBeGreaterThan(countBefore);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// mode="system" means #1587 removes data-theme from <html> — useTheme's
|
|
171
|
-
// <html data-theme> fallback then has nothing to read, leaving its own
|
|
172
|
-
// OS-preference resolution (dark here) in place, same as before this fix.
|
|
173
|
-
expect(
|
|
174
|
-
newestMediaAttr(document.querySelector('[data-astryx-toast-fallback]')!),
|
|
175
|
-
).toBe('light');
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it('mirrors <html data-theme> and data-astryx-theme onto the fallback container', async () => {
|
|
179
|
-
mockMatchMedia(false);
|
|
180
|
-
|
|
181
|
-
const {rerender} = render(
|
|
182
|
-
<Theme theme={testTheme} mode="dark">
|
|
183
|
-
<ShowToastButton label="Trigger Mirror" />
|
|
184
|
-
</Theme>,
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
act(() => {
|
|
188
|
-
fireEvent.click(screen.getByText('Trigger Mirror'));
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
await waitFor(() => {
|
|
192
|
-
const fallback = document.querySelector(
|
|
193
|
-
'[data-astryx-toast-fallback]',
|
|
194
|
-
) as HTMLElement;
|
|
195
|
-
expect(fallback.getAttribute('data-theme')).toBe('dark');
|
|
196
|
-
expect(fallback.getAttribute('data-astryx-theme')).toBe('test');
|
|
197
|
-
// Inline color-scheme must follow the mirrored mode, not <html>'s own
|
|
198
|
-
// (possibly #3658-pinned) theme CSS — see useToast.tsx's syncRootThemeAttrs.
|
|
199
|
-
expect(fallback.style.colorScheme).toBe('dark');
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Flip the app mode: the shared MutationObserver re-syncs the container,
|
|
203
|
-
// so the inline color-scheme must follow it live.
|
|
204
|
-
rerender(
|
|
205
|
-
<Theme theme={testTheme} mode="light">
|
|
206
|
-
<ShowToastButton label="Trigger Mirror" />
|
|
207
|
-
</Theme>,
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
await waitFor(() => {
|
|
211
|
-
const fallback = document.querySelector(
|
|
212
|
-
'[data-astryx-toast-fallback]',
|
|
213
|
-
) as HTMLElement;
|
|
214
|
-
expect(fallback.getAttribute('data-theme')).toBe('light');
|
|
215
|
-
expect(fallback.style.colorScheme).toBe('light');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
// mode="system" removes <html data-theme> entirely — the inline property
|
|
219
|
-
// must be removed too, reverting to whatever the CSS otherwise resolves.
|
|
220
|
-
rerender(
|
|
221
|
-
<Theme theme={testTheme} mode="system">
|
|
222
|
-
<ShowToastButton label="Trigger Mirror" />
|
|
223
|
-
</Theme>,
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
await waitFor(() => {
|
|
227
|
-
const fallback = document.querySelector(
|
|
228
|
-
'[data-astryx-toast-fallback]',
|
|
229
|
-
) as HTMLElement;
|
|
230
|
-
expect(fallback.getAttribute('data-theme')).toBeNull();
|
|
231
|
-
expect(fallback.style.colorScheme).toBe('');
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
describe('useToast LayerProvider path', () => {
|
|
237
|
-
afterEach(() => {
|
|
238
|
-
mockMatchMedia(false);
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
it('resolves mode via real context, unaffected by the fallback provider', () => {
|
|
242
|
-
mockMatchMedia(true); // OS prefers dark; should be irrelevant here
|
|
243
|
-
|
|
244
|
-
const {container} = render(
|
|
245
|
-
<Theme theme={testTheme} mode="light">
|
|
246
|
-
<ToastViewport isTopLayer={false}>
|
|
247
|
-
<ShowToastButton label="Trigger Provider" />
|
|
248
|
-
</ToastViewport>
|
|
249
|
-
</Theme>,
|
|
250
|
-
);
|
|
251
|
-
|
|
252
|
-
act(() => {
|
|
253
|
-
fireEvent.click(screen.getByText('Trigger Provider'));
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
expect(newestMediaAttr(container)).toBe('dark');
|
|
257
|
-
});
|
|
258
|
-
});
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file TestIcon.tsx
|
|
5
|
-
* @input Standard SVG props
|
|
6
|
-
* @output A minimal SVG React component for tests
|
|
7
|
-
* @position Test fixture; a stand-in external SVG icon for Icon component-mode tests
|
|
8
|
-
*
|
|
9
|
-
* A trivial SVG component used by tests that need to pass a custom SVG icon to
|
|
10
|
-
* `Icon` (component mode) or component `*Icon` props. It forwards all standard
|
|
11
|
-
* SVG props and its ref so tests exercising prop/ref forwarding behave the same
|
|
12
|
-
* as a real third-party icon component.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import React, {type SVGProps} from 'react';
|
|
16
|
-
|
|
17
|
-
export function TestIcon({
|
|
18
|
-
ref,
|
|
19
|
-
...props
|
|
20
|
-
}: SVGProps<SVGSVGElement> & {ref?: React.Ref<SVGSVGElement>}) {
|
|
21
|
-
return (
|
|
22
|
-
<svg ref={ref} viewBox="0 0 24 24" {...props}>
|
|
23
|
-
<path d="M4 4h16v16H4z" />
|
|
24
|
-
</svg>
|
|
25
|
-
);
|
|
26
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file fastRoleQueries.ts
|
|
5
|
-
* @input Uses @testing-library/react screen, dom-accessibility-api
|
|
6
|
-
* @output getButton/queryButton — role+name lookups that stay O(match) in jsdom
|
|
7
|
-
* @position Shared test helper; imported by component tests that render large
|
|
8
|
-
* always-mounted button collections (Calendar month grids)
|
|
9
|
-
*
|
|
10
|
-
* RTL's getByRole('button', {name}) computes the accessible name of EVERY
|
|
11
|
-
* role candidate before filtering, and each computation consults jsdom's slow
|
|
12
|
-
* getComputedStyle (~5ms per node). The date components keep a month grid of
|
|
13
|
-
* ~35–85 role=button nodes mounted — visible in Calendar's case, inside the
|
|
14
|
-
* closed popover for the *Input components — so a single trigger lookup cost
|
|
15
|
-
* ~450ms and dominated those suites' runtime (DateRangeInput: 34s for 34
|
|
16
|
-
* tests before this helper existed).
|
|
17
|
-
*
|
|
18
|
-
* These helpers keep RTL's exact name algorithm (dom-accessibility-api is the
|
|
19
|
-
* library RTL uses internally) but:
|
|
20
|
-
* - collect candidates with {hidden: true}, skipping the per-node
|
|
21
|
-
* getComputedStyle visibility checks, and
|
|
22
|
-
* - inject a constant "visible" style stub into the name computation —
|
|
23
|
-
* names only consult display/visibility, and under {hidden: true}
|
|
24
|
-
* semantics visibility must not exclude candidates anyway.
|
|
25
|
-
*
|
|
26
|
-
* Trade-off vs getByRole: first match wins — no tree-wide uniqueness check.
|
|
27
|
-
*
|
|
28
|
-
* SYNC: When modified, update this header.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
import {screen} from '@testing-library/react';
|
|
32
|
-
import {computeAccessibleName} from 'dom-accessibility-api';
|
|
33
|
-
|
|
34
|
-
// The name algorithm only reads getPropertyValue (for display/visibility/
|
|
35
|
-
// content), so a Pick is all we need to type honestly — no object-literal
|
|
36
|
-
// cast. The widening to CSSStyleDeclaration happens at the call site, where
|
|
37
|
-
// getComputedStyle's signature demands the full type.
|
|
38
|
-
const visibleStyleStub: Pick<CSSStyleDeclaration, 'getPropertyValue'> = {
|
|
39
|
-
getPropertyValue: prop =>
|
|
40
|
-
prop === 'display' ? 'block' : prop === 'visibility' ? 'visible' : '',
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
function matchesName(el: Element, name: string | RegExp): boolean {
|
|
44
|
-
const accessibleName = computeAccessibleName(el, {
|
|
45
|
-
getComputedStyle: () => visibleStyleStub as CSSStyleDeclaration,
|
|
46
|
-
});
|
|
47
|
-
return typeof name === 'string'
|
|
48
|
-
? accessibleName === name
|
|
49
|
-
: name.test(accessibleName);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function queryButton(name: string | RegExp): HTMLElement | null {
|
|
53
|
-
return (
|
|
54
|
-
screen
|
|
55
|
-
.queryAllByRole('button', {hidden: true})
|
|
56
|
-
.find(el => matchesName(el, name)) ?? null
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function getButton(name: string | RegExp): HTMLElement {
|
|
61
|
-
const el = queryButton(name);
|
|
62
|
-
if (!el) {
|
|
63
|
-
throw new Error(`Unable to find a role=button named ${String(name)}`);
|
|
64
|
-
}
|
|
65
|
-
return el;
|
|
66
|
-
}
|