@astryxdesign/core 0.2.0 → 0.3.0
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/CHANGELOG.md +110 -0
- package/README.md +5 -3
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.js +1 -1
- package/dist/AppShell/AppShell.d.ts +2 -20
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +25 -18
- package/dist/AppShell/index.d.ts +20 -1
- package/dist/AppShell/index.d.ts.map +1 -1
- package/dist/AppShell/index.js +14 -0
- package/dist/AspectRatio/AspectRatio.d.ts +1 -1
- package/dist/AspectRatio/AspectRatio.js +1 -1
- package/dist/Avatar/Avatar.d.ts +1 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +4 -4
- package/dist/Avatar/AvatarStatusDot.d.ts +2 -26
- package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
- package/dist/Avatar/AvatarStatusDot.js +1 -22
- package/dist/Avatar/index.d.ts +26 -1
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +21 -0
- package/dist/AvatarGroup/AvatarGroup.d.ts +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +4 -8
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +2 -2
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +7 -3
- package/dist/Badge/Badge.d.ts +2 -30
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +2 -17
- package/dist/Badge/index.d.ts +31 -2
- package/dist/Badge/index.d.ts.map +1 -1
- package/dist/Badge/index.js +15 -1
- package/dist/Banner/Banner.d.ts +2 -37
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +6 -34
- package/dist/Banner/index.d.ts +37 -1
- package/dist/Banner/index.d.ts.map +1 -1
- package/dist/Banner/index.js +27 -0
- package/dist/Blockquote/Blockquote.d.ts +1 -1
- package/dist/Blockquote/Blockquote.js +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +4 -3
- package/dist/Breadcrumbs/Breadcrumbs.d.ts +2 -18
- package/dist/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.js +1 -15
- package/dist/Breadcrumbs/index.d.ts +18 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +14 -0
- package/dist/Button/Button.d.ts +3 -21
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +6 -19
- package/dist/Button/index.d.ts +21 -3
- package/dist/Button/index.d.ts.map +1 -1
- package/dist/Button/index.js +15 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/Calendar/Calendar.js +1 -1
- package/dist/Calendar/index.d.ts +1 -1
- package/dist/Calendar/index.d.ts.map +1 -1
- package/dist/Calendar/index.js +1 -1
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.js +2 -2
- package/dist/Calendar/utils.d.ts +0 -4
- package/dist/Calendar/utils.d.ts.map +1 -1
- package/dist/Calendar/utils.js +1 -8
- package/dist/Card/Card.d.ts +1 -1
- package/dist/Card/Card.js +1 -1
- package/dist/Carousel/Carousel.d.ts +54 -3
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +82 -15
- package/dist/Carousel/index.d.ts +1 -1
- package/dist/Carousel/index.d.ts.map +1 -1
- package/dist/Center/Center.d.ts +21 -4
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +11 -3
- package/dist/Chat/ChatComposer.d.ts +1 -1
- package/dist/Chat/ChatComposer.js +9 -9
- package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
- package/dist/Chat/ChatComposerDrawer.js +5 -5
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.js +1 -1
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.js +1 -1
- package/dist/Chat/ChatLayout.d.ts +8 -1
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +15 -4
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +1 -1
- package/dist/Chat/ChatMessage.d.ts +1 -1
- package/dist/Chat/ChatMessage.js +1 -1
- package/dist/Chat/ChatMessageBubble.d.ts +1 -1
- package/dist/Chat/ChatMessageBubble.js +1 -1
- package/dist/Chat/ChatMessageList.d.ts +1 -1
- package/dist/Chat/ChatMessageList.js +1 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +4 -2
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.js +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +3 -3
- package/dist/CheckboxList/CheckboxList.d.ts +1 -1
- package/dist/CheckboxList/CheckboxList.js +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +20 -5
- package/dist/Citation/Citation.d.ts +1 -1
- package/dist/Citation/Citation.js +1 -1
- package/dist/ClickableCard/ClickableCard.d.ts +3 -3
- package/dist/ClickableCard/ClickableCard.js +3 -3
- package/dist/Code/Code.d.ts +2 -2
- package/dist/Code/Code.js +2 -2
- package/dist/CodeBlock/CodeBlock.js +2 -2
- package/dist/Collapsible/Collapsible.d.ts +1 -1
- package/dist/Collapsible/Collapsible.js +3 -3
- package/dist/Collapsible/CollapsibleGroup.d.ts +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +1 -1
- package/dist/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/CommandPalette/CommandPalette.js +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.js +1 -1
- package/dist/CommandPalette/CommandPaletteFooter.js +1 -1
- package/dist/CommandPalette/CommandPaletteGroup.js +1 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts +2 -2
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +4 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +1 -1
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts +108 -0
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -0
- package/dist/ComplexSelector/ComplexSelector.js +316 -0
- package/dist/ComplexSelector/index.d.ts +7 -0
- package/dist/ComplexSelector/index.d.ts.map +1 -0
- package/dist/ComplexSelector/index.js +10 -0
- package/dist/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +24 -6
- package/dist/DateInput/DateInput.js +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +1 -1
- package/dist/Dialog/Dialog.d.ts +33 -24
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +47 -31
- package/dist/Dialog/DialogHeader.d.ts +1 -1
- package/dist/Dialog/DialogHeader.js +1 -1
- package/dist/Dialog/index.d.ts +18 -1
- package/dist/Dialog/index.d.ts.map +1 -1
- package/dist/Dialog/index.js +14 -0
- package/dist/Divider/Divider.d.ts +2 -18
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +1 -15
- package/dist/Divider/index.d.ts +18 -1
- package/dist/Divider/index.d.ts.map +1 -1
- package/dist/Divider/index.js +14 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts +9 -3
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +23 -19
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +18 -12
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +38 -63
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +3 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +6 -2
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +14 -6
- package/dist/DropdownMenu/menuItemHover.d.ts +1 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemHover.js +1 -0
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +6 -4
- package/dist/EmptyState/EmptyState.d.ts +1 -1
- package/dist/EmptyState/EmptyState.js +1 -1
- package/dist/Field/Field.d.ts +1 -1
- package/dist/Field/Field.js +1 -1
- package/dist/Field/FieldLabel.d.ts +4 -3
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +48 -5
- package/dist/FieldStatus/FieldStatus.d.ts +1 -18
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +13 -17
- package/dist/FieldStatus/index.d.ts +19 -1
- package/dist/FieldStatus/index.d.ts.map +1 -1
- package/dist/FieldStatus/index.js +14 -0
- package/dist/FileInput/FileInput.js +1 -1
- package/dist/FormLayout/FormLayout.d.ts +1 -1
- package/dist/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/FormLayout/FormLayout.js +1 -1
- package/dist/Grid/Grid.d.ts +2 -10
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +1 -10
- package/dist/Grid/GridSpan.d.ts +1 -1
- package/dist/Grid/GridSpan.js +1 -1
- package/dist/HStack/HStack.d.ts +1 -1
- package/dist/HStack/HStack.js +1 -1
- package/dist/Heading/Heading.d.ts +2 -2
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +5 -4
- package/dist/HoverCard/HoverCard.d.ts +1 -1
- package/dist/HoverCard/HoverCard.js +1 -1
- package/dist/Icon/Icon.d.ts +1 -1
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +4 -2
- package/dist/Icon/defaultIcons.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.js +14 -0
- package/dist/Icon/globalIconRegistry.d.ts +48 -6
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +74 -7
- package/dist/Icon/index.d.ts +4 -3
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/index.js +2 -1
- package/dist/Icon/useIcon.d.ts +14 -0
- package/dist/Icon/useIcon.d.ts.map +1 -0
- package/dist/Icon/useIcon.js +21 -0
- package/dist/IconButton/IconButton.d.ts +1 -1
- package/dist/IconButton/IconButton.js +1 -1
- package/dist/InputGroup/InputGroup.d.ts +1 -1
- package/dist/InputGroup/InputGroup.js +1 -1
- package/dist/InputGroup/InputGroupText.d.ts +1 -1
- package/dist/InputGroup/InputGroupText.js +1 -1
- package/dist/Item/Item.d.ts +17 -4
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +32 -7
- package/dist/Kbd/Kbd.d.ts +1 -1
- package/dist/Kbd/Kbd.js +1 -1
- package/dist/Layout/Layout.d.ts +1 -1
- package/dist/Layout/Layout.js +1 -1
- package/dist/Layout/LayoutContent.d.ts +1 -1
- package/dist/Layout/LayoutContent.js +1 -1
- package/dist/Layout/LayoutFooter.d.ts +1 -1
- package/dist/Layout/LayoutFooter.js +1 -1
- package/dist/Layout/LayoutHeader.d.ts +1 -1
- package/dist/Layout/LayoutHeader.js +1 -1
- package/dist/Layout/LayoutPanel.d.ts +1 -1
- package/dist/Layout/LayoutPanel.js +1 -1
- package/dist/Lightbox/Lightbox.d.ts +6 -4
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +117 -26
- package/dist/Link/Link.d.ts +1 -1
- package/dist/Link/Link.js +1 -1
- package/dist/Link/LinkProvider.d.ts +2 -2
- package/dist/Link/LinkProvider.js +2 -2
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.js +1 -1
- package/dist/List/ListItem.d.ts +12 -2
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +3 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +35 -13
- package/dist/MetadataList/MetadataList.d.ts +2 -2
- package/dist/MetadataList/MetadataList.d.ts.map +1 -1
- package/dist/MetadataList/MetadataList.js +38 -12
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts +1 -1
- package/dist/MobileNav/MobileNav.js +1 -1
- package/dist/MoreMenu/MoreMenu.d.ts +1 -1
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.d.ts +13 -4
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +118 -24
- package/dist/NavIcon/NavIcon.d.ts +1 -1
- package/dist/NavIcon/NavIcon.js +1 -1
- package/dist/NavMenu/index.d.ts +0 -2
- package/dist/NavMenu/index.d.ts.map +1 -1
- package/dist/NavMenu/index.js +1 -3
- package/dist/NumberInput/NumberInput.d.ts +1 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +16 -5
- package/dist/Outline/Outline.js +1 -1
- package/dist/OverflowList/OverflowList.d.ts +1 -1
- package/dist/OverflowList/OverflowList.js +1 -1
- package/dist/Pagination/Pagination.d.ts +26 -21
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +169 -41
- package/dist/Pagination/index.d.ts +22 -1
- package/dist/Pagination/index.d.ts.map +1 -1
- package/dist/Pagination/index.js +14 -0
- package/dist/Popover/Popover.d.ts +20 -3
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +5 -1
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -3
- package/dist/PowerSearch/PowerSearch.d.ts +1 -1
- package/dist/PowerSearch/PowerSearch.js +1 -1
- package/dist/ProgressBar/ProgressBar.d.ts +49 -22
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +79 -22
- package/dist/ProgressBar/ProgressBarMarkTooltip.d.ts +27 -0
- package/dist/ProgressBar/ProgressBarMarkTooltip.d.ts.map +1 -0
- package/dist/ProgressBar/ProgressBarMarkTooltip.js +35 -0
- package/dist/ProgressBar/index.d.ts +21 -1
- package/dist/ProgressBar/index.d.ts.map +1 -1
- package/dist/ProgressBar/index.js +14 -0
- package/dist/RadioList/RadioList.d.ts +1 -1
- package/dist/RadioList/RadioList.js +1 -1
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +2 -2
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +15 -11
- package/dist/Section/Section.d.ts +2 -19
- package/dist/Section/Section.d.ts.map +1 -1
- package/dist/Section/Section.js +1 -15
- package/dist/Section/index.d.ts +19 -1
- package/dist/Section/index.d.ts.map +1 -1
- package/dist/Section/index.js +14 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +4 -3
- package/dist/SelectableCard/SelectableCard.d.ts +4 -3
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +15 -3
- package/dist/Selector/Selector.d.ts +12 -3
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +109 -21
- package/dist/SideNav/SideNav.d.ts +1 -1
- package/dist/SideNav/SideNav.js +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +4 -3
- package/dist/SideNav/SideNavHeading.d.ts +1 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +8 -7
- package/dist/SideNav/SideNavItem.d.ts +2 -2
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +6 -7
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.js +1 -1
- package/dist/Skeleton/Skeleton.d.ts +1 -1
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +78 -68
- package/dist/Spinner/Spinner.d.ts +1 -1
- package/dist/Spinner/Spinner.js +1 -1
- package/dist/Stack/Stack.d.ts +1 -1
- package/dist/Stack/Stack.js +1 -1
- package/dist/Stack/StackItem.d.ts +1 -1
- package/dist/Stack/StackItem.js +1 -1
- package/dist/StatusDot/StatusDot.d.ts +1 -20
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +2 -17
- package/dist/StatusDot/index.d.ts +21 -1
- package/dist/StatusDot/index.d.ts.map +1 -1
- package/dist/StatusDot/index.js +14 -0
- package/dist/Switch/Switch.d.ts +2 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +18 -10
- package/dist/TabList/Tab.d.ts +1 -1
- package/dist/TabList/Tab.js +1 -1
- package/dist/TabList/TabList.d.ts +1 -1
- package/dist/TabList/TabList.js +1 -1
- package/dist/TabList/TabMenu.d.ts +1 -1
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +11 -3
- package/dist/Table/BaseTable.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +4 -7
- package/dist/Table/Table.d.ts +1 -1
- package/dist/Table/Table.js +1 -1
- package/dist/Table/TableCell.d.ts +1 -1
- package/dist/Table/TableCell.js +4 -2
- package/dist/Table/TableHeaderCell.d.ts +1 -1
- package/dist/Table/TableHeaderCell.js +4 -2
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.js +1 -1
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +18 -3
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +36 -2
- package/dist/Table/types.d.ts +0 -9
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Text/Text.d.ts +11 -2
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +26 -3
- package/dist/Text/index.d.ts +31 -1
- package/dist/Text/index.d.ts.map +1 -1
- package/dist/Text/index.js +23 -0
- package/dist/TextArea/TextArea.d.ts +1 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +107 -39
- package/dist/TextInput/TextInput.d.ts +1 -1
- package/dist/TextInput/TextInput.js +1 -1
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +52 -46
- package/dist/TimeInput/TimeInput.js +1 -1
- package/dist/Timestamp/Timestamp.d.ts +26 -12
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +128 -65
- package/dist/Timestamp/TimestampHoverCard.d.ts +45 -0
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -0
- package/dist/Timestamp/TimestampHoverCard.js +228 -0
- package/dist/Timestamp/formatInstant.d.ts +3 -3
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +7 -2
- package/dist/Timestamp/tooltipEntries.d.ts +17 -2
- package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
- package/dist/Timestamp/tooltipEntries.js +4 -2
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +61 -9
- package/dist/ToggleButton/ToggleButton.d.ts +1 -1
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +4 -2
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +1 -1
- package/dist/Token/Token.d.ts +6 -28
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +69 -58
- package/dist/Token/TokenLink.d.ts +62 -0
- package/dist/Token/TokenLink.d.ts.map +1 -0
- package/dist/Token/TokenLink.js +76 -0
- package/dist/Token/index.d.ts +27 -1
- package/dist/Token/index.d.ts.map +1 -1
- package/dist/Token/index.js +14 -0
- package/dist/Tokenizer/Tokenizer.d.ts +1 -1
- package/dist/Tokenizer/Tokenizer.js +1 -1
- package/dist/Toolbar/Toolbar.d.ts +1 -1
- package/dist/Toolbar/Toolbar.js +1 -1
- package/dist/Tooltip/Tooltip.d.ts +1 -1
- package/dist/Tooltip/Tooltip.js +1 -1
- package/dist/TopNav/TopNav.d.ts +1 -1
- package/dist/TopNav/TopNav.js +1 -1
- package/dist/TopNav/TopNavHeading.d.ts +2 -8
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +8 -10
- package/dist/TopNav/TopNavItem.d.ts +1 -1
- package/dist/TopNav/TopNavItem.js +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +15 -7
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +1 -1
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +5 -4
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.js +1 -1
- package/dist/TreeList/TreeListBranches.js +1 -1
- package/dist/TreeList/TreeListItem.d.ts +1 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +4 -3
- package/dist/TreeList/TreeListTypes.d.ts +1 -17
- package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
- package/dist/TreeList/index.d.ts +18 -1
- package/dist/TreeList/index.d.ts.map +1 -1
- package/dist/TreeList/index.js +14 -0
- package/dist/Typeahead/BaseTypeahead.d.ts +10 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +3 -1
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +9 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.js +1 -1
- package/dist/VStack/VStack.d.ts +1 -1
- package/dist/VStack/VStack.js +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +1 -1
- package/dist/astryx.css +111 -33
- package/dist/astryx.umd.js +50 -54
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.pool.stylex.d.ts +303 -0
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.pool.stylex.js +292 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/hooks/useContainerReveal.d.ts +83 -0
- package/dist/hooks/useContainerReveal.d.ts.map +1 -0
- package/dist/hooks/useContainerReveal.js +123 -0
- package/dist/hooks/useGridFocus.d.ts +8 -6
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useInputContainer.d.ts.map +1 -1
- package/dist/hooks/useInputContainer.js +29 -1
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +11 -0
- package/dist/hooks/useKeyboardHint.d.ts +2 -2
- package/dist/hooks/useKeyboardHint.d.ts.map +1 -1
- package/dist/hooks/useKeyboardHint.js +5 -3
- package/dist/hooks/useListFocus.d.ts +8 -7
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +13 -2
- package/dist/i18n/InternationalizationProvider.d.ts +6 -0
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/useDirection.d.ts.map +1 -1
- package/dist/i18n/useDirection.js +6 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +2 -7
- package/dist/theme/contrast.d.ts +45 -0
- package/dist/theme/contrast.d.ts.map +1 -0
- package/dist/theme/contrast.js +88 -0
- package/dist/theme/defineTheme.d.ts +9 -3
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +6 -4
- package/dist/theme/expandColorScale.d.ts +29 -2
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +91 -12
- package/dist/theme/generateThemeRules.d.ts +0 -6
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +0 -15
- package/dist/theme/index.d.ts +9 -7
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +4 -3
- package/dist/theme/themeRegistry.d.ts +32 -0
- package/dist/theme/themeRegistry.d.ts.map +1 -0
- package/dist/theme/themeRegistry.js +49 -0
- package/dist/theme/tokens.stylex.d.ts +0 -17
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +0 -22
- package/dist/theme/types.d.ts +10 -2
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/useTheme.d.ts +9 -0
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +82 -27
- package/dist/utils/rtlStyles.d.ts +21 -0
- package/dist/utils/rtlStyles.d.ts.map +1 -1
- package/dist/utils/rtlStyles.js +26 -1
- package/groups.doc.mjs +2 -2
- package/locales/en.json +124 -0
- package/locales/pseudo.json +93 -0
- package/package.json +10 -14
- package/src/AlertDialog/AlertDialog.doc.mjs +3 -3
- package/src/AlertDialog/AlertDialog.tsx +1 -1
- package/src/AlertDialog/useImperativeAlertDialog.doc.mjs +1 -1
- package/src/AppShell/AppShell.doc.mjs +3 -3
- package/src/AppShell/AppShell.test.tsx +55 -0
- package/src/AppShell/AppShell.tsx +27 -22
- package/src/AppShell/index.ts +20 -1
- package/src/AppShell/useAppShellMobile.doc.mjs +2 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
- package/src/AspectRatio/AspectRatio.tsx +1 -1
- package/src/Avatar/Avatar.doc.mjs +3 -3
- package/src/Avatar/Avatar.tsx +8 -3
- package/src/Avatar/AvatarStatusDot.doc.mjs +1 -1
- package/src/Avatar/AvatarStatusDot.tsx +2 -27
- package/src/Avatar/index.ts +26 -1
- package/src/AvatarGroup/AvatarGroup.doc.mjs +3 -3
- package/src/AvatarGroup/AvatarGroup.test.tsx +21 -1
- package/src/AvatarGroup/AvatarGroup.tsx +3 -7
- package/src/AvatarGroup/AvatarGroupOverflow.doc.mjs +1 -1
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +5 -3
- package/src/Badge/Badge.doc.mjs +3 -3
- package/src/Badge/Badge.tsx +2 -31
- package/src/Badge/index.ts +32 -6
- package/src/Banner/Banner.doc.mjs +3 -3
- package/src/Banner/Banner.tsx +8 -45
- package/src/Banner/index.ts +39 -7
- package/src/Blockquote/Blockquote.doc.mjs +3 -3
- package/src/Blockquote/Blockquote.tsx +1 -1
- package/src/Breadcrumbs/BreadcrumbItem.doc.mjs +1 -1
- package/src/Breadcrumbs/BreadcrumbItem.tsx +5 -3
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +3 -3
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +1 -1
- package/src/Breadcrumbs/Breadcrumbs.tsx +2 -19
- package/src/Breadcrumbs/index.ts +19 -5
- package/src/Button/Button.doc.mjs +3 -3
- package/src/Button/Button.test.tsx +16 -0
- package/src/Button/Button.tsx +6 -23
- package/src/Button/index.ts +22 -7
- package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -3
- package/src/ButtonGroup/ButtonGroup.tsx +1 -1
- package/src/Calendar/Calendar.doc.mjs +3 -3
- package/src/Calendar/Calendar.test.tsx +22 -6
- package/src/Calendar/Calendar.tsx +1 -1
- package/src/Calendar/index.ts +1 -6
- package/src/Calendar/styles.ts +2 -2
- package/src/Calendar/utils.ts +0 -11
- package/src/Card/Card.doc.mjs +3 -3
- package/src/Card/Card.tsx +1 -1
- package/src/Carousel/Carousel.doc.mjs +10 -3
- package/src/Carousel/Carousel.test.tsx +232 -1
- package/src/Carousel/Carousel.tsx +144 -21
- package/src/Carousel/index.ts +1 -1
- package/src/Center/Center.doc.mjs +41 -3
- package/src/Center/Center.test.tsx +75 -0
- package/src/Center/Center.tsx +38 -3
- package/src/Chat/Chat.doc.mjs +3 -3
- package/src/Chat/ChatComposer.doc.mjs +1 -1
- package/src/Chat/ChatComposer.tsx +5 -5
- package/src/Chat/ChatComposerDrawer.doc.mjs +1 -1
- package/src/Chat/ChatComposerDrawer.tsx +5 -5
- package/src/Chat/ChatComposerInput.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.tsx +1 -1
- package/src/Chat/ChatComposerTokenElement.doc.mjs +1 -1
- package/src/Chat/ChatDictationButton.doc.mjs +3 -3
- package/src/Chat/ChatDictationButton.tsx +1 -1
- package/src/Chat/ChatLayout.doc.mjs +1 -1
- package/src/Chat/ChatLayout.test.tsx +57 -0
- package/src/Chat/ChatLayout.tsx +23 -2
- package/src/Chat/ChatLayoutScrollButton.doc.mjs +1 -1
- package/src/Chat/ChatLayoutScrollButton.tsx +1 -1
- package/src/Chat/ChatMessage.doc.mjs +1 -1
- package/src/Chat/ChatMessage.tsx +1 -1
- package/src/Chat/ChatMessageBubble.doc.mjs +1 -1
- package/src/Chat/ChatMessageBubble.tsx +1 -1
- package/src/Chat/ChatMessageList.doc.mjs +1 -1
- package/src/Chat/ChatMessageList.tsx +1 -1
- package/src/Chat/ChatMessageMetadata.doc.mjs +1 -1
- package/src/Chat/ChatSendButton.doc.mjs +1 -1
- package/src/Chat/ChatSendButton.tsx +5 -3
- package/src/Chat/ChatSystemMessage.doc.mjs +1 -1
- package/src/Chat/ChatSystemMessage.tsx +1 -1
- package/src/Chat/ChatTokenizedText.doc.mjs +1 -1
- package/src/Chat/ChatTokenizedText.tsx +1 -1
- package/src/Chat/ChatToolCalls.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +56 -0
- package/src/CheckboxInput/CheckboxInput.tsx +18 -3
- package/src/CheckboxList/CheckboxList.doc.mjs +3 -3
- package/src/CheckboxList/CheckboxList.test.tsx +94 -3
- package/src/CheckboxList/CheckboxList.tsx +1 -1
- package/src/CheckboxList/CheckboxListItem.doc.mjs +1 -1
- package/src/CheckboxList/CheckboxListItem.tsx +18 -11
- package/src/Citation/Citation.doc.mjs +2 -2
- package/src/Citation/Citation.tsx +1 -1
- package/src/ClickableCard/ClickableCard.doc.mjs +2 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -3
- package/src/Code/Code.tsx +2 -2
- package/src/CodeBlock/Code.doc.mjs +1 -1
- package/src/CodeBlock/CodeBlock.doc.mjs +3 -3
- package/src/CodeBlock/CodeBlock.test.tsx +17 -0
- package/src/CodeBlock/CodeBlock.tsx +2 -2
- package/src/Collapsible/Collapsible.doc.mjs +3 -3
- package/src/Collapsible/Collapsible.tsx +3 -3
- package/src/Collapsible/CollapsibleGroup.doc.mjs +1 -1
- package/src/Collapsible/CollapsibleGroup.tsx +1 -1
- package/src/Collapsible/CollapsibleGroupContext.tsx +1 -1
- package/src/Collapsible/useCollapsible.doc.mjs +2 -2
- package/src/CommandPalette/CommandPalette.doc.mjs +4 -4
- package/src/CommandPalette/CommandPalette.tsx +1 -1
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteEmpty.tsx +1 -1
- package/src/CommandPalette/CommandPaletteFooter.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteFooter.tsx +1 -1
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteGroup.test.tsx +6 -2
- package/src/CommandPalette/CommandPaletteGroup.tsx +1 -1
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteInput.tsx +5 -1
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
- package/src/CommandPalette/CommandPaletteList.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteList.tsx +1 -1
- package/src/ComplexSelector/ComplexSelector.doc.mjs +179 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +156 -0
- package/src/ComplexSelector/ComplexSelector.tsx +429 -0
- package/src/ComplexSelector/index.ts +17 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +3 -3
- package/src/ContextMenu/ContextMenu.test.tsx +17 -2
- package/src/ContextMenu/ContextMenu.tsx +27 -6
- package/src/ContextMenu/ContextMenuItem.doc.mjs +1 -1
- package/src/DateInput/DateInput.doc.mjs +3 -3
- package/src/DateInput/DateInput.test.tsx +7 -3
- package/src/DateInput/DateInput.tsx +1 -1
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +7 -2
- package/src/DateRangeInput/DateRangeInput.tsx +1 -1
- package/src/DateTimeInput/DateTimeInput.doc.mjs +3 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +6 -2
- package/src/DateTimeInput/DateTimeInput.tsx +1 -1
- package/src/Dialog/Dialog.doc.mjs +7 -5
- package/src/Dialog/Dialog.test.tsx +46 -3
- package/src/Dialog/Dialog.tsx +61 -44
- package/src/Dialog/DialogHeader.doc.mjs +1 -1
- package/src/Dialog/DialogHeader.tsx +1 -1
- package/src/Dialog/index.ts +18 -1
- package/src/Dialog/useImperativeDialog.doc.mjs +1 -1
- package/src/Divider/Divider.doc.mjs +3 -3
- package/src/Divider/Divider.tsx +2 -19
- package/src/Divider/index.ts +19 -5
- package/src/DropdownMenu/DropdownMenu.doc.mjs +20 -5
- package/src/DropdownMenu/DropdownMenu.test.tsx +122 -0
- package/src/DropdownMenu/DropdownMenu.tsx +31 -20
- package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +41 -64
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenuItem.tsx +1 -1
- package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +5 -13
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +9 -10
- package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +11 -2
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +84 -2
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +46 -1
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +24 -8
- package/src/DropdownMenu/menuItemHover.ts +1 -0
- package/src/DropdownMenu/renderDropdownItems.tsx +14 -2
- package/src/EmptyState/EmptyState.doc.mjs +3 -3
- package/src/EmptyState/EmptyState.tsx +1 -1
- package/src/Field/Field.doc.mjs +7 -3
- package/src/Field/Field.tsx +1 -1
- package/src/Field/FieldLabel.doc.mjs +1 -1
- package/src/Field/FieldLabel.test.tsx +103 -0
- package/src/Field/FieldLabel.tsx +61 -5
- package/src/FieldStatus/FieldStatus.doc.mjs +3 -2
- package/src/FieldStatus/FieldStatus.test.tsx +61 -0
- package/src/FieldStatus/FieldStatus.tsx +16 -23
- package/src/FieldStatus/index.ts +20 -5
- package/src/FileInput/FileInput.doc.mjs +3 -3
- package/src/FileInput/FileInput.tsx +1 -1
- package/src/FormLayout/FormLayout.doc.mjs +3 -3
- package/src/FormLayout/FormLayout.tsx +2 -5
- package/src/Grid/Grid.doc.mjs +3 -8
- package/src/Grid/Grid.tsx +1 -25
- package/src/Grid/GridSpan.doc.mjs +1 -1
- package/src/Grid/GridSpan.tsx +1 -1
- package/src/HStack/HStack.tsx +1 -1
- package/src/Heading/Heading.tsx +4 -3
- package/src/HoverCard/HoverCard.doc.mjs +3 -3
- package/src/HoverCard/HoverCard.tsx +1 -1
- package/src/HoverCard/useHoverCard.doc.mjs +2 -2
- package/src/Icon/Icon.doc.mjs +7 -6
- package/src/Icon/Icon.test.tsx +23 -0
- package/src/Icon/Icon.tsx +4 -2
- package/src/Icon/defaultIcons.tsx +14 -0
- package/src/Icon/globalIconRegistry.test.tsx +87 -1
- package/src/Icon/globalIconRegistry.tsx +111 -9
- package/src/Icon/index.ts +9 -7
- package/src/Icon/useIcon.ts +23 -0
- package/src/IconButton/IconButton.doc.mjs +2 -2
- package/src/IconButton/IconButton.tsx +1 -1
- package/src/InputGroup/InputGroup.doc.mjs +2 -2
- package/src/InputGroup/InputGroup.tsx +1 -1
- package/src/InputGroup/InputGroupText.doc.mjs +1 -1
- package/src/InputGroup/InputGroupText.tsx +1 -1
- package/src/Item/Item.doc.mjs +8 -3
- package/src/Item/Item.test.tsx +88 -0
- package/src/Item/Item.tsx +58 -12
- package/src/Kbd/Kbd.doc.mjs +3 -3
- package/src/Kbd/Kbd.tsx +1 -1
- package/src/Layer/Layer.doc.mjs +2 -2
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layout/Layout.doc.mjs +3 -3
- package/src/Layout/Layout.tsx +1 -1
- package/src/Layout/LayoutContent.doc.mjs +1 -1
- package/src/Layout/LayoutContent.tsx +1 -1
- package/src/Layout/LayoutFooter.doc.mjs +1 -1
- package/src/Layout/LayoutFooter.tsx +1 -1
- package/src/Layout/LayoutHeader.doc.mjs +1 -1
- package/src/Layout/LayoutHeader.tsx +1 -1
- package/src/Layout/LayoutPanel.doc.mjs +1 -1
- package/src/Layout/LayoutPanel.tsx +1 -1
- package/src/Lightbox/Lightbox.doc.mjs +5 -5
- package/src/Lightbox/Lightbox.test.tsx +211 -0
- package/src/Lightbox/Lightbox.tsx +109 -22
- package/src/Link/Link.doc.mjs +3 -3
- package/src/Link/Link.tsx +1 -1
- package/src/Link/LinkProvider.doc.mjs +2 -2
- package/src/Link/LinkProvider.tsx +2 -2
- package/src/List/List.doc.mjs +3 -3
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.doc.mjs +13 -1
- package/src/List/ListItem.tsx +14 -1
- package/src/Markdown/Markdown.doc.mjs +81 -1
- package/src/Markdown/Markdown.test.tsx +92 -0
- package/src/Markdown/Markdown.tsx +96 -68
- package/src/Markdown/parser.perf.test.ts +47 -35
- package/src/MetadataList/MetadataList.doc.mjs +3 -3
- package/src/MetadataList/MetadataList.test.tsx +82 -0
- package/src/MetadataList/MetadataList.tsx +45 -20
- package/src/MetadataList/MetadataListItem.doc.mjs +1 -1
- package/src/MetadataList/MetadataListItem.tsx +1 -1
- package/src/MobileNav/MobileNav.doc.mjs +3 -3
- package/src/MobileNav/MobileNav.tsx +1 -1
- package/src/MoreMenu/MoreMenu.doc.mjs +3 -3
- package/src/MoreMenu/MoreMenu.tsx +3 -3
- package/src/MultiSelector/MultiSelector.doc.mjs +35 -10
- package/src/MultiSelector/MultiSelector.test.tsx +303 -3
- package/src/MultiSelector/MultiSelector.tsx +223 -58
- package/src/NavIcon/NavIcon.doc.mjs +3 -3
- package/src/NavIcon/NavIcon.tsx +1 -1
- package/src/NavMenu/NavHeadingMenu.test.tsx +0 -16
- package/src/NavMenu/NavMenu.doc.mjs +2 -2
- package/src/NavMenu/index.ts +0 -4
- package/src/NumberInput/NumberInput.doc.mjs +3 -6
- package/src/NumberInput/NumberInput.test.tsx +38 -3
- package/src/NumberInput/NumberInput.tsx +24 -1
- package/src/Outline/Outline.doc.mjs +3 -3
- package/src/Outline/Outline.tsx +1 -1
- package/src/OverflowList/OverflowList.doc.mjs +3 -3
- package/src/OverflowList/OverflowList.tsx +1 -1
- package/src/Overlay/Overlay.doc.mjs +2 -2
- package/src/Pagination/Pagination.doc.mjs +55 -8
- package/src/Pagination/Pagination.test.tsx +567 -0
- package/src/Pagination/Pagination.tsx +223 -41
- package/src/Pagination/index.ts +22 -1
- package/src/Popover/Popover.doc.mjs +31 -3
- package/src/Popover/Popover.test.tsx +41 -0
- package/src/Popover/Popover.tsx +25 -2
- package/src/Popover/usePopover.doc.mjs +2 -2
- package/src/Popover/usePopover.tsx +10 -4
- package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
- package/src/PowerSearch/PowerSearch.tsx +1 -1
- package/src/ProgressBar/ProgressBar.doc.mjs +18 -3
- package/src/ProgressBar/ProgressBar.test.tsx +340 -2
- package/src/ProgressBar/ProgressBar.tsx +153 -25
- package/src/ProgressBar/ProgressBarMarkTooltip.tsx +43 -0
- package/src/ProgressBar/index.ts +22 -1
- package/src/RadioList/RadioList.doc.mjs +3 -3
- package/src/RadioList/RadioList.test.tsx +26 -4
- package/src/RadioList/RadioList.tsx +1 -1
- package/src/RadioList/RadioListItem.doc.mjs +1 -1
- package/src/RadioList/RadioListItem.tsx +9 -2
- package/src/Resizable/Resizable.doc.mjs +2 -2
- package/src/Resizable/ResizeHandle.test.tsx +52 -3
- package/src/Resizable/ResizeHandle.tsx +25 -13
- package/src/Resizable/useResizable.doc.mjs +2 -2
- package/src/Section/Section.doc.mjs +3 -3
- package/src/Section/Section.tsx +2 -20
- package/src/Section/index.ts +20 -5
- package/src/SegmentedControl/SegmentedControl.doc.mjs +3 -3
- package/src/SegmentedControl/SegmentedControl.test.tsx +28 -0
- package/src/SegmentedControl/SegmentedControl.tsx +1 -1
- package/src/SegmentedControl/SegmentedControlItem.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControlItem.tsx +21 -3
- package/src/SelectableCard/SelectableCard.doc.mjs +4 -2
- package/src/SelectableCard/SelectableCard.test.tsx +55 -0
- package/src/SelectableCard/SelectableCard.tsx +19 -3
- package/src/Selector/Selector.doc.mjs +28 -8
- package/src/Selector/Selector.test.tsx +222 -3
- package/src/Selector/Selector.tsx +202 -52
- package/src/Selector/SelectorOption.doc.mjs +1 -1
- package/src/SideNav/SideNav.doc.mjs +3 -3
- package/src/SideNav/SideNav.tsx +1 -1
- package/src/SideNav/SideNavCollapseButton.doc.mjs +1 -1
- package/src/SideNav/SideNavCollapseButton.tsx +4 -3
- package/src/SideNav/SideNavHeading.doc.mjs +1 -1
- package/src/SideNav/SideNavHeading.tsx +8 -9
- package/src/SideNav/SideNavItem.doc.mjs +1 -1
- package/src/SideNav/SideNavItem.tsx +5 -6
- package/src/SideNav/SideNavSection.doc.mjs +1 -1
- package/src/SideNav/SideNavSection.tsx +1 -1
- package/src/Skeleton/Skeleton.doc.mjs +3 -3
- package/src/Skeleton/Skeleton.test.tsx +16 -0
- package/src/Skeleton/Skeleton.tsx +14 -2
- package/src/Slider/Slider.doc.mjs +3 -3
- package/src/Slider/Slider.tsx +9 -13
- package/src/Spinner/Spinner.doc.mjs +3 -3
- package/src/Spinner/Spinner.tsx +1 -1
- package/src/Stack/Stack.doc.mjs +3 -3
- package/src/Stack/Stack.tsx +1 -1
- package/src/Stack/StackItem.tsx +1 -1
- package/src/StatusDot/StatusDot.doc.mjs +3 -3
- package/src/StatusDot/StatusDot.tsx +2 -22
- package/src/StatusDot/index.ts +22 -5
- package/src/Switch/Switch.doc.mjs +5 -5
- package/src/Switch/Switch.test.tsx +71 -25
- package/src/Switch/Switch.tsx +56 -18
- package/src/TabList/Tab.doc.mjs +1 -1
- package/src/TabList/Tab.tsx +1 -1
- package/src/TabList/TabList.doc.mjs +3 -3
- package/src/TabList/TabList.test.tsx +21 -18
- package/src/TabList/TabList.tsx +1 -1
- package/src/TabList/TabMenu.doc.mjs +1 -1
- package/src/TabList/TabMenu.tsx +11 -3
- package/src/Table/BaseTable.tsx +4 -5
- package/src/Table/Table.doc.mjs +5 -5
- package/src/Table/Table.test.tsx +27 -49
- package/src/Table/Table.tsx +1 -1
- package/src/Table/TableCell.doc.mjs +1 -1
- package/src/Table/TableCell.tsx +2 -2
- package/src/Table/TableHeaderCell.doc.mjs +1 -1
- package/src/Table/TableHeaderCell.tsx +2 -2
- package/src/Table/TableRow.doc.mjs +1 -1
- package/src/Table/TableRow.tsx +1 -1
- package/src/Table/index.ts +1 -1
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +1 -1
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +19 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +24 -4
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +161 -2
- package/src/Table/plugins/tree/useTableTreeData.tsx +54 -1
- package/src/Table/types.ts +0 -9
- package/src/Table/useTableColumnResize.doc.mjs +1 -1
- package/src/Table/useTableColumnSettings.doc.mjs +1 -1
- package/src/Table/useTableFilterState.doc.mjs +1 -1
- package/src/Table/useTableFiltering.doc.mjs +1 -1
- package/src/Table/useTableGroupedRows.doc.mjs +2 -2
- package/src/Table/useTablePagination.doc.mjs +1 -1
- package/src/Table/useTableRowExpansion.doc.mjs +57 -4
- package/src/Table/useTableRowIndex.doc.mjs +2 -2
- package/src/Table/useTableRowStatus.doc.mjs +3 -3
- package/src/Table/useTableSelection.doc.mjs +1 -1
- package/src/Table/useTableSelectionState.doc.mjs +1 -1
- package/src/Table/useTableSortable.doc.mjs +1 -1
- package/src/Table/useTableStickyColumns.doc.mjs +1 -1
- package/src/Table/useTableTreeData.doc.mjs +10 -1
- package/src/Table/useTableTreeState.doc.mjs +1 -1
- package/src/Text/Heading.doc.mjs +4 -4
- package/src/Text/Text.doc.mjs +4 -4
- package/src/Text/Text.test.tsx +42 -0
- package/src/Text/Text.tsx +26 -2
- package/src/Text/index.ts +32 -6
- package/src/TextArea/TextArea.doc.mjs +5 -5
- package/src/TextArea/TextArea.test.tsx +112 -7
- package/src/TextArea/TextArea.tsx +143 -50
- package/src/TextInput/TextInput.doc.mjs +3 -3
- package/src/TextInput/TextInput.tsx +1 -1
- package/src/Thumbnail/Thumbnail.doc.mjs +2 -2
- package/src/Thumbnail/Thumbnail.test.tsx +24 -1
- package/src/Thumbnail/Thumbnail.tsx +28 -35
- package/src/TimeInput/TimeInput.doc.mjs +3 -3
- package/src/TimeInput/TimeInput.tsx +1 -1
- package/src/Timestamp/Timestamp.doc.mjs +29 -24
- package/src/Timestamp/Timestamp.test.tsx +438 -107
- package/src/Timestamp/Timestamp.tsx +167 -103
- package/src/Timestamp/TimestampHoverCard.tsx +283 -0
- package/src/Timestamp/formatInstant.ts +9 -4
- package/src/Timestamp/tooltipEntries.test.ts +9 -0
- package/src/Timestamp/tooltipEntries.ts +18 -2
- package/src/Toast/Toast.doc.mjs +3 -3
- package/src/Toast/ToastViewport.test.tsx +218 -8
- package/src/Toast/ToastViewport.tsx +71 -12
- package/src/Toast/useToast.doc.mjs +2 -2
- package/src/ToggleButton/ToggleButton.doc.mjs +3 -3
- package/src/ToggleButton/ToggleButton.test.tsx +24 -0
- package/src/ToggleButton/ToggleButton.tsx +20 -2
- package/src/ToggleButton/ToggleButtonGroup.doc.mjs +1 -1
- package/src/ToggleButton/ToggleButtonGroup.tsx +3 -6
- package/src/Token/Token.doc.mjs +3 -3
- package/src/Token/Token.test.tsx +145 -0
- package/src/Token/Token.tsx +75 -61
- package/src/Token/TokenLink.tsx +107 -0
- package/src/Token/index.ts +28 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
- package/src/Tokenizer/Tokenizer.tsx +1 -1
- package/src/Toolbar/Toolbar.doc.mjs +3 -3
- package/src/Toolbar/Toolbar.tsx +1 -1
- package/src/Tooltip/Tooltip.doc.mjs +3 -3
- package/src/Tooltip/Tooltip.tsx +1 -1
- package/src/Tooltip/useTooltip.doc.mjs +2 -2
- package/src/TopNav/TopNav.doc.mjs +3 -3
- package/src/TopNav/TopNav.test.tsx +2 -2
- package/src/TopNav/TopNav.tsx +1 -1
- package/src/TopNav/TopNavHeading.doc.mjs +1 -12
- package/src/TopNav/TopNavHeading.tsx +8 -18
- package/src/TopNav/TopNavItem.doc.mjs +1 -1
- package/src/TopNav/TopNavItem.tsx +1 -1
- package/src/TopNav/TopNavMegaMenu.doc.mjs +1 -1
- package/src/TopNav/TopNavMegaMenu.tsx +32 -6
- package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +1 -1
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +1 -1
- package/src/TopNav/TopNavMegaMenuItem.doc.mjs +1 -1
- package/src/TopNav/TopNavMegaMenuItem.tsx +1 -1
- package/src/TopNav/TopNavMenu.doc.mjs +1 -1
- package/src/TopNav/TopNavMenu.tsx +5 -4
- package/src/TreeList/TreeList.doc.mjs +3 -3
- package/src/TreeList/TreeList.test.tsx +10 -6
- package/src/TreeList/TreeList.tsx +1 -1
- package/src/TreeList/TreeListBranches.tsx +1 -1
- package/src/TreeList/TreeListItem.tsx +4 -3
- package/src/TreeList/TreeListTypes.ts +1 -18
- package/src/TreeList/index.ts +19 -1
- package/src/Typeahead/BaseTypeahead.doc.mjs +1 -1
- package/src/Typeahead/BaseTypeahead.tsx +13 -1
- package/src/Typeahead/Typeahead.doc.mjs +3 -3
- package/src/Typeahead/Typeahead.test.tsx +62 -0
- package/src/Typeahead/Typeahead.tsx +7 -1
- package/src/Typeahead/TypeaheadItem.doc.mjs +1 -1
- package/src/Typeahead/TypeaheadItem.tsx +1 -1
- package/src/VStack/VStack.tsx +1 -1
- package/src/VisuallyHidden/VisuallyHidden.doc.mjs +3 -3
- package/src/VisuallyHidden/VisuallyHidden.tsx +1 -1
- package/src/__tests__/babelPluginAddExtensions.test.ts +190 -0
- package/src/__tests__/forcedColors.ts +60 -0
- package/src/__tests__/inputWidthContract.test.tsx +8 -1
- package/src/doc-mjs.d.ts +5 -2
- package/src/docPropLiterals.test.ts +1 -1
- package/src/docPropReferences.test.ts +1 -1
- package/src/hooks/containerReveal.pool.stylex.ts +571 -0
- package/src/hooks/index.ts +7 -0
- package/src/hooks/useClickableContainer.doc.mjs +2 -2
- package/src/hooks/useContainerReveal.doc.mjs +75 -0
- package/src/hooks/useContainerReveal.test.tsx +116 -0
- package/src/hooks/useContainerReveal.ts +181 -0
- package/src/hooks/useEntryAnimation.doc.mjs +2 -2
- package/src/hooks/useFocusTrap.doc.mjs +2 -2
- package/src/hooks/useGridFocus.doc.mjs +2 -2
- package/src/hooks/useGridFocus.ts +8 -6
- package/src/hooks/useHotkeys.doc.mjs +2 -2
- package/src/hooks/useImageMode.doc.mjs +2 -2
- package/src/hooks/useInputContainer.doc.mjs +2 -2
- package/src/hooks/useInputContainer.test.tsx +180 -0
- package/src/hooks/useInputContainer.ts +36 -1
- package/src/hooks/useInputStatusIcon.test.tsx +59 -0
- package/src/hooks/useInputStatusIcon.tsx +12 -1
- package/src/hooks/useKeyboardHint.doc.mjs +2 -2
- package/src/hooks/useKeyboardHint.test.tsx +22 -0
- package/src/hooks/useKeyboardHint.tsx +7 -3
- package/src/hooks/useListFocus.doc.mjs +2 -2
- package/src/hooks/useListFocus.ts +8 -7
- package/src/hooks/useMediaQuery.doc.mjs +2 -2
- package/src/hooks/useOverflow.doc.mjs +2 -2
- package/src/hooks/useScrollLock.doc.mjs +2 -2
- package/src/hooks/useScrollOverflow.doc.mjs +2 -2
- package/src/hooks/useStreamingText.doc.mjs +2 -2
- package/src/hooks/useTreeFocus.doc.mjs +2 -2
- package/src/hooks/useTreeFocus.test.tsx +53 -1
- package/src/hooks/useTreeFocus.ts +13 -2
- package/src/i18n/InternationalizationProvider.doc.mjs +14 -2
- package/src/i18n/InternationalizationProvider.tsx +6 -0
- package/src/i18n/useDirection.ts +6 -3
- package/src/i18n/useTranslator.doc.mjs +2 -2
- package/src/index.ts +2 -18
- package/src/theme/MediaTheme.doc.mjs +2 -2
- package/src/theme/SyntaxTheme.doc.mjs +2 -2
- package/src/theme/Theme.doc.mjs +2 -2
- package/src/theme/Theme.tsx +3 -7
- package/src/theme/contrast.test.ts +94 -0
- package/src/theme/contrast.ts +99 -0
- package/src/theme/defineTheme.test.ts +29 -30
- package/src/theme/defineTheme.ts +11 -5
- package/src/theme/expandColorScale.test.ts +387 -1
- package/src/theme/expandColorScale.ts +126 -17
- package/src/theme/generateThemeRules.ts +0 -15
- package/src/theme/index.ts +11 -13
- package/src/theme/themeRegistry.test.ts +59 -0
- package/src/theme/themeRegistry.ts +53 -0
- package/src/theme/tokens.stylex.ts +0 -19
- package/src/theme/types.ts +14 -13
- package/src/theme/useTheme.doc.mjs +2 -2
- package/src/theme/useTheme.test.tsx +48 -3
- package/src/theme/useTheme.ts +100 -29
- package/src/utils/rtlStyles.ts +22 -0
- package/dist/NavMenu/NavMenuItem.d.ts +0 -13
- package/dist/NavMenu/NavMenuItem.d.ts.map +0 -1
- package/dist/NavMenu/NavMenuItem.js +0 -16
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts +0 -9
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts.map +0 -1
- package/dist/Thumbnail/thumbnail.markers.stylex.js +0 -14
- package/dist/authoring/doc.d.ts +0 -145
- package/dist/authoring/doc.d.ts.map +0 -1
- package/dist/authoring/doc.js +0 -100
- package/dist/authoring/index.d.ts +0 -29
- package/dist/authoring/index.d.ts.map +0 -1
- package/dist/authoring/index.js +0 -28
- package/dist/authoring/integration.d.ts +0 -35
- package/dist/authoring/integration.d.ts.map +0 -1
- package/dist/authoring/integration.js +0 -30
- package/dist/authoring/template.d.ts +0 -66
- package/dist/authoring/template.d.ts.map +0 -1
- package/dist/authoring/template.js +0 -55
- package/dist/config.d.ts +0 -80
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -40
- package/dist/docs-types.d.ts +0 -969
- package/dist/docs-types.d.ts.map +0 -1
- package/dist/docs-types.js +0 -1
- package/src/NavMenu/NavMenuItem.tsx +0 -19
- package/src/Thumbnail/thumbnail.markers.stylex.ts +0 -12
- package/src/authoring/doc.ts +0 -164
- package/src/authoring/index.test.ts +0 -52
- package/src/authoring/index.ts +0 -50
- package/src/authoring/integration.ts +0 -42
- package/src/authoring/template.ts +0 -74
- package/src/config.test.ts +0 -16
- package/src/config.ts +0 -92
- package/src/docs-types.ts +0 -1108
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file TimestampHoverCard.tsx
|
|
7
|
+
* @input Uses React, HoverCard, IconButton, Icon, formatted lines
|
|
8
|
+
* @output Default-exports the lazily-loaded copyable hover card for Timestamp
|
|
9
|
+
* @position Split out of Timestamp so the overlay (HoverCard) and the copy
|
|
10
|
+
* affordance's Icon/IconButton load only when a card is actually shown — the
|
|
11
|
+
* default, card-less Timestamp never bundles this chunk.
|
|
12
|
+
*
|
|
13
|
+
* Layout: a semantic `<dl>` laid out as a grid. Labelled cards use three
|
|
14
|
+
* columns — label, value, and a trailing action column for copy buttons —
|
|
15
|
+
* so the buttons align down a single column no matter how wide each value
|
|
16
|
+
* is. The action column is only added when at least one row is copyable, so
|
|
17
|
+
* a fully read-only card carries no dangling gutter. Label-less cards drop
|
|
18
|
+
* the label column and stack to whatever columns remain.
|
|
19
|
+
*
|
|
20
|
+
* SYNC: When modified, update these files to stay in sync:
|
|
21
|
+
* - /packages/core/src/Timestamp/Timestamp.tsx (the lazy() + Suspense wrapper)
|
|
22
|
+
* - /packages/core/src/Timestamp/Timestamp.doc.mjs (theming.targets)
|
|
23
|
+
* - /packages/core/src/Timestamp/Timestamp.test.tsx
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import type {ReactNode} from 'react';
|
|
27
|
+
import {useCallback, useEffect, useRef, useState} from 'react';
|
|
28
|
+
import * as stylex from '@stylexjs/stylex';
|
|
29
|
+
import {HoverCard} from '../HoverCard';
|
|
30
|
+
import {IconButton} from '../IconButton';
|
|
31
|
+
import {Icon} from '../Icon';
|
|
32
|
+
import {useAnnounce} from '../hooks/useAnnounce';
|
|
33
|
+
import {useTranslator} from '../i18n';
|
|
34
|
+
import {themeProps} from '../utils/themeProps';
|
|
35
|
+
import {
|
|
36
|
+
colorVars,
|
|
37
|
+
spacingVars,
|
|
38
|
+
typeScaleVars,
|
|
39
|
+
fontWeightVars,
|
|
40
|
+
} from '../theme/tokens.stylex';
|
|
41
|
+
import type {TimestampTooltipLine} from './tooltipEntries';
|
|
42
|
+
|
|
43
|
+
const styles = stylex.create({
|
|
44
|
+
// The card is a definition list laid out as a grid so cells align into
|
|
45
|
+
// columns across rows. `gridTemplateColumns` is set per-card (below) to add
|
|
46
|
+
// or drop the label and action columns; the row/column gaps live here.
|
|
47
|
+
dl: {
|
|
48
|
+
display: 'grid',
|
|
49
|
+
alignItems: 'center',
|
|
50
|
+
columnGap: spacingVars['--spacing-4'],
|
|
51
|
+
rowGap: spacingVars['--spacing-2'],
|
|
52
|
+
margin: 0,
|
|
53
|
+
padding: 0,
|
|
54
|
+
},
|
|
55
|
+
// Each row spans the full grid so its cells land in the shared columns.
|
|
56
|
+
// `display: contents` lets the <dt>/<dd> participate directly in the grid.
|
|
57
|
+
row: {
|
|
58
|
+
display: 'contents',
|
|
59
|
+
},
|
|
60
|
+
// Label: the design system's `supporting` role — secondary colour, the
|
|
61
|
+
// supporting size/leading, normal weight. This matches Timestamp's own
|
|
62
|
+
// default `type` ('supporting'), so the card's labels read at the same
|
|
63
|
+
// register as the component itself.
|
|
64
|
+
label: {
|
|
65
|
+
color: colorVars['--color-text-secondary'],
|
|
66
|
+
fontSize: typeScaleVars['--text-supporting-size'],
|
|
67
|
+
lineHeight: typeScaleVars['--text-supporting-leading'],
|
|
68
|
+
fontWeight: fontWeightVars['--font-weight-normal'],
|
|
69
|
+
margin: 0,
|
|
70
|
+
padding: 0,
|
|
71
|
+
whiteSpace: 'nowrap',
|
|
72
|
+
},
|
|
73
|
+
// Value: the `body` role — primary colour, body size/leading, normal weight.
|
|
74
|
+
value: {
|
|
75
|
+
color: colorVars['--color-text-primary'],
|
|
76
|
+
fontSize: typeScaleVars['--text-body-size'],
|
|
77
|
+
lineHeight: typeScaleVars['--text-body-leading'],
|
|
78
|
+
fontWeight: fontWeightVars['--font-weight-normal'],
|
|
79
|
+
margin: 0,
|
|
80
|
+
padding: 0,
|
|
81
|
+
whiteSpace: 'nowrap',
|
|
82
|
+
},
|
|
83
|
+
// The trailing action cell holds the copy button (or nothing, on a
|
|
84
|
+
// read-only row). It lives in its own grid column so buttons align.
|
|
85
|
+
action: {
|
|
86
|
+
display: 'flex',
|
|
87
|
+
justifyContent: 'flex-end',
|
|
88
|
+
alignItems: 'center',
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Grid templates, selected per-card by which columns are present.
|
|
93
|
+
// - hasAnyLabel + hasAnyCopyable → label | value | action
|
|
94
|
+
// - hasAnyLabel only → label | value
|
|
95
|
+
// - hasAnyCopyable only → value | action
|
|
96
|
+
// - neither → value
|
|
97
|
+
const gridTemplates = stylex.create({
|
|
98
|
+
labelValueAction: {gridTemplateColumns: 'auto 1fr auto'},
|
|
99
|
+
labelValue: {gridTemplateColumns: 'auto 1fr'},
|
|
100
|
+
valueAction: {gridTemplateColumns: '1fr auto'},
|
|
101
|
+
value: {gridTemplateColumns: '1fr'},
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
/** How long the copied checkmark stays before reverting to the copy icon. */
|
|
105
|
+
const COPY_FEEDBACK_MS = 1500;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The per-row copy affordance: a compact ghost `IconButton` that writes the
|
|
109
|
+
* row's value to the clipboard, flips `copy` → `check` for a moment, and
|
|
110
|
+
* announces the copy to a polite live region (a swapped aria-label alone
|
|
111
|
+
* isn't reliably announced). A clipboard rejection is a silent no-op.
|
|
112
|
+
*
|
|
113
|
+
* Kept as its own component so its state/timer/effect only exist for rows that
|
|
114
|
+
* actually opt into copying — read-only rows render no button and carry none
|
|
115
|
+
* of this machinery.
|
|
116
|
+
*/
|
|
117
|
+
function CopyButton({value}: {value: string}) {
|
|
118
|
+
const t = useTranslator();
|
|
119
|
+
const announce = useAnnounce();
|
|
120
|
+
const [copied, setCopied] = useState(false);
|
|
121
|
+
const resetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
122
|
+
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
return () => {
|
|
125
|
+
if (resetTimerRef.current != null) {
|
|
126
|
+
clearTimeout(resetTimerRef.current);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}, []);
|
|
130
|
+
|
|
131
|
+
const handleCopy = useCallback(async () => {
|
|
132
|
+
try {
|
|
133
|
+
await navigator.clipboard.writeText(value);
|
|
134
|
+
setCopied(true);
|
|
135
|
+
announce(t('@astryx.timestamp.copied'));
|
|
136
|
+
// Restart the reset timer on every copy so a rapid re-copy isn't
|
|
137
|
+
// reverted early by the previous click's timer.
|
|
138
|
+
if (resetTimerRef.current != null) {
|
|
139
|
+
clearTimeout(resetTimerRef.current);
|
|
140
|
+
}
|
|
141
|
+
resetTimerRef.current = setTimeout(() => {
|
|
142
|
+
resetTimerRef.current = null;
|
|
143
|
+
setCopied(false);
|
|
144
|
+
}, COPY_FEEDBACK_MS);
|
|
145
|
+
} catch {
|
|
146
|
+
// Clipboard failures leave the copied state unchanged.
|
|
147
|
+
}
|
|
148
|
+
}, [value, announce, t]);
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<IconButton
|
|
152
|
+
variant="ghost"
|
|
153
|
+
size="sm"
|
|
154
|
+
icon={<Icon icon={copied ? 'check' : 'copy'} size="sm" color="inherit" />}
|
|
155
|
+
// Visible hover/focus hint via Button's built-in tooltip: 'Copy',
|
|
156
|
+
// flipping to 'Copied' after a successful copy in step with the icon.
|
|
157
|
+
// The full 'Copy <value>' string stays the aria-label for assistive tech.
|
|
158
|
+
tooltip={t(
|
|
159
|
+
copied ? '@astryx.timestamp.copied' : '@astryx.timestamp.copy',
|
|
160
|
+
)}
|
|
161
|
+
label={
|
|
162
|
+
copied
|
|
163
|
+
? t('@astryx.timestamp.copied')
|
|
164
|
+
: t('@astryx.timestamp.copyValue', {value})
|
|
165
|
+
}
|
|
166
|
+
onClick={() => {
|
|
167
|
+
void handleCopy();
|
|
168
|
+
}}
|
|
169
|
+
{...themeProps('timestamp-copy-button')}
|
|
170
|
+
/>
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* One row of the hover card: an optional label, the formatted instant, and —
|
|
176
|
+
* when the card reserves an action column — a trailing action cell holding the
|
|
177
|
+
* copy button (for a copyable row) or nothing (for a read-only row, so the
|
|
178
|
+
* columns stay aligned). Pure presentation: the copy state lives in
|
|
179
|
+
* {@link CopyButton}, which only copyable rows render.
|
|
180
|
+
*/
|
|
181
|
+
function EntryRow({
|
|
182
|
+
line,
|
|
183
|
+
hasLabelColumn,
|
|
184
|
+
hasActionColumn,
|
|
185
|
+
}: {
|
|
186
|
+
line: TimestampTooltipLine;
|
|
187
|
+
hasLabelColumn: boolean;
|
|
188
|
+
hasActionColumn: boolean;
|
|
189
|
+
}) {
|
|
190
|
+
return (
|
|
191
|
+
<div {...stylex.props(styles.row)}>
|
|
192
|
+
{hasLabelColumn && (
|
|
193
|
+
<dt {...stylex.props(styles.label)}>{line.label ?? ''}</dt>
|
|
194
|
+
)}
|
|
195
|
+
<dd {...stylex.props(styles.value)}>{line.value}</dd>
|
|
196
|
+
{hasActionColumn && (
|
|
197
|
+
<div {...stylex.props(styles.action)}>
|
|
198
|
+
{line.isCopyable && <CopyButton value={line.value} />}
|
|
199
|
+
</div>
|
|
200
|
+
)}
|
|
201
|
+
</div>
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export interface TimestampHoverCardProps {
|
|
206
|
+
/** The rows to render, each a labelled instant, optionally copyable. */
|
|
207
|
+
lines: ReadonlyArray<TimestampTooltipLine>;
|
|
208
|
+
/** Accessible name for the card. */
|
|
209
|
+
label: string;
|
|
210
|
+
/** The anchor the card is attached to (the `<time>` element). */
|
|
211
|
+
children: ReactNode;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function gridTemplateFor(
|
|
215
|
+
hasLabelColumn: boolean,
|
|
216
|
+
hasActionColumn: boolean,
|
|
217
|
+
): stylex.StyleXStyles {
|
|
218
|
+
if (hasLabelColumn && hasActionColumn) {
|
|
219
|
+
return gridTemplates.labelValueAction;
|
|
220
|
+
}
|
|
221
|
+
if (hasLabelColumn) {
|
|
222
|
+
return gridTemplates.labelValue;
|
|
223
|
+
}
|
|
224
|
+
if (hasActionColumn) {
|
|
225
|
+
return gridTemplates.valueAction;
|
|
226
|
+
}
|
|
227
|
+
return gridTemplates.value;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* The copyable hover card for Timestamp. Renders a semantic `<dl>` as a grid:
|
|
232
|
+
* an optional label column, the value, and — when any row is copyable — a
|
|
233
|
+
* trailing action column carrying that row's copy button, so buttons align
|
|
234
|
+
* down one column. With a single default line this is a one-row card carrying
|
|
235
|
+
* the full absolute time, copyable. Opens on hover and on keyboard focus (the
|
|
236
|
+
* anchor's tab stop), with a dashed-underline affordance signalling it is
|
|
237
|
+
* interactive.
|
|
238
|
+
*/
|
|
239
|
+
export default function TimestampHoverCard({
|
|
240
|
+
lines,
|
|
241
|
+
label,
|
|
242
|
+
children,
|
|
243
|
+
}: TimestampHoverCardProps): ReactNode {
|
|
244
|
+
// A label column is only reserved when some row is labelled; otherwise the
|
|
245
|
+
// value sits flush at the card's leading edge. An action column is only
|
|
246
|
+
// reserved when some row is copyable (option B), so a fully read-only card
|
|
247
|
+
// has no trailing gutter.
|
|
248
|
+
const hasLabelColumn = lines.some(
|
|
249
|
+
line => line.label != null && line.label !== '',
|
|
250
|
+
);
|
|
251
|
+
const hasActionColumn = lines.some(line => line.isCopyable);
|
|
252
|
+
|
|
253
|
+
const cardContent = (
|
|
254
|
+
<dl
|
|
255
|
+
{...stylex.props(
|
|
256
|
+
styles.dl,
|
|
257
|
+
gridTemplateFor(hasLabelColumn, hasActionColumn),
|
|
258
|
+
)}>
|
|
259
|
+
{lines.map((line, index) => (
|
|
260
|
+
<EntryRow
|
|
261
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key -- rows are fixed positional slots and two entries may legitimately be identical
|
|
262
|
+
key={index}
|
|
263
|
+
line={line}
|
|
264
|
+
hasLabelColumn={hasLabelColumn}
|
|
265
|
+
hasActionColumn={hasActionColumn}
|
|
266
|
+
/>
|
|
267
|
+
))}
|
|
268
|
+
</dl>
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
return (
|
|
272
|
+
<HoverCard
|
|
273
|
+
content={cardContent}
|
|
274
|
+
placement="above"
|
|
275
|
+
focusTrigger="always"
|
|
276
|
+
hasHoverIndication
|
|
277
|
+
label={label}>
|
|
278
|
+
{children}
|
|
279
|
+
</HoverCard>
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
TimestampHoverCard.displayName = 'TimestampHoverCard';
|
|
@@ -41,12 +41,11 @@ import type {TimestampFormat} from './Timestamp';
|
|
|
41
41
|
* style ("February 19, 2026 at 5:00:00 PM UTC") that backs a relative
|
|
42
42
|
* timestamp's accessible name and the tooltip's default line.
|
|
43
43
|
*
|
|
44
|
-
* `'relative'` and `'auto'` are excluded: a relative
|
|
45
|
-
* so a zone could not change what it says.
|
|
44
|
+
* `'relative'`, `'relative_short'`, and `'auto'` are excluded: a relative
|
|
45
|
+
* phrase names no instant, so a zone could not change what it says.
|
|
46
46
|
*/
|
|
47
47
|
export type InstantFormat =
|
|
48
|
-
|
|
49
|
-
| 'full';
|
|
48
|
+
Exclude<TimestampFormat, 'relative' | 'relative_short' | 'auto'> | 'full';
|
|
50
49
|
|
|
51
50
|
export interface FormatInstantOptions {
|
|
52
51
|
/**
|
|
@@ -214,5 +213,11 @@ export function formatInstant(
|
|
|
214
213
|
const w = getWallClock(date, timeZone);
|
|
215
214
|
return `${pad(w.hour)}:${pad(w.minute)}:${pad(w.second)}`;
|
|
216
215
|
}
|
|
216
|
+
|
|
217
|
+
case 'unix_seconds':
|
|
218
|
+
// Unix time in whole seconds since the epoch. The epoch is an absolute
|
|
219
|
+
// instant, so this is zone-independent — `timeZone` is intentionally
|
|
220
|
+
// ignored (a wall-clock zone can't change how many seconds have elapsed).
|
|
221
|
+
return String(Math.floor(date.getTime() / 1000));
|
|
217
222
|
}
|
|
218
223
|
}
|
|
@@ -512,6 +512,15 @@ describe('formatTooltipLines', () => {
|
|
|
512
512
|
expect(line.label).toBe('');
|
|
513
513
|
});
|
|
514
514
|
|
|
515
|
+
it('marks lines read-only by default and copyable only when opted in', () => {
|
|
516
|
+
const lines = formatTooltipLines(INSTANT, [
|
|
517
|
+
{label: 'Local'},
|
|
518
|
+
{label: 'ISO', format: 'system_date_time', isCopyable: true},
|
|
519
|
+
{label: 'Off', isCopyable: false},
|
|
520
|
+
]);
|
|
521
|
+
expect(lines.map(l => l.isCopyable)).toEqual([false, true, false]);
|
|
522
|
+
});
|
|
523
|
+
|
|
515
524
|
// --- Ordering and arity ---
|
|
516
525
|
|
|
517
526
|
it('preserves entry order', () => {
|
|
@@ -34,8 +34,9 @@ import type {InstantFormat} from './formatInstant';
|
|
|
34
34
|
*
|
|
35
35
|
* Every `TimestampFormat` that names a fixed instant, plus `'full'` — the long
|
|
36
36
|
* absolute style the tooltip has always shown ("February 19, 2026 at 5:00:00 PM
|
|
37
|
-
* UTC"). `'relative'` and `'auto'` are excluded: a
|
|
38
|
-
* zone, which would make `timezoneID` silently
|
|
37
|
+
* UTC"). `'relative'`, `'relative_short'`, and `'auto'` are excluded: a
|
|
38
|
+
* relative phrase ignores any zone, which would make `timezoneID` silently
|
|
39
|
+
* inert on that line.
|
|
39
40
|
*
|
|
40
41
|
* `'full'` lives only in this vocabulary, never in `TimestampFormat` — nothing
|
|
41
42
|
* asked for it as a visible display format, and keeping it out means new
|
|
@@ -71,12 +72,26 @@ export interface TimestampTooltipEntry {
|
|
|
71
72
|
* Supplied already translated; Timestamp never invents or localizes labels.
|
|
72
73
|
*/
|
|
73
74
|
label?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Whether this row shows a copy-to-clipboard button, rendered in a dedicated
|
|
77
|
+
* trailing action column so the buttons line up across rows regardless of
|
|
78
|
+
* each value's width. The action column is only reserved when at least one
|
|
79
|
+
* row is copyable, so a fully read-only card has no trailing gutter.
|
|
80
|
+
*
|
|
81
|
+
* Defaults to `false` — rows are read-only unless opted in. Set `true` for a
|
|
82
|
+
* row whose value is worth pasting elsewhere, such as a machine-readable
|
|
83
|
+
* `system_date_time` value shown beside human-readable zones that only need
|
|
84
|
+
* to be read.
|
|
85
|
+
* @default false
|
|
86
|
+
*/
|
|
87
|
+
isCopyable?: boolean;
|
|
74
88
|
}
|
|
75
89
|
|
|
76
90
|
/** A rendered tooltip line. */
|
|
77
91
|
export interface TimestampTooltipLine {
|
|
78
92
|
label?: string;
|
|
79
93
|
value: string;
|
|
94
|
+
isCopyable: boolean;
|
|
80
95
|
}
|
|
81
96
|
|
|
82
97
|
// =============================================================================
|
|
@@ -197,6 +212,7 @@ export function formatTooltipLines(
|
|
|
197
212
|
|
|
198
213
|
return {
|
|
199
214
|
...(entry.label === undefined ? {} : {label: entry.label}),
|
|
215
|
+
isCopyable: entry.isCopyable ?? false,
|
|
200
216
|
value: formatInstant(date, format, {
|
|
201
217
|
timeZone,
|
|
202
218
|
isTimezoneShown: shouldShowZoneName(
|
package/src/Toast/Toast.doc.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
-
/** @type {import('
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentDoc} */
|
|
4
4
|
|
|
5
5
|
export const docs = {
|
|
6
6
|
name: 'Toast',
|
|
@@ -92,7 +92,7 @@ export const docs = {
|
|
|
92
92
|
// See .context/decisions/dense-compression-protocol.md
|
|
93
93
|
// -------------------------------------------------------
|
|
94
94
|
|
|
95
|
-
/** @type {import('
|
|
95
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
96
96
|
export const docsZh = {
|
|
97
97
|
propDescriptions: {
|
|
98
98
|
body: '主要消息内容。',
|
|
@@ -124,7 +124,7 @@ export const docsZh = {
|
|
|
124
124
|
},
|
|
125
125
|
};
|
|
126
126
|
|
|
127
|
-
/** @type {import('
|
|
127
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
128
128
|
export const docsDense = {
|
|
129
129
|
description:
|
|
130
130
|
'toast notification w/ auto-dismiss, stacking, dedup, smooth animations; MediaTheme inverted surface',
|
|
@@ -3,19 +3,56 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file ToastViewport.test.tsx
|
|
5
5
|
* @input Uses vitest, @testing-library/react, ToastViewport + useToast
|
|
6
|
-
* @output Unit tests for toast keyboard reach
|
|
7
|
-
*
|
|
6
|
+
* @output Unit tests for toast keyboard reach, focus management, and
|
|
7
|
+
* screen-reader announcements
|
|
8
|
+
* @position Testing; validates ToastViewport.tsx + Toast.tsx focus behavior and
|
|
9
|
+
* the announce-at-dispatch flow through the singleton live regions
|
|
8
10
|
*
|
|
9
|
-
* SYNC: When ToastViewport.tsx
|
|
11
|
+
* SYNC: When ToastViewport.tsx / Toast.tsx focus handling or the toast
|
|
12
|
+
* announcement flow changes, update these tests
|
|
10
13
|
*/
|
|
11
14
|
|
|
12
|
-
import {describe, it, expect, vi, beforeAll} from 'vitest';
|
|
13
|
-
import {
|
|
15
|
+
import {describe, it, expect, vi, beforeAll, afterEach} from 'vitest';
|
|
16
|
+
import {
|
|
17
|
+
render,
|
|
18
|
+
screen,
|
|
19
|
+
fireEvent,
|
|
20
|
+
act,
|
|
21
|
+
waitFor,
|
|
22
|
+
within,
|
|
23
|
+
} from '@testing-library/react';
|
|
14
24
|
import React from 'react';
|
|
25
|
+
import {type AnnounceFn, __resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
15
26
|
import {ToastViewport} from './ToastViewport';
|
|
16
27
|
import {useToast} from './useToast';
|
|
17
28
|
import type {ToastOptions} from './types';
|
|
18
29
|
|
|
30
|
+
// Spy on the announcement sink so tests can prove a toast is announced exactly
|
|
31
|
+
// once. The mock wraps the real useAnnounce, so the singleton live regions are
|
|
32
|
+
// still populated (the region-content assertions below depend on it) while
|
|
33
|
+
// every call is also recorded on announceSpy.
|
|
34
|
+
const {announceSpy} = vi.hoisted(() => ({announceSpy: vi.fn()}));
|
|
35
|
+
vi.mock('../hooks/useAnnounce', async importActual => {
|
|
36
|
+
const actual = await importActual<{
|
|
37
|
+
useAnnounce: () => AnnounceFn;
|
|
38
|
+
__resetLiveRegionsForTest: () => void;
|
|
39
|
+
}>();
|
|
40
|
+
const {useCallback} = await import('react');
|
|
41
|
+
return {
|
|
42
|
+
...actual,
|
|
43
|
+
useAnnounce: (): AnnounceFn => {
|
|
44
|
+
const realAnnounce = actual.useAnnounce();
|
|
45
|
+
return useCallback<AnnounceFn>(
|
|
46
|
+
(message, politeness) => {
|
|
47
|
+
announceSpy(message, politeness);
|
|
48
|
+
realAnnounce(message, politeness);
|
|
49
|
+
},
|
|
50
|
+
[realAnnounce],
|
|
51
|
+
);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
|
|
19
56
|
// Popover API is not implemented in jsdom.
|
|
20
57
|
beforeAll(() => {
|
|
21
58
|
if (typeof HTMLElement.prototype.showPopover === 'undefined') {
|
|
@@ -24,6 +61,13 @@ beforeAll(() => {
|
|
|
24
61
|
}
|
|
25
62
|
});
|
|
26
63
|
|
|
64
|
+
// Toast text is mirrored into the singleton live regions, which outlive each
|
|
65
|
+
// render — reset them so text from one test never leaks into the next.
|
|
66
|
+
afterEach(() => {
|
|
67
|
+
__resetLiveRegionsForTest();
|
|
68
|
+
announceSpy.mockClear();
|
|
69
|
+
});
|
|
70
|
+
|
|
27
71
|
// Module-level constant default props (avoids unstable-default-props lint).
|
|
28
72
|
const EMPTY_OPTIONS: ToastOptions = {body: 'placeholder'};
|
|
29
73
|
|
|
@@ -169,7 +213,10 @@ describe('Toast blur timer pause', () => {
|
|
|
169
213
|
act(() => {
|
|
170
214
|
fireEvent.click(screen.getByText('Trigger Auto'));
|
|
171
215
|
});
|
|
172
|
-
|
|
216
|
+
// Scope to the viewport: the toast text is also mirrored into the
|
|
217
|
+
// singleton live region, which lives outside the notifications region.
|
|
218
|
+
const viewport = screen.getByRole('region', {name: 'Notifications'});
|
|
219
|
+
expect(within(viewport).getByText('Auto toast')).toBeInTheDocument();
|
|
173
220
|
|
|
174
221
|
// Window loses focus — timer should pause.
|
|
175
222
|
act(() => {
|
|
@@ -179,7 +226,7 @@ describe('Toast blur timer pause', () => {
|
|
|
179
226
|
vi.advanceTimersByTime(5000);
|
|
180
227
|
});
|
|
181
228
|
// Still present because the timer was paused while blurred.
|
|
182
|
-
expect(
|
|
229
|
+
expect(within(viewport).getByText('Auto toast')).toBeInTheDocument();
|
|
183
230
|
|
|
184
231
|
// Window regains focus — timer resumes and the toast dismisses.
|
|
185
232
|
act(() => {
|
|
@@ -196,7 +243,9 @@ describe('Toast blur timer pause', () => {
|
|
|
196
243
|
completeExit(toastId);
|
|
197
244
|
});
|
|
198
245
|
}
|
|
199
|
-
expect(
|
|
246
|
+
expect(
|
|
247
|
+
within(viewport).queryByText('Auto toast'),
|
|
248
|
+
).not.toBeInTheDocument();
|
|
200
249
|
} finally {
|
|
201
250
|
vi.useRealTimers();
|
|
202
251
|
}
|
|
@@ -213,6 +262,167 @@ describe('ToastViewport region ARIA', () => {
|
|
|
213
262
|
});
|
|
214
263
|
});
|
|
215
264
|
|
|
265
|
+
describe('toast announcements via singleton live regions', () => {
|
|
266
|
+
function politeRegion(): HTMLElement | null {
|
|
267
|
+
return document.querySelector('[data-astryx-live-region="polite"]');
|
|
268
|
+
}
|
|
269
|
+
function assertiveRegion(): HTMLElement | null {
|
|
270
|
+
return document.querySelector('[data-astryx-live-region="assertive"]');
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const RICH_INFO: ToastOptions = {
|
|
274
|
+
body: (
|
|
275
|
+
<>
|
|
276
|
+
<strong>Update ready</strong>
|
|
277
|
+
<div>Restart to apply</div>
|
|
278
|
+
</>
|
|
279
|
+
),
|
|
280
|
+
};
|
|
281
|
+
const ERROR_TOAST: ToastOptions = {body: 'Upload failed', type: 'error'};
|
|
282
|
+
const SAVING_V1: ToastOptions = {uniqueID: 'save', body: 'Saving changes'};
|
|
283
|
+
const SAVING_V2: ToastOptions = {uniqueID: 'save', body: 'Changes saved'};
|
|
284
|
+
const IGNORE_KEPT: ToastOptions = {
|
|
285
|
+
uniqueID: 'dup',
|
|
286
|
+
collisionBehavior: 'ignore',
|
|
287
|
+
body: 'Kept',
|
|
288
|
+
};
|
|
289
|
+
const IGNORE_DROPPED: ToastOptions = {
|
|
290
|
+
uniqueID: 'dup',
|
|
291
|
+
collisionBehavior: 'ignore',
|
|
292
|
+
body: 'Dropped',
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
it('announces an info toast politely with its flattened text content', async () => {
|
|
296
|
+
renderViewport(<ShowToastButton options={RICH_INFO} triggerLabel="Show" />);
|
|
297
|
+
act(() => {
|
|
298
|
+
fireEvent.click(screen.getByText('Show'));
|
|
299
|
+
});
|
|
300
|
+
// Announced synchronously at dispatch, exactly once.
|
|
301
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
302
|
+
expect(announceSpy).toHaveBeenCalledWith(
|
|
303
|
+
'Update ready Restart to apply',
|
|
304
|
+
'polite',
|
|
305
|
+
);
|
|
306
|
+
// The flattened text reaches the polite singleton region (the sink).
|
|
307
|
+
await waitFor(() => {
|
|
308
|
+
expect(politeRegion()).toHaveTextContent('Update ready Restart to apply');
|
|
309
|
+
});
|
|
310
|
+
// Status toasts never touch the assertive region.
|
|
311
|
+
expect(assertiveRegion()).toHaveTextContent('');
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it('announces an error toast assertively', async () => {
|
|
315
|
+
renderViewport(
|
|
316
|
+
<ShowToastButton options={ERROR_TOAST} triggerLabel="Show" />,
|
|
317
|
+
);
|
|
318
|
+
act(() => {
|
|
319
|
+
fireEvent.click(screen.getByText('Show'));
|
|
320
|
+
});
|
|
321
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
322
|
+
expect(announceSpy).toHaveBeenCalledWith('Upload failed', 'assertive');
|
|
323
|
+
await waitFor(() => {
|
|
324
|
+
expect(assertiveRegion()).toHaveTextContent('Upload failed');
|
|
325
|
+
});
|
|
326
|
+
expect(politeRegion()).toHaveTextContent('');
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
it('announces exactly once at dispatch, even under StrictMode', () => {
|
|
330
|
+
render(
|
|
331
|
+
<React.StrictMode>
|
|
332
|
+
<ToastViewport isTopLayer={false}>
|
|
333
|
+
<ShowToastButton options={INFO_A} triggerLabel="Show" />
|
|
334
|
+
</ToastViewport>
|
|
335
|
+
</React.StrictMode>,
|
|
336
|
+
);
|
|
337
|
+
act(() => {
|
|
338
|
+
fireEvent.click(screen.getByText('Show'));
|
|
339
|
+
});
|
|
340
|
+
// The announcement lives in the imperative dispatch path (addToast), not a
|
|
341
|
+
// render effect, so StrictMode's double render and double-invoked state
|
|
342
|
+
// updater cannot announce the same toast twice.
|
|
343
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
344
|
+
expect(announceSpy).toHaveBeenCalledWith('Toast A', 'polite');
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it('re-announces a uniqueID toast when its content is overwritten', async () => {
|
|
348
|
+
renderViewport(
|
|
349
|
+
<>
|
|
350
|
+
<ShowToastButton options={SAVING_V1} triggerLabel="Show v1" />
|
|
351
|
+
<ShowToastButton options={SAVING_V2} triggerLabel="Show v2" />
|
|
352
|
+
</>,
|
|
353
|
+
);
|
|
354
|
+
act(() => {
|
|
355
|
+
fireEvent.click(screen.getByText('Show v1'));
|
|
356
|
+
});
|
|
357
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
358
|
+
expect(announceSpy).toHaveBeenLastCalledWith('Saving changes', 'polite');
|
|
359
|
+
// Overwriting via uniqueID replaces the toast in place — the new content is
|
|
360
|
+
// a fresh dispatch and must be announced again.
|
|
361
|
+
act(() => {
|
|
362
|
+
fireEvent.click(screen.getByText('Show v2'));
|
|
363
|
+
});
|
|
364
|
+
expect(announceSpy).toHaveBeenCalledTimes(2);
|
|
365
|
+
expect(announceSpy).toHaveBeenLastCalledWith('Changes saved', 'polite');
|
|
366
|
+
await waitFor(() => {
|
|
367
|
+
expect(politeRegion()).toHaveTextContent('Changes saved');
|
|
368
|
+
});
|
|
369
|
+
// Still a single toast on screen — overwritten in place, not stacked.
|
|
370
|
+
const viewport = screen.getByRole('region', {name: 'Notifications'});
|
|
371
|
+
expect(
|
|
372
|
+
within(viewport).queryAllByText(/Saving changes|Changes saved/),
|
|
373
|
+
).toHaveLength(1);
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
it('does not re-announce an unchanged toast when an unrelated render occurs', () => {
|
|
377
|
+
renderViewport(
|
|
378
|
+
<>
|
|
379
|
+
<ShowToastButton options={INFO_A} triggerLabel="Show A" />
|
|
380
|
+
<ShowToastButton options={ERROR_TOAST} triggerLabel="Show B" />
|
|
381
|
+
</>,
|
|
382
|
+
);
|
|
383
|
+
act(() => {
|
|
384
|
+
fireEvent.click(screen.getByText('Show A'));
|
|
385
|
+
});
|
|
386
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
387
|
+
// A second toast arriving re-renders the viewport with a new toast list.
|
|
388
|
+
// Toast A is not re-dispatched, so it must not be announced again — only
|
|
389
|
+
// the newly dispatched toast produces a call.
|
|
390
|
+
act(() => {
|
|
391
|
+
fireEvent.click(screen.getByText('Show B'));
|
|
392
|
+
});
|
|
393
|
+
expect(announceSpy).toHaveBeenCalledTimes(2);
|
|
394
|
+
expect(announceSpy).toHaveBeenNthCalledWith(1, 'Toast A', 'polite');
|
|
395
|
+
expect(announceSpy).toHaveBeenNthCalledWith(
|
|
396
|
+
2,
|
|
397
|
+
'Upload failed',
|
|
398
|
+
'assertive',
|
|
399
|
+
);
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
it('does not announce a toast whose uniqueID collision is ignored', () => {
|
|
403
|
+
renderViewport(
|
|
404
|
+
<>
|
|
405
|
+
<ShowToastButton options={IGNORE_KEPT} triggerLabel="Show 1" />
|
|
406
|
+
<ShowToastButton options={IGNORE_DROPPED} triggerLabel="Show 2" />
|
|
407
|
+
</>,
|
|
408
|
+
);
|
|
409
|
+
act(() => {
|
|
410
|
+
fireEvent.click(screen.getByText('Show 1'));
|
|
411
|
+
});
|
|
412
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
413
|
+
expect(announceSpy).toHaveBeenLastCalledWith('Kept', 'polite');
|
|
414
|
+
// The colliding toast is suppressed (collisionBehavior: 'ignore'), so it is
|
|
415
|
+
// neither shown nor announced.
|
|
416
|
+
act(() => {
|
|
417
|
+
fireEvent.click(screen.getByText('Show 2'));
|
|
418
|
+
});
|
|
419
|
+
expect(announceSpy).toHaveBeenCalledTimes(1);
|
|
420
|
+
const viewport = screen.getByRole('region', {name: 'Notifications'});
|
|
421
|
+
expect(within(viewport).getByText('Kept')).toBeInTheDocument();
|
|
422
|
+
expect(within(viewport).queryByText('Dropped')).not.toBeInTheDocument();
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
|
|
216
426
|
describe('toast timer lifecycle (#3589)', () => {
|
|
217
427
|
it('fires onHide exactly once when dismissed twice during the exit window', () => {
|
|
218
428
|
const onHide = vi.fn();
|