@astryxdesign/core 0.1.4-canary.ff77e1c → 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.d.ts +1 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +23 -26
- 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.d.ts.map +1 -1
- package/dist/Toast/useToast.js +4 -44
- 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 +59 -59
- 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/theme/useTheme.d.ts +2 -3
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +6 -73
- 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/AvatarGroup/AvatarGroup.doc.mjs +0 -1
- 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.doc.mjs +1 -1
- 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 -5
- 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/EmptyState/EmptyState.doc.mjs +1 -1
- 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.doc.mjs +0 -1
- 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/MobileNav/MobileNav.test.tsx +0 -56
- package/src/MobileNav/MobileNav.tsx +8 -13
- 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/Outline/Outline.doc.mjs +0 -2
- 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.doc.mjs +0 -2
- 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.doc.mjs +0 -5
- 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/Toast/useToast.tsx +0 -41
- 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 +2 -126
- package/src/theme/useTheme.ts +6 -87
- 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/Toast/useToast.test.tsx +0 -258
- 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/theme/themingTargets.test.ts +0 -353
- 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
|
@@ -105,7 +105,6 @@ export function ChatDictationButton({
|
|
|
105
105
|
xstyle,
|
|
106
106
|
className,
|
|
107
107
|
style,
|
|
108
|
-
...rest
|
|
109
108
|
}: ChatDictationButtonProps) {
|
|
110
109
|
if (isHiddenWhenUnsupported && !dictation.isSupported) {
|
|
111
110
|
return null;
|
|
@@ -131,8 +130,7 @@ export function ChatDictationButton({
|
|
|
131
130
|
return (
|
|
132
131
|
<span
|
|
133
132
|
ref={ref}
|
|
134
|
-
{...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}
|
|
135
|
-
{...rest}>
|
|
133
|
+
{...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}>
|
|
136
134
|
{isListening && (
|
|
137
135
|
<span
|
|
138
136
|
aria-hidden
|
|
@@ -163,7 +161,9 @@ export function ChatDictationButton({
|
|
|
163
161
|
aria-label={accessibleLabel}
|
|
164
162
|
variant="ghost"
|
|
165
163
|
size={size}
|
|
166
|
-
icon={
|
|
164
|
+
icon={
|
|
165
|
+
isListening ? undefined : <Icon icon="microphone" size={size} />
|
|
166
|
+
}
|
|
167
167
|
isIconOnly
|
|
168
168
|
onClick={dictation.toggle}
|
|
169
169
|
/>
|
|
@@ -118,13 +118,11 @@ export function ChatLayoutScrollButton({
|
|
|
118
118
|
xstyle,
|
|
119
119
|
className,
|
|
120
120
|
style,
|
|
121
|
-
...rest
|
|
122
121
|
}: ChatLayoutScrollButtonProps) {
|
|
123
122
|
return (
|
|
124
123
|
<div
|
|
125
124
|
ref={ref}
|
|
126
|
-
{...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}
|
|
127
|
-
{...rest}>
|
|
125
|
+
{...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}>
|
|
128
126
|
<div
|
|
129
127
|
{...stylex.props(
|
|
130
128
|
styles.container,
|
|
@@ -28,7 +28,11 @@ import type {BaseProps} from '../BaseProps';
|
|
|
28
28
|
import {themeProps} from '../utils/themeProps';
|
|
29
29
|
|
|
30
30
|
export type ChatMessageStatus =
|
|
31
|
-
|
|
31
|
+
| 'sending'
|
|
32
|
+
| 'sent'
|
|
33
|
+
| 'delivered'
|
|
34
|
+
| 'read'
|
|
35
|
+
| 'error';
|
|
32
36
|
|
|
33
37
|
const STATUS_CONFIG: Record<
|
|
34
38
|
ChatMessageStatus,
|
|
@@ -114,7 +118,6 @@ export function ChatMessageMetadata({
|
|
|
114
118
|
xstyle,
|
|
115
119
|
className,
|
|
116
120
|
style,
|
|
117
|
-
...rest
|
|
118
121
|
}: ChatMessageMetadataProps) {
|
|
119
122
|
const msgContext = useChatMessageContext();
|
|
120
123
|
const sender = msgContext?.sender ?? 'assistant';
|
|
@@ -139,8 +142,7 @@ export function ChatMessageMetadata({
|
|
|
139
142
|
),
|
|
140
143
|
className,
|
|
141
144
|
style,
|
|
142
|
-
)}
|
|
143
|
-
{...rest}>
|
|
145
|
+
)}>
|
|
144
146
|
{timestamp != null && <span>{timestamp}</span>}
|
|
145
147
|
{timestamp != null && (footer != null || statusConfig != null) && (
|
|
146
148
|
<span>·</span>
|
|
@@ -11,20 +11,26 @@ describe('ChatSystemMessage', () => {
|
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
it('has role="status"', () => {
|
|
14
|
-
render(
|
|
14
|
+
render(
|
|
15
|
+
<ChatSystemMessage data-testid="sys">Notice</ChatSystemMessage>,
|
|
16
|
+
);
|
|
15
17
|
const el = screen.getByTestId('sys');
|
|
16
18
|
expect(el.getAttribute('role')).toBe('status');
|
|
17
19
|
});
|
|
18
20
|
|
|
19
21
|
it('renders default variant without divider lines', () => {
|
|
20
|
-
const {container} = render(
|
|
22
|
+
const {container} = render(
|
|
23
|
+
<ChatSystemMessage>Hello</ChatSystemMessage>,
|
|
24
|
+
);
|
|
21
25
|
// Divider lines have aria-hidden, so check there are none
|
|
22
26
|
const hiddenElements = container.querySelectorAll('[aria-hidden]');
|
|
23
27
|
expect(hiddenElements.length).toBe(0);
|
|
24
28
|
});
|
|
25
29
|
|
|
26
30
|
it('renders divider variant with Divider', () => {
|
|
27
|
-
render(
|
|
31
|
+
render(
|
|
32
|
+
<ChatSystemMessage variant="divider">Today</ChatSystemMessage>,
|
|
33
|
+
);
|
|
28
34
|
expect(screen.getByText('Today')).toBeTruthy();
|
|
29
35
|
});
|
|
30
36
|
|
|
@@ -48,30 +54,9 @@ describe('ChatSystemMessage', () => {
|
|
|
48
54
|
});
|
|
49
55
|
|
|
50
56
|
it('applies data-testid', () => {
|
|
51
|
-
render(<ChatSystemMessage data-testid="my-sys">Hello</ChatSystemMessage>);
|
|
52
|
-
expect(screen.getByTestId('my-sys')).toBeTruthy();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('forwards rest props (data-*, id) while keeping its own role', () => {
|
|
56
|
-
render(
|
|
57
|
-
<ChatSystemMessage data-testid="sys" data-custom="x" id="sys-1">
|
|
58
|
-
Hello
|
|
59
|
-
</ChatSystemMessage>,
|
|
60
|
-
);
|
|
61
|
-
const el = screen.getByTestId('sys');
|
|
62
|
-
expect(el).toHaveAttribute('data-custom', 'x');
|
|
63
|
-
expect(el).toHaveAttribute('id', 'sys-1');
|
|
64
|
-
expect(el.getAttribute('role')).toBe('status');
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('forwards rest props in the divider variant', () => {
|
|
68
57
|
render(
|
|
69
|
-
<ChatSystemMessage
|
|
70
|
-
Today
|
|
71
|
-
</ChatSystemMessage>,
|
|
58
|
+
<ChatSystemMessage data-testid="my-sys">Hello</ChatSystemMessage>,
|
|
72
59
|
);
|
|
73
|
-
|
|
74
|
-
expect(el).toHaveAttribute('data-custom', 'x');
|
|
75
|
-
expect(el.getAttribute('role')).toBe('status');
|
|
60
|
+
expect(screen.getByTestId('my-sys')).toBeTruthy();
|
|
76
61
|
});
|
|
77
62
|
});
|
|
@@ -120,21 +120,21 @@ export function ChatSystemMessage({
|
|
|
120
120
|
xstyle,
|
|
121
121
|
className,
|
|
122
122
|
style: styleProp,
|
|
123
|
+
'data-testid': testId,
|
|
123
124
|
ref,
|
|
124
|
-
...rest
|
|
125
125
|
}: ChatSystemMessageProps) {
|
|
126
126
|
if (variant === 'divider') {
|
|
127
127
|
return (
|
|
128
128
|
<div
|
|
129
129
|
ref={ref}
|
|
130
|
+
role="status"
|
|
131
|
+
data-testid={testId}
|
|
130
132
|
{...mergeProps(
|
|
131
133
|
themeProps('chat-system-message', {variant}),
|
|
132
134
|
stylex.props(styles.dividerWrap, xstyle),
|
|
133
135
|
className,
|
|
134
136
|
styleProp,
|
|
135
|
-
)}
|
|
136
|
-
{...rest}
|
|
137
|
-
role="status">
|
|
137
|
+
)}>
|
|
138
138
|
<Divider label={children} />
|
|
139
139
|
</div>
|
|
140
140
|
);
|
|
@@ -143,14 +143,14 @@ export function ChatSystemMessage({
|
|
|
143
143
|
return (
|
|
144
144
|
<div
|
|
145
145
|
ref={ref}
|
|
146
|
+
role="status"
|
|
147
|
+
data-testid={testId}
|
|
146
148
|
{...mergeProps(
|
|
147
149
|
themeProps('chat-system-message', {variant}),
|
|
148
150
|
stylex.props(styles.root, xstyle),
|
|
149
151
|
className,
|
|
150
152
|
styleProp,
|
|
151
|
-
)}
|
|
152
|
-
{...rest}
|
|
153
|
-
role="status">
|
|
153
|
+
)}>
|
|
154
154
|
<span {...stylex.props(styles.content)}>
|
|
155
155
|
{icon != null && <span {...stylex.props(styles.icon)}>{icon}</span>}
|
|
156
156
|
{children}
|
|
@@ -6,12 +6,18 @@ import {ChatTokenizedText} from './ChatTokenizedText';
|
|
|
6
6
|
|
|
7
7
|
describe('ChatTokenizedText', () => {
|
|
8
8
|
it('renders plain text when no tokens provided', () => {
|
|
9
|
-
render(
|
|
9
|
+
render(
|
|
10
|
+
<ChatTokenizedText>Hello world</ChatTokenizedText>,
|
|
11
|
+
);
|
|
10
12
|
expect(screen.getByText('Hello world')).toBeInTheDocument();
|
|
11
13
|
});
|
|
12
14
|
|
|
13
15
|
it('renders plain text when tokens array is empty', () => {
|
|
14
|
-
render(
|
|
16
|
+
render(
|
|
17
|
+
<ChatTokenizedText tokens={[]}>
|
|
18
|
+
Hello world
|
|
19
|
+
</ChatTokenizedText>,
|
|
20
|
+
);
|
|
15
21
|
expect(screen.getByText('Hello world')).toBeInTheDocument();
|
|
16
22
|
});
|
|
17
23
|
|
|
@@ -42,7 +48,8 @@ describe('ChatTokenizedText', () => {
|
|
|
42
48
|
|
|
43
49
|
it('handles repeated occurrences of the same token', () => {
|
|
44
50
|
render(
|
|
45
|
-
<ChatTokenizedText
|
|
51
|
+
<ChatTokenizedText
|
|
52
|
+
tokens={[{value: '@cindy', label: '@Cindy Zhang'}]}>
|
|
46
53
|
@cindy and @cindy again
|
|
47
54
|
</ChatTokenizedText>,
|
|
48
55
|
);
|
|
@@ -51,7 +58,8 @@ describe('ChatTokenizedText', () => {
|
|
|
51
58
|
|
|
52
59
|
it('renders text with no matching tokens as plain text', () => {
|
|
53
60
|
render(
|
|
54
|
-
<ChatTokenizedText
|
|
61
|
+
<ChatTokenizedText
|
|
62
|
+
tokens={[{value: '@cindy', label: '@Cindy Zhang'}]}>
|
|
55
63
|
Hello world
|
|
56
64
|
</ChatTokenizedText>,
|
|
57
65
|
);
|
|
@@ -60,7 +68,8 @@ describe('ChatTokenizedText', () => {
|
|
|
60
68
|
|
|
61
69
|
it('handles tokens with special regex characters in pattern', () => {
|
|
62
70
|
render(
|
|
63
|
-
<ChatTokenizedText
|
|
71
|
+
<ChatTokenizedText
|
|
72
|
+
tokens={[{value: '/search', label: '/search'}]}>
|
|
64
73
|
Run /search now
|
|
65
74
|
</ChatTokenizedText>,
|
|
66
75
|
);
|
|
@@ -70,7 +79,8 @@ describe('ChatTokenizedText', () => {
|
|
|
70
79
|
|
|
71
80
|
it('preserves surrounding text', () => {
|
|
72
81
|
const {container} = render(
|
|
73
|
-
<ChatTokenizedText
|
|
82
|
+
<ChatTokenizedText
|
|
83
|
+
tokens={[{value: '@cindy', label: '@Cindy Zhang'}]}>
|
|
74
84
|
Before @cindy after
|
|
75
85
|
</ChatTokenizedText>,
|
|
76
86
|
);
|
|
@@ -78,27 +88,4 @@ describe('ChatTokenizedText', () => {
|
|
|
78
88
|
expect(container.textContent).toContain('after');
|
|
79
89
|
expect(container.textContent).toContain('@Cindy Zhang');
|
|
80
90
|
});
|
|
81
|
-
|
|
82
|
-
it('forwards rest props (data-*, id) to the root element', () => {
|
|
83
|
-
render(
|
|
84
|
-
<ChatTokenizedText data-testid="tokenized" data-custom="x" id="tok-1">
|
|
85
|
-
Plain text
|
|
86
|
-
</ChatTokenizedText>,
|
|
87
|
-
);
|
|
88
|
-
const root = screen.getByTestId('tokenized');
|
|
89
|
-
expect(root).toHaveAttribute('data-custom', 'x');
|
|
90
|
-
expect(root).toHaveAttribute('id', 'tok-1');
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('forwards rest props when rendering tokens', () => {
|
|
94
|
-
render(
|
|
95
|
-
<ChatTokenizedText
|
|
96
|
-
tokens={[{value: '@cindy', label: '@Cindy Zhang'}]}
|
|
97
|
-
data-testid="tokenized"
|
|
98
|
-
data-custom="x">
|
|
99
|
-
Hi @cindy
|
|
100
|
-
</ChatTokenizedText>,
|
|
101
|
-
);
|
|
102
|
-
expect(screen.getByTestId('tokenized')).toHaveAttribute('data-custom', 'x');
|
|
103
|
-
});
|
|
104
91
|
});
|
|
@@ -91,10 +91,6 @@ export function ChatTokenizedText({
|
|
|
91
91
|
ref,
|
|
92
92
|
children,
|
|
93
93
|
tokens,
|
|
94
|
-
xstyle,
|
|
95
|
-
className,
|
|
96
|
-
style,
|
|
97
|
-
...rest
|
|
98
94
|
}: ChatTokenizedTextProps) {
|
|
99
95
|
if (!children || !tokens || tokens.length === 0) {
|
|
100
96
|
return (
|
|
@@ -102,11 +98,8 @@ export function ChatTokenizedText({
|
|
|
102
98
|
ref={ref}
|
|
103
99
|
{...mergeProps(
|
|
104
100
|
themeProps('chat-tokenized-text'),
|
|
105
|
-
stylex.props(styles.root
|
|
106
|
-
|
|
107
|
-
style,
|
|
108
|
-
)}
|
|
109
|
-
{...rest}>
|
|
101
|
+
stylex.props(styles.root),
|
|
102
|
+
)}>
|
|
110
103
|
{children ?? ''}
|
|
111
104
|
</span>
|
|
112
105
|
);
|
|
@@ -118,11 +111,8 @@ export function ChatTokenizedText({
|
|
|
118
111
|
ref={ref}
|
|
119
112
|
{...mergeProps(
|
|
120
113
|
themeProps('chat-tokenized-text'),
|
|
121
|
-
stylex.props(styles.root
|
|
122
|
-
|
|
123
|
-
style,
|
|
124
|
-
)}
|
|
125
|
-
{...rest}>
|
|
114
|
+
stylex.props(styles.root),
|
|
115
|
+
)}>
|
|
126
116
|
{parts}
|
|
127
117
|
</span>
|
|
128
118
|
);
|
|
@@ -134,7 +124,10 @@ ChatTokenizedText.displayName = 'ChatTokenizedText';
|
|
|
134
124
|
// Render
|
|
135
125
|
// =============================================================================
|
|
136
126
|
|
|
137
|
-
function renderTokens(
|
|
127
|
+
function renderTokens(
|
|
128
|
+
text: string,
|
|
129
|
+
tokens: ChatComposerToken[],
|
|
130
|
+
): ReactNode[] {
|
|
138
131
|
const pattern = tokens.map(t => escapeRegExp(t.value)).join('|');
|
|
139
132
|
const regex = new RegExp(`(${pattern})`, 'g');
|
|
140
133
|
|
|
@@ -97,59 +97,4 @@ describe('ChatToolCalls', () => {
|
|
|
97
97
|
);
|
|
98
98
|
expect(screen.getByText('git status')).toBeInTheDocument();
|
|
99
99
|
});
|
|
100
|
-
|
|
101
|
-
it('exposes no aria-expanded on a call row without resultDetail', () => {
|
|
102
|
-
const {container} = render(
|
|
103
|
-
<ChatToolCalls calls={[{name: 'bash', status: 'complete'}]} />,
|
|
104
|
-
);
|
|
105
|
-
expect(container.querySelector('[aria-expanded]')).toBeNull();
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('wires disclosure semantics on an expandable call row', () => {
|
|
109
|
-
render(
|
|
110
|
-
<ChatToolCalls
|
|
111
|
-
calls={[
|
|
112
|
-
{
|
|
113
|
-
name: 'readFile',
|
|
114
|
-
status: 'complete',
|
|
115
|
-
resultDetail: <div>file contents here</div>,
|
|
116
|
-
},
|
|
117
|
-
]}
|
|
118
|
-
/>,
|
|
119
|
-
);
|
|
120
|
-
const row = screen.getByRole('button');
|
|
121
|
-
expect(row).toHaveAttribute('aria-expanded', 'false');
|
|
122
|
-
// Detail panel is conditionally mounted, so no aria-controls while closed.
|
|
123
|
-
expect(row).not.toHaveAttribute('aria-controls');
|
|
124
|
-
expect(screen.queryByText('file contents here')).not.toBeInTheDocument();
|
|
125
|
-
|
|
126
|
-
fireEvent.click(row);
|
|
127
|
-
|
|
128
|
-
expect(row).toHaveAttribute('aria-expanded', 'true');
|
|
129
|
-
const detailId = row.getAttribute('aria-controls');
|
|
130
|
-
expect(detailId).toBeTruthy();
|
|
131
|
-
const panel = document.getElementById(detailId as string);
|
|
132
|
-
expect(panel).not.toBeNull();
|
|
133
|
-
expect(panel).toHaveTextContent('file contents here');
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('points the group header aria-controls at the content region', () => {
|
|
137
|
-
render(
|
|
138
|
-
<ChatToolCalls
|
|
139
|
-
defaultIsExpanded={true}
|
|
140
|
-
calls={[
|
|
141
|
-
{name: 'searchCode', status: 'complete'},
|
|
142
|
-
{name: 'readFile', status: 'complete'},
|
|
143
|
-
]}
|
|
144
|
-
/>,
|
|
145
|
-
);
|
|
146
|
-
const header = screen.getByRole('button');
|
|
147
|
-
expect(header).toHaveAttribute('aria-expanded', 'true');
|
|
148
|
-
const regionId = header.getAttribute('aria-controls');
|
|
149
|
-
expect(regionId).toBeTruthy();
|
|
150
|
-
const region = document.getElementById(regionId as string);
|
|
151
|
-
expect(region).not.toBeNull();
|
|
152
|
-
expect(region).toHaveTextContent('searchCode');
|
|
153
|
-
expect(region).toHaveTextContent('readFile');
|
|
154
|
-
});
|
|
155
100
|
});
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* for builders to wire up.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import React, {useState, useCallback,
|
|
21
|
+
import React, {useState, useCallback, type ReactNode} from 'react';
|
|
22
22
|
import type {BaseProps} from '../BaseProps';
|
|
23
23
|
import * as stylex from '@stylexjs/stylex';
|
|
24
24
|
import {
|
|
@@ -41,7 +41,11 @@ import {themeProps} from '../utils/themeProps';
|
|
|
41
41
|
// Types
|
|
42
42
|
// =============================================================================
|
|
43
43
|
|
|
44
|
-
export type ChatToolCallStatus =
|
|
44
|
+
export type ChatToolCallStatus =
|
|
45
|
+
| 'pending'
|
|
46
|
+
| 'running'
|
|
47
|
+
| 'complete'
|
|
48
|
+
| 'error';
|
|
45
49
|
|
|
46
50
|
export interface ChatToolCallItem {
|
|
47
51
|
/** Tool/function name. */
|
|
@@ -352,7 +356,6 @@ function CallRow({call}: {call: ChatToolCallItem}) {
|
|
|
352
356
|
const status = call.status ?? 'complete';
|
|
353
357
|
const hasDetail = call.resultDetail != null;
|
|
354
358
|
const [isDetailOpen, setIsDetailOpen] = useState(false);
|
|
355
|
-
const detailId = useId();
|
|
356
359
|
|
|
357
360
|
const toggleDetail = hasDetail
|
|
358
361
|
? () => setIsDetailOpen(prev => !prev)
|
|
@@ -362,8 +365,6 @@ function CallRow({call}: {call: ChatToolCallItem}) {
|
|
|
362
365
|
<div
|
|
363
366
|
role={hasDetail ? 'button' : undefined}
|
|
364
367
|
tabIndex={hasDetail ? 0 : undefined}
|
|
365
|
-
aria-expanded={hasDetail ? isDetailOpen : undefined}
|
|
366
|
-
aria-controls={hasDetail && isDetailOpen ? detailId : undefined}
|
|
367
368
|
onClick={toggleDetail}
|
|
368
369
|
onKeyDown={
|
|
369
370
|
hasDetail
|
|
@@ -398,7 +399,11 @@ function CallRow({call}: {call: ChatToolCallItem}) {
|
|
|
398
399
|
</span>
|
|
399
400
|
<span {...stylex.props(styles.callName)}>{call.name}</span>
|
|
400
401
|
{call.node != null && (
|
|
401
|
-
<Badge
|
|
402
|
+
<Badge
|
|
403
|
+
label={call.node}
|
|
404
|
+
variant="neutral"
|
|
405
|
+
xstyle={styles.nodePill}
|
|
406
|
+
/>
|
|
402
407
|
)}
|
|
403
408
|
{call.target != null && (
|
|
404
409
|
<span {...stylex.props(styles.callLabel)}>{call.target}</span>
|
|
@@ -443,7 +448,7 @@ function CallRow({call}: {call: ChatToolCallItem}) {
|
|
|
443
448
|
<div>
|
|
444
449
|
{row}
|
|
445
450
|
{isDetailOpen && (
|
|
446
|
-
<div
|
|
451
|
+
<div {...stylex.props(styles.callDetailContent)}>
|
|
447
452
|
{call.resultDetail}
|
|
448
453
|
</div>
|
|
449
454
|
)}
|
|
@@ -492,7 +497,6 @@ export function ChatToolCalls(props: ChatToolCallsProps) {
|
|
|
492
497
|
|
|
493
498
|
const autoDefault = defaultIsExpanded ?? false;
|
|
494
499
|
const [internalExpanded, setInternalExpanded] = useState(autoDefault);
|
|
495
|
-
const contentId = useId();
|
|
496
500
|
const isControlled = controlledExpanded !== undefined;
|
|
497
501
|
const isExpanded = isControlled ? controlledExpanded : internalExpanded;
|
|
498
502
|
|
|
@@ -544,7 +548,6 @@ export function ChatToolCalls(props: ChatToolCallsProps) {
|
|
|
544
548
|
role="button"
|
|
545
549
|
tabIndex={0}
|
|
546
550
|
aria-expanded={isExpanded}
|
|
547
|
-
aria-controls={contentId}
|
|
548
551
|
onClick={toggle}
|
|
549
552
|
onKeyDown={e => {
|
|
550
553
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
@@ -610,7 +613,6 @@ export function ChatToolCalls(props: ChatToolCallsProps) {
|
|
|
610
613
|
|
|
611
614
|
{/* Expanded: all calls with full metadata */}
|
|
612
615
|
<div
|
|
613
|
-
id={contentId}
|
|
614
616
|
{...stylex.props(
|
|
615
617
|
styles.groupContent,
|
|
616
618
|
isExpanded && styles.groupContentExpanded,
|
package/src/Chat/index.ts
CHANGED
|
@@ -21,7 +21,10 @@ export type {ChatSendButtonProps} from './ChatSendButton';
|
|
|
21
21
|
export {ChatComposerDrawer} from './ChatComposerDrawer';
|
|
22
22
|
export type {ChatComposerDrawerProps} from './ChatComposerDrawer';
|
|
23
23
|
|
|
24
|
-
export {
|
|
24
|
+
export {
|
|
25
|
+
ChatComposerInput,
|
|
26
|
+
ChatComposerTokenElement,
|
|
27
|
+
} from './ChatComposerInput';
|
|
25
28
|
export type {
|
|
26
29
|
ChatComposerInputProps,
|
|
27
30
|
ChatComposerInputHandle,
|
|
@@ -40,7 +40,10 @@ import {
|
|
|
40
40
|
import {mergeProps, groupItems} from '../utils';
|
|
41
41
|
import type {SearchableItem} from '../Typeahead/types';
|
|
42
42
|
import {themeProps} from '../utils/themeProps';
|
|
43
|
-
import type {
|
|
43
|
+
import type {
|
|
44
|
+
ChatComposerTrigger,
|
|
45
|
+
ChatComposerToken,
|
|
46
|
+
} from './ChatComposerInput';
|
|
44
47
|
|
|
45
48
|
// =============================================================================
|
|
46
49
|
// Types
|
|
@@ -125,7 +125,7 @@ export const docs = {
|
|
|
125
125
|
theming: {
|
|
126
126
|
targets: [
|
|
127
127
|
{className: 'astryx-checkbox-input', visualProps: ['size']},
|
|
128
|
-
{className: 'astryx-checkbox'
|
|
128
|
+
{className: 'astryx-checkbox'},
|
|
129
129
|
],
|
|
130
130
|
},
|
|
131
131
|
usage: {
|
|
@@ -178,7 +178,7 @@ export const docsZh = {
|
|
|
178
178
|
{name: 'isLoading', type: 'boolean', description: '复选框是否处于加载状态。显示旋转器并阻止交互。', default: 'false'},
|
|
179
179
|
{name: 'isDisabled', type: 'boolean', description: '复选框是否禁用。', default: 'false'},
|
|
180
180
|
{name: 'htmlName', type: 'string', description: '底层复选框输入的 HTML name 属性,用于表单提交(勾选时提交 "on")。'},
|
|
181
|
-
{name: 'disabledMessage', type: 'string', description: 'Explains why the checkbox is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the checkbox focusable via aria-disabled (toggling stays blocked). Use this instead of wrapping a disabled CheckboxInput in Tooltip
|
|
181
|
+
{name: 'disabledMessage', type: 'string', description: 'Explains why the checkbox is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the checkbox focusable via aria-disabled (toggling stays blocked). Use this instead of wrapping a disabled CheckboxInput in Tooltip — disabled controls swallow the hover events an external Tooltip needs.'},
|
|
182
182
|
{name: 'isReadOnly', type: 'boolean', description: '复选框是否为只读。以完整不透明度显示当前状态但阻止交互。与 isDisabled 不同,只读复选框不会变暗。', default: 'false'},
|
|
183
183
|
{name: 'isOptional', type: 'boolean', description: '字段是否可选。与 isRequired 互斥。', default: 'false'},
|
|
184
184
|
{name: 'isRequired', type: 'boolean', description: '复选框是否必填。与 isOptional 互斥。', default: 'false'},
|
|
@@ -200,7 +200,7 @@ export const docsZh = {
|
|
|
200
200
|
'size',
|
|
201
201
|
],
|
|
202
202
|
},
|
|
203
|
-
{className: 'astryx-checkbox'
|
|
203
|
+
{className: 'astryx-checkbox'},
|
|
204
204
|
],
|
|
205
205
|
},
|
|
206
206
|
};
|
|
@@ -167,59 +167,6 @@ describe('CheckboxInput', () => {
|
|
|
167
167
|
expect(handleChange).not.toHaveBeenCalled();
|
|
168
168
|
});
|
|
169
169
|
|
|
170
|
-
it('forwards data-testid to the input', () => {
|
|
171
|
-
render(
|
|
172
|
-
<CheckboxInput
|
|
173
|
-
label="Accept terms"
|
|
174
|
-
value={false}
|
|
175
|
-
onChange={() => {}}
|
|
176
|
-
data-testid="accept-terms-checkbox"
|
|
177
|
-
/>,
|
|
178
|
-
);
|
|
179
|
-
expect(screen.getByTestId('accept-terms-checkbox')).toBe(
|
|
180
|
-
screen.getByRole('checkbox'),
|
|
181
|
-
);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it('forwards arbitrary data-* attributes to the input', () => {
|
|
185
|
-
render(
|
|
186
|
-
<CheckboxInput
|
|
187
|
-
label="Accept terms"
|
|
188
|
-
value={false}
|
|
189
|
-
onChange={() => {}}
|
|
190
|
-
data-tracking-id="checkbox-42"
|
|
191
|
-
/>,
|
|
192
|
-
);
|
|
193
|
-
expect(screen.getByRole('checkbox')).toHaveAttribute(
|
|
194
|
-
'data-tracking-id',
|
|
195
|
-
'checkbox-42',
|
|
196
|
-
);
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it('does not let rest props override checked, disabled, or type', () => {
|
|
200
|
-
// Not part of CheckboxInputProps; spread (rather than named attributes)
|
|
201
|
-
// to sidestep JSX excess-property checks the same way a real caller's
|
|
202
|
-
// spread rest-props object would arrive untyped at runtime.
|
|
203
|
-
const foreignAttrs: Record<string, unknown> = {
|
|
204
|
-
checked: false,
|
|
205
|
-
disabled: false,
|
|
206
|
-
type: 'text',
|
|
207
|
-
};
|
|
208
|
-
render(
|
|
209
|
-
<CheckboxInput
|
|
210
|
-
{...foreignAttrs}
|
|
211
|
-
label="Accept terms"
|
|
212
|
-
value={true}
|
|
213
|
-
onChange={() => {}}
|
|
214
|
-
isDisabled
|
|
215
|
-
/>,
|
|
216
|
-
);
|
|
217
|
-
const checkbox = screen.getByRole('checkbox');
|
|
218
|
-
expect(checkbox).toBeChecked();
|
|
219
|
-
expect(checkbox).toBeDisabled();
|
|
220
|
-
expect(checkbox).toHaveAttribute('type', 'checkbox');
|
|
221
|
-
});
|
|
222
|
-
|
|
223
170
|
it('forwards ref correctly', () => {
|
|
224
171
|
const ref = vi.fn();
|
|
225
172
|
render(
|
|
@@ -449,12 +396,7 @@ describe('CheckboxInput', () => {
|
|
|
449
396
|
it('submits under htmlName when checked', () => {
|
|
450
397
|
const {container} = render(
|
|
451
398
|
<form>
|
|
452
|
-
<CheckboxInput
|
|
453
|
-
label="Terms"
|
|
454
|
-
htmlName="terms"
|
|
455
|
-
value={true}
|
|
456
|
-
onChange={() => {}}
|
|
457
|
-
/>
|
|
399
|
+
<CheckboxInput label="Terms" htmlName="terms" value={true} onChange={() => {}} />
|
|
458
400
|
</form>,
|
|
459
401
|
);
|
|
460
402
|
const data = new FormData(container.querySelector('form')!);
|
|
@@ -474,25 +416,16 @@ describe('CheckboxInput', () => {
|
|
|
474
416
|
/>
|
|
475
417
|
</form>,
|
|
476
418
|
);
|
|
477
|
-
expect([
|
|
478
|
-
...new FormData(container.querySelector('form')!).keys(),
|
|
479
|
-
]).toEqual([]);
|
|
419
|
+
expect([...new FormData(container.querySelector('form')!).keys()]).toEqual([]);
|
|
480
420
|
});
|
|
481
421
|
|
|
482
422
|
it('submits nothing when unchecked', () => {
|
|
483
423
|
const {container} = render(
|
|
484
424
|
<form>
|
|
485
|
-
<CheckboxInput
|
|
486
|
-
label="Terms"
|
|
487
|
-
htmlName="terms"
|
|
488
|
-
value={false}
|
|
489
|
-
onChange={() => {}}
|
|
490
|
-
/>
|
|
425
|
+
<CheckboxInput label="Terms" htmlName="terms" value={false} onChange={() => {}} />
|
|
491
426
|
</form>,
|
|
492
427
|
);
|
|
493
|
-
expect([
|
|
494
|
-
...new FormData(container.querySelector('form')!).keys(),
|
|
495
|
-
]).toEqual([]);
|
|
428
|
+
expect([...new FormData(container.querySelector('form')!).keys()]).toEqual([]);
|
|
496
429
|
});
|
|
497
430
|
});
|
|
498
431
|
});
|
|
@@ -395,7 +395,6 @@ export function CheckboxInput({
|
|
|
395
395
|
className,
|
|
396
396
|
style,
|
|
397
397
|
ref,
|
|
398
|
-
...rest
|
|
399
398
|
}: CheckboxInputProps) {
|
|
400
399
|
const id = useId();
|
|
401
400
|
const descriptionID = useId();
|
|
@@ -485,7 +484,6 @@ export function CheckboxInput({
|
|
|
485
484
|
)}>
|
|
486
485
|
<div {...stylex.props(styles.checkboxWrapper, wrapperSizeStyles[size])}>
|
|
487
486
|
<input
|
|
488
|
-
{...rest}
|
|
489
487
|
ref={mergeRefs(
|
|
490
488
|
ref,
|
|
491
489
|
indeterminateRef,
|
|
@@ -135,25 +135,6 @@ describe('CheckboxList', () => {
|
|
|
135
135
|
expect(handleChange).toHaveBeenCalledWith(['b']);
|
|
136
136
|
});
|
|
137
137
|
|
|
138
|
-
it('fires a consumer onClick on an item in addition to toggling', async () => {
|
|
139
|
-
const user = userEvent.setup();
|
|
140
|
-
const handleChange = vi.fn();
|
|
141
|
-
const handleClick = vi.fn();
|
|
142
|
-
render(
|
|
143
|
-
<CheckboxList label="Preferences" value={['a']} onChange={handleChange}>
|
|
144
|
-
<CheckboxListItem label="Option A" value="a" />
|
|
145
|
-
<CheckboxListItem label="Option B" value="b" onClick={handleClick} />
|
|
146
|
-
</CheckboxList>,
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
// Click the interactive row (invisible-button pattern), which is where the
|
|
150
|
-
// composed onClick lives — not the inner checkbox.
|
|
151
|
-
await user.click(screen.getByRole('button', {name: 'Option B'}));
|
|
152
|
-
|
|
153
|
-
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
154
|
-
expect(handleChange).toHaveBeenCalledWith(['a', 'b']);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
138
|
it('disables all checkboxes when group isDisabled is true', () => {
|
|
158
139
|
render(
|
|
159
140
|
<CheckboxList
|