@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
|
@@ -78,6 +78,37 @@ describe('DropdownMenuCheckboxItem', () => {
|
|
|
78
78
|
expect(onChangeSpy).toHaveBeenCalledWith(true);
|
|
79
79
|
});
|
|
80
80
|
|
|
81
|
+
it('keeps the composed checkbox decorative (row is the only announced control)', async () => {
|
|
82
|
+
const user = userEvent.setup();
|
|
83
|
+
render(
|
|
84
|
+
<DropdownMenu button={{label: 'View'}}>
|
|
85
|
+
<DropdownMenuCheckboxItem label="Show archived" value={true} />
|
|
86
|
+
</DropdownMenu>,
|
|
87
|
+
);
|
|
88
|
+
await user.click(screen.getByRole('button', {name: /View/}));
|
|
89
|
+
|
|
90
|
+
// The row owns role="menuitemcheckbox" — it is the single such control.
|
|
91
|
+
expect(
|
|
92
|
+
screen.getAllByRole('menuitemcheckbox', {hidden: true}),
|
|
93
|
+
).toHaveLength(1);
|
|
94
|
+
|
|
95
|
+
// The composed CheckboxInput is present in the DOM but sits inside an
|
|
96
|
+
// `aria-hidden` + `inert` subtree: it contributes nothing to the row's
|
|
97
|
+
// accessible name and its native <input> is out of the tab order and the
|
|
98
|
+
// accessibility tree, so it is not a second announced/focusable control.
|
|
99
|
+
// (Browsers enforce inert; jsdom does not model its a11y removal, so this
|
|
100
|
+
// asserts the aria-hidden/inert boundary directly rather than via role.)
|
|
101
|
+
const row = screen.getByRole('menuitemcheckbox', {
|
|
102
|
+
name: /Show archived/,
|
|
103
|
+
hidden: true,
|
|
104
|
+
});
|
|
105
|
+
const input = row.querySelector('input[type="checkbox"]');
|
|
106
|
+
expect(input).not.toBeNull();
|
|
107
|
+
const marker = input?.closest('[inert]');
|
|
108
|
+
expect(marker).not.toBeNull();
|
|
109
|
+
expect(marker).toHaveAttribute('aria-hidden', 'true');
|
|
110
|
+
});
|
|
111
|
+
|
|
81
112
|
it('does not toggle when disabled', async () => {
|
|
82
113
|
const user = userEvent.setup();
|
|
83
114
|
const onChangeSpy = vi.fn();
|
|
@@ -110,7 +141,7 @@ describe('DropdownMenuRadioGroup / RadioItem', () => {
|
|
|
110
141
|
<DropdownMenuRadioGroup
|
|
111
142
|
value="newest"
|
|
112
143
|
onChange={() => {}}
|
|
113
|
-
|
|
144
|
+
label="Sort by">
|
|
114
145
|
<DropdownMenuRadioItem value="newest" label="Newest" />
|
|
115
146
|
<DropdownMenuRadioItem value="oldest" label="Oldest" />
|
|
116
147
|
</DropdownMenuRadioGroup>
|
|
@@ -128,6 +159,39 @@ describe('DropdownMenuRadioGroup / RadioItem', () => {
|
|
|
128
159
|
).toBeInTheDocument();
|
|
129
160
|
});
|
|
130
161
|
|
|
162
|
+
it('exposes a themeable slot on the checked radio dot', async () => {
|
|
163
|
+
const user = userEvent.setup();
|
|
164
|
+
render(
|
|
165
|
+
<DropdownMenu button={{label: 'Sort'}}>
|
|
166
|
+
<DropdownMenuRadioGroup
|
|
167
|
+
value="newest"
|
|
168
|
+
onChange={() => {}}
|
|
169
|
+
label="Sort by">
|
|
170
|
+
<DropdownMenuRadioItem value="newest" label="Newest" />
|
|
171
|
+
<DropdownMenuRadioItem value="oldest" label="Oldest" />
|
|
172
|
+
</DropdownMenuRadioGroup>
|
|
173
|
+
</DropdownMenu>,
|
|
174
|
+
);
|
|
175
|
+
await user.click(screen.getByRole('button', {name: /Sort/}));
|
|
176
|
+
const checked = screen.getByRole('menuitemradio', {
|
|
177
|
+
name: 'Newest',
|
|
178
|
+
hidden: true,
|
|
179
|
+
});
|
|
180
|
+
const dot = checked.querySelector('.astryx-dropdown-menu-radio-dot');
|
|
181
|
+
expect(dot).toBeInTheDocument();
|
|
182
|
+
// Mirrors the radio container's visual props/states for consistent theming.
|
|
183
|
+
expect(dot).toHaveAttribute('data-size', 'md');
|
|
184
|
+
expect(dot).toHaveAttribute('data-checked', 'checked');
|
|
185
|
+
// The unchecked radio has no dot, so no dot slot either.
|
|
186
|
+
const unchecked = screen.getByRole('menuitemradio', {
|
|
187
|
+
name: 'Oldest',
|
|
188
|
+
hidden: true,
|
|
189
|
+
});
|
|
190
|
+
expect(
|
|
191
|
+
unchecked.querySelector('.astryx-dropdown-menu-radio-dot'),
|
|
192
|
+
).not.toBeInTheDocument();
|
|
193
|
+
});
|
|
194
|
+
|
|
131
195
|
it('calls onChange with the selected value', async () => {
|
|
132
196
|
const user = userEvent.setup();
|
|
133
197
|
const onChange = vi.fn();
|
|
@@ -136,7 +200,7 @@ describe('DropdownMenuRadioGroup / RadioItem', () => {
|
|
|
136
200
|
<DropdownMenuRadioGroup
|
|
137
201
|
value="newest"
|
|
138
202
|
onChange={onChange}
|
|
139
|
-
|
|
203
|
+
label="Sort by">
|
|
140
204
|
<DropdownMenuRadioItem value="newest" label="Newest" />
|
|
141
205
|
<DropdownMenuRadioItem value="oldest" label="Oldest" />
|
|
142
206
|
</DropdownMenuRadioGroup>
|
|
@@ -149,6 +213,24 @@ describe('DropdownMenuRadioGroup / RadioItem', () => {
|
|
|
149
213
|
expect(onChange).toHaveBeenCalledWith('oldest');
|
|
150
214
|
});
|
|
151
215
|
|
|
216
|
+
it('names the group from the required label prop', async () => {
|
|
217
|
+
const user = userEvent.setup();
|
|
218
|
+
render(
|
|
219
|
+
<DropdownMenu button={{label: 'Sort'}}>
|
|
220
|
+
<DropdownMenuRadioGroup
|
|
221
|
+
value="newest"
|
|
222
|
+
onChange={() => {}}
|
|
223
|
+
label="Sort by">
|
|
224
|
+
<DropdownMenuRadioItem value="newest" label="Newest" />
|
|
225
|
+
</DropdownMenuRadioGroup>
|
|
226
|
+
</DropdownMenu>,
|
|
227
|
+
);
|
|
228
|
+
await user.click(screen.getByRole('button', {name: /Sort/}));
|
|
229
|
+
expect(
|
|
230
|
+
screen.getByRole('group', {name: 'Sort by', hidden: true}),
|
|
231
|
+
).toBeInTheDocument();
|
|
232
|
+
});
|
|
233
|
+
|
|
152
234
|
it('throws when a radio item is used outside a group', () => {
|
|
153
235
|
const spy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
|
154
236
|
expect(() =>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
10
10
|
import {useState} from 'react';
|
|
11
|
-
import {render, screen, waitFor} from '@testing-library/react';
|
|
11
|
+
import {render, screen, waitFor, fireEvent} from '@testing-library/react';
|
|
12
12
|
import userEvent from '@testing-library/user-event';
|
|
13
13
|
import {DropdownMenu} from './DropdownMenu';
|
|
14
14
|
import {DropdownMenuItem} from './DropdownMenuItem';
|
|
@@ -510,6 +510,34 @@ describe('DropdownMenuSubMenu accessibility (WCAG 2.2 / APG)', () => {
|
|
|
510
510
|
expect(onPick).toHaveBeenCalledWith('data');
|
|
511
511
|
});
|
|
512
512
|
|
|
513
|
+
// Regression: hovering the submenu trigger while a sibling item still holds
|
|
514
|
+
// focus must move the single focus-driven highlight onto the trigger — not
|
|
515
|
+
// leave two items highlighted at once (the trigger via :hover, the sibling
|
|
516
|
+
// via :focus). Mirrors DropdownMenuItem's hover-focus behavior.
|
|
517
|
+
it('moves focus to the submenu trigger on hover, keeping a single highlight', async () => {
|
|
518
|
+
const user = userEvent.setup();
|
|
519
|
+
render(<MoveMenu />);
|
|
520
|
+
await user.click(screen.getByRole('button', {name: /Actions/}));
|
|
521
|
+
|
|
522
|
+
const rename = screen.getByRole('menuitem', {
|
|
523
|
+
name: 'Rename',
|
|
524
|
+
hidden: true,
|
|
525
|
+
});
|
|
526
|
+
const trigger = screen.getByRole('menuitem', {
|
|
527
|
+
name: /Move to/,
|
|
528
|
+
hidden: true,
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
rename.focus();
|
|
532
|
+
expect(rename).toHaveFocus();
|
|
533
|
+
|
|
534
|
+
// A mouse hover over the submenu trigger moves focus onto it, so the single
|
|
535
|
+
// focus-driven highlight follows the pointer instead of leaving two.
|
|
536
|
+
fireEvent.pointerMove(trigger, {pointerType: 'mouse'});
|
|
537
|
+
expect(trigger).toHaveFocus();
|
|
538
|
+
expect(rename).not.toHaveFocus();
|
|
539
|
+
});
|
|
540
|
+
|
|
513
541
|
// 1.4.13 Content on Hover or Focus: the flyout stays open while the pointer
|
|
514
542
|
// is over it (moving onto the flyout must not dismiss it).
|
|
515
543
|
it('keeps the flyout open while the pointer is over it', async () => {
|
|
@@ -633,3 +661,20 @@ describe('DropdownMenuSubMenu accessibility (WCAG 2.2 / APG)', () => {
|
|
|
633
661
|
});
|
|
634
662
|
});
|
|
635
663
|
});
|
|
664
|
+
|
|
665
|
+
describe('DropdownMenuSubMenu theming slots', () => {
|
|
666
|
+
it('exposes a themeable slot on the submenu indicator icon', async () => {
|
|
667
|
+
const user = userEvent.setup();
|
|
668
|
+
render(<MoveMenu />);
|
|
669
|
+
await user.click(screen.getByRole('button', {name: /Actions/}));
|
|
670
|
+
const trigger = screen.getByRole('menuitem', {
|
|
671
|
+
name: /Move to/,
|
|
672
|
+
hidden: true,
|
|
673
|
+
});
|
|
674
|
+
// The indicator-icon slot wraps the chevron affordance inside the trigger
|
|
675
|
+
// row.
|
|
676
|
+
expect(
|
|
677
|
+
trigger.querySelector('.astryx-dropdown-menu-indicator-icon'),
|
|
678
|
+
).toBeInTheDocument();
|
|
679
|
+
});
|
|
680
|
+
});
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
* - /packages/core/src/DropdownMenu/DropdownMenuSubMenu.test.tsx
|
|
36
36
|
* - /packages/core/src/DropdownMenu/index.ts
|
|
37
37
|
* - /apps/storybook/stories/DropdownMenu.stories.tsx
|
|
38
|
-
* - /packages/cli/templates/blocks/components/DropdownMenu/ (showcase blocks)
|
|
38
|
+
* - /packages/cli/assets/templates/blocks/components/DropdownMenu/ (showcase blocks)
|
|
39
39
|
*/
|
|
40
40
|
|
|
41
41
|
import React, {
|
|
@@ -44,6 +44,7 @@ import React, {
|
|
|
44
44
|
useMemo,
|
|
45
45
|
useRef,
|
|
46
46
|
useState,
|
|
47
|
+
type PointerEvent,
|
|
47
48
|
type ReactNode,
|
|
48
49
|
} from 'react';
|
|
49
50
|
import * as stylex from '@stylexjs/stylex';
|
|
@@ -78,6 +79,7 @@ import {
|
|
|
78
79
|
useDropdownMenuContext,
|
|
79
80
|
type DropdownMenuContextValue,
|
|
80
81
|
} from './DropdownMenuContext';
|
|
82
|
+
import {focusMenuItemOnHover} from './menuItemHover';
|
|
81
83
|
|
|
82
84
|
const triggerStyles = stylex.create({
|
|
83
85
|
root: {
|
|
@@ -93,11 +95,6 @@ const triggerStyles = stylex.create({
|
|
|
93
95
|
default: 'transparent',
|
|
94
96
|
':focus': colorVars['--color-overlay-hover'],
|
|
95
97
|
},
|
|
96
|
-
':hover': {
|
|
97
|
-
'@media (hover: hover)': {
|
|
98
|
-
backgroundColor: colorVars['--color-overlay-hover'],
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
98
|
border: 'none',
|
|
102
99
|
cursor: 'pointer',
|
|
103
100
|
textAlign: 'start',
|
|
@@ -393,6 +390,16 @@ export function DropdownMenuSubMenu(
|
|
|
393
390
|
[isDisabled, open],
|
|
394
391
|
);
|
|
395
392
|
|
|
393
|
+
// Move the single focus-driven highlight onto the trigger as the pointer
|
|
394
|
+
// enters it, so a sibling item that still holds focus doesn't stay
|
|
395
|
+
// highlighted alongside the hovered trigger. This is separate from the
|
|
396
|
+
// hover-open intent (onMouseEnter/onMouseLeave) — the flyout still opens on
|
|
397
|
+
// the hover delay; this only keeps the highlight single.
|
|
398
|
+
const handlePointerMove = useCallback(
|
|
399
|
+
(e: PointerEvent<HTMLElement>) => focusMenuItemOnHover(e, isDisabled),
|
|
400
|
+
[isDisabled],
|
|
401
|
+
);
|
|
402
|
+
|
|
396
403
|
// Enter/Space activate the focused row; typeahead jumps by first character;
|
|
397
404
|
// the close key (Left, or Right in RTL) returns focus to the trigger;
|
|
398
405
|
// arrows/Home/End defer to useListFocus (RTL-aware).
|
|
@@ -467,11 +474,19 @@ export function DropdownMenuSubMenu(
|
|
|
467
474
|
);
|
|
468
475
|
|
|
469
476
|
const endAffordance = hasSpinner ? (
|
|
470
|
-
<span
|
|
477
|
+
<span
|
|
478
|
+
{...mergeProps(
|
|
479
|
+
themeProps('dropdown-menu-indicator-icon'),
|
|
480
|
+
stylex.props(triggerStyles.caret),
|
|
481
|
+
)}>
|
|
471
482
|
<Spinner size="sm" />
|
|
472
483
|
</span>
|
|
473
484
|
) : (
|
|
474
|
-
<span
|
|
485
|
+
<span
|
|
486
|
+
{...mergeProps(
|
|
487
|
+
themeProps('dropdown-menu-indicator-icon'),
|
|
488
|
+
stylex.props(triggerStyles.caret),
|
|
489
|
+
)}>
|
|
475
490
|
<Icon icon="chevronRight" size="sm" color="secondary" />
|
|
476
491
|
</span>
|
|
477
492
|
);
|
|
@@ -494,6 +509,7 @@ export function DropdownMenuSubMenu(
|
|
|
494
509
|
data-testid={testId}
|
|
495
510
|
onMouseEnter={triggerProps.onMouseEnter}
|
|
496
511
|
onMouseLeave={triggerProps.onMouseLeave}
|
|
512
|
+
onPointerMove={handlePointerMove}
|
|
497
513
|
startContent={
|
|
498
514
|
icon
|
|
499
515
|
? renderIconSlot(icon, {size: 'sm', color: 'secondary'})
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* - /packages/core/src/DropdownMenu/DropdownMenuItem.tsx
|
|
17
17
|
* - /packages/core/src/DropdownMenu/DropdownMenuCheckboxItem.tsx
|
|
18
18
|
* - /packages/core/src/DropdownMenu/DropdownMenuRadioItem.tsx
|
|
19
|
+
* - /packages/core/src/DropdownMenu/DropdownMenuSubMenu.tsx
|
|
19
20
|
*/
|
|
20
21
|
|
|
21
22
|
import type {PointerEvent} from 'react';
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
typeScaleVars,
|
|
18
18
|
colorVars,
|
|
19
19
|
} from '../theme/tokens.stylex';
|
|
20
|
+
import {mergeProps, themeProps} from '../utils';
|
|
20
21
|
import type {
|
|
21
22
|
DropdownMenuItemData,
|
|
22
23
|
DropdownMenuOption,
|
|
@@ -57,7 +58,13 @@ export function renderDropdownItems(items: DropdownMenuOption[]): ReactNode {
|
|
|
57
58
|
const option = items[i];
|
|
58
59
|
|
|
59
60
|
if ('type' in option && option.type === 'divider') {
|
|
60
|
-
elements.push(
|
|
61
|
+
elements.push(
|
|
62
|
+
<Divider
|
|
63
|
+
key={`divider-${i}`}
|
|
64
|
+
xstyle={styles.divider}
|
|
65
|
+
{...themeProps('dropdown-menu-divider')}
|
|
66
|
+
/>,
|
|
67
|
+
);
|
|
61
68
|
} else if ('type' in option && option.type === 'section') {
|
|
62
69
|
elements.push(
|
|
63
70
|
<div
|
|
@@ -65,7 +72,12 @@ export function renderDropdownItems(items: DropdownMenuOption[]): ReactNode {
|
|
|
65
72
|
role="group"
|
|
66
73
|
aria-label={option.title}>
|
|
67
74
|
{option.title && (
|
|
68
|
-
<div
|
|
75
|
+
<div
|
|
76
|
+
aria-hidden="true"
|
|
77
|
+
{...mergeProps(
|
|
78
|
+
themeProps('dropdown-menu-section-heading'),
|
|
79
|
+
stylex.props(styles.sectionHeading),
|
|
80
|
+
)}>
|
|
69
81
|
{option.title}
|
|
70
82
|
</div>
|
|
71
83
|
)}
|
|
@@ -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: 'EmptyState',
|
|
@@ -87,7 +87,7 @@ export const docs = {
|
|
|
87
87
|
},
|
|
88
88
|
};
|
|
89
89
|
|
|
90
|
-
/** @type {import('
|
|
90
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentDoc} */
|
|
91
91
|
export const docsZh = {
|
|
92
92
|
name: 'EmptyState',
|
|
93
93
|
displayName: 'Empty State',
|
|
@@ -156,7 +156,7 @@ export const docsZh = {
|
|
|
156
156
|
},
|
|
157
157
|
};
|
|
158
158
|
|
|
159
|
-
/** @type {import('
|
|
159
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
160
160
|
export const docsDense = {
|
|
161
161
|
description:
|
|
162
162
|
'placeholder when a content area has no data: icon, title, description, action buttons',
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - /packages/core/src/EmptyState/EmptyState.test.tsx (tests for new/changed behavior)
|
|
12
12
|
* - /packages/core/src/EmptyState/index.ts (exports if types change)
|
|
13
13
|
* - /apps/storybook/stories/EmptyState.stories.tsx (storybook stories)
|
|
14
|
-
* - /packages/cli/templates/blocks/components/EmptyState/ (showcase blocks)
|
|
14
|
+
* - /packages/cli/assets/templates/blocks/components/EmptyState/ (showcase blocks)
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {type ReactNode, createElement} from 'react';
|
package/src/Field/Field.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: 'Field',
|
|
@@ -30,6 +30,10 @@ export const docs = {
|
|
|
30
30
|
{className: 'astryx-field', visualProps: ['layout']},
|
|
31
31
|
{className: 'astryx-field-label'},
|
|
32
32
|
{className: 'astryx-field-status', visualProps: ['type', 'variant']},
|
|
33
|
+
{
|
|
34
|
+
className: 'astryx-input-status-icon',
|
|
35
|
+
visualProps: ['size', 'status'],
|
|
36
|
+
},
|
|
33
37
|
],
|
|
34
38
|
vars: [
|
|
35
39
|
{name: '--_field-radius', description: 'Border radius of input fields', default: 'var(--radius-element)', private: true},
|
|
@@ -192,7 +196,7 @@ function CustomSliderField() {
|
|
|
192
196
|
],
|
|
193
197
|
};
|
|
194
198
|
|
|
195
|
-
/** @type {import('
|
|
199
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
196
200
|
export const docsZh = {
|
|
197
201
|
usage: {
|
|
198
202
|
description: 'Field is a low-level wrapper for custom, native, or third-party controls that do not already provide field label, description, and status UI. Use it when you need the Field shell around a control you own; use styled Astryx inputs like TextInput, Typeahead, and Select directly when they already expose label, description, and validation props.',
|
|
@@ -208,7 +212,7 @@ export const docsZh = {
|
|
|
208
212
|
},
|
|
209
213
|
};
|
|
210
214
|
|
|
211
|
-
/** @type {import('
|
|
215
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
212
216
|
export const docsDense = {
|
|
213
217
|
description:
|
|
214
218
|
'Low-level field shell for custom controls needing label/description/status.',
|
package/src/Field/Field.tsx
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - /packages/core/src/Field/Field.test.tsx (tests for new/changed behavior)
|
|
14
14
|
* - /packages/core/src/Field/index.ts (exports if types change)
|
|
15
15
|
* - /apps/storybook/stories/Field.stories.tsx (storybook stories)
|
|
16
|
-
* - /packages/cli/templates/blocks/components/Field/ (showcase blocks)
|
|
16
|
+
* - /packages/cli/assets/templates/blocks/components/Field/ (showcase blocks)
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import {type ReactNode, use} from 'react';
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
import {describe, it, expect, vi} from 'vitest';
|
|
13
13
|
import {render, screen} from '@testing-library/react';
|
|
14
|
+
import userEvent from '@testing-library/user-event';
|
|
14
15
|
import {TestIcon} from '../__tests__/TestIcon';
|
|
16
|
+
import {InternationalizationProvider} from '../i18n';
|
|
15
17
|
import {FieldLabel} from './FieldLabel';
|
|
16
18
|
|
|
17
19
|
describe('FieldLabel', () => {
|
|
@@ -36,6 +38,30 @@ describe('FieldLabel', () => {
|
|
|
36
38
|
expect(screen.getByText(/Required/)).toBeInTheDocument();
|
|
37
39
|
});
|
|
38
40
|
|
|
41
|
+
it('localizes the required indicator via the i18n provider', () => {
|
|
42
|
+
render(
|
|
43
|
+
<InternationalizationProvider
|
|
44
|
+
locale="fr"
|
|
45
|
+
overrides={{fr: {'@astryx.field.required': 'Obligatoire'}}}>
|
|
46
|
+
<FieldLabel label="Nom" inputID="name-input" isRequired />
|
|
47
|
+
</InternationalizationProvider>,
|
|
48
|
+
);
|
|
49
|
+
expect(screen.getByText(/Obligatoire/)).toBeInTheDocument();
|
|
50
|
+
expect(screen.queryByText(/Required/)).not.toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('localizes the optional indicator via the i18n provider', () => {
|
|
54
|
+
render(
|
|
55
|
+
<InternationalizationProvider
|
|
56
|
+
locale="fr"
|
|
57
|
+
overrides={{fr: {'@astryx.field.optional': 'Facultatif'}}}>
|
|
58
|
+
<FieldLabel label="Nom" inputID="name-input" isOptional />
|
|
59
|
+
</InternationalizationProvider>,
|
|
60
|
+
);
|
|
61
|
+
expect(screen.getByText(/Facultatif/)).toBeInTheDocument();
|
|
62
|
+
expect(screen.queryByText(/Optional/)).not.toBeInTheDocument();
|
|
63
|
+
});
|
|
64
|
+
|
|
39
65
|
it('shows Optional when both isOptional and isRequired are true', () => {
|
|
40
66
|
render(
|
|
41
67
|
<FieldLabel label="Name" inputID="name-input" isOptional isRequired />,
|
|
@@ -94,4 +120,81 @@ describe('FieldLabel', () => {
|
|
|
94
120
|
// Info icon should be present
|
|
95
121
|
expect(document.querySelector('svg')).toBeInTheDocument();
|
|
96
122
|
});
|
|
123
|
+
|
|
124
|
+
describe('description click forwarding', () => {
|
|
125
|
+
// Renders a real control with the target id so click-forwarding has
|
|
126
|
+
// something to hit, alongside the label whose description forwards clicks.
|
|
127
|
+
function renderWithControl(props: {
|
|
128
|
+
isGroupLabel?: boolean;
|
|
129
|
+
controlType?: string;
|
|
130
|
+
description?: React.ReactNode;
|
|
131
|
+
}) {
|
|
132
|
+
const {isGroupLabel, controlType = 'checkbox', description} = props;
|
|
133
|
+
const onClick = vi.fn();
|
|
134
|
+
render(
|
|
135
|
+
<>
|
|
136
|
+
<input id="ctrl" type={controlType} onClick={onClick} />
|
|
137
|
+
<FieldLabel
|
|
138
|
+
label="Notify"
|
|
139
|
+
inputID="ctrl"
|
|
140
|
+
description={description ?? "We'll email you"}
|
|
141
|
+
descriptionID="ctrl-desc"
|
|
142
|
+
isGroupLabel={isGroupLabel}
|
|
143
|
+
/>
|
|
144
|
+
</>,
|
|
145
|
+
);
|
|
146
|
+
return onClick;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
it('forwards a description click to a click-activatable control (checkbox)', async () => {
|
|
150
|
+
const user = userEvent.setup();
|
|
151
|
+
const onClick = renderWithControl({controlType: 'checkbox'});
|
|
152
|
+
await user.click(screen.getByText("We'll email you"));
|
|
153
|
+
expect(onClick).toHaveBeenCalledTimes(1);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('focuses (does not click) a text input on description click', async () => {
|
|
157
|
+
const user = userEvent.setup();
|
|
158
|
+
const onClick = renderWithControl({controlType: 'text'});
|
|
159
|
+
await user.click(screen.getByText("We'll email you"));
|
|
160
|
+
// Text inputs focus rather than click — matching native label behavior,
|
|
161
|
+
// so no synthetic click fires but the control receives focus.
|
|
162
|
+
expect(onClick).not.toHaveBeenCalled();
|
|
163
|
+
expect(document.getElementById('ctrl')).toHaveFocus();
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('does NOT forward description clicks for a group label', async () => {
|
|
167
|
+
const user = userEvent.setup();
|
|
168
|
+
const onClick = renderWithControl({isGroupLabel: true});
|
|
169
|
+
await user.click(screen.getByText("We'll email you"));
|
|
170
|
+
expect(onClick).not.toHaveBeenCalled();
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it('does NOT hijack clicks on interactive content inside the description', async () => {
|
|
174
|
+
const user = userEvent.setup();
|
|
175
|
+
const linkClick = vi.fn();
|
|
176
|
+
const onClick = renderWithControl({
|
|
177
|
+
description: (
|
|
178
|
+
<>
|
|
179
|
+
See our{' '}
|
|
180
|
+
<a href="#terms" onClick={linkClick}>
|
|
181
|
+
terms
|
|
182
|
+
</a>
|
|
183
|
+
</>
|
|
184
|
+
),
|
|
185
|
+
});
|
|
186
|
+
await user.click(screen.getByRole('link', {name: 'terms'}));
|
|
187
|
+
// The nested link handles its own click; the control is not toggled.
|
|
188
|
+
expect(linkClick).toHaveBeenCalledTimes(1);
|
|
189
|
+
expect(onClick).not.toHaveBeenCalled();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('keeps the description a sibling of the label (not nested inside it)', () => {
|
|
193
|
+
renderWithControl({});
|
|
194
|
+
const description = screen.getByText("We'll email you");
|
|
195
|
+
// The description must not live inside the <label> — nesting it there
|
|
196
|
+
// would fold it into the control's accessible name.
|
|
197
|
+
expect(description.closest('label')).toBeNull();
|
|
198
|
+
});
|
|
199
|
+
});
|
|
97
200
|
});
|
package/src/Field/FieldLabel.tsx
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* @file FieldLabel.tsx
|
|
5
|
-
* @input Uses React, Icon, IconType
|
|
7
|
+
* @input Uses React, Icon, IconType, useTranslator
|
|
6
8
|
* @output Exports FieldLabel component, FieldLabelProps
|
|
7
9
|
* @position Core label implementation; used by Field, CheckboxInput, Switch
|
|
8
10
|
*
|
|
9
11
|
* SYNC: When modified, update these files to stay in sync:
|
|
10
12
|
* - /packages/core/src/Field/Field.doc.mjs (props table, features, implementation notes)
|
|
11
13
|
* - /packages/core/src/Field/index.ts (exports if types change)
|
|
12
|
-
* - /packages/cli/templates/blocks/components/Field/ (showcase blocks)
|
|
14
|
+
* - /packages/cli/assets/templates/blocks/components/Field/ (showcase blocks)
|
|
15
|
+
* - /packages/core/locales/en.json (@astryx.field.required / @astryx.field.optional)
|
|
13
16
|
*/
|
|
14
17
|
|
|
15
|
-
import type
|
|
18
|
+
import {useMemo, useRef, type ReactNode, type RefObject} from 'react';
|
|
16
19
|
import * as stylex from '@stylexjs/stylex';
|
|
17
20
|
import type {BaseProps} from '../BaseProps';
|
|
18
21
|
import {mergeProps} from '../utils';
|
|
@@ -26,7 +29,9 @@ import {
|
|
|
26
29
|
} from '../theme/tokens.stylex';
|
|
27
30
|
import {Icon, renderIconSlot, type IconType} from '../Icon';
|
|
28
31
|
import {Tooltip} from '../Tooltip';
|
|
32
|
+
import {useTranslator} from '../i18n';
|
|
29
33
|
import {themeProps} from '../utils/themeProps';
|
|
34
|
+
import {useInputContainer} from '../hooks';
|
|
30
35
|
|
|
31
36
|
const styles = stylex.create({
|
|
32
37
|
label: {
|
|
@@ -72,6 +77,11 @@ const styles = stylex.create({
|
|
|
72
77
|
fontWeight: fontWeightVars['--font-weight-normal'],
|
|
73
78
|
color: colorVars['--color-text-secondary'],
|
|
74
79
|
},
|
|
80
|
+
// When the description forwards clicks to a click-activatable control
|
|
81
|
+
// (checkbox/switch), it reads as part of the same hit target as the label.
|
|
82
|
+
descriptionClickable: {
|
|
83
|
+
cursor: 'pointer',
|
|
84
|
+
},
|
|
75
85
|
});
|
|
76
86
|
|
|
77
87
|
export interface FieldLabelProps extends BaseProps<HTMLLabelElement> {
|
|
@@ -177,7 +187,12 @@ export function FieldLabel({
|
|
|
177
187
|
ref,
|
|
178
188
|
...rest
|
|
179
189
|
}: FieldLabelProps) {
|
|
180
|
-
const
|
|
190
|
+
const t = useTranslator();
|
|
191
|
+
const statusText = isOptional
|
|
192
|
+
? t('@astryx.field.optional')
|
|
193
|
+
: isRequired
|
|
194
|
+
? t('@astryx.field.required')
|
|
195
|
+
: null;
|
|
181
196
|
|
|
182
197
|
// A group label (e.g. for a radiogroup) must not be a literal `<label>`
|
|
183
198
|
// element: a `<label>` semantically names a single form control and can't be
|
|
@@ -185,6 +200,41 @@ export function FieldLabel({
|
|
|
185
200
|
// label styling and slots. The group references it via `aria-labelledby`.
|
|
186
201
|
const LabelElement = isGroupLabel ? 'span' : 'label';
|
|
187
202
|
|
|
203
|
+
// Clicking the description forwards to the associated control, so the whole
|
|
204
|
+
// label area (label text + description) is one hit target — mirroring native
|
|
205
|
+
// `<label>` click behavior, which the description can't get from `htmlFor`
|
|
206
|
+
// because it stays a sibling `<span>` (nesting it in the `<label>` would fold
|
|
207
|
+
// it into the control's accessible name and double-announce it alongside
|
|
208
|
+
// `aria-describedby`). A group label names a group, not one control, so it
|
|
209
|
+
// has nothing to forward to.
|
|
210
|
+
const forwardsDescriptionClick = !isGroupLabel && inputID != null;
|
|
211
|
+
|
|
212
|
+
// Reuse `useInputContainer` — the same hook input wrappers use to forward
|
|
213
|
+
// clicks on non-interactive chrome to their control. It skips nested
|
|
214
|
+
// interactive content (a link/button inside a ReactNode description) and
|
|
215
|
+
// guards against forwarding during text selection, so the description needs
|
|
216
|
+
// no bespoke click logic. The "input" is resolved from `inputID` lazily via
|
|
217
|
+
// a ref-shaped object, since FieldLabel points at the control by id rather
|
|
218
|
+
// than holding a ref to it.
|
|
219
|
+
const descriptionRef = useRef<HTMLSpanElement>(null);
|
|
220
|
+
const controlRef = useMemo<RefObject<HTMLElement | null>>(
|
|
221
|
+
() => ({
|
|
222
|
+
get current() {
|
|
223
|
+
return inputID == null
|
|
224
|
+
? null
|
|
225
|
+
: (descriptionRef.current?.ownerDocument.getElementById(inputID) ??
|
|
226
|
+
null);
|
|
227
|
+
},
|
|
228
|
+
set current(_value) {},
|
|
229
|
+
}),
|
|
230
|
+
[inputID],
|
|
231
|
+
);
|
|
232
|
+
const descriptionClickProps = useInputContainer({
|
|
233
|
+
containerRef: descriptionRef,
|
|
234
|
+
inputRef: controlRef,
|
|
235
|
+
disabled: !forwardsDescriptionClick,
|
|
236
|
+
});
|
|
237
|
+
|
|
188
238
|
const labelContent = (
|
|
189
239
|
<>
|
|
190
240
|
{labelIcon && renderIconSlot(labelIcon, {size: 'sm', color: 'inherit'})}
|
|
@@ -227,8 +277,14 @@ export function FieldLabel({
|
|
|
227
277
|
</LabelElement>
|
|
228
278
|
{description && (
|
|
229
279
|
<span
|
|
280
|
+
ref={forwardsDescriptionClick ? descriptionRef : undefined}
|
|
230
281
|
id={descriptionID}
|
|
231
|
-
{...
|
|
282
|
+
{...(forwardsDescriptionClick ? descriptionClickProps : undefined)}
|
|
283
|
+
{...stylex.props(
|
|
284
|
+
styles.description,
|
|
285
|
+
forwardsDescriptionClick && styles.descriptionClickable,
|
|
286
|
+
isLabelHidden && styles.srOnly,
|
|
287
|
+
)}>
|
|
232
288
|
{description}
|
|
233
289
|
</span>
|
|
234
290
|
)}
|