@astryxdesign/core 0.1.9 → 0.2.0-canary.0b7a99e
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 +107 -0
- 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 +1 -14
- 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 +43 -4
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +194 -63
- package/dist/Avatar/AvatarStatusDot.d.ts +8 -30
- 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 +8 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +59 -7
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +2 -2
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +8 -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 +7 -35
- 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.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +12 -5
- 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 +19 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +16 -1
- package/dist/Button/Button.d.ts +3 -21
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +8 -21
- 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.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +51 -10
- package/dist/Calendar/dayCellUtils.d.ts +4 -4
- package/dist/Calendar/dayCellUtils.js +2 -2
- package/dist/Calendar/styles.d.ts +32 -33
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +32 -33
- package/dist/Card/Card.d.ts +1 -1
- package/dist/Card/Card.js +2 -2
- package/dist/Carousel/Carousel.d.ts +1 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +23 -13
- 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 +3 -3
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.js +2 -2
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +4 -2
- package/dist/Chat/ChatLayout.d.ts +8 -1
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +17 -6
- 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.d.ts.map +1 -1
- package/dist/Chat/ChatMessageBubble.js +9 -9
- package/dist/Chat/ChatMessageList.d.ts +1 -1
- package/dist/Chat/ChatMessageList.js +1 -1
- 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/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +10 -3
- package/dist/Chat/useTriggerMenu.js +2 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +7 -7
- 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 +23 -2
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +21 -7
- 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.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +16 -10
- package/dist/Collapsible/Collapsible.d.ts +1 -1
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +4 -2
- 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 +2 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +43 -4
- 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 +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +1 -1
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +2 -2
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +24 -6
- package/dist/ContextMenu/index.d.ts +1 -0
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +3 -1
- package/dist/DateInput/DateInput.d.ts +10 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +34 -20
- package/dist/DateRangeInput/DateRangeInput.d.ts +10 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +24 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +24 -19
- package/dist/Dialog/Dialog.d.ts +46 -23
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +59 -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 +4 -20
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +14 -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 +7 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +23 -6
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +18 -12
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +42 -64
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +6 -3
- 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 +10 -3
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +104 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +435 -0
- package/dist/DropdownMenu/index.d.ts +10 -0
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +13 -0
- package/dist/DropdownMenu/menuItemHover.d.ts +24 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -0
- package/dist/DropdownMenu/menuItemHover.js +34 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts +8 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemRoles.js +10 -1
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +27 -10
- package/dist/EmptyState/EmptyState.d.ts +1 -1
- package/dist/EmptyState/EmptyState.js +1 -1
- package/dist/Field/Field.d.ts +4 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +5 -2
- package/dist/Field/FieldLabel.d.ts +4 -3
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +50 -7
- package/dist/Field/inputStyles.stylex.d.ts +1 -0
- package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
- package/dist/Field/inputStyles.stylex.js +1 -0
- package/dist/FieldStatus/FieldStatus.d.ts +10 -17
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +52 -20
- 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.d.ts +10 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +94 -66
- 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 +1 -1
- package/dist/Grid/Grid.js +1 -1
- 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/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +10 -4
- package/dist/Icon/Icon.d.ts +16 -2
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +20 -4
- package/dist/Icon/globalIconRegistry.js +1 -1
- 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/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +10 -2
- 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 +1 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +35 -16
- 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.d.ts.map +1 -1
- package/dist/List/List.js +7 -4
- 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 +11 -4
- package/dist/MetadataList/MetadataList.d.ts +2 -2
- package/dist/MetadataList/MetadataList.d.ts.map +1 -1
- package/dist/MetadataList/MetadataList.js +5 -3
- 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 +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts +10 -2
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +88 -46
- package/dist/NavIcon/NavIcon.d.ts +1 -1
- package/dist/NavIcon/NavIcon.js +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +1 -1
- package/dist/NumberInput/NumberInput.d.ts +11 -3
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +23 -18
- package/dist/Outline/Outline.js +3 -3
- package/dist/OverflowList/OverflowList.d.ts +1 -1
- package/dist/OverflowList/OverflowList.js +1 -1
- package/dist/Pagination/Pagination.d.ts +1 -20
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +12 -18
- package/dist/Pagination/index.d.ts +21 -1
- package/dist/Pagination/index.d.ts.map +1 -1
- package/dist/Pagination/index.js +14 -0
- package/dist/Popover/Popover.d.ts +1 -1
- package/dist/Popover/Popover.js +1 -1
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -3
- package/dist/PowerSearch/PowerSearch.d.ts +10 -3
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +3 -1
- package/dist/ProgressBar/ProgressBar.d.ts +1 -20
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +7 -16
- 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 +3 -3
- 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 +6 -6
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +45 -22
- 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 +2 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +6 -4
- 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 +9 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +73 -20
- package/dist/SideNav/SideNav.d.ts +1 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +6 -6
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +14 -11
- package/dist/SideNav/SideNavHeading.d.ts +1 -1
- package/dist/SideNav/SideNavHeading.js +1 -1
- package/dist/SideNav/SideNavItem.d.ts +2 -2
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +13 -11
- 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 +146 -83
- package/dist/Spinner/Spinner.d.ts +4 -3
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +12 -3
- 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 +9 -2
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +172 -92
- package/dist/TabList/Tab.d.ts +1 -1
- package/dist/TabList/Tab.js +3 -3
- package/dist/TabList/TabList.d.ts +3 -12
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +6 -10
- package/dist/TabList/TabListContext.d.ts +0 -5
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +0 -5
- package/dist/TabList/TabMenu.d.ts +1 -1
- package/dist/TabList/TabMenu.js +2 -2
- package/dist/Table/BaseTable.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +31 -5
- 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 -4
- package/dist/Table/TableHeaderCell.d.ts +1 -1
- package/dist/Table/TableHeaderCell.js +4 -4
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +15 -11
- 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 +58 -30
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +3 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +15 -7
- 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 +65 -25
- package/dist/Table/types.d.ts +32 -0
- 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 +11 -2
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +120 -53
- package/dist/TextInput/TextInput.d.ts +11 -3
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +21 -18
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +52 -46
- package/dist/TimeInput/TimeInput.d.ts +10 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +18 -18
- package/dist/Timestamp/Timestamp.d.ts +31 -3
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +49 -78
- package/dist/Timestamp/formatInstant.d.ts +41 -0
- package/dist/Timestamp/formatInstant.d.ts.map +1 -0
- package/dist/Timestamp/formatInstant.js +177 -0
- package/dist/Timestamp/index.d.ts +1 -0
- package/dist/Timestamp/index.d.ts.map +1 -1
- package/dist/Timestamp/tooltipEntries.d.ts +56 -0
- package/dist/Timestamp/tooltipEntries.d.ts.map +1 -0
- package/dist/Timestamp/tooltipEntries.js +163 -0
- 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 +10 -5
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +72 -46
- 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 +26 -0
- package/dist/Token/index.d.ts.map +1 -1
- package/dist/Token/index.js +14 -0
- package/dist/Tokenizer/Tokenizer.d.ts +10 -3
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +5 -3
- 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/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +17 -1
- package/dist/TopNav/TopNav.d.ts +1 -1
- package/dist/TopNav/TopNav.js +1 -1
- package/dist/TopNav/TopNavHeading.d.ts +1 -1
- package/dist/TopNav/TopNavHeading.js +1 -1
- package/dist/TopNav/TopNavItem.d.ts +4 -2
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +31 -4
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +10 -4
- 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.js +1 -1
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +2 -1
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +9 -7
- package/dist/TreeList/TreeListItem.d.ts +1 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +33 -15
- 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 +23 -12
- package/dist/Typeahead/Typeahead.d.ts +10 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +12 -3
- package/dist/Typeahead/TypeaheadItem.d.ts +2 -2
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +21 -11
- 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 +150 -51
- package/dist/astryx.umd.js +51 -51
- 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 +4 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/isRtlElement.d.ts +18 -0
- package/dist/hooks/isRtlElement.d.ts.map +1 -0
- package/dist/hooks/isRtlElement.js +27 -0
- package/dist/hooks/useAnnounce.d.ts +3 -0
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +39 -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/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +52 -11
- package/dist/hooks/useGridFocus.d.ts +6 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +12 -9
- package/dist/hooks/useHotkeys.d.ts +9 -0
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +9 -0
- package/dist/hooks/useInputContainer.d.ts.map +1 -1
- package/dist/hooks/useInputContainer.js +29 -1
- package/dist/hooks/useInputStatusIcon.d.ts +38 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -0
- package/dist/hooks/useInputStatusIcon.js +169 -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 +39 -1
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +54 -9
- package/dist/i18n/InternationalizationContext.d.ts +1 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +3 -0
- package/dist/i18n/InternationalizationProvider.d.ts +8 -1
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +5 -1
- package/dist/i18n/getLocaleDirection.d.ts +18 -0
- package/dist/i18n/getLocaleDirection.d.ts.map +1 -0
- package/dist/i18n/getLocaleDirection.js +29 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +7 -1
- package/dist/i18n/useDirection.d.ts +2 -0
- package/dist/i18n/useDirection.d.ts.map +1 -0
- package/dist/i18n/useDirection.js +27 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/theme/defineTheme.d.ts +6 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +13 -0
- package/dist/theme/expandColorScale.d.ts +19 -2
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +38 -10
- package/dist/theme/index.d.ts +4 -3
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/types.d.ts +10 -2
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/plainDate.d.ts +17 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +23 -4
- package/dist/utils/rtlStyles.d.ts +45 -0
- package/dist/utils/rtlStyles.d.ts.map +1 -0
- package/dist/utils/rtlStyles.js +52 -0
- package/groups.doc.mjs +2 -2
- package/locales/en.json +120 -0
- package/locales/pseudo.json +90 -0
- package/package.json +9 -13
- 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.tsx +2 -20
- 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 +53 -6
- package/src/Avatar/Avatar.test.tsx +218 -0
- package/src/Avatar/Avatar.tsx +293 -82
- package/src/Avatar/AvatarStatusDot.doc.mjs +5 -5
- package/src/Avatar/AvatarStatusDot.tsx +8 -31
- package/src/Avatar/index.ts +26 -1
- package/src/AvatarGroup/AvatarGroup.doc.mjs +5 -3
- package/src/AvatarGroup/AvatarGroup.test.tsx +162 -2
- package/src/AvatarGroup/AvatarGroup.tsx +59 -4
- package/src/AvatarGroup/AvatarGroupOverflow.doc.mjs +1 -1
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +6 -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 +14 -51
- 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 +11 -11
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +3 -3
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +52 -1
- package/src/Breadcrumbs/Breadcrumbs.tsx +2 -19
- package/src/Breadcrumbs/index.ts +23 -5
- package/src/Button/Button.doc.mjs +3 -7
- package/src/Button/Button.test.tsx +16 -0
- package/src/Button/Button.tsx +8 -25
- 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 +185 -23
- package/src/Calendar/Calendar.tsx +74 -17
- package/src/Calendar/dayCellUtils.test.ts +18 -18
- package/src/Calendar/dayCellUtils.ts +2 -2
- package/src/Calendar/styles.ts +35 -41
- package/src/Card/Card.doc.mjs +3 -3
- package/src/Card/Card.tsx +2 -2
- package/src/Carousel/Carousel.doc.mjs +3 -3
- package/src/Carousel/Carousel.tsx +26 -7
- 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 +3 -3
- package/src/Chat/ChatComposer.tsx +5 -5
- package/src/Chat/ChatComposerDrawer.doc.mjs +1 -1
- package/src/Chat/ChatComposerDrawer.tsx +3 -3
- package/src/Chat/ChatComposerInput.doc.mjs +2 -2
- package/src/Chat/ChatComposerInput.tsx +3 -3
- package/src/Chat/ChatComposerTokenElement.doc.mjs +1 -1
- package/src/Chat/ChatDictationButton.doc.mjs +3 -3
- package/src/Chat/ChatDictationButton.tsx +8 -2
- package/src/Chat/ChatLayout.doc.mjs +1 -1
- package/src/Chat/ChatLayout.test.tsx +57 -0
- package/src/Chat/ChatLayout.tsx +27 -6
- 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 +16 -11
- 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/ChatSystemMessage.doc.mjs +1 -1
- package/src/Chat/ChatSystemMessage.test.tsx +5 -0
- 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/Chat/ChatToolCalls.tsx +9 -2
- package/src/Chat/useTriggerMenu.tsx +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +9 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +56 -0
- package/src/CheckboxInput/CheckboxInput.tsx +22 -7
- package/src/CheckboxList/CheckboxList.doc.mjs +9 -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 +6 -5
- package/src/Citation/Citation.test.tsx +97 -0
- package/src/Citation/Citation.tsx +44 -12
- 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 +38 -11
- package/src/Collapsible/Collapsible.doc.mjs +4 -3
- package/src/Collapsible/Collapsible.test.tsx +7 -0
- package/src/Collapsible/Collapsible.tsx +17 -7
- 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.test.tsx +95 -1
- package/src/CommandPalette/CommandPalette.tsx +42 -3
- 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.tsx +1 -1
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteInput.tsx +1 -1
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteItem.tsx +2 -2
- package/src/CommandPalette/CommandPaletteList.doc.mjs +1 -1
- package/src/CommandPalette/CommandPaletteList.tsx +1 -1
- package/src/ContextMenu/ContextMenu.doc.mjs +3 -3
- package/src/ContextMenu/ContextMenu.test.tsx +59 -2
- package/src/ContextMenu/ContextMenu.tsx +23 -12
- package/src/ContextMenu/ContextMenuItem.doc.mjs +1 -1
- package/src/ContextMenu/index.ts +5 -0
- package/src/DateInput/DateInput.doc.mjs +28 -3
- package/src/DateInput/DateInput.test.tsx +230 -0
- package/src/DateInput/DateInput.tsx +52 -30
- package/src/DateRangeInput/DateRangeInput.doc.mjs +18 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +140 -0
- package/src/DateRangeInput/DateRangeInput.tsx +43 -31
- package/src/DateTimeInput/DateTimeInput.doc.mjs +25 -4
- package/src/DateTimeInput/DateTimeInput.test.tsx +112 -0
- package/src/DateTimeInput/DateTimeInput.tsx +45 -40
- package/src/Dialog/Dialog.doc.mjs +9 -5
- package/src/Dialog/Dialog.test.tsx +84 -1
- package/src/Dialog/Dialog.tsx +87 -45
- 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.test.tsx +32 -8
- package/src/Divider/Divider.tsx +16 -20
- package/src/Divider/index.ts +19 -5
- package/src/DropdownMenu/DropdownMenu.doc.mjs +8 -5
- package/src/DropdownMenu/DropdownMenu.test.tsx +95 -0
- package/src/DropdownMenu/DropdownMenu.tsx +32 -13
- package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +49 -66
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenuItem.tsx +10 -4
- 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 +19 -4
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +84 -2
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +88 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +680 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +569 -0
- package/src/DropdownMenu/index.ts +16 -0
- package/src/DropdownMenu/menuItemHover.ts +40 -0
- package/src/DropdownMenu/menuItemRoles.ts +9 -0
- package/src/DropdownMenu/renderDropdownItems.tsx +40 -14
- 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 +15 -10
- package/src/Field/FieldLabel.doc.mjs +1 -1
- package/src/Field/FieldLabel.test.tsx +103 -0
- package/src/Field/FieldLabel.tsx +62 -6
- package/src/Field/inputStyles.stylex.ts +2 -0
- package/src/FieldStatus/FieldStatus.doc.mjs +3 -2
- package/src/FieldStatus/FieldStatus.test.tsx +133 -0
- package/src/FieldStatus/FieldStatus.tsx +62 -23
- package/src/FieldStatus/index.ts +20 -5
- package/src/FileInput/FileInput.doc.mjs +26 -5
- package/src/FileInput/FileInput.test.tsx +104 -13
- package/src/FileInput/FileInput.tsx +107 -80
- package/src/FormLayout/FormLayout.doc.mjs +3 -3
- package/src/FormLayout/FormLayout.tsx +2 -5
- package/src/Grid/Grid.doc.mjs +3 -3
- package/src/Grid/Grid.tsx +1 -1
- 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/HoverCard/useHoverCard.tsx +15 -3
- package/src/Icon/Icon.doc.mjs +16 -3
- package/src/Icon/Icon.test.tsx +89 -0
- package/src/Icon/Icon.tsx +52 -4
- package/src/Icon/globalIconRegistry.tsx +1 -1
- 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/layerAnimations.stylex.ts +23 -0
- 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 +3 -3
- package/src/Lightbox/Lightbox.test.tsx +33 -0
- package/src/Lightbox/Lightbox.tsx +31 -11
- 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.test.tsx +17 -29
- package/src/List/List.tsx +7 -2
- package/src/List/ListItem.doc.mjs +13 -1
- package/src/List/ListItem.tsx +14 -1
- package/src/Markdown/Markdown.doc.mjs +1 -1
- package/src/Markdown/Markdown.test.tsx +21 -0
- package/src/Markdown/Markdown.tsx +7 -3
- package/src/MetadataList/MetadataList.doc.mjs +3 -3
- package/src/MetadataList/MetadataList.test.tsx +24 -0
- package/src/MetadataList/MetadataList.tsx +7 -3
- 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 +1 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +23 -3
- package/src/MultiSelector/MultiSelector.test.tsx +436 -0
- package/src/MultiSelector/MultiSelector.tsx +134 -68
- package/src/NavIcon/NavIcon.doc.mjs +3 -3
- package/src/NavIcon/NavIcon.tsx +1 -1
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NavMenu/NavMenu.doc.mjs +2 -2
- package/src/NumberInput/NumberInput.doc.mjs +24 -3
- package/src/NumberInput/NumberInput.test.tsx +71 -0
- package/src/NumberInput/NumberInput.tsx +36 -27
- package/src/Outline/Outline.doc.mjs +3 -3
- package/src/Outline/Outline.test.tsx +12 -12
- package/src/Outline/Outline.tsx +3 -3
- 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 +3 -3
- package/src/Pagination/Pagination.tsx +13 -25
- package/src/Pagination/index.ts +21 -1
- package/src/Popover/Popover.doc.mjs +3 -3
- package/src/Popover/Popover.tsx +1 -1
- package/src/Popover/usePopover.doc.mjs +2 -2
- package/src/Popover/usePopover.tsx +10 -4
- package/src/PowerSearch/PowerSearch.doc.mjs +18 -3
- package/src/PowerSearch/PowerSearch.test.tsx +23 -0
- package/src/PowerSearch/PowerSearch.tsx +11 -2
- package/src/ProgressBar/ProgressBar.doc.mjs +3 -3
- package/src/ProgressBar/ProgressBar.test.tsx +34 -0
- package/src/ProgressBar/ProgressBar.tsx +18 -23
- package/src/ProgressBar/index.ts +22 -5
- package/src/RadioList/RadioList.doc.mjs +9 -3
- package/src/RadioList/RadioList.test.tsx +26 -4
- package/src/RadioList/RadioList.tsx +3 -3
- package/src/RadioList/RadioListItem.doc.mjs +1 -1
- package/src/RadioList/RadioListItem.tsx +13 -6
- package/src/Resizable/Resizable.doc.mjs +2 -2
- package/src/Resizable/ResizeHandle.test.tsx +95 -0
- package/src/Resizable/ResizeHandle.tsx +71 -25
- 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 +23 -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 +18 -3
- package/src/Selector/Selector.test.tsx +400 -0
- package/src/Selector/Selector.tsx +96 -24
- package/src/Selector/SelectorOption.doc.mjs +1 -1
- package/src/SideNav/SideNav.doc.mjs +3 -3
- package/src/SideNav/SideNav.tsx +2 -9
- package/src/SideNav/SideNavCollapseButton.doc.mjs +1 -1
- package/src/SideNav/SideNavCollapseButton.tsx +10 -8
- package/src/SideNav/SideNavHeading.doc.mjs +1 -1
- package/src/SideNav/SideNavHeading.tsx +1 -1
- package/src/SideNav/SideNavItem.doc.mjs +1 -1
- package/src/SideNav/SideNavItem.tsx +6 -4
- 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 +9 -3
- package/src/Slider/Slider.test.tsx +240 -12
- package/src/Slider/Slider.tsx +102 -33
- package/src/Spinner/Spinner.doc.mjs +3 -3
- package/src/Spinner/Spinner.test.tsx +10 -8
- package/src/Spinner/Spinner.tsx +16 -6
- 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 +145 -45
- package/src/Switch/Switch.test.tsx +145 -0
- package/src/Switch/Switch.tsx +150 -33
- package/src/TabList/Tab.doc.mjs +1 -1
- package/src/TabList/Tab.tsx +3 -3
- package/src/TabList/TabList.doc.mjs +3 -9
- package/src/TabList/TabList.test.tsx +3 -15
- package/src/TabList/TabList.tsx +7 -18
- package/src/TabList/TabListContext.ts +0 -6
- package/src/TabList/TabMenu.doc.mjs +1 -1
- package/src/TabList/TabMenu.tsx +3 -3
- package/src/Table/BaseTable.tsx +35 -3
- package/src/Table/Table.doc.mjs +14 -3
- package/src/Table/Table.test.tsx +85 -0
- package/src/Table/Table.tsx +1 -1
- package/src/Table/TableCell.doc.mjs +1 -1
- package/src/Table/TableCell.tsx +4 -4
- package/src/Table/TableHeaderCell.doc.mjs +1 -1
- package/src/Table/TableHeaderCell.tsx +4 -4
- package/src/Table/TableRow.doc.mjs +1 -1
- package/src/Table/TableRow.tsx +1 -1
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +9 -6
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +19 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +48 -21
- package/src/Table/plugins/selection/useTableSelection.test.tsx +61 -3
- package/src/Table/plugins/selection/useTableSelection.tsx +3 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +38 -9
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +161 -2
- package/src/Table/plugins/tree/useTableTreeData.tsx +71 -14
- package/src/Table/types.ts +33 -0
- 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 +26 -5
- package/src/TextArea/TextArea.test.tsx +132 -4
- package/src/TextArea/TextArea.tsx +162 -68
- package/src/TextInput/TextInput.doc.mjs +24 -3
- package/src/TextInput/TextInput.test.tsx +150 -0
- package/src/TextInput/TextInput.tsx +29 -26
- package/src/Thumbnail/Thumbnail.doc.mjs +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +24 -1
- package/src/Thumbnail/Thumbnail.tsx +29 -36
- package/src/TimeInput/TimeInput.doc.mjs +24 -3
- package/src/TimeInput/TimeInput.test.tsx +23 -0
- package/src/TimeInput/TimeInput.tsx +25 -26
- package/src/Timestamp/Timestamp.doc.mjs +35 -9
- package/src/Timestamp/Timestamp.test.tsx +371 -0
- package/src/Timestamp/Timestamp.tsx +97 -94
- package/src/Timestamp/formatInstant.ts +218 -0
- package/src/Timestamp/index.ts +4 -0
- package/src/Timestamp/tooltipEntries.test.ts +552 -0
- package/src/Timestamp/tooltipEntries.ts +210 -0
- 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 +166 -15
- package/src/Token/Token.tsx +79 -48
- package/src/Token/TokenLink.tsx +107 -0
- package/src/Token/index.ts +27 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +26 -4
- package/src/Tokenizer/Tokenizer.test.tsx +23 -0
- package/src/Tokenizer/Tokenizer.tsx +15 -3
- 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.test.tsx +46 -0
- package/src/Tooltip/Tooltip.tsx +1 -1
- package/src/Tooltip/useTooltip.doc.mjs +2 -2
- package/src/Tooltip/useTooltip.tsx +20 -0
- package/src/TopNav/TopNav.doc.mjs +3 -3
- package/src/TopNav/TopNav.test.tsx +93 -2
- package/src/TopNav/TopNav.tsx +1 -1
- package/src/TopNav/TopNavHeading.doc.mjs +1 -1
- package/src/TopNav/TopNavHeading.tsx +1 -1
- package/src/TopNav/TopNavItem.doc.mjs +4 -4
- package/src/TopNav/TopNavItem.tsx +36 -7
- package/src/TopNav/TopNavMegaMenu.doc.mjs +1 -1
- package/src/TopNav/TopNavMegaMenu.tsx +27 -3
- package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +2 -2
- 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 +1 -1
- package/src/TreeList/TreeList.doc.mjs +9 -3
- package/src/TreeList/TreeList.test.tsx +50 -10
- package/src/TreeList/TreeList.tsx +6 -1
- package/src/TreeList/TreeListBranches.tsx +9 -7
- package/src/TreeList/TreeListItem.tsx +34 -12
- 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 +43 -16
- package/src/Typeahead/Typeahead.doc.mjs +16 -3
- package/src/Typeahead/Typeahead.test.tsx +112 -0
- package/src/Typeahead/Typeahead.tsx +18 -2
- package/src/Typeahead/TypeaheadItem.doc.mjs +1 -1
- package/src/Typeahead/TypeaheadItem.tsx +3 -2
- 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 +69 -0
- package/src/doc-mjs.d.ts +22 -0
- 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 +13 -0
- package/src/hooks/isRtlElement.ts +27 -0
- package/src/hooks/useAnnounce.test.tsx +75 -2
- package/src/hooks/useAnnounce.ts +47 -1
- 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/useFocusTrap.test.tsx +104 -0
- package/src/hooks/useFocusTrap.ts +61 -12
- package/src/hooks/useGridFocus.doc.mjs +5 -5
- package/src/hooks/useGridFocus.test.tsx +41 -0
- package/src/hooks/useGridFocus.ts +21 -10
- package/src/hooks/useHotkeys.doc.mjs +2 -2
- package/src/hooks/useHotkeys.ts +9 -0
- 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 +221 -0
- package/src/hooks/useInputStatusIcon.tsx +235 -0
- 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 +27 -5
- package/src/hooks/useListFocus.test.tsx +153 -1
- package/src/hooks/useListFocus.ts +102 -9
- 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/i18n/InternationalizationContext.ts +4 -0
- package/src/i18n/InternationalizationProvider.doc.mjs +2 -2
- package/src/i18n/InternationalizationProvider.tsx +12 -2
- package/src/i18n/__tests__/getLocaleDirection.test.ts +40 -0
- package/src/i18n/__tests__/useDirection.test.tsx +66 -0
- package/src/i18n/getLocaleDirection.ts +29 -0
- package/src/i18n/index.ts +6 -0
- package/src/i18n/useDirection.ts +29 -0
- package/src/i18n/useTranslator.doc.mjs +2 -2
- package/src/index.ts +14 -10
- package/src/reset.css +0 -26
- package/src/reset.test.ts +60 -0
- 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/defineTheme.ts +6 -0
- package/src/theme/derivedVarRegistry.test.ts +1 -0
- package/src/theme/derivedVarRegistry.ts +6 -0
- package/src/theme/expandColorScale.test.ts +144 -0
- package/src/theme/expandColorScale.ts +53 -15
- package/src/theme/generateThemeRules.test.ts +42 -0
- package/src/theme/index.ts +4 -8
- package/src/theme/types.ts +14 -13
- package/src/theme/useTheme.doc.mjs +2 -2
- package/src/utils/index.ts +2 -0
- package/src/utils/plainDate.test.ts +24 -6
- package/src/utils/plainDate.ts +18 -4
- package/src/utils/rtlStyles.ts +49 -0
- 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/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
|
@@ -35,6 +35,36 @@ const FOCUS_INPUT_TYPES = new Set([
|
|
|
35
35
|
'week',
|
|
36
36
|
]);
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* `aria-haspopup` values that advertise a control opens a popup on activation.
|
|
40
|
+
* https://www.w3.org/TR/wai-aria-1.2/#aria-haspopup
|
|
41
|
+
*/
|
|
42
|
+
const HASPOPUP_VALUES = new Set([
|
|
43
|
+
'true',
|
|
44
|
+
'menu',
|
|
45
|
+
'listbox',
|
|
46
|
+
'tree',
|
|
47
|
+
'grid',
|
|
48
|
+
'dialog',
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Whether an element is a popup trigger — a combobox or any control that
|
|
53
|
+
* advertises `aria-haspopup`. Such controls activate their popup on *click*
|
|
54
|
+
* (e.g. DateInput's `<input type="text" role="combobox" aria-haspopup="dialog">`
|
|
55
|
+
* opens its calendar via `onClick`, with no `onFocus` opener). Forwarding a
|
|
56
|
+
* container click to `.focus()` would focus the control but leave the popup
|
|
57
|
+
* closed — so we `.click()` these instead. Plain text inputs (no popup) are
|
|
58
|
+
* unaffected and keep `.focus()`.
|
|
59
|
+
*/
|
|
60
|
+
function isPopupTrigger(el: HTMLElement): boolean {
|
|
61
|
+
if (el.getAttribute('role') === 'combobox') {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
const haspopup = el.getAttribute('aria-haspopup');
|
|
65
|
+
return haspopup != null && HASPOPUP_VALUES.has(haspopup);
|
|
66
|
+
}
|
|
67
|
+
|
|
38
68
|
export interface UseInputContainerOptions {
|
|
39
69
|
/** Ref to the outer container/wrapper element */
|
|
40
70
|
containerRef: RefObject<HTMLElement | null>;
|
|
@@ -83,7 +113,12 @@ export function useInputContainer({
|
|
|
83
113
|
if (input == null) {
|
|
84
114
|
return;
|
|
85
115
|
}
|
|
86
|
-
|
|
116
|
+
// Popup triggers (combobox / aria-haspopup) activate their popup on
|
|
117
|
+
// *click*, not focus — so check this BEFORE the type check, otherwise a
|
|
118
|
+
// `type="text"` combobox (DateInput) would `.focus()` and never open.
|
|
119
|
+
if (input instanceof HTMLElement && isPopupTrigger(input)) {
|
|
120
|
+
input.click();
|
|
121
|
+
} else if (
|
|
87
122
|
input instanceof HTMLInputElement &&
|
|
88
123
|
FOCUS_INPUT_TYPES.has(input.type)
|
|
89
124
|
) {
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {describe, it, expect} from 'vitest';
|
|
4
|
+
import type {ReactElement} from 'react';
|
|
5
|
+
import {render, screen} from '@testing-library/react';
|
|
6
|
+
import {TextInput} from '../TextInput/TextInput';
|
|
7
|
+
import {TextArea} from '../TextArea/TextArea';
|
|
8
|
+
import {NumberInput} from '../NumberInput/NumberInput';
|
|
9
|
+
import {DateInput} from '../DateInput/DateInput';
|
|
10
|
+
import {DateRangeInput} from '../DateRangeInput/DateRangeInput';
|
|
11
|
+
import {TimeInput} from '../TimeInput/TimeInput';
|
|
12
|
+
import {FileInput} from '../FileInput/FileInput';
|
|
13
|
+
import type {FieldStatusVariant} from '../FieldStatus/FieldStatus';
|
|
14
|
+
|
|
15
|
+
// Every id referenced by an aria-describedby must resolve to an element in the
|
|
16
|
+
// document (WCAG 1.3.1) — a described-by pointing at a non-rendered node is a
|
|
17
|
+
// dangling reference. The tooltip variant is the interesting case: it swaps the
|
|
18
|
+
// message box for a tooltip layer, so the referenced ids change per variant.
|
|
19
|
+
function expectNoDanglingDescribedBy(root: HTMLElement) {
|
|
20
|
+
for (const el of Array.from(root.querySelectorAll('[aria-describedby]'))) {
|
|
21
|
+
const value = el.getAttribute('aria-describedby') ?? '';
|
|
22
|
+
for (const id of value.split(/\s+/).filter(Boolean)) {
|
|
23
|
+
expect(
|
|
24
|
+
document.getElementById(id),
|
|
25
|
+
`dangling aria-describedby id "${id}" on <${el.tagName.toLowerCase()}>`,
|
|
26
|
+
).not.toBeNull();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const VARIANTS: FieldStatusVariant[] = ['attached', 'detached', 'tooltip'];
|
|
32
|
+
|
|
33
|
+
const INPUTS: [string, (variant: FieldStatusVariant) => ReactElement][] = [
|
|
34
|
+
[
|
|
35
|
+
'TextInput',
|
|
36
|
+
v => (
|
|
37
|
+
<TextInput
|
|
38
|
+
label="Field"
|
|
39
|
+
value=""
|
|
40
|
+
onChange={() => {}}
|
|
41
|
+
status={{type: 'error', message: 'Message'}}
|
|
42
|
+
statusVariant={v}
|
|
43
|
+
/>
|
|
44
|
+
),
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
'TextArea',
|
|
48
|
+
v => (
|
|
49
|
+
<TextArea
|
|
50
|
+
label="Field"
|
|
51
|
+
value=""
|
|
52
|
+
onChange={() => {}}
|
|
53
|
+
status={{type: 'error', message: 'Message'}}
|
|
54
|
+
statusVariant={v}
|
|
55
|
+
/>
|
|
56
|
+
),
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
'NumberInput',
|
|
60
|
+
v => (
|
|
61
|
+
<NumberInput
|
|
62
|
+
label="Field"
|
|
63
|
+
value={undefined}
|
|
64
|
+
onChange={() => {}}
|
|
65
|
+
status={{type: 'error', message: 'Message'}}
|
|
66
|
+
statusVariant={v}
|
|
67
|
+
/>
|
|
68
|
+
),
|
|
69
|
+
],
|
|
70
|
+
[
|
|
71
|
+
'DateInput',
|
|
72
|
+
v => (
|
|
73
|
+
<DateInput
|
|
74
|
+
label="Field"
|
|
75
|
+
value={undefined}
|
|
76
|
+
onChange={() => {}}
|
|
77
|
+
status={{type: 'error', message: 'Message'}}
|
|
78
|
+
statusVariant={v}
|
|
79
|
+
/>
|
|
80
|
+
),
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
'DateRangeInput',
|
|
84
|
+
v => (
|
|
85
|
+
<DateRangeInput
|
|
86
|
+
label="Field"
|
|
87
|
+
value={null}
|
|
88
|
+
onChange={() => {}}
|
|
89
|
+
status={{type: 'error', message: 'Message'}}
|
|
90
|
+
statusVariant={v}
|
|
91
|
+
/>
|
|
92
|
+
),
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
'TimeInput',
|
|
96
|
+
v => (
|
|
97
|
+
<TimeInput
|
|
98
|
+
label="Field"
|
|
99
|
+
value={undefined}
|
|
100
|
+
onChange={() => {}}
|
|
101
|
+
status={{type: 'error', message: 'Message'}}
|
|
102
|
+
statusVariant={v}
|
|
103
|
+
/>
|
|
104
|
+
),
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
'FileInput',
|
|
108
|
+
v => (
|
|
109
|
+
<FileInput
|
|
110
|
+
label="Field"
|
|
111
|
+
value={null}
|
|
112
|
+
onChange={() => {}}
|
|
113
|
+
status={{type: 'error', message: 'Message'}}
|
|
114
|
+
statusVariant={v}
|
|
115
|
+
/>
|
|
116
|
+
),
|
|
117
|
+
],
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
describe('useInputStatusIcon — no dangling aria-describedby (WCAG 1.3.1)', () => {
|
|
121
|
+
for (const [name, make] of INPUTS) {
|
|
122
|
+
for (const variant of VARIANTS) {
|
|
123
|
+
it(`${name} / statusVariant="${variant}"`, () => {
|
|
124
|
+
const {container} = render(make(variant));
|
|
125
|
+
expectNoDanglingDescribedBy(container);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
it('tooltip variant links the input to the rendered tooltip element', () => {
|
|
131
|
+
render(
|
|
132
|
+
<TextInput
|
|
133
|
+
label="Field"
|
|
134
|
+
value=""
|
|
135
|
+
onChange={() => {}}
|
|
136
|
+
status={{type: 'error', message: 'Message'}}
|
|
137
|
+
statusVariant="tooltip"
|
|
138
|
+
/>,
|
|
139
|
+
);
|
|
140
|
+
const input = screen.getByRole('textbox');
|
|
141
|
+
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
142
|
+
expect(input.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('does not render a tooltip (or reference one) when there is no message', () => {
|
|
146
|
+
// No message → the tooltip variant renders no tooltip layer and no
|
|
147
|
+
// described-by should point at a non-existent status element.
|
|
148
|
+
const {container} = render(
|
|
149
|
+
<TextInput
|
|
150
|
+
label="Field"
|
|
151
|
+
value=""
|
|
152
|
+
onChange={() => {}}
|
|
153
|
+
status={{type: 'error'}}
|
|
154
|
+
statusVariant="tooltip"
|
|
155
|
+
/>,
|
|
156
|
+
);
|
|
157
|
+
expect(
|
|
158
|
+
screen.queryByRole('tooltip', {hidden: true}),
|
|
159
|
+
).not.toBeInTheDocument();
|
|
160
|
+
expectNoDanglingDescribedBy(container);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
describe('useInputStatusIcon — input-status-icon theme target', () => {
|
|
165
|
+
// The stable theme target lands on the on-field status glyph itself, so a
|
|
166
|
+
// theme can restyle (e.g. resize) just this icon via `defineTheme`. It is
|
|
167
|
+
// rendered by the attached and tooltip variants; detached suppresses the
|
|
168
|
+
// on-field icon in favour of the detached message box's leading glyph.
|
|
169
|
+
const getStatusIcon = (root: HTMLElement): HTMLElement => {
|
|
170
|
+
const icon = root.querySelector('.astryx-input-status-icon');
|
|
171
|
+
if (icon == null) {
|
|
172
|
+
throw new Error('status icon not found');
|
|
173
|
+
}
|
|
174
|
+
return icon as HTMLElement;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
for (const variant of ['attached', 'tooltip'] as const) {
|
|
178
|
+
it(`renders the target on the on-field icon (statusVariant="${variant}")`, () => {
|
|
179
|
+
const {container} = render(
|
|
180
|
+
<TextInput
|
|
181
|
+
label="Field"
|
|
182
|
+
value=""
|
|
183
|
+
onChange={() => {}}
|
|
184
|
+
status={{type: 'warning', message: 'Message'}}
|
|
185
|
+
statusVariant={variant}
|
|
186
|
+
/>,
|
|
187
|
+
);
|
|
188
|
+
const icon = getStatusIcon(container);
|
|
189
|
+
expect(icon).toHaveClass('astryx-input-status-icon');
|
|
190
|
+
expect(icon).toHaveClass('astryx-icon');
|
|
191
|
+
expect(icon).toHaveAttribute('data-size', 'md');
|
|
192
|
+
expect(icon).toHaveAttribute('data-status', 'warning');
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
it('reflects the status type per status', () => {
|
|
197
|
+
const {container} = render(
|
|
198
|
+
<TextInput
|
|
199
|
+
label="Field"
|
|
200
|
+
value=""
|
|
201
|
+
onChange={() => {}}
|
|
202
|
+
status={{type: 'success', message: 'Message'}}
|
|
203
|
+
statusVariant="attached"
|
|
204
|
+
/>,
|
|
205
|
+
);
|
|
206
|
+
expect(getStatusIcon(container)).toHaveAttribute('data-status', 'success');
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('does not render the on-field target for the detached variant', () => {
|
|
210
|
+
const {container} = render(
|
|
211
|
+
<TextInput
|
|
212
|
+
label="Field"
|
|
213
|
+
value=""
|
|
214
|
+
onChange={() => {}}
|
|
215
|
+
status={{type: 'error', message: 'Message'}}
|
|
216
|
+
statusVariant="detached"
|
|
217
|
+
/>,
|
|
218
|
+
);
|
|
219
|
+
expect(container.querySelector('.astryx-input-status-icon')).toBeNull();
|
|
220
|
+
});
|
|
221
|
+
});
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useInputStatusIcon.tsx
|
|
7
|
+
* @input Input status, statusVariant, and InputGroup awareness
|
|
8
|
+
* @output The on-field status icon element (with tooltip) and aria-describedby wiring
|
|
9
|
+
* @position Shared hook for bordered inputs that render a status affordance inside the control
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When modified, update:
|
|
12
|
+
* - /packages/core/src/hooks/index.ts (exports)
|
|
13
|
+
*
|
|
14
|
+
* Centralizes the on-field status icon across the bordered inputs (TextInput,
|
|
15
|
+
* TextArea, NumberInput, DateInput, DateTimeInput, DateRangeInput, TimeInput,
|
|
16
|
+
* FileInput) so the three statusVariants behave consistently:
|
|
17
|
+
*
|
|
18
|
+
* - `attached` → icon sits inside the control; the message box below carries
|
|
19
|
+
* the text.
|
|
20
|
+
* - `detached` → the detached message box renders its OWN leading icon, so the
|
|
21
|
+
* on-field icon is suppressed here to avoid a duplicate glyph.
|
|
22
|
+
* - `tooltip` → no message box renders; the status is surfaced through an
|
|
23
|
+
* info-tip on the on-field icon. The icon is a real focusable `<button>` so
|
|
24
|
+
* the status is reachable by every user, not just those with hover or a
|
|
25
|
+
* screen reader:
|
|
26
|
+
* - Keyboard (no AT): the button is in the tab order (WCAG 2.1.1) with a
|
|
27
|
+
* visible focus ring (WCAG 2.4.7); focusing it opens the tooltip.
|
|
28
|
+
* - Pointer: hover opens it (guarded to fine pointers).
|
|
29
|
+
* - Touch: hover is unavailable, so a tap toggles the tooltip open/closed.
|
|
30
|
+
* - Assistive tech: the button has an accessible name (its status type,
|
|
31
|
+
* WCAG 4.1.2) and is described by the message via `aria-describedby`.
|
|
32
|
+
* - Dismissible with Escape and hoverable (WCAG 1.4.13) via useTooltip.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
import {useCallback, useEffect, useState} from 'react';
|
|
36
|
+
import type {ReactNode} from 'react';
|
|
37
|
+
import * as stylex from '@stylexjs/stylex';
|
|
38
|
+
import {Icon, type IconName, type IconSize} from '../Icon';
|
|
39
|
+
import type {FieldStatusVariant} from '../FieldStatus/FieldStatus';
|
|
40
|
+
import type {InputStatus, InputStatusType} from '../Field/types';
|
|
41
|
+
import {useTooltip} from '../Tooltip';
|
|
42
|
+
import {useTranslator} from '../i18n';
|
|
43
|
+
import {colorVars, radiusVars} from '../theme/tokens.stylex';
|
|
44
|
+
import {themeProps} from '../utils/themeProps';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Maps each status type to its glyph. Shared so every input shows the same icon
|
|
48
|
+
* for a given status, matching the detached message box's leading icon.
|
|
49
|
+
*/
|
|
50
|
+
const STATUS_ICON: Record<InputStatusType, IconName> = {
|
|
51
|
+
warning: 'warning',
|
|
52
|
+
error: 'error',
|
|
53
|
+
success: 'success',
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Accessible-name i18n keys for the focusable status button, keyed by type.
|
|
58
|
+
*/
|
|
59
|
+
const STATUS_BUTTON_LABEL_KEY: Record<InputStatusType, string> = {
|
|
60
|
+
warning: '@astryx.input.statusButton.warning',
|
|
61
|
+
error: '@astryx.input.statusButton.error',
|
|
62
|
+
success: '@astryx.input.statusButton.success',
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const styles = stylex.create({
|
|
66
|
+
// Contain the anchor so the tooltip positions against the icon, and keep the
|
|
67
|
+
// glyph vertically centered within the input control.
|
|
68
|
+
iconAnchor: {
|
|
69
|
+
display: 'inline-flex',
|
|
70
|
+
alignItems: 'center',
|
|
71
|
+
},
|
|
72
|
+
// The tooltip-variant status affordance is a real button so it is keyboard
|
|
73
|
+
// focusable and tappable. Strip the native chrome and show only a focus ring.
|
|
74
|
+
statusButton: {
|
|
75
|
+
display: 'inline-flex',
|
|
76
|
+
alignItems: 'center',
|
|
77
|
+
justifyContent: 'center',
|
|
78
|
+
padding: 0,
|
|
79
|
+
margin: 0,
|
|
80
|
+
border: 'none',
|
|
81
|
+
background: 'none',
|
|
82
|
+
color: 'inherit',
|
|
83
|
+
cursor: 'pointer',
|
|
84
|
+
borderRadius: radiusVars['--radius-full'],
|
|
85
|
+
outlineWidth: {default: null, ':focus-visible': '2px'},
|
|
86
|
+
outlineStyle: {default: null, ':focus-visible': 'solid'},
|
|
87
|
+
outlineColor: {
|
|
88
|
+
default: null,
|
|
89
|
+
':focus-visible': colorVars['--color-accent'],
|
|
90
|
+
},
|
|
91
|
+
outlineOffset: {default: null, ':focus-visible': '2px'},
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
export interface UseInputStatusIconOptions {
|
|
96
|
+
/** The input's status, or undefined when there is none. */
|
|
97
|
+
status?: InputStatus;
|
|
98
|
+
/** How the status is presented relative to the input. */
|
|
99
|
+
statusVariant?: FieldStatusVariant;
|
|
100
|
+
/** Whether the input is inside an InputGroup (which owns status rendering). */
|
|
101
|
+
isInGroup?: boolean;
|
|
102
|
+
/** Size of the on-field icon. @default 'md' */
|
|
103
|
+
size?: IconSize;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface UseInputStatusIconReturn {
|
|
107
|
+
/**
|
|
108
|
+
* The on-field status affordance to render inside the input container —
|
|
109
|
+
* the status icon (plain, for attached) or a focusable info-tip button plus
|
|
110
|
+
* its tooltip layer (for the `tooltip` variant). `null` when no icon should
|
|
111
|
+
* render (no status, `detached` variant, or inside a group).
|
|
112
|
+
*/
|
|
113
|
+
statusIcon: ReactNode;
|
|
114
|
+
/**
|
|
115
|
+
* ID to add to the input's `aria-describedby` when — and only when — the
|
|
116
|
+
* status is surfaced through a rendered tooltip layer (the `tooltip` variant
|
|
117
|
+
* with a message). It is `undefined` in every other case (no status, no
|
|
118
|
+
* message, `attached`/`detached`, or inside a group), so call-sites can drop
|
|
119
|
+
* it straight into their described-by list without a dangling reference: the
|
|
120
|
+
* id is present exactly when its tooltip element is in the DOM.
|
|
121
|
+
*/
|
|
122
|
+
describedBy: string | undefined;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Builds the on-field status icon and its accessibility wiring for a bordered
|
|
127
|
+
* input. See the file header for the per-variant behavior.
|
|
128
|
+
*/
|
|
129
|
+
export function useInputStatusIcon({
|
|
130
|
+
status,
|
|
131
|
+
statusVariant = 'attached',
|
|
132
|
+
isInGroup = false,
|
|
133
|
+
size = 'md',
|
|
134
|
+
}: UseInputStatusIconOptions): UseInputStatusIconReturn {
|
|
135
|
+
const t = useTranslator();
|
|
136
|
+
const isTooltipVariant = statusVariant === 'tooltip';
|
|
137
|
+
const hasTooltip = isTooltipVariant && !!status?.message;
|
|
138
|
+
|
|
139
|
+
// Touch tap-to-toggle. Hover is unavailable on touch, and useTooltip
|
|
140
|
+
// suppresses simulated hover there, so on touch a tap controls visibility.
|
|
141
|
+
// `undefined` leaves the tooltip uncontrolled (pointer + keyboard drive it);
|
|
142
|
+
// a boolean takes control for the current open/close cycle.
|
|
143
|
+
const [tapOpen, setTapOpen] = useState<boolean | undefined>(undefined);
|
|
144
|
+
|
|
145
|
+
const tooltip = useTooltip({
|
|
146
|
+
placement: 'above',
|
|
147
|
+
isEnabled: hasTooltip,
|
|
148
|
+
isOpen: tapOpen,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Re-hand control back to hover/focus once a tap-opened tooltip is dismissed
|
|
152
|
+
// (Escape/outside interaction), so subsequent pointer/keyboard use behaves
|
|
153
|
+
// normally.
|
|
154
|
+
const handleButtonBlur = useCallback(() => {
|
|
155
|
+
setTapOpen(undefined);
|
|
156
|
+
}, []);
|
|
157
|
+
|
|
158
|
+
const handleButtonClick = useCallback(() => {
|
|
159
|
+
// Only take control on touch/hover-less devices. On hover-capable devices
|
|
160
|
+
// pointer hover and keyboard focus already drive the tooltip (uncontrolled),
|
|
161
|
+
// so a click-toggle would fight them; leave it uncontrolled there.
|
|
162
|
+
if (
|
|
163
|
+
typeof window === 'undefined' ||
|
|
164
|
+
typeof window.matchMedia !== 'function' ||
|
|
165
|
+
!window.matchMedia('(hover: none)').matches
|
|
166
|
+
) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
setTapOpen(prev => (prev === true ? false : true));
|
|
170
|
+
}, []);
|
|
171
|
+
|
|
172
|
+
// Dismiss a tap-opened tooltip on Escape and return to the uncontrolled
|
|
173
|
+
// state (useTooltip owns Escape for the uncontrolled case, but while we hold
|
|
174
|
+
// control via isOpen it does not, so mirror it here).
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
if (tapOpen !== true) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const onKeyDown = (e: KeyboardEvent) => {
|
|
180
|
+
if (e.key === 'Escape') {
|
|
181
|
+
setTapOpen(undefined);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
document.addEventListener('keydown', onKeyDown);
|
|
185
|
+
return () => document.removeEventListener('keydown', onKeyDown);
|
|
186
|
+
}, [tapOpen]);
|
|
187
|
+
|
|
188
|
+
// Inside a group the group owns status rendering; the detached message box
|
|
189
|
+
// renders its own leading icon, so the on-field icon would duplicate it.
|
|
190
|
+
const shouldRenderIcon =
|
|
191
|
+
!!status && !isInGroup && statusVariant !== 'detached';
|
|
192
|
+
|
|
193
|
+
if (!shouldRenderIcon) {
|
|
194
|
+
return {statusIcon: null, describedBy: undefined};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const icon = (
|
|
198
|
+
<Icon
|
|
199
|
+
icon={STATUS_ICON[status.type]}
|
|
200
|
+
size={size}
|
|
201
|
+
color={status.type}
|
|
202
|
+
// Stable theme target on the status glyph itself, so a theme can restyle
|
|
203
|
+
// just this icon (color, size) — and each status — via `defineTheme`.
|
|
204
|
+
// Same-element rules in @layer astryx-theme win over the icon's own base
|
|
205
|
+
// width/height/fontSize, which a field-level target could not reach.
|
|
206
|
+
// Shared by the attached and tooltip variants across all bordered inputs.
|
|
207
|
+
{...themeProps('input-status-icon', {size, status: status.type})}
|
|
208
|
+
/>
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
// Attached (and tooltip-without-message) variants: plain, non-interactive
|
|
212
|
+
// icon. The message box (attached) already carries the text.
|
|
213
|
+
if (!hasTooltip) {
|
|
214
|
+
return {statusIcon: icon, describedBy: undefined};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return {
|
|
218
|
+
statusIcon: (
|
|
219
|
+
<>
|
|
220
|
+
<button
|
|
221
|
+
type="button"
|
|
222
|
+
ref={tooltip.ref}
|
|
223
|
+
aria-label={t(STATUS_BUTTON_LABEL_KEY[status.type])}
|
|
224
|
+
aria-describedby={tooltip.describedBy}
|
|
225
|
+
onClick={handleButtonClick}
|
|
226
|
+
onBlur={handleButtonBlur}
|
|
227
|
+
{...stylex.props(styles.statusButton)}>
|
|
228
|
+
{icon}
|
|
229
|
+
</button>
|
|
230
|
+
{tooltip.renderTooltip(status.message)}
|
|
231
|
+
</>
|
|
232
|
+
),
|
|
233
|
+
describedBy: tooltip.describedBy,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
-
/** @type {import('
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').HookDoc} */
|
|
4
4
|
export const docs = {
|
|
5
5
|
name: 'useKeyboardHint',
|
|
6
6
|
displayName: 'useKeyboardHint',
|
|
@@ -72,7 +72,7 @@ export const docs = {
|
|
|
72
72
|
category: 'focus',
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
/** @type {import('
|
|
75
|
+
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
76
76
|
export const docsDense = {
|
|
77
77
|
description:
|
|
78
78
|
'Ephemeral "← → to navigate" hint anchored to the focused item on first keyboard focus of a roving-tabindex composite (Toolbar/TabList/SegmentedControl). Teaches sighted keyboard users that arrows move within the group. Kbd-rendered arrows in a top-layer popover="manual", CSS-anchor-positioned (never clipped by overflow), aria-hidden. Auto-dismisses on first arrow press, timeout, or blur; never re-shows for that instance.',
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import {render} from '@testing-library/react';
|
|
10
10
|
import {describe, expect, it} from 'vitest';
|
|
11
11
|
import {useKeyboardHint, type KeyboardHintOrientation} from './useKeyboardHint';
|
|
12
|
+
import {InternationalizationProvider} from '../i18n';
|
|
12
13
|
|
|
13
14
|
function TestHint({orientation}: {orientation?: KeyboardHintOrientation}) {
|
|
14
15
|
const {hintElement} = useKeyboardHint({orientation});
|
|
@@ -67,4 +68,25 @@ describe('useKeyboardHint', () => {
|
|
|
67
68
|
|
|
68
69
|
expect(hint.className).toContain('useKeyboardHint__styles.hint');
|
|
69
70
|
});
|
|
71
|
+
|
|
72
|
+
it('renders the "to navigate" label from the i18n catalog', () => {
|
|
73
|
+
const {container} = render(<TestHint />);
|
|
74
|
+
const hint = container.querySelector('[popover="manual"]') as HTMLElement;
|
|
75
|
+
|
|
76
|
+
expect(hint.textContent).toContain('to navigate');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('localizes the "to navigate" label through the i18n catalog', () => {
|
|
80
|
+
const {container} = render(
|
|
81
|
+
<InternationalizationProvider
|
|
82
|
+
locale="fr"
|
|
83
|
+
overrides={{fr: {'@astryx.keyboardHint.toNavigate': 'pour naviguer'}}}>
|
|
84
|
+
<TestHint />
|
|
85
|
+
</InternationalizationProvider>,
|
|
86
|
+
);
|
|
87
|
+
const hint = container.querySelector('[popover="manual"]') as HTMLElement;
|
|
88
|
+
|
|
89
|
+
expect(hint.textContent).toContain('pour naviguer');
|
|
90
|
+
expect(hint.textContent).not.toContain('to navigate');
|
|
91
|
+
});
|
|
70
92
|
});
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useKeyboardHint.tsx
|
|
7
|
-
* @input Uses React, StyleX, Kbd, useLayer
|
|
7
|
+
* @input Uses React, StyleX, Kbd, useLayer, i18n (useTranslator)
|
|
8
8
|
* @output Exports useKeyboardHint hook — ephemeral arrow-key navigation hint
|
|
9
9
|
* @position Core hook; shows sighted keyboard users how to navigate composite
|
|
10
10
|
* widgets that use roving tabindex (single Tab stop, arrows inside)
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - /packages/core/src/hooks/index.ts
|
|
14
14
|
* - /packages/core/src/hooks/useKeyboardHint.doc.mjs
|
|
15
15
|
* - /apps/storybook/stories/useKeyboardHint.stories.tsx
|
|
16
|
-
* - /packages/cli/templates/blocks/components/Hooks/useKeyboardHintHookUsage.tsx
|
|
16
|
+
* - /packages/cli/assets/templates/blocks/components/Hooks/useKeyboardHintHookUsage.tsx
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import React, {useCallback, useEffect, useRef, type ReactNode} from 'react';
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
} from '../theme/tokens.stylex';
|
|
28
28
|
import {Kbd} from '../Kbd';
|
|
29
29
|
import {useLayer} from '../Layer/useLayer';
|
|
30
|
+
import {useTranslator} from '../i18n';
|
|
30
31
|
|
|
31
32
|
// ---------------------------------------------------------------------------
|
|
32
33
|
// Types
|
|
@@ -179,6 +180,7 @@ export function useKeyboardHint(
|
|
|
179
180
|
isEnabled = true,
|
|
180
181
|
} = options;
|
|
181
182
|
|
|
183
|
+
const t = useTranslator();
|
|
182
184
|
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
183
185
|
const dismissedRef = useRef(false);
|
|
184
186
|
const isVisibleRef = useRef(false);
|
|
@@ -316,7 +318,9 @@ export function useKeyboardHint(
|
|
|
316
318
|
const hintElement = layer.render(
|
|
317
319
|
<span aria-hidden="true">
|
|
318
320
|
{arrowContent}
|
|
319
|
-
<span {...stylex.props(styles.label)}>
|
|
321
|
+
<span {...stylex.props(styles.label)}>
|
|
322
|
+
{t('@astryx.keyboardHint.toNavigate')}
|
|
323
|
+
</span>
|
|
320
324
|
</span>,
|
|
321
325
|
{
|
|
322
326
|
placement: 'below',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
-
/** @type {import('
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').HookDoc} */
|
|
4
4
|
export const docs = {
|
|
5
5
|
name: 'useListFocus',
|
|
6
6
|
displayName: 'useListFocus',
|
|
@@ -19,6 +19,13 @@ export const docs = {
|
|
|
19
19
|
default: "'[role=\"menuitem\"]'",
|
|
20
20
|
required: false,
|
|
21
21
|
},
|
|
22
|
+
{
|
|
23
|
+
name: 'options.boundarySelector',
|
|
24
|
+
type: 'string',
|
|
25
|
+
description:
|
|
26
|
+
"Selector identifying a list boundary, for lists that contain nested lists of the same kind (e.g. a menu with submenu flyouts). When set, item collection and key handling are scoped to this level's own container. Typically '[role=\"menu\"]'.",
|
|
27
|
+
required: false,
|
|
28
|
+
},
|
|
22
29
|
{
|
|
23
30
|
name: 'options.wrap',
|
|
24
31
|
type: 'boolean',
|
|
@@ -49,8 +56,8 @@ export const docs = {
|
|
|
49
56
|
{
|
|
50
57
|
name: 'options.isRtl',
|
|
51
58
|
type: 'boolean',
|
|
52
|
-
description: 'Whether the list is in a right-to-left context. When true, ArrowLeft/ArrowRight are swapped for horizontal navigation so it follows visual direction.',
|
|
53
|
-
default: '
|
|
59
|
+
description: 'Whether the list is in a right-to-left context. When true, ArrowLeft/ArrowRight are swapped for horizontal navigation so it follows visual direction. When omitted, auto-detected from the container computed direction on keydown.',
|
|
60
|
+
default: "undefined (auto-detect from the container's computed direction)",
|
|
54
61
|
required: false,
|
|
55
62
|
},
|
|
56
63
|
{
|
|
@@ -99,6 +106,18 @@ export const docs = {
|
|
|
99
106
|
type: '() => boolean',
|
|
100
107
|
description: 'Focus the last enabled item. Returns true when an item was focused.',
|
|
101
108
|
},
|
|
109
|
+
{
|
|
110
|
+
name: 'ownsEvent',
|
|
111
|
+
type: '(e: React.KeyboardEvent) => boolean',
|
|
112
|
+
description:
|
|
113
|
+
"Whether a key event belongs to this list level rather than a nested list sharing the same boundarySelector. Always true when no boundarySelector is set. Use to guard consumer-added key handling (Enter/Space, typeahead).",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'getItems',
|
|
117
|
+
type: '() => HTMLElement[]',
|
|
118
|
+
description:
|
|
119
|
+
"This level's focusable items in DOM order (already scoped by boundarySelector). Build typeahead targets from this instead of re-querying.",
|
|
120
|
+
},
|
|
102
121
|
],
|
|
103
122
|
usage: {
|
|
104
123
|
description:
|
|
@@ -116,18 +135,19 @@ export const docs = {
|
|
|
116
135
|
category: 'focus',
|
|
117
136
|
};
|
|
118
137
|
|
|
119
|
-
/** @type {import('
|
|
138
|
+
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
120
139
|
export const docsDense = {
|
|
121
140
|
description:
|
|
122
141
|
'Manages keyboard navigation within linear list following WAI-ARIA menu/listbox/toolbar patterns. Supports arrow key navigation (vertical / horizontal), Home/End for boundaries, optional wrap-around, Escape to close. Suitable for dropdown menus, toolbars, any 1D focusable list.',
|
|
123
142
|
paramDescriptions: {
|
|
124
143
|
options: 'config for list focus behavior. All fields optional.',
|
|
125
144
|
'options.itemSelector': 'selector for focusable items in list.',
|
|
145
|
+
'options.boundarySelector': "boundary selector for lists that contain nested lists (e.g. submenu flyouts); scopes items + key handling to this level.",
|
|
126
146
|
'options.wrap': 'whether arrow navigation wraps around at ends.',
|
|
127
147
|
'options.onEscape': 'callback when Escape key pressed (e.g. close menu).',
|
|
128
148
|
'options.orientation': "navigation orientation. 'horizontal' uses ArrowLeft/ArrowRight, 'vertical' uses ArrowUp/ArrowDown, 'both' accepts all four arrows.",
|
|
129
149
|
'options.hasHomeEnd': 'whether Home/End jump to first/last enabled item.',
|
|
130
|
-
'options.isRtl': '
|
|
150
|
+
'options.isRtl': 'ArrowLeft/ArrowRight swap for horizontal nav (RTL). default: auto-detect from container computed direction; explicit boolean wins.',
|
|
131
151
|
'options.hasRovingTabIndex': 'opt into roving-tabindex ownership: hook stamps + repairs a single tab stop across items.',
|
|
132
152
|
'options.hasCaretGuard': "when true, don't steal arrow keys from a nested text input/textarea mid-line or from a contenteditable.",
|
|
133
153
|
},
|
|
@@ -138,6 +158,8 @@ export const docsDense = {
|
|
|
138
158
|
focusItem: 'focus specific item by index (clamped to valid range).',
|
|
139
159
|
focusFirst: 'focus first enabled item; returns true when focused.',
|
|
140
160
|
focusLast: 'focus last enabled item; returns true when focused.',
|
|
161
|
+
ownsEvent: 'whether a key event is this level\'s vs a nested list\'s (boundarySelector); always true without one.',
|
|
162
|
+
getItems: "this level's focusable items in DOM order, scoped by boundarySelector.",
|
|
141
163
|
},
|
|
142
164
|
usage: {
|
|
143
165
|
description:
|