@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +18 -20
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +53 -55
- package/dist/AspectRatio/AspectRatio.d.ts +10 -48
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +12 -33
- package/dist/AspectRatio/index.d.ts +1 -1
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +25 -27
- package/dist/Avatar/AvatarStatusDot.js +5 -5
- package/dist/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +25 -32
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.js +19 -19
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +48 -68
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +2 -2
- package/dist/Card/Card.d.ts +2 -4
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +10 -18
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +21 -24
- package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
- package/dist/Carousel/carousel.markers.stylex.js +12 -0
- package/dist/Center/Center.js +3 -3
- package/dist/Chat/ChatComposer.js +23 -23
- package/dist/Chat/ChatComposerDrawer.js +14 -14
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +15 -27
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +11 -13
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +10 -12
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +12 -14
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +15 -24
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +74 -81
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +23 -25
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +6 -8
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +9 -32
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +1 -10
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +52 -88
- package/dist/Collapsible/Collapsible.d.ts +3 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +22 -110
- package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +12 -73
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
- package/dist/Collapsible/index.d.ts +0 -1
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +1 -4
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +6 -20
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +34 -36
- package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
- package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
- package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
- package/dist/CommandPalette/CommandPaletteInput.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/CommandPalette/CommandPaletteList.js +3 -3
- package/dist/ContextMenu/ContextMenu.d.ts +2 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +43 -76
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +26 -30
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +3 -4
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +12 -29
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.d.ts +1 -5
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +12 -16
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.d.ts +2 -29
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +31 -44
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +31 -55
- package/dist/Lightbox/useLightbox.js +3 -3
- package/dist/Link/Link.js +15 -15
- package/dist/Link/LinkProvider.js +3 -3
- package/dist/Link/useLinkify.js +3 -3
- package/dist/List/List.js +11 -11
- package/dist/List/ListItem.js +11 -11
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +102 -102
- package/dist/MetadataList/MetadataList.js +10 -10
- package/dist/MetadataList/MetadataListItem.js +15 -15
- package/dist/MobileNav/MobileNav.js +15 -15
- package/dist/MobileNav/MobileNavToggle.js +5 -5
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.js +56 -56
- package/dist/NavIcon/NavIcon.js +3 -3
- package/dist/NavMenu/NavHeadingMenu.js +5 -5
- package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +32 -48
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.js +3 -3
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +72 -125
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +92 -110
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -25
- package/dist/RadioList/RadioList.js +7 -7
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +21 -24
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +10 -28
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +10 -32
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.js +46 -46
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +34 -38
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +6 -8
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +16 -18
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.js +23 -23
- package/dist/Spinner/Spinner.js +9 -9
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +4 -8
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +29 -34
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +30 -57
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +39 -50
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +5 -9
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +5 -9
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +5 -9
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +1 -5
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
- package/dist/Table/plugins/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
- package/dist/Table/tableContextMenu.js +9 -9
- package/dist/Text/Text.js +10 -10
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +2 -3
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +29 -30
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -26
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +26 -37
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +17 -25
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +11 -23
- package/dist/Toast/useToast.js +4 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +34 -36
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +1 -5
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -3
- package/dist/TopNav/TopNav.js +32 -32
- package/dist/TopNav/TopNavHeading.js +67 -67
- package/dist/TopNav/TopNavItem.js +5 -5
- package/dist/TopNav/TopNavMegaMenu.js +30 -30
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +20 -23
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/astryx.css +0 -7
- package/dist/astryx.umd.js +60 -60
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +2 -8
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +0 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/useFocusTrap.d.ts +0 -3
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +1 -38
- package/dist/hooks/useInteractiveRole.d.ts +2 -6
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +2 -6
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +1 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +5 -14
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +3 -10
- package/dist/theme/hct.d.ts +15 -0
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +2 -10
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +4 -220
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -8
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
- package/src/AlertDialog/AlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +0 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
- package/src/AspectRatio/AspectRatio.test.tsx +1 -142
- package/src/AspectRatio/AspectRatio.tsx +10 -70
- package/src/AspectRatio/index.ts +1 -5
- package/src/Avatar/Avatar.doc.mjs +0 -11
- package/src/Avatar/Avatar.test.tsx +1 -32
- package/src/Avatar/Avatar.tsx +20 -12
- package/src/Banner/Banner.doc.mjs +0 -8
- package/src/Banner/Banner.test.tsx +0 -38
- package/src/Banner/Banner.tsx +1 -8
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +17 -122
- package/src/Calendar/Calendar.tsx +5 -26
- package/src/Calendar/dayCellUtils.ts +1 -3
- package/src/Calendar/styles.ts +2 -12
- package/src/Card/Card.tsx +6 -16
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +0 -13
- package/src/Carousel/Carousel.tsx +2 -4
- package/src/Carousel/carousel.markers.stylex.ts +10 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +1 -27
- package/src/Chat/ChatComposerInput.tsx +15 -20
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
- package/src/Chat/ChatMessageMetadata.tsx +6 -4
- package/src/Chat/ChatSystemMessage.test.tsx +11 -26
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +16 -29
- package/src/Chat/ChatTokenizedText.tsx +8 -15
- package/src/Chat/ChatToolCalls.test.tsx +0 -55
- package/src/Chat/ChatToolCalls.tsx +12 -10
- package/src/Chat/index.ts +4 -1
- package/src/Chat/useTriggerMenu.tsx +4 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
- package/src/CheckboxInput/CheckboxInput.tsx +0 -2
- package/src/CheckboxList/CheckboxList.test.tsx +0 -19
- package/src/CheckboxList/CheckboxListItem.tsx +2 -11
- package/src/Citation/Citation.doc.mjs +0 -5
- package/src/ClickableCard/ClickableCard.tsx +2 -45
- package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
- package/src/CodeBlock/CodeBlock.test.tsx +3 -122
- package/src/CodeBlock/CodeBlock.tsx +4 -62
- package/src/Collapsible/Collapsible.doc.mjs +4 -8
- package/src/Collapsible/Collapsible.tsx +10 -86
- package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
- package/src/Collapsible/CollapsibleGroup.tsx +9 -107
- package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
- package/src/Collapsible/index.ts +0 -4
- package/src/Collapsible/useCollapsible.ts +6 -20
- package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
- package/src/CommandPalette/CommandPalette.tsx +3 -5
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
- package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
- package/src/ContextMenu/ContextMenu.test.tsx +0 -87
- package/src/ContextMenu/ContextMenu.tsx +28 -87
- package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
- package/src/DateInput/DateInput.test.tsx +20 -11
- package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
- package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
- package/src/DateTimeInput/DateTimeInput.tsx +2 -8
- package/src/DateTimeInput/index.ts +0 -1
- package/src/Dialog/Dialog.doc.mjs +0 -4
- package/src/Dialog/DialogHeader.doc.mjs +0 -45
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
- package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
- package/src/Field/Field.test.tsx +4 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
- package/src/Grid/Grid.test.tsx +18 -43
- package/src/Grid/Grid.tsx +9 -26
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +2 -9
- package/src/Icon/Icon.test.tsx +29 -41
- package/src/Icon/Icon.tsx +2 -6
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +2 -221
- package/src/Layer/useLayer.tsx +30 -69
- package/src/Layout/LayoutContent.doc.mjs +0 -12
- package/src/Layout/LayoutPanel.doc.mjs +0 -40
- package/src/Lightbox/Lightbox.doc.mjs +0 -5
- package/src/Lightbox/Lightbox.test.tsx +2 -123
- package/src/Lightbox/Lightbox.tsx +1 -29
- package/src/Markdown/Markdown.tsx +7 -9
- package/src/Markdown/parser.perf.test.ts +12 -34
- package/src/NavMenu/NavMenu.doc.mjs +0 -15
- package/src/NumberInput/NumberInput.test.tsx +3 -48
- package/src/NumberInput/NumberInput.tsx +15 -32
- package/src/Overlay/Overlay.doc.mjs +0 -6
- package/src/Pagination/Pagination.test.tsx +0 -162
- package/src/Pagination/Pagination.tsx +26 -80
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +0 -65
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +1 -109
- package/src/PowerSearch/PowerSearch.tsx +16 -37
- package/src/ProgressBar/ProgressBar.test.tsx +0 -30
- package/src/ProgressBar/ProgressBar.tsx +5 -12
- package/src/RadioList/RadioList.test.tsx +0 -19
- package/src/RadioList/RadioListItem.tsx +4 -9
- package/src/Resizable/ResizeHandle.tsx +4 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
- package/src/SegmentedControl/SegmentedControl.tsx +5 -27
- package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +1 -27
- package/src/SideNav/SideNav.doc.mjs +1 -7
- package/src/SideNav/SideNav.test.tsx +0 -66
- package/src/SideNav/SideNav.tsx +2 -6
- package/src/SideNav/SideNavCollapseButton.tsx +3 -4
- package/src/SideNav/SideNavSection.tsx +4 -6
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +3 -102
- package/src/Switch/Switch.tsx +7 -20
- package/src/TabList/TabList.test.tsx +1 -185
- package/src/TabList/TabMenu.tsx +9 -45
- package/src/Table/BaseTable.tsx +2 -13
- package/src/Table/Table.test.tsx +0 -87
- package/src/Table/TableBody.tsx +2 -15
- package/src/Table/TableFooter.tsx +2 -15
- package/src/Table/TableHeader.tsx +2 -15
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
- package/src/Table/plugins/pagination/paginateData.ts +1 -5
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
- package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
- package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +2 -36
- package/src/Thumbnail/Thumbnail.tsx +2 -4
- package/src/TimeInput/TimeInput.test.tsx +0 -37
- package/src/TimeInput/TimeInput.tsx +1 -11
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +0 -52
- package/src/Timestamp/Timestamp.tsx +16 -30
- package/src/Toast/Toast.tsx +3 -11
- package/src/Toast/ToastViewport.test.tsx +0 -64
- package/src/Toast/ToastViewport.tsx +0 -12
- package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +0 -54
- package/src/Tokenizer/Tokenizer.tsx +4 -5
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +2 -12
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +7 -23
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
- package/src/Typeahead/BaseTypeahead.tsx +2 -5
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +1 -45
- package/src/docs-types.ts +1 -9
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +0 -3
- package/src/hooks/useFocusTrap.doc.mjs +2 -4
- package/src/hooks/useFocusTrap.test.tsx +1 -149
- package/src/hooks/useFocusTrap.ts +1 -50
- package/src/hooks/useInteractiveRole.ts +4 -12
- package/src/hooks/useStreamingText.test.ts +19 -54
- package/src/hooks/useStreamingText.ts +5 -16
- package/src/hooks/useTreeFocus.test.tsx +3 -1
- package/src/reset.css +0 -29
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +13 -4
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +0 -29
- package/src/theme/expandColorScale.ts +6 -11
- package/src/theme/hct.ts +17 -9
- package/src/theme/tokens.test.ts +9 -182
- package/src/theme/tokens.ts +4 -239
- package/src/theme/useTheme.test.tsx +0 -20
- package/src/utils/index.ts +0 -4
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +0 -13
- package/src/utils/timeParser.ts +5 -8
- package/dist/hooks/useHotkeys.d.ts +0 -51
- package/dist/hooks/useHotkeys.d.ts.map +0 -1
- package/dist/hooks/useHotkeys.js +0 -160
- package/dist/utils/color.d.ts +0 -42
- package/dist/utils/color.d.ts.map +0 -1
- package/dist/utils/color.js +0 -150
- package/dist/utils/composeEventHandlers.d.ts +0 -30
- package/dist/utils/composeEventHandlers.d.ts.map +0 -1
- package/dist/utils/composeEventHandlers.js +0 -40
- package/src/Chat/ChatDictationButton.test.tsx +0 -43
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
- package/src/Collapsible/Collapsible.test.tsx +0 -405
- package/src/FieldStatus/FieldStatus.test.tsx +0 -282
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Layout/Layout.test.tsx +0 -285
- package/src/Layout/LayoutSlots.test.tsx +0 -364
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
- package/src/OverflowList/OverflowList.test.tsx +0 -416
- package/src/Overlay/Overlay.test.tsx +0 -356
- package/src/Resizable/ResizeHandle.test.tsx +0 -218
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/docPropReferences.test.ts +0 -178
- package/src/hooks/useHotkeys.doc.mjs +0 -52
- package/src/hooks/useHotkeys.test.ts +0 -245
- package/src/hooks/useHotkeys.ts +0 -203
- package/src/utils/color.test.ts +0 -133
- package/src/utils/color.ts +0 -148
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/composeEventHandlers.ts +0 -44
- package/src/utils/mergeProps.test.ts +0 -166
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
import {
|
|
20
20
|
useCallback,
|
|
21
21
|
useEffect,
|
|
22
|
-
useMemo,
|
|
23
22
|
useRef,
|
|
24
23
|
useState,
|
|
25
24
|
type MouseEvent as ReactMouseEvent,
|
|
@@ -29,7 +28,6 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
29
28
|
import {colorVars, spacingVars, typeScaleVars} from '../theme/tokens.stylex';
|
|
30
29
|
import {Icon} from '../Icon';
|
|
31
30
|
import {IconButton} from '../IconButton';
|
|
32
|
-
import {useAnnounce} from '../hooks/useAnnounce';
|
|
33
31
|
import {useScrollLock} from '../hooks/useScrollLock';
|
|
34
32
|
import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
|
|
35
33
|
import {mergeProps, mergeRefs} from '../utils';
|
|
@@ -308,10 +306,7 @@ export function Lightbox({
|
|
|
308
306
|
const dragStartRef = useRef({x: 0, y: 0, panX: 0, panY: 0});
|
|
309
307
|
|
|
310
308
|
// Resolve current media item
|
|
311
|
-
const mediaArray =
|
|
312
|
-
() => (Array.isArray(media) ? media : [media]),
|
|
313
|
-
[media],
|
|
314
|
-
);
|
|
309
|
+
const mediaArray = Array.isArray(media) ? media : [media];
|
|
315
310
|
const isGallery = mediaArray.length > 1;
|
|
316
311
|
const currentItem =
|
|
317
312
|
mediaArray.length > 0
|
|
@@ -334,29 +329,6 @@ export function Lightbox({
|
|
|
334
329
|
setPan({x: 0, y: 0});
|
|
335
330
|
}, [index, currentItem?.src]);
|
|
336
331
|
|
|
337
|
-
// Announce gallery navigation to screen readers. Moving between images only
|
|
338
|
-
// updates the visual counter, which is silent to assistive tech, so mirror
|
|
339
|
-
// each change in a polite live region ("<alt>, 3 of 12", or "Image 3 of 12"
|
|
340
|
-
// when the image has no alt). Announce only when the image changes during an
|
|
341
|
-
// already-open session — not on mount, not when opening (even at a new
|
|
342
|
-
// index, since the dialog's aria-label already names the current image), and
|
|
343
|
-
// not on close.
|
|
344
|
-
const announce = useAnnounce();
|
|
345
|
-
const prevIndexRef = useRef(index);
|
|
346
|
-
const wasOpenRef = useRef(isOpen);
|
|
347
|
-
useEffect(() => {
|
|
348
|
-
const indexChanged = prevIndexRef.current !== index;
|
|
349
|
-
const wasOpen = wasOpenRef.current;
|
|
350
|
-
prevIndexRef.current = index;
|
|
351
|
-
wasOpenRef.current = isOpen;
|
|
352
|
-
if (!indexChanged || !isOpen || !wasOpen) {
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
const item = mediaArray[Math.min(index, mediaArray.length - 1)];
|
|
356
|
-
const position = `${index + 1} of ${mediaArray.length}`;
|
|
357
|
-
announce(item?.alt ? `${item.alt}, ${position}` : `Image ${position}`);
|
|
358
|
-
}, [index, isOpen, announce, mediaArray]);
|
|
359
|
-
|
|
360
332
|
// Open/close dialog
|
|
361
333
|
useIsomorphicLayoutEffect(() => {
|
|
362
334
|
const dialog = dialogRef.current;
|
|
@@ -425,14 +425,7 @@ const streamingStyles = stylex.create({
|
|
|
425
425
|
fadeIn: {
|
|
426
426
|
opacity: 1,
|
|
427
427
|
transitionProperty: 'opacity',
|
|
428
|
-
|
|
429
|
-
// 0s duration makes the @starting-style opacity jump non-animated (the
|
|
430
|
-
// media query can't nest inside @starting-style), mirroring the
|
|
431
|
-
// conditional-duration form in Spinner (Spinner.tsx).
|
|
432
|
-
transitionDuration: {
|
|
433
|
-
default: durationVars['--duration-medium'],
|
|
434
|
-
'@media (prefers-reduced-motion: reduce)': '0s',
|
|
435
|
-
},
|
|
428
|
+
transitionDuration: durationVars['--duration-medium'],
|
|
436
429
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
437
430
|
'@starting-style': {
|
|
438
431
|
opacity: 0,
|
|
@@ -1056,7 +1049,12 @@ function renderBlock(
|
|
|
1056
1049
|
switch (node.type) {
|
|
1057
1050
|
case 'heading': {
|
|
1058
1051
|
const level = Math.min(node.level + headingLevelStart - 1, 6) as
|
|
1059
|
-
|
|
1052
|
+
| 1
|
|
1053
|
+
| 2
|
|
1054
|
+
| 3
|
|
1055
|
+
| 4
|
|
1056
|
+
| 5
|
|
1057
|
+
| 6;
|
|
1060
1058
|
const headingChildren = node.children.map((c, i) =>
|
|
1061
1059
|
renderInline(
|
|
1062
1060
|
c,
|
|
@@ -69,31 +69,6 @@ function simulateStreamingIncremental(
|
|
|
69
69
|
return parseMarkdownIncremental(fullText, state);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
// A single wall-clock measurement is flaky when the whole suite runs in
|
|
73
|
-
// parallel forks: scheduler contention can inflate a millisecond-scale
|
|
74
|
-
// sample well past a tight budget (observed 30.9ms against the 20ms Small
|
|
75
|
-
// budget). The fastest of a few runs approximates the un-contended cost —
|
|
76
|
-
// a real regression raises the minimum too — so budgets stay tight without
|
|
77
|
-
// flapping. The streaming budget tests below keep a single run: their
|
|
78
|
-
// budgets carry 10x+ headroom, which contention cannot realistically eat.
|
|
79
|
-
function measureBest<T>(
|
|
80
|
-
runs: number,
|
|
81
|
-
fn: () => T,
|
|
82
|
-
): {elapsed: number; result: T} {
|
|
83
|
-
let elapsed = Infinity;
|
|
84
|
-
let result!: T;
|
|
85
|
-
for (let i = 0; i < runs; i++) {
|
|
86
|
-
const start = performance.now();
|
|
87
|
-
const r = fn();
|
|
88
|
-
const t = performance.now() - start;
|
|
89
|
-
if (t < elapsed) {
|
|
90
|
-
elapsed = t;
|
|
91
|
-
result = r;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return {elapsed, result};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
72
|
describe('parseMarkdown performance', () => {
|
|
98
73
|
const sizes = [
|
|
99
74
|
{name: 'Small', paragraphs: 10, maxMs: 20},
|
|
@@ -118,7 +93,9 @@ describe('parseMarkdown performance', () => {
|
|
|
118
93
|
for (const size of sizes) {
|
|
119
94
|
it(`full re-parse ${size.name} (${size.paragraphs} paragraphs) under ${size.maxMs}ms`, () => {
|
|
120
95
|
const text = generateAIResponse(size.paragraphs);
|
|
121
|
-
const
|
|
96
|
+
const start = performance.now();
|
|
97
|
+
const result = parseMarkdown(text);
|
|
98
|
+
const elapsed = performance.now() - start;
|
|
122
99
|
console.log(
|
|
123
100
|
` ${size.name} full parse: ${elapsed.toFixed(2)}ms → ${result.length} blocks`,
|
|
124
101
|
);
|
|
@@ -172,14 +149,15 @@ describe('parseMarkdown performance', () => {
|
|
|
172
149
|
const text = generateAIResponse(200);
|
|
173
150
|
const chunkSize = 50;
|
|
174
151
|
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
);
|
|
152
|
+
// Full re-parse timing
|
|
153
|
+
const fullStart = performance.now();
|
|
154
|
+
simulateStreamingFullReparse(text, chunkSize);
|
|
155
|
+
const fullElapsed = performance.now() - fullStart;
|
|
156
|
+
|
|
157
|
+
// Incremental timing
|
|
158
|
+
const incrStart = performance.now();
|
|
159
|
+
simulateStreamingIncremental(text, chunkSize);
|
|
160
|
+
const incrElapsed = performance.now() - incrStart;
|
|
183
161
|
|
|
184
162
|
const speedup = fullElapsed / incrElapsed;
|
|
185
163
|
console.log(`\n === Incremental vs Full Re-parse Speedup ===`);
|
|
@@ -17,27 +17,12 @@ export const docs = {
|
|
|
17
17
|
'NavHeadingMenuItem renders individual selectable items. ' +
|
|
18
18
|
'Pass as the menu prop of SideNavHeading or TopNavHeading.',
|
|
19
19
|
},
|
|
20
|
-
playground: {
|
|
21
|
-
defaults: {
|
|
22
|
-
children: [
|
|
23
|
-
{__element: 'NavHeadingMenuItem', props: {label: 'Dashboard', href: '#'}},
|
|
24
|
-
{__element: 'NavHeadingMenuItem', props: {label: 'Analytics', href: '#'}},
|
|
25
|
-
{__element: 'NavHeadingMenuItem', props: {label: 'Settings', href: '#'}},
|
|
26
|
-
],
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
20
|
props: [
|
|
30
21
|
{name: 'children', type: 'ReactNode', required: true, description: 'Menu items.'},
|
|
31
22
|
{name: 'size', type: "'sm' | 'md' | 'lg'", default: "'md'", description: 'Controls min-width and item padding.'},
|
|
32
23
|
{name: 'minWidth', type: 'number | string', description: 'Minimum width override.'},
|
|
33
24
|
{name: 'xstyle', type: 'StyleXStyles', description: 'StyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value, not an inline style object like style={{}}.'},
|
|
34
25
|
],
|
|
35
|
-
theming: {
|
|
36
|
-
targets: [
|
|
37
|
-
{className: 'astryx-nav-heading-menu', visualProps: ['size']},
|
|
38
|
-
{className: 'astryx-nav-heading-menu-item', visualProps: ['size']},
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
26
|
};
|
|
42
27
|
|
|
43
28
|
/** @type {import('../docs-types').TranslationDoc} */
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
13
13
|
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
|
-
import {
|
|
15
|
+
import {HashtagIcon} from '@heroicons/react/24/outline';
|
|
16
16
|
import {NumberInput} from './NumberInput';
|
|
17
17
|
|
|
18
18
|
// Mock showPopover/hidePopover since jsdom does not implement them. Used by the
|
|
@@ -174,7 +174,7 @@ describe('NumberInput', () => {
|
|
|
174
174
|
label="Count"
|
|
175
175
|
value={null}
|
|
176
176
|
onChange={() => {}}
|
|
177
|
-
startIcon={
|
|
177
|
+
startIcon={HashtagIcon}
|
|
178
178
|
/>,
|
|
179
179
|
);
|
|
180
180
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
@@ -707,7 +707,7 @@ describe('NumberInput', () => {
|
|
|
707
707
|
label="Qty"
|
|
708
708
|
value={0}
|
|
709
709
|
onChange={() => {}}
|
|
710
|
-
startIcon={<
|
|
710
|
+
startIcon={<HashtagIcon />}
|
|
711
711
|
/>,
|
|
712
712
|
);
|
|
713
713
|
|
|
@@ -867,48 +867,3 @@ describe('NumberInput', () => {
|
|
|
867
867
|
});
|
|
868
868
|
});
|
|
869
869
|
});
|
|
870
|
-
|
|
871
|
-
describe('keyboard clearing with hasClear (#3599)', () => {
|
|
872
|
-
it('commits null when the input is emptied and blurred', () => {
|
|
873
|
-
const onChange = vi.fn();
|
|
874
|
-
render(
|
|
875
|
-
<NumberInput label="Qty" hasClear value={42} onChange={onChange} />,
|
|
876
|
-
);
|
|
877
|
-
const input = screen.getByLabelText('Qty');
|
|
878
|
-
fireEvent.change(input, {target: {value: ''}});
|
|
879
|
-
fireEvent.blur(input);
|
|
880
|
-
expect(onChange).toHaveBeenCalledWith(null);
|
|
881
|
-
});
|
|
882
|
-
|
|
883
|
-
it('commits null when the input is emptied and Enter is pressed', () => {
|
|
884
|
-
const onChange = vi.fn();
|
|
885
|
-
render(
|
|
886
|
-
<NumberInput label="Qty" hasClear value={42} onChange={onChange} />,
|
|
887
|
-
);
|
|
888
|
-
const input = screen.getByLabelText('Qty');
|
|
889
|
-
fireEvent.change(input, {target: {value: ''}});
|
|
890
|
-
fireEvent.keyDown(input, {key: 'Enter'});
|
|
891
|
-
expect(onChange).toHaveBeenCalledWith(null);
|
|
892
|
-
});
|
|
893
|
-
|
|
894
|
-
it('does not fire when emptied and blurred with no prior value', () => {
|
|
895
|
-
const onChange = vi.fn();
|
|
896
|
-
render(
|
|
897
|
-
<NumberInput label="Qty" hasClear value={null} onChange={onChange} />,
|
|
898
|
-
);
|
|
899
|
-
const input = screen.getByLabelText('Qty');
|
|
900
|
-
fireEvent.change(input, {target: {value: ''}});
|
|
901
|
-
fireEvent.blur(input);
|
|
902
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
903
|
-
});
|
|
904
|
-
|
|
905
|
-
it('still reverts on blur when hasClear is not set', () => {
|
|
906
|
-
const onChange = vi.fn();
|
|
907
|
-
render(<NumberInput label="Qty" value={42} onChange={onChange} />);
|
|
908
|
-
const input = screen.getByLabelText('Qty');
|
|
909
|
-
fireEvent.change(input, {target: {value: ''}});
|
|
910
|
-
fireEvent.blur(input);
|
|
911
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
912
|
-
expect((input as HTMLInputElement).value).toBe('42');
|
|
913
|
-
});
|
|
914
|
-
});
|
|
@@ -503,21 +503,13 @@ export function NumberInput({
|
|
|
503
503
|
const handleBlur = useCallback(
|
|
504
504
|
(e: FocusEvent<HTMLInputElement>) => {
|
|
505
505
|
if (pendingInput !== null) {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
const parsed = parseNumberInput(pendingInput, {
|
|
514
|
-
min,
|
|
515
|
-
max,
|
|
516
|
-
isIntegerOnly,
|
|
517
|
-
});
|
|
518
|
-
if (parsed !== null && parsed !== value) {
|
|
519
|
-
onChange(parsed);
|
|
520
|
-
}
|
|
506
|
+
const parsed = parseNumberInput(pendingInput, {
|
|
507
|
+
min,
|
|
508
|
+
max,
|
|
509
|
+
isIntegerOnly,
|
|
510
|
+
});
|
|
511
|
+
if (parsed !== null && parsed !== value) {
|
|
512
|
+
onChange(parsed);
|
|
521
513
|
}
|
|
522
514
|
}
|
|
523
515
|
|
|
@@ -525,7 +517,7 @@ export function NumberInput({
|
|
|
525
517
|
setPendingInput(null);
|
|
526
518
|
onBlur?.(e);
|
|
527
519
|
},
|
|
528
|
-
[pendingInput, value, onChange, min, max, isIntegerOnly, onBlur
|
|
520
|
+
[pendingInput, value, onChange, min, max, isIntegerOnly, onBlur],
|
|
529
521
|
);
|
|
530
522
|
|
|
531
523
|
// Handle keyboard events
|
|
@@ -534,21 +526,13 @@ export function NumberInput({
|
|
|
534
526
|
if (e.key === 'Enter') {
|
|
535
527
|
// Validate and commit on Enter
|
|
536
528
|
if (pendingInput !== null) {
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
const parsed = parseNumberInput(pendingInput, {
|
|
545
|
-
min,
|
|
546
|
-
max,
|
|
547
|
-
isIntegerOnly,
|
|
548
|
-
});
|
|
549
|
-
if (parsed !== null && parsed !== value) {
|
|
550
|
-
onChange(parsed);
|
|
551
|
-
}
|
|
529
|
+
const parsed = parseNumberInput(pendingInput, {
|
|
530
|
+
min,
|
|
531
|
+
max,
|
|
532
|
+
isIntegerOnly,
|
|
533
|
+
});
|
|
534
|
+
if (parsed !== null && parsed !== value) {
|
|
535
|
+
onChange(parsed);
|
|
552
536
|
}
|
|
553
537
|
}
|
|
554
538
|
onEnter?.();
|
|
@@ -564,7 +548,6 @@ export function NumberInput({
|
|
|
564
548
|
isIntegerOnly,
|
|
565
549
|
onEnter,
|
|
566
550
|
onKeyDown,
|
|
567
|
-
hasClear,
|
|
568
551
|
],
|
|
569
552
|
);
|
|
570
553
|
|
|
@@ -180,12 +180,6 @@ export const docs = {
|
|
|
180
180
|
description: 'Ref forwarded to the overlay root element.',
|
|
181
181
|
},
|
|
182
182
|
],
|
|
183
|
-
theming: {
|
|
184
|
-
targets: [
|
|
185
|
-
{className: 'astryx-overlay'},
|
|
186
|
-
{className: 'astryx-overlay-scrim', visualProps: ['position']},
|
|
187
|
-
],
|
|
188
|
-
},
|
|
189
183
|
};
|
|
190
184
|
|
|
191
185
|
/** @type {import('../docs-types').TranslationDoc} */
|
|
@@ -345,149 +345,6 @@ describe('Pagination', () => {
|
|
|
345
345
|
const activeDot = screen.getByRole('button', {name: 'Go to page 3'});
|
|
346
346
|
expect(activeDot).toHaveAttribute('aria-current', 'page');
|
|
347
347
|
});
|
|
348
|
-
|
|
349
|
-
// -------------------------------------------------------------------------
|
|
350
|
-
// Keyboard navigation (roving tabindex + arrow keys via useListFocus).
|
|
351
|
-
// Selection follows focus: arrow/Home/End move focus and select that page.
|
|
352
|
-
// -------------------------------------------------------------------------
|
|
353
|
-
|
|
354
|
-
it('uses roving tabindex — active dot has tabIndex 0, others -1', () => {
|
|
355
|
-
render(
|
|
356
|
-
<Pagination
|
|
357
|
-
page={2}
|
|
358
|
-
onChange={() => {}}
|
|
359
|
-
totalPages={4}
|
|
360
|
-
variant="dots"
|
|
361
|
-
/>,
|
|
362
|
-
);
|
|
363
|
-
expect(
|
|
364
|
-
screen.getByRole('button', {name: 'Go to page 2'}),
|
|
365
|
-
).toHaveAttribute('tabindex', '0');
|
|
366
|
-
expect(
|
|
367
|
-
screen.getByRole('button', {name: 'Go to page 1'}),
|
|
368
|
-
).toHaveAttribute('tabindex', '-1');
|
|
369
|
-
expect(
|
|
370
|
-
screen.getByRole('button', {name: 'Go to page 3'}),
|
|
371
|
-
).toHaveAttribute('tabindex', '-1');
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
it('ArrowRight moves focus to the next dot and selects it', async () => {
|
|
375
|
-
const user = userEvent.setup();
|
|
376
|
-
const onChange = vi.fn();
|
|
377
|
-
render(
|
|
378
|
-
<Pagination
|
|
379
|
-
page={2}
|
|
380
|
-
onChange={onChange}
|
|
381
|
-
totalPages={4}
|
|
382
|
-
variant="dots"
|
|
383
|
-
/>,
|
|
384
|
-
);
|
|
385
|
-
screen.getByRole('button', {name: 'Go to page 2'}).focus();
|
|
386
|
-
await user.keyboard('{ArrowRight}');
|
|
387
|
-
expect(onChange).toHaveBeenCalledWith(3);
|
|
388
|
-
expect(screen.getByRole('button', {name: 'Go to page 3'})).toHaveFocus();
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
it('ArrowLeft moves focus to the previous dot and selects it', async () => {
|
|
392
|
-
const user = userEvent.setup();
|
|
393
|
-
const onChange = vi.fn();
|
|
394
|
-
render(
|
|
395
|
-
<Pagination
|
|
396
|
-
page={3}
|
|
397
|
-
onChange={onChange}
|
|
398
|
-
totalPages={4}
|
|
399
|
-
variant="dots"
|
|
400
|
-
/>,
|
|
401
|
-
);
|
|
402
|
-
screen.getByRole('button', {name: 'Go to page 3'}).focus();
|
|
403
|
-
await user.keyboard('{ArrowLeft}');
|
|
404
|
-
expect(onChange).toHaveBeenCalledWith(2);
|
|
405
|
-
expect(screen.getByRole('button', {name: 'Go to page 2'})).toHaveFocus();
|
|
406
|
-
});
|
|
407
|
-
|
|
408
|
-
it('Home selects the first page, End the last', async () => {
|
|
409
|
-
const user = userEvent.setup();
|
|
410
|
-
const onChange = vi.fn();
|
|
411
|
-
const {rerender} = render(
|
|
412
|
-
<Pagination
|
|
413
|
-
page={3}
|
|
414
|
-
onChange={onChange}
|
|
415
|
-
totalPages={5}
|
|
416
|
-
variant="dots"
|
|
417
|
-
/>,
|
|
418
|
-
);
|
|
419
|
-
screen.getByRole('button', {name: 'Go to page 3'}).focus();
|
|
420
|
-
await user.keyboard('{Home}');
|
|
421
|
-
expect(onChange).toHaveBeenCalledWith(1);
|
|
422
|
-
expect(screen.getByRole('button', {name: 'Go to page 1'})).toHaveFocus();
|
|
423
|
-
|
|
424
|
-
onChange.mockClear();
|
|
425
|
-
rerender(
|
|
426
|
-
<Pagination
|
|
427
|
-
page={3}
|
|
428
|
-
onChange={onChange}
|
|
429
|
-
totalPages={5}
|
|
430
|
-
variant="dots"
|
|
431
|
-
/>,
|
|
432
|
-
);
|
|
433
|
-
screen.getByRole('button', {name: 'Go to page 3'}).focus();
|
|
434
|
-
await user.keyboard('{End}');
|
|
435
|
-
expect(onChange).toHaveBeenCalledWith(5);
|
|
436
|
-
expect(screen.getByRole('button', {name: 'Go to page 5'})).toHaveFocus();
|
|
437
|
-
});
|
|
438
|
-
|
|
439
|
-
it('wraps from the last dot to the first with ArrowRight', async () => {
|
|
440
|
-
const user = userEvent.setup();
|
|
441
|
-
const onChange = vi.fn();
|
|
442
|
-
render(
|
|
443
|
-
<Pagination
|
|
444
|
-
page={4}
|
|
445
|
-
onChange={onChange}
|
|
446
|
-
totalPages={4}
|
|
447
|
-
variant="dots"
|
|
448
|
-
/>,
|
|
449
|
-
);
|
|
450
|
-
screen.getByRole('button', {name: 'Go to page 4'}).focus();
|
|
451
|
-
await user.keyboard('{ArrowRight}');
|
|
452
|
-
expect(onChange).toHaveBeenCalledWith(1);
|
|
453
|
-
expect(screen.getByRole('button', {name: 'Go to page 1'})).toHaveFocus();
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
it('wraps from the first dot to the last with ArrowLeft', async () => {
|
|
457
|
-
const user = userEvent.setup();
|
|
458
|
-
const onChange = vi.fn();
|
|
459
|
-
render(
|
|
460
|
-
<Pagination
|
|
461
|
-
page={1}
|
|
462
|
-
onChange={onChange}
|
|
463
|
-
totalPages={4}
|
|
464
|
-
variant="dots"
|
|
465
|
-
/>,
|
|
466
|
-
);
|
|
467
|
-
screen.getByRole('button', {name: 'Go to page 1'}).focus();
|
|
468
|
-
await user.keyboard('{ArrowLeft}');
|
|
469
|
-
expect(onChange).toHaveBeenCalledWith(4);
|
|
470
|
-
expect(screen.getByRole('button', {name: 'Go to page 4'})).toHaveFocus();
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
it('does not navigate with arrow keys when disabled', async () => {
|
|
474
|
-
const user = userEvent.setup();
|
|
475
|
-
const onChange = vi.fn();
|
|
476
|
-
render(
|
|
477
|
-
<Pagination
|
|
478
|
-
page={2}
|
|
479
|
-
onChange={onChange}
|
|
480
|
-
totalPages={4}
|
|
481
|
-
variant="dots"
|
|
482
|
-
isDisabled
|
|
483
|
-
/>,
|
|
484
|
-
);
|
|
485
|
-
const dot = screen.getByRole('button', {name: 'Go to page 2'});
|
|
486
|
-
expect(dot).toBeDisabled();
|
|
487
|
-
dot.focus();
|
|
488
|
-
await user.keyboard('{ArrowRight}');
|
|
489
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
490
|
-
});
|
|
491
348
|
});
|
|
492
349
|
|
|
493
350
|
// ---------------------------------------------------------------------------
|
|
@@ -903,23 +760,4 @@ describe('Pagination', () => {
|
|
|
903
760
|
).not.toBeInTheDocument();
|
|
904
761
|
});
|
|
905
762
|
});
|
|
906
|
-
|
|
907
|
-
describe('rest forwarding', () => {
|
|
908
|
-
it('forwards data-testid, id, and aria-* to the root nav', () => {
|
|
909
|
-
const {container} = render(
|
|
910
|
-
<Pagination
|
|
911
|
-
page={1}
|
|
912
|
-
onChange={() => {}}
|
|
913
|
-
totalPages={3}
|
|
914
|
-
data-testid="pager"
|
|
915
|
-
id="pager-1"
|
|
916
|
-
aria-describedby="hint"
|
|
917
|
-
/>,
|
|
918
|
-
);
|
|
919
|
-
const nav = container.querySelector('nav')!;
|
|
920
|
-
expect(nav).toHaveAttribute('data-testid', 'pager');
|
|
921
|
-
expect(nav).toHaveAttribute('id', 'pager-1');
|
|
922
|
-
expect(nav).toHaveAttribute('aria-describedby', 'hint');
|
|
923
|
-
});
|
|
924
|
-
});
|
|
925
763
|
});
|
|
@@ -35,7 +35,6 @@ import {Icon} from '../Icon';
|
|
|
35
35
|
import {Selector} from '../Selector';
|
|
36
36
|
import {Text} from '../Text';
|
|
37
37
|
import {useAnnounce} from '../hooks/useAnnounce';
|
|
38
|
-
import {useListFocus} from '../hooks/useListFocus';
|
|
39
38
|
import {mergeProps} from '../utils';
|
|
40
39
|
import type {BaseProps} from '../BaseProps';
|
|
41
40
|
import {themeProps} from '../utils/themeProps';
|
|
@@ -350,7 +349,6 @@ export function Pagination({
|
|
|
350
349
|
className,
|
|
351
350
|
style,
|
|
352
351
|
ref,
|
|
353
|
-
...rest
|
|
354
352
|
}: PaginationProps) {
|
|
355
353
|
const [, startTransition] = useTransition();
|
|
356
354
|
|
|
@@ -372,21 +370,6 @@ export function Pagination({
|
|
|
372
370
|
// in-flight target instead of stalling on the last committed page.
|
|
373
371
|
const [optimisticPage, setOptimisticPage] = useOptimistic(page);
|
|
374
372
|
|
|
375
|
-
// Roving-tabindex + arrow/Home/End keyboard nav for the dots variant, owned
|
|
376
|
-
// by the shared useListFocus primitive (mirrors SegmentedControl). It stamps a
|
|
377
|
-
// single tab stop across the dots and moves focus horizontally; selection
|
|
378
|
-
// follows focus via handleDotsFocus so arrow keys move the active page.
|
|
379
|
-
const {
|
|
380
|
-
listRef: dotsListRef,
|
|
381
|
-
handleKeyDown: handleDotsKeyDown,
|
|
382
|
-
handleFocus: handleDotsRovingFocus,
|
|
383
|
-
} = useListFocus<HTMLDivElement>({
|
|
384
|
-
itemSelector: 'button',
|
|
385
|
-
hasRovingTabIndex: true,
|
|
386
|
-
wrap: true,
|
|
387
|
-
orientation: 'horizontal',
|
|
388
|
-
});
|
|
389
|
-
|
|
390
373
|
// Compute pagination state
|
|
391
374
|
const computedTotalPages =
|
|
392
375
|
totalPagesProp ??
|
|
@@ -427,28 +410,6 @@ export function Pagination({
|
|
|
427
410
|
});
|
|
428
411
|
};
|
|
429
412
|
|
|
430
|
-
// Selection-follows-focus for the dots (APG radiogroup pattern): useListFocus
|
|
431
|
-
// only *moves* focus, so when focus lands on a dot -- via arrow/Home/End, or a
|
|
432
|
-
// click that focuses it -- we select that dot's page. handleDotsRovingFocus
|
|
433
|
-
// keeps the roving tab stop in sync. The current page is skipped so tabbing
|
|
434
|
-
// into the group is a no-op.
|
|
435
|
-
const handleDotsFocus = (e: React.FocusEvent) => {
|
|
436
|
-
handleDotsRovingFocus(e);
|
|
437
|
-
if (isDisabled) {
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
|
-
const focused = (e.target as HTMLElement | null)?.closest<HTMLElement>(
|
|
441
|
-
'button[data-page]',
|
|
442
|
-
);
|
|
443
|
-
if (!focused) {
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
const nextPage = Number(focused.dataset.page);
|
|
447
|
-
if (Number.isFinite(nextPage) && nextPage !== optimisticPage) {
|
|
448
|
-
handlePageChange(nextPage);
|
|
449
|
-
}
|
|
450
|
-
};
|
|
451
|
-
|
|
452
413
|
const handlePrevious = () => {
|
|
453
414
|
if (hasPrevious) {
|
|
454
415
|
handlePageChange(optimisticPage - 1);
|
|
@@ -557,47 +518,33 @@ export function Pagination({
|
|
|
557
518
|
if (computedTotalPages == null) {
|
|
558
519
|
return null;
|
|
559
520
|
}
|
|
560
|
-
|
|
561
521
|
return (
|
|
562
522
|
<div
|
|
563
|
-
ref={dotsListRef}
|
|
564
523
|
{...stylex.props(styles.dotsContainer)}
|
|
565
524
|
role="group"
|
|
566
|
-
aria-label="Page indicators"
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
size,
|
|
590
|
-
}),
|
|
591
|
-
stylex.props(
|
|
592
|
-
styles.dot,
|
|
593
|
-
isSm && styles.dotSm,
|
|
594
|
-
isActive && styles.dotActive,
|
|
595
|
-
isDisabled && styles.dotDisabled,
|
|
596
|
-
),
|
|
597
|
-
)}
|
|
598
|
-
/>
|
|
599
|
-
);
|
|
600
|
-
})}
|
|
525
|
+
aria-label="Page indicators">
|
|
526
|
+
{Array.from({length: computedTotalPages}, (_, i) => (
|
|
527
|
+
<button
|
|
528
|
+
key={i + 1}
|
|
529
|
+
type="button"
|
|
530
|
+
aria-label={`Go to page ${i + 1}`}
|
|
531
|
+
aria-current={i + 1 === optimisticPage ? 'page' : undefined}
|
|
532
|
+
onClick={() => handlePageChange(i + 1)}
|
|
533
|
+
disabled={isDisabled}
|
|
534
|
+
{...mergeProps(
|
|
535
|
+
themeProps('pagination-dot', {
|
|
536
|
+
active: i + 1 === optimisticPage ? 'active' : null,
|
|
537
|
+
size,
|
|
538
|
+
}),
|
|
539
|
+
stylex.props(
|
|
540
|
+
styles.dot,
|
|
541
|
+
isSm && styles.dotSm,
|
|
542
|
+
i + 1 === optimisticPage && styles.dotActive,
|
|
543
|
+
isDisabled && styles.dotDisabled,
|
|
544
|
+
),
|
|
545
|
+
)}
|
|
546
|
+
/>
|
|
547
|
+
))}
|
|
601
548
|
</div>
|
|
602
549
|
);
|
|
603
550
|
}
|
|
@@ -611,15 +558,14 @@ export function Pagination({
|
|
|
611
558
|
return (
|
|
612
559
|
<nav
|
|
613
560
|
ref={ref}
|
|
561
|
+
aria-label={label}
|
|
562
|
+
data-testid={testId}
|
|
614
563
|
{...mergeProps(
|
|
615
564
|
themeProps('pagination', {variant, size}),
|
|
616
565
|
stylex.props(styles.root, xstyle),
|
|
617
566
|
className,
|
|
618
567
|
style,
|
|
619
|
-
)}
|
|
620
|
-
{...rest}
|
|
621
|
-
aria-label={label}
|
|
622
|
-
data-testid={testId}>
|
|
568
|
+
)}>
|
|
623
569
|
{pageSizeOptions != null && pageSizeOptions.length > 0 && (
|
|
624
570
|
<div {...stylex.props(styles.pageSizeSelector)}>
|
|
625
571
|
<div {...stylex.props(styles.pageSizeSelectorControl)}>
|