@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
package/src/Calendar/utils.ts
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
* @position Shared utilities; used by Calendar, CalendarMonthGrid, CalendarDayCell
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import {plainDateFormat, DATE_FORMAT_WITH_WEEKDAY} from '../utils/plainDate';
|
|
11
|
-
|
|
12
10
|
export {
|
|
13
11
|
type PlainDate,
|
|
14
12
|
plainDateFromISO as parseISO,
|
|
@@ -17,12 +15,3 @@ export {
|
|
|
17
15
|
plainDateIsInRange as isDateInRange,
|
|
18
16
|
plainDateGetWeekNumber as getWeekNumber,
|
|
19
17
|
} from '../utils/plainDate';
|
|
20
|
-
|
|
21
|
-
export {plainDateFormat, DATE_FORMAT_WITH_WEEKDAY};
|
|
22
|
-
|
|
23
|
-
/** @deprecated Use `plainDateFormat(pd, DATE_FORMAT_WITH_WEEKDAY)` instead. */
|
|
24
|
-
export function formatAccessibleDate(
|
|
25
|
-
...args: Parameters<typeof plainDateFormat>
|
|
26
|
-
): string {
|
|
27
|
-
return plainDateFormat(args[0], DATE_FORMAT_WITH_WEEKDAY);
|
|
28
|
-
}
|
package/src/Card/Card.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: 'Card',
|
|
@@ -103,7 +103,7 @@ export const docs = {
|
|
|
103
103
|
},
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
/** @type {import('
|
|
106
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentDoc} */
|
|
107
107
|
export const docsZh = {
|
|
108
108
|
name: 'Card',
|
|
109
109
|
displayName: 'Card',
|
|
@@ -151,7 +151,7 @@ export const docsZh = {
|
|
|
151
151
|
},
|
|
152
152
|
};
|
|
153
153
|
|
|
154
|
-
/** @type {import('
|
|
154
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
155
155
|
export const docsDense = {
|
|
156
156
|
description: 'bordered container for DISCRETE items; NOT the default layout tool. Most content doesn\'t need a card.',
|
|
157
157
|
usage: {
|
package/src/Card/Card.tsx
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - /packages/core/src/Card/Card.doc.mjs (props table, features)
|
|
13
13
|
* - /packages/core/src/Card/index.ts (exports if types change)
|
|
14
14
|
* - /apps/storybook/stories/Card.stories.tsx (storybook stories)
|
|
15
|
-
* - /packages/cli/templates/blocks/components/Card/ (showcase blocks)
|
|
15
|
+
* - /packages/cli/assets/templates/blocks/components/Card/ (showcase blocks)
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import type {ReactNode} from 'react';
|
|
@@ -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: 'Carousel',
|
|
@@ -12,6 +12,7 @@ export const docs = {
|
|
|
12
12
|
'Carousel scrolls a row of items horizontally when they overflow the available width. Use it for card grids, image galleries, product lists, or any set of items that should be browsable without taking up the full page.',
|
|
13
13
|
bestPractices: [
|
|
14
14
|
{guidance: true, description: 'Enable scroll-snap when each item should land precisely at the start edge, like a gallery or product list.'},
|
|
15
|
+
{guidance: true, description: 'Reach for hasLoop on small, cyclable sets like a photo gallery, where wrapping past the last item back to the first feels natural.'},
|
|
15
16
|
{guidance: true, description: 'Always provide an aria-label that describes what the carousel contains, like "Featured products" or "Team members".'},
|
|
16
17
|
{guidance: true, description: 'Use a consistent gap and item width so the carousel looks intentional, not like content overflowing by accident.'},
|
|
17
18
|
{guidance: true, description: 'Trust the built-in navigation: trackpad users can swipe horizontally, and mouse users can hold Shift while scrolling the wheel to move through items.'},
|
|
@@ -31,10 +32,12 @@ export const docs = {
|
|
|
31
32
|
{name: 'gap', type: "0 | 0.5 | 1 | 1.5 | 2 | 3 | 4", description: 'Gap between items using the spacing token scale.', default: '1'},
|
|
32
33
|
{name: 'hasButtons', type: 'boolean', description: 'Show prev/next navigation buttons when content is scrollable.', default: 'true'},
|
|
33
34
|
{name: 'hasEdgeFade', type: 'boolean', description: 'Show a gradient edge-fade mask when content overflows, signalling that more items exist off-screen.', default: 'true'},
|
|
35
|
+
{name: 'hasLoop', type: 'boolean', description: 'Wrap-around scrolling: next at the end scrolls to the start, prev at the start scrolls to the end. Buttons stay visible at both edges. Only engages when content overflows.', default: 'false'},
|
|
34
36
|
{name: 'hasSnap', type: 'boolean', description: 'Enable scroll-snap so each child snaps to the start edge.', default: 'false'},
|
|
35
37
|
{name: 'padding', type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10', description: 'Inline padding inside the scroll container, with matching scroll-padding so snap points align to the content edge.'},
|
|
36
38
|
{name: 'aria-label', type: 'string', description: 'Accessible label for the carousel region.', default: "\'Carousel\'"},
|
|
37
39
|
{name: 'ref', type: 'React.Ref<HTMLDivElement>', description: 'Ref forwarded to the root element.'},
|
|
40
|
+
{name: 'handleRef', type: 'React.Ref<CarouselHandle>', description: 'Imperative handle exposing scrollNext(), scrollPrev(), scrollTo(index), canScrollNext(), and canScrollPrev() for programmatic scroll control.'},
|
|
38
41
|
{name: 'xstyle', type: 'StyleXStyles', description: 'StyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value.'},
|
|
39
42
|
{name: 'className', type: 'string', description: 'CSS class name for the root element. Prefer xstyle for styling.'},
|
|
40
43
|
{name: 'style', type: 'CSSProperties', description: 'Inline styles for the root element. Prefer xstyle.'},
|
|
@@ -56,7 +59,7 @@ export const docs = {
|
|
|
56
59
|
},
|
|
57
60
|
};
|
|
58
61
|
|
|
59
|
-
/** @type {import('
|
|
62
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
60
63
|
export const docsZh = {
|
|
61
64
|
usage: {
|
|
62
65
|
description:
|
|
@@ -75,13 +78,15 @@ export const docsZh = {
|
|
|
75
78
|
gap: '使用间距令牌比例的项目间距。',
|
|
76
79
|
hasButtons: '内容可滚动时显示上一个/下一个导航按钮。',
|
|
77
80
|
hasEdgeFade: '内容溢出时显示渐变边缘遮罩,提示屏幕外还有更多项目。',
|
|
81
|
+
hasLoop: '环绕滚动:在末尾按"下一个"回到开头,在开头按"上一个"跳到末尾。按钮在两端始终可见。仅在内容溢出时生效。',
|
|
78
82
|
hasSnap: '启用滚动吸附,使每个子元素吸附到起始边缘。',
|
|
79
83
|
padding: '滚动容器内的内联内边距,并设置匹配的 scroll-padding,使吸附点与内容边缘对齐。',
|
|
80
84
|
'aria-label': '轮播区域的无障碍标签。',
|
|
85
|
+
handleRef: '命令式句柄,暴露 scrollNext()、scrollPrev()、scrollTo(index)、canScrollNext() 和 canScrollPrev() 以进行编程式滚动控制。',
|
|
81
86
|
},
|
|
82
87
|
};
|
|
83
88
|
|
|
84
|
-
/** @type {import('
|
|
89
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
|
|
85
90
|
export const docsDense = {
|
|
86
91
|
description: 'horizontal scroll container w/ fade edges, nav buttons, scroll-snap',
|
|
87
92
|
usage: {
|
|
@@ -102,9 +107,11 @@ export const docsDense = {
|
|
|
102
107
|
gap: 'item spacing via spacing token scale',
|
|
103
108
|
hasButtons: 'prev/next buttons when content is scrollable',
|
|
104
109
|
hasEdgeFade: 'gradient edge-fade mask on overflow',
|
|
110
|
+
hasLoop: 'wrap-around: next at end -> start, prev at start -> end; buttons stay visible; only when overflowing',
|
|
105
111
|
hasSnap: 'scroll-snap; children snap to start edge',
|
|
106
112
|
padding: 'inline padding; scroll-padding keeps snap points on content edge',
|
|
107
113
|
'aria-label': 'accessible label for carousel region',
|
|
114
|
+
handleRef: 'imperative handle: scrollNext/scrollPrev/scrollTo(index)/canScrollNext/canScrollPrev',
|
|
108
115
|
'data-testid': 'test selector for automated testing frameworks',
|
|
109
116
|
},
|
|
110
117
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
import {describe, it, expect, vi} from 'vitest';
|
|
4
|
+
import {createRef} from 'react';
|
|
4
5
|
import {render, screen, fireEvent} from '@testing-library/react';
|
|
5
|
-
import {Carousel} from './Carousel';
|
|
6
|
+
import {Carousel, type CarouselHandle} from './Carousel';
|
|
6
7
|
|
|
7
8
|
// Mock ResizeObserver (not available in jsdom)
|
|
8
9
|
class MockResizeObserver {
|
|
@@ -259,4 +260,234 @@ describe('Carousel', () => {
|
|
|
259
260
|
expect(scrollBy).not.toHaveBeenCalled();
|
|
260
261
|
});
|
|
261
262
|
});
|
|
263
|
+
|
|
264
|
+
describe('hasLoop', () => {
|
|
265
|
+
// jsdom doesn't lay out elements, so we fake an overflowing scroll
|
|
266
|
+
// container, force it to rest at an edge, and capture scrollBy calls.
|
|
267
|
+
function getScroller() {
|
|
268
|
+
const region = screen.getByRole('region');
|
|
269
|
+
return region.firstElementChild as HTMLElement;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
function makeOverflowing(el: HTMLElement, scrollLeft: number) {
|
|
273
|
+
Object.defineProperty(el, 'scrollWidth', {
|
|
274
|
+
value: 500,
|
|
275
|
+
configurable: true,
|
|
276
|
+
});
|
|
277
|
+
Object.defineProperty(el, 'clientWidth', {
|
|
278
|
+
value: 200,
|
|
279
|
+
configurable: true,
|
|
280
|
+
});
|
|
281
|
+
Object.defineProperty(el, 'scrollLeft', {
|
|
282
|
+
value: scrollLeft,
|
|
283
|
+
writable: true,
|
|
284
|
+
configurable: true,
|
|
285
|
+
});
|
|
286
|
+
// Drive the overflow hook's scroll listener so overflowStart/End settle.
|
|
287
|
+
fireEvent.scroll(el);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
it('keeps both navigation buttons enabled at the edges when looping', () => {
|
|
291
|
+
render(
|
|
292
|
+
<Carousel hasLoop aria-label="Looping">
|
|
293
|
+
<div>Item 1</div>
|
|
294
|
+
<div>Item 2</div>
|
|
295
|
+
</Carousel>,
|
|
296
|
+
);
|
|
297
|
+
const scroller = getScroller();
|
|
298
|
+
// At the start edge: without loop the left button would be disabled.
|
|
299
|
+
makeOverflowing(scroller, 0);
|
|
300
|
+
|
|
301
|
+
expect(screen.getByLabelText('Scroll left')).toBeEnabled();
|
|
302
|
+
expect(screen.getByLabelText('Scroll right')).toBeEnabled();
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it('wraps to the start when pressing next at the end', () => {
|
|
306
|
+
render(
|
|
307
|
+
<Carousel hasLoop aria-label="Looping">
|
|
308
|
+
<div>Item 1</div>
|
|
309
|
+
<div>Item 2</div>
|
|
310
|
+
</Carousel>,
|
|
311
|
+
);
|
|
312
|
+
const scroller = getScroller();
|
|
313
|
+
// At the end edge (scrolled fully right): overflowEnd is false.
|
|
314
|
+
makeOverflowing(scroller, 300);
|
|
315
|
+
const scrollBy = vi.fn();
|
|
316
|
+
scroller.scrollBy = scrollBy;
|
|
317
|
+
|
|
318
|
+
fireEvent.click(screen.getByLabelText('Scroll right'));
|
|
319
|
+
|
|
320
|
+
// Overshoots toward the start by the full scroll width; the browser
|
|
321
|
+
// clamps to scrollLeft 0.
|
|
322
|
+
expect(scrollBy).toHaveBeenCalledWith({
|
|
323
|
+
left: -500,
|
|
324
|
+
behavior: 'smooth',
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
it('wraps to the end when pressing prev at the start', () => {
|
|
329
|
+
render(
|
|
330
|
+
<Carousel hasLoop aria-label="Looping">
|
|
331
|
+
<div>Item 1</div>
|
|
332
|
+
<div>Item 2</div>
|
|
333
|
+
</Carousel>,
|
|
334
|
+
);
|
|
335
|
+
const scroller = getScroller();
|
|
336
|
+
makeOverflowing(scroller, 0);
|
|
337
|
+
const scrollBy = vi.fn();
|
|
338
|
+
scroller.scrollBy = scrollBy;
|
|
339
|
+
|
|
340
|
+
fireEvent.click(screen.getByLabelText('Scroll left'));
|
|
341
|
+
|
|
342
|
+
// Overshoots toward the end by the full scroll width.
|
|
343
|
+
expect(scrollBy).toHaveBeenCalledWith({
|
|
344
|
+
left: 500,
|
|
345
|
+
behavior: 'smooth',
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it('does not wrap when content fits without overflowing', () => {
|
|
350
|
+
render(
|
|
351
|
+
<Carousel hasLoop aria-label="Looping">
|
|
352
|
+
<div>Only item</div>
|
|
353
|
+
</Carousel>,
|
|
354
|
+
);
|
|
355
|
+
const scroller = getScroller();
|
|
356
|
+
Object.defineProperty(scroller, 'scrollWidth', {
|
|
357
|
+
value: 200,
|
|
358
|
+
configurable: true,
|
|
359
|
+
});
|
|
360
|
+
Object.defineProperty(scroller, 'clientWidth', {
|
|
361
|
+
value: 200,
|
|
362
|
+
configurable: true,
|
|
363
|
+
});
|
|
364
|
+
Object.defineProperty(scroller, 'scrollLeft', {
|
|
365
|
+
value: 0,
|
|
366
|
+
writable: true,
|
|
367
|
+
configurable: true,
|
|
368
|
+
});
|
|
369
|
+
fireEvent.scroll(scroller);
|
|
370
|
+
const scrollBy = vi.fn();
|
|
371
|
+
scroller.scrollBy = scrollBy;
|
|
372
|
+
|
|
373
|
+
// Buttons are hidden/disabled with no overflow; invoking scroll is a
|
|
374
|
+
// no-op wrap-wise — a normal (non-wrap) scrollBy still runs, but there
|
|
375
|
+
// is nothing to wrap to, so the overshoot branch must not fire.
|
|
376
|
+
fireEvent.click(screen.getByLabelText('Scroll right'));
|
|
377
|
+
|
|
378
|
+
// Either not called (button disabled) or called with a normal delta —
|
|
379
|
+
// never the full-scrollWidth overshoot.
|
|
380
|
+
if (scrollBy.mock.calls.length > 0) {
|
|
381
|
+
expect(scrollBy).not.toHaveBeenCalledWith(
|
|
382
|
+
expect.objectContaining({left: 500}),
|
|
383
|
+
);
|
|
384
|
+
expect(scrollBy).not.toHaveBeenCalledWith(
|
|
385
|
+
expect.objectContaining({left: -500}),
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
describe('handleRef', () => {
|
|
392
|
+
function getScroller() {
|
|
393
|
+
const region = screen.getByRole('region');
|
|
394
|
+
return region.firstElementChild as HTMLElement;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function makeOverflowing(el: HTMLElement, scrollLeft: number) {
|
|
398
|
+
Object.defineProperty(el, 'scrollWidth', {
|
|
399
|
+
value: 500,
|
|
400
|
+
configurable: true,
|
|
401
|
+
});
|
|
402
|
+
Object.defineProperty(el, 'clientWidth', {
|
|
403
|
+
value: 200,
|
|
404
|
+
configurable: true,
|
|
405
|
+
});
|
|
406
|
+
Object.defineProperty(el, 'scrollLeft', {
|
|
407
|
+
value: scrollLeft,
|
|
408
|
+
writable: true,
|
|
409
|
+
configurable: true,
|
|
410
|
+
});
|
|
411
|
+
fireEvent.scroll(el);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
it('exposes scrollNext/scrollPrev that drive the scroll container', () => {
|
|
415
|
+
const handle = createRef<CarouselHandle>();
|
|
416
|
+
render(
|
|
417
|
+
<Carousel handleRef={handle} aria-label="Handle">
|
|
418
|
+
<div>Item 1</div>
|
|
419
|
+
<div>Item 2</div>
|
|
420
|
+
</Carousel>,
|
|
421
|
+
);
|
|
422
|
+
const scroller = getScroller();
|
|
423
|
+
makeOverflowing(scroller, 100);
|
|
424
|
+
const scrollBy = vi.fn();
|
|
425
|
+
scroller.scrollBy = scrollBy;
|
|
426
|
+
|
|
427
|
+
handle.current?.scrollNext();
|
|
428
|
+
expect(scrollBy).toHaveBeenCalledTimes(1);
|
|
429
|
+
expect(scrollBy.mock.calls[0][0].left).toBeGreaterThan(0);
|
|
430
|
+
|
|
431
|
+
handle.current?.scrollPrev();
|
|
432
|
+
expect(scrollBy).toHaveBeenCalledTimes(2);
|
|
433
|
+
expect(scrollBy.mock.calls[1][0].left).toBeLessThan(0);
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
it('reports canScrollNext/canScrollPrev from live overflow state', () => {
|
|
437
|
+
const handle = createRef<CarouselHandle>();
|
|
438
|
+
render(
|
|
439
|
+
<Carousel handleRef={handle} aria-label="Handle">
|
|
440
|
+
<div>Item 1</div>
|
|
441
|
+
<div>Item 2</div>
|
|
442
|
+
</Carousel>,
|
|
443
|
+
);
|
|
444
|
+
const scroller = getScroller();
|
|
445
|
+
|
|
446
|
+
// At the start: can scroll toward the end, not the start.
|
|
447
|
+
makeOverflowing(scroller, 0);
|
|
448
|
+
expect(handle.current?.canScrollPrev()).toBe(false);
|
|
449
|
+
expect(handle.current?.canScrollNext()).toBe(true);
|
|
450
|
+
|
|
451
|
+
// Scroll into the middle: both directions available.
|
|
452
|
+
makeOverflowing(scroller, 150);
|
|
453
|
+
expect(handle.current?.canScrollPrev()).toBe(true);
|
|
454
|
+
expect(handle.current?.canScrollNext()).toBe(true);
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
it('reports both directions scrollable under hasLoop when overflowing', () => {
|
|
458
|
+
const handle = createRef<CarouselHandle>();
|
|
459
|
+
render(
|
|
460
|
+
<Carousel handleRef={handle} hasLoop aria-label="Handle">
|
|
461
|
+
<div>Item 1</div>
|
|
462
|
+
<div>Item 2</div>
|
|
463
|
+
</Carousel>,
|
|
464
|
+
);
|
|
465
|
+
const scroller = getScroller();
|
|
466
|
+
// Rest at the start edge — normally canScrollPrev would be false.
|
|
467
|
+
makeOverflowing(scroller, 0);
|
|
468
|
+
|
|
469
|
+
expect(handle.current?.canScrollPrev()).toBe(true);
|
|
470
|
+
expect(handle.current?.canScrollNext()).toBe(true);
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
it('scrollTo scrolls the container and clamps out-of-range indices', () => {
|
|
474
|
+
const handle = createRef<CarouselHandle>();
|
|
475
|
+
render(
|
|
476
|
+
<Carousel handleRef={handle} aria-label="Handle">
|
|
477
|
+
<div>Item 1</div>
|
|
478
|
+
<div>Item 2</div>
|
|
479
|
+
<div>Item 3</div>
|
|
480
|
+
</Carousel>,
|
|
481
|
+
);
|
|
482
|
+
const scroller = getScroller();
|
|
483
|
+
const scrollBy = vi.fn();
|
|
484
|
+
scroller.scrollBy = scrollBy;
|
|
485
|
+
|
|
486
|
+
// Out-of-range index is clamped to the last item — no throw, one call.
|
|
487
|
+
expect(() => handle.current?.scrollTo(99)).not.toThrow();
|
|
488
|
+
expect(scrollBy).toHaveBeenCalledTimes(1);
|
|
489
|
+
// Uses scrollBy (contained to the carousel), never scrollIntoView.
|
|
490
|
+
expect(scrollBy.mock.calls[0][0]).toHaveProperty('left');
|
|
491
|
+
});
|
|
492
|
+
});
|
|
262
493
|
});
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
* @position Horizontal scroll container with fade-edge overflow indication,
|
|
10
10
|
* optional prev/next buttons on the top layer, scroll-snap, a 1px
|
|
11
11
|
* visual bleed allowance for child selection indicators, and Shift + wheel
|
|
12
|
-
* mapping so mouse users can scroll horizontally.
|
|
12
|
+
* mapping so mouse users can scroll horizontally. Supports optional
|
|
13
|
+
* wrap-around looping and an imperative handle (handleRef) for programmatic
|
|
14
|
+
* scroll control. Exposes APG
|
|
13
15
|
* carousel semantics: the root is a labelled region with
|
|
14
16
|
* aria-roledescription="carousel" and each item wrapper is a group with
|
|
15
17
|
* aria-roledescription="slide" named "Slide N of M".
|
|
@@ -17,7 +19,7 @@
|
|
|
17
19
|
* SYNC: When modified, update:
|
|
18
20
|
* - /packages/core/src/Carousel/index.ts (exports)
|
|
19
21
|
* - /apps/storybook/stories/Carousel.stories.tsx
|
|
20
|
-
* - /packages/cli/templates/blocks/components/Carousel/ (showcase blocks)
|
|
22
|
+
* - /packages/cli/assets/templates/blocks/components/Carousel/ (showcase blocks)
|
|
21
23
|
*/
|
|
22
24
|
|
|
23
25
|
import {
|
|
@@ -25,6 +27,7 @@ import {
|
|
|
25
27
|
useRef,
|
|
26
28
|
useCallback,
|
|
27
29
|
useEffect,
|
|
30
|
+
useImperativeHandle,
|
|
28
31
|
Children,
|
|
29
32
|
isValidElement,
|
|
30
33
|
} from 'react';
|
|
@@ -48,8 +51,48 @@ import type {SpacingStep} from '../utils/types';
|
|
|
48
51
|
import {themeProps} from '../utils/themeProps';
|
|
49
52
|
import {useTranslator} from '../i18n';
|
|
50
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Imperative control surface for the Carousel, accessed via the `handleRef`
|
|
56
|
+
* prop. Methods drive the same native-scroll machinery as the built-in
|
|
57
|
+
* buttons, so they respect RTL, reduced-motion, and `hasLoop`.
|
|
58
|
+
*/
|
|
59
|
+
export interface CarouselHandle {
|
|
60
|
+
/**
|
|
61
|
+
* Scroll forward by roughly one viewport. With `hasLoop`, wraps to the
|
|
62
|
+
* start once the end is reached.
|
|
63
|
+
*/
|
|
64
|
+
scrollNext(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Scroll backward by roughly one viewport. With `hasLoop`, wraps to the
|
|
67
|
+
* end once the start is reached.
|
|
68
|
+
*/
|
|
69
|
+
scrollPrev(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Scroll the item at the given 0-based index to the start edge. The index
|
|
72
|
+
* is clamped to the item range, and only the carousel scrolls — the page
|
|
73
|
+
* position is left untouched.
|
|
74
|
+
*/
|
|
75
|
+
scrollTo(index: number): void;
|
|
76
|
+
/**
|
|
77
|
+
* Whether there is scrollable content past the trailing edge. With
|
|
78
|
+
* `hasLoop`, returns true whenever the content overflows, since wrapping
|
|
79
|
+
* is always available. Reads live state — safe to call in an event handler.
|
|
80
|
+
*/
|
|
81
|
+
canScrollNext(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Whether there is scrollable content past the leading edge. With
|
|
84
|
+
* `hasLoop`, returns true whenever the content overflows. Reads live state.
|
|
85
|
+
*/
|
|
86
|
+
canScrollPrev(): boolean;
|
|
87
|
+
}
|
|
88
|
+
|
|
51
89
|
export interface CarouselProps extends BaseProps<HTMLDivElement> {
|
|
52
90
|
ref?: React.Ref<HTMLDivElement>;
|
|
91
|
+
/**
|
|
92
|
+
* Imperative handle for programmatic scroll control. Exposes scrollNext,
|
|
93
|
+
* scrollPrev, scrollTo, and the canScrollNext/canScrollPrev queries.
|
|
94
|
+
*/
|
|
95
|
+
handleRef?: React.Ref<CarouselHandle>;
|
|
53
96
|
/** Carousel items — rendered in a horizontal scroll container. */
|
|
54
97
|
children: ReactNode;
|
|
55
98
|
/**
|
|
@@ -69,6 +112,16 @@ export interface CarouselProps extends BaseProps<HTMLDivElement> {
|
|
|
69
112
|
* @default true
|
|
70
113
|
*/
|
|
71
114
|
hasEdgeFade?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Enable wrap-around scrolling. When the content overflows, pressing Next
|
|
117
|
+
* at the end scrolls back to the start, and Prev at the start scrolls to
|
|
118
|
+
* the end — for both the built-in buttons and the imperative handle. The
|
|
119
|
+
* navigation buttons stay visible at both edges instead of hiding, since a
|
|
120
|
+
* scroll is always available. Has no effect when the content fits without
|
|
121
|
+
* overflowing.
|
|
122
|
+
* @default false
|
|
123
|
+
*/
|
|
124
|
+
hasLoop?: boolean;
|
|
72
125
|
/**
|
|
73
126
|
* Enable scroll-snap on items. Each direct child snaps to the start edge.
|
|
74
127
|
* @default false
|
|
@@ -269,10 +322,12 @@ const paddingStyles = stylex.create({
|
|
|
269
322
|
*/
|
|
270
323
|
export function Carousel({
|
|
271
324
|
ref,
|
|
325
|
+
handleRef,
|
|
272
326
|
children,
|
|
273
327
|
gap = 1,
|
|
274
328
|
hasButtons = true,
|
|
275
329
|
hasEdgeFade = true,
|
|
330
|
+
hasLoop = false,
|
|
276
331
|
hasSnap = false,
|
|
277
332
|
padding,
|
|
278
333
|
'aria-label': ariaLabelFromProps,
|
|
@@ -285,7 +340,8 @@ export function Carousel({
|
|
|
285
340
|
const t = useTranslator();
|
|
286
341
|
const ariaLabel = ariaLabelFromProps ?? t('@astryx.carousel.label');
|
|
287
342
|
const scrollElRef = useRef<HTMLElement | null>(null);
|
|
288
|
-
const {scrollRef, overflowStart, overflowEnd} =
|
|
343
|
+
const {scrollRef, overflowStart, overflowEnd, hasOverflow} =
|
|
344
|
+
useScrollOverflow();
|
|
289
345
|
|
|
290
346
|
// Children.toArray drops null/undefined/boolean children and assigns
|
|
291
347
|
// stable keys, so slide numbering ("Slide N of M") matches what actually
|
|
@@ -338,33 +394,100 @@ export function Carousel({
|
|
|
338
394
|
el.scrollBy({left: event.deltaY, behavior: 'auto'});
|
|
339
395
|
}, []);
|
|
340
396
|
|
|
341
|
-
const scrollBy = useCallback(
|
|
397
|
+
const scrollBy = useCallback(
|
|
398
|
+
(direction: -1 | 1) => {
|
|
399
|
+
const el = scrollElRef.current;
|
|
400
|
+
if (!el) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
// Respect the user's reduced-motion preference — mirrors the CSS
|
|
404
|
+
// scroll-behavior override so button-driven scrolling doesn't animate
|
|
405
|
+
// for users who opted out of motion.
|
|
406
|
+
const prefersReducedMotion =
|
|
407
|
+
typeof window !== 'undefined' &&
|
|
408
|
+
typeof window.matchMedia === 'function' &&
|
|
409
|
+
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
410
|
+
const behavior = prefersReducedMotion ? 'auto' : 'smooth';
|
|
411
|
+
// Under RTL the scroll axis is inverted (start is scrollLeft 0, the end
|
|
412
|
+
// is negative), so flip the physical delta sign.
|
|
413
|
+
const rtlSign = isRtlElement(el) ? -1 : 1;
|
|
414
|
+
|
|
415
|
+
// Wrap-around: when looping over overflowing content, a press that would
|
|
416
|
+
// run past an edge jumps to the opposite edge instead. Overshoot by the
|
|
417
|
+
// full scroll width in the opposite logical direction and let the browser
|
|
418
|
+
// clamp to the far edge — this reuses the same RTL sign convention as a
|
|
419
|
+
// normal scroll, so it stays direction-correct without special-casing.
|
|
420
|
+
if (hasLoop && hasOverflow) {
|
|
421
|
+
const atEnd = direction === 1 && !overflowEnd;
|
|
422
|
+
const atStart = direction === -1 && !overflowStart;
|
|
423
|
+
if (atEnd || atStart) {
|
|
424
|
+
el.scrollBy({left: rtlSign * -direction * el.scrollWidth, behavior});
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
const firstChild = el.firstElementChild as HTMLElement | null;
|
|
430
|
+
const itemWidth = firstChild ? firstChild.offsetWidth : 0;
|
|
431
|
+
const amount = el.clientWidth - itemWidth * 0.5;
|
|
432
|
+
el.scrollBy({
|
|
433
|
+
// `direction` is the logical intent (-1 = toward content start, +1 =
|
|
434
|
+
// toward content end).
|
|
435
|
+
left: rtlSign * direction * Math.max(amount, itemWidth),
|
|
436
|
+
behavior,
|
|
437
|
+
});
|
|
438
|
+
},
|
|
439
|
+
[hasLoop, hasOverflow, overflowStart, overflowEnd],
|
|
440
|
+
);
|
|
441
|
+
|
|
442
|
+
const scrollToIndex = useCallback((index: number) => {
|
|
342
443
|
const el = scrollElRef.current;
|
|
343
|
-
|
|
444
|
+
const items = el?.children;
|
|
445
|
+
if (!el || !items || items.length === 0) {
|
|
344
446
|
return;
|
|
345
447
|
}
|
|
346
|
-
const
|
|
347
|
-
const
|
|
348
|
-
const amount = el.clientWidth - itemWidth * 0.5;
|
|
349
|
-
// Respect the user's reduced-motion preference — mirrors the CSS
|
|
350
|
-
// scroll-behavior override so button-driven scrolling doesn't animate
|
|
351
|
-
// for users who opted out of motion.
|
|
448
|
+
const clamped = Math.max(0, Math.min(index, items.length - 1));
|
|
449
|
+
const target = items[clamped] as HTMLElement;
|
|
352
450
|
const prefersReducedMotion =
|
|
353
451
|
typeof window !== 'undefined' &&
|
|
354
452
|
typeof window.matchMedia === 'function' &&
|
|
355
453
|
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
454
|
+
// Bring the item to the start edge by scrolling the container by the
|
|
455
|
+
// measured gap between the item and the container edge. Using scrollBy
|
|
456
|
+
// (not scrollIntoView) keeps the scroll contained to the carousel and
|
|
457
|
+
// never moves ancestors or the page. In RTL the start edge is the right
|
|
458
|
+
// edge, so align the trailing edges instead of the leading ones.
|
|
459
|
+
const containerRect = el.getBoundingClientRect();
|
|
460
|
+
const itemRect = target.getBoundingClientRect();
|
|
461
|
+
const delta = isRtlElement(el)
|
|
462
|
+
? itemRect.right - containerRect.right
|
|
463
|
+
: itemRect.left - containerRect.left;
|
|
356
464
|
el.scrollBy({
|
|
357
|
-
|
|
358
|
-
// toward content end). Under RTL the scroll axis is inverted (start is
|
|
359
|
-
// scrollLeft 0, the end is negative), so flip the physical delta sign.
|
|
360
|
-
left:
|
|
361
|
-
(isRtlElement(el) ? -1 : 1) * direction * Math.max(amount, itemWidth),
|
|
465
|
+
left: delta,
|
|
362
466
|
behavior: prefersReducedMotion ? 'auto' : 'smooth',
|
|
363
467
|
});
|
|
364
468
|
}, []);
|
|
365
469
|
|
|
470
|
+
useImperativeHandle(
|
|
471
|
+
handleRef,
|
|
472
|
+
() => ({
|
|
473
|
+
scrollNext: () => scrollBy(1),
|
|
474
|
+
scrollPrev: () => scrollBy(-1),
|
|
475
|
+
scrollTo: (index: number) => scrollToIndex(index),
|
|
476
|
+
// With loop, either direction is reachable whenever the content
|
|
477
|
+
// overflows; otherwise reflect the live per-edge overflow state.
|
|
478
|
+
canScrollNext: () => (hasLoop ? hasOverflow : overflowEnd),
|
|
479
|
+
canScrollPrev: () => (hasLoop ? hasOverflow : overflowStart),
|
|
480
|
+
}),
|
|
481
|
+
[scrollBy, scrollToIndex, hasLoop, hasOverflow, overflowStart, overflowEnd],
|
|
482
|
+
);
|
|
483
|
+
|
|
484
|
+
// With loop, the buttons stay reachable at both edges as long as there's
|
|
485
|
+
// something to scroll; without loop they follow the per-edge overflow state.
|
|
486
|
+
const canScrollStart = hasLoop && hasOverflow ? true : overflowStart;
|
|
487
|
+
const canScrollEnd = hasLoop && hasOverflow ? true : overflowEnd;
|
|
488
|
+
|
|
366
489
|
const fadeStyle = hasEdgeFade
|
|
367
|
-
? overflowStart && overflowEnd
|
|
490
|
+
? (hasLoop && hasOverflow) || (overflowStart && overflowEnd)
|
|
368
491
|
? styles.fadeBoth
|
|
369
492
|
: overflowStart
|
|
370
493
|
? styles.fadeStart
|
|
@@ -433,7 +556,7 @@ export function Carousel({
|
|
|
433
556
|
{...stylex.props(
|
|
434
557
|
styles.buttonPill,
|
|
435
558
|
styles.buttonPillStart,
|
|
436
|
-
!
|
|
559
|
+
!canScrollStart && styles.buttonHidden,
|
|
437
560
|
)}>
|
|
438
561
|
<Button
|
|
439
562
|
icon={
|
|
@@ -449,7 +572,7 @@ export function Carousel({
|
|
|
449
572
|
// button mounted (stable layout/focus) but removes it from the
|
|
450
573
|
// tab order and a11y tree while it's visually hidden, so
|
|
451
574
|
// keyboard users don't land on an invisible control.
|
|
452
|
-
isDisabled={!
|
|
575
|
+
isDisabled={!canScrollStart}
|
|
453
576
|
onClick={() => scrollBy(-1)}
|
|
454
577
|
xstyle={styles.buttonRadiusOverride}
|
|
455
578
|
/>
|
|
@@ -458,7 +581,7 @@ export function Carousel({
|
|
|
458
581
|
{...stylex.props(
|
|
459
582
|
styles.buttonPill,
|
|
460
583
|
styles.buttonPillEnd,
|
|
461
|
-
!
|
|
584
|
+
!canScrollEnd && styles.buttonHidden,
|
|
462
585
|
)}>
|
|
463
586
|
<Button
|
|
464
587
|
icon={
|
|
@@ -472,7 +595,7 @@ export function Carousel({
|
|
|
472
595
|
isIconOnly
|
|
473
596
|
// See "Scroll left" — disabled while visually hidden so the
|
|
474
597
|
// button stays mounted but out of the tab order / a11y tree.
|
|
475
|
-
isDisabled={!
|
|
598
|
+
isDisabled={!canScrollEnd}
|
|
476
599
|
onClick={() => scrollBy(1)}
|
|
477
600
|
xstyle={styles.buttonRadiusOverride}
|
|
478
601
|
/>
|
package/src/Carousel/index.ts
CHANGED