@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
|
@@ -16,12 +16,11 @@
|
|
|
16
16
|
* - /packages/cli/templates/blocks/components/CheckboxList/ (showcase blocks)
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import {use, type
|
|
19
|
+
import {use, type ReactNode} from 'react';
|
|
20
20
|
import * as stylex from '@stylexjs/stylex';
|
|
21
21
|
import type {StyleXStyles} from '@stylexjs/stylex';
|
|
22
22
|
import {colorVars} from '../theme/tokens.stylex';
|
|
23
23
|
import type {BaseProps} from '../BaseProps';
|
|
24
|
-
import {composeEventHandlers} from '../utils';
|
|
25
24
|
import {CheckboxInput} from '../CheckboxInput/CheckboxInput';
|
|
26
25
|
import {ListItem} from '../List/ListItem';
|
|
27
26
|
import {ListContext} from '../List/ListContext';
|
|
@@ -129,7 +128,6 @@ export function CheckboxListItem({
|
|
|
129
128
|
xstyle,
|
|
130
129
|
className,
|
|
131
130
|
style,
|
|
132
|
-
onClick: onClickProp,
|
|
133
131
|
...restProps
|
|
134
132
|
}: CheckboxListItemProps) {
|
|
135
133
|
const ctx = use(CheckboxListContext);
|
|
@@ -202,14 +200,7 @@ export function CheckboxListItem({
|
|
|
202
200
|
description={description}
|
|
203
201
|
endContent={endContent}
|
|
204
202
|
isDisabled={effectiveDisabled}
|
|
205
|
-
onClick={
|
|
206
|
-
isInteractive || onClickProp
|
|
207
|
-
? composeEventHandlers<MouseEvent>(
|
|
208
|
-
onClickProp as ((event: MouseEvent) => void) | undefined,
|
|
209
|
-
isInteractive ? handleToggle : undefined,
|
|
210
|
-
)
|
|
211
|
-
: undefined
|
|
212
|
-
}
|
|
203
|
+
onClick={isInteractive ? handleToggle : undefined}
|
|
213
204
|
aria-busy={isBusy || undefined}
|
|
214
205
|
xstyle={
|
|
215
206
|
[
|
|
@@ -31,12 +31,7 @@
|
|
|
31
31
|
import {type ReactNode, type MouseEvent, useRef, type Ref} from 'react';
|
|
32
32
|
import * as stylex from '@stylexjs/stylex';
|
|
33
33
|
import type {StyleXStyles} from '@stylexjs/stylex';
|
|
34
|
-
import {
|
|
35
|
-
borderVars,
|
|
36
|
-
colorVars,
|
|
37
|
-
durationVars,
|
|
38
|
-
easeVars,
|
|
39
|
-
} from '../theme/tokens.stylex';
|
|
34
|
+
import {colorVars, durationVars, easeVars} from '../theme/tokens.stylex';
|
|
40
35
|
import type {SizeValue, SpacingStep} from '../utils/types';
|
|
41
36
|
import {mergeProps, mergeRefs} from '../utils';
|
|
42
37
|
import {Card} from '../Card/Card';
|
|
@@ -71,6 +66,7 @@ const styles = stylex.create({
|
|
|
71
66
|
content: '""',
|
|
72
67
|
position: 'absolute',
|
|
73
68
|
inset: 0,
|
|
69
|
+
borderRadius: 'inherit',
|
|
74
70
|
pointerEvents: 'none',
|
|
75
71
|
transitionProperty: 'background-color',
|
|
76
72
|
transitionDuration: durationVars['--duration-fast'],
|
|
@@ -88,38 +84,6 @@ const styles = stylex.create({
|
|
|
88
84
|
},
|
|
89
85
|
},
|
|
90
86
|
},
|
|
91
|
-
// Borderless variants (everything except `default`): drop the transparent
|
|
92
|
-
// 1px border Card applies. The overlay is inset to the padding box — inside
|
|
93
|
-
// that border — so a transparent border strip stays untinted on hover and
|
|
94
|
-
// reads as a faint ring. With no border, the overlay covers the full box
|
|
95
|
-
// edge-to-edge and the ring disappears.
|
|
96
|
-
borderless: {
|
|
97
|
-
borderWidth: 0,
|
|
98
|
-
},
|
|
99
|
-
// Bordered variant (`default`): draw the 1px border *within* the padding by
|
|
100
|
-
// subtracting the border width from every side. Total inset (border +
|
|
101
|
-
// padding) then equals the borderless variants' padding, so content geometry
|
|
102
|
-
// and outer dimensions stay identical across all variants. The border rests
|
|
103
|
-
// at the subtle token and emphasizes on hover.
|
|
104
|
-
bordered: {
|
|
105
|
-
borderColor: colorVars['--color-border'],
|
|
106
|
-
paddingInlineStart: `calc(var(--container-padding-inline-start) - ${borderVars['--border-width']})`,
|
|
107
|
-
paddingInlineEnd: `calc(var(--container-padding-inline-end) - ${borderVars['--border-width']})`,
|
|
108
|
-
paddingBlockStart: `calc(var(--container-padding-block-start) - ${borderVars['--border-width']})`,
|
|
109
|
-
paddingBlockEnd: `calc(var(--container-padding-block-end) - ${borderVars['--border-width']})`,
|
|
110
|
-
transitionProperty: 'border-color',
|
|
111
|
-
transitionDuration: durationVars['--duration-fast'],
|
|
112
|
-
transitionTimingFunction: easeVars['--ease-standard'],
|
|
113
|
-
},
|
|
114
|
-
// Emphasize the bordered variant's border on hover. Guarded by
|
|
115
|
-
// @media (hover: hover) so touch devices don't get a stuck hover state.
|
|
116
|
-
borderedHoverOnPointer: {
|
|
117
|
-
'@media (hover: hover)': {
|
|
118
|
-
':hover': {
|
|
119
|
-
borderColor: colorVars['--color-border-emphasized'],
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
87
|
disabled: {
|
|
124
88
|
cursor: 'not-allowed',
|
|
125
89
|
opacity: 0.5,
|
|
@@ -284,11 +248,6 @@ export function ClickableCard({
|
|
|
284
248
|
|
|
285
249
|
const isLink = href != null;
|
|
286
250
|
|
|
287
|
-
// Only the `default` variant has a visible border. Card draws a transparent
|
|
288
|
-
// 1px border on every other variant purely to avoid layout jitter; we drop
|
|
289
|
-
// it here so the hover overlay covers the full box with no untinted ring.
|
|
290
|
-
const hasBorder = variant === 'default';
|
|
291
|
-
|
|
292
251
|
return (
|
|
293
252
|
<Card
|
|
294
253
|
ref={mergeRefs(ref, containerRef)}
|
|
@@ -305,10 +264,8 @@ export function ClickableCard({
|
|
|
305
264
|
[
|
|
306
265
|
styles.interactive,
|
|
307
266
|
styles.focusWithin,
|
|
308
|
-
hasBorder ? styles.bordered : styles.borderless,
|
|
309
267
|
!isDisabled && styles.overlay,
|
|
310
268
|
!isDisabled && styles.hoverOnPointer,
|
|
311
|
-
!isDisabled && hasBorder && styles.borderedHoverOnPointer,
|
|
312
269
|
isDisabled && styles.disabled,
|
|
313
270
|
xstyleProp,
|
|
314
271
|
] as unknown as StyleXStyles
|
|
@@ -90,11 +90,6 @@ export const docs = {
|
|
|
90
90
|
type: '(code: string, language: string) => Array<{type: string; start: number; end: number}>',
|
|
91
91
|
description: 'Custom tokenizer override for unsupported languages.',
|
|
92
92
|
},
|
|
93
|
-
{
|
|
94
|
-
name: 'syntaxTheme',
|
|
95
|
-
type: 'SyntaxThemeDefinition',
|
|
96
|
-
description: 'Per-instance syntax theme override. Shorthand for wrapping the block in <SyntaxTheme theme={...}>. Accepts a preset from @astryxdesign/core/theme/syntax or a theme created with defineSyntaxTheme(). Defaults to the nearest SyntaxTheme ancestor or the theme-level syntax colors.',
|
|
97
|
-
},
|
|
98
93
|
{
|
|
99
94
|
name: 'isCollapsible',
|
|
100
95
|
type: 'boolean',
|
|
@@ -140,8 +135,8 @@ export const docs = {
|
|
|
140
135
|
},
|
|
141
136
|
theming: {
|
|
142
137
|
targets: [
|
|
143
|
-
{className: 'astryx-code'
|
|
144
|
-
{className: 'astryx-codeblock', visualProps: ['size', 'language'
|
|
138
|
+
{className: 'astryx-code'},
|
|
139
|
+
{className: 'astryx-codeblock', visualProps: ['size', 'language']},
|
|
145
140
|
],
|
|
146
141
|
},
|
|
147
142
|
usage: {
|
|
@@ -3,21 +3,15 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file CodeBlock.test.tsx
|
|
5
5
|
* @input Uses vitest, @testing-library/react, CodeBlock component
|
|
6
|
-
* @output Unit tests for CodeBlock (copy button, collapse, scroll region a11y
|
|
6
|
+
* @output Unit tests for CodeBlock (copy button, collapse, scroll region a11y)
|
|
7
7
|
* @position Testing; validates CodeBlock implementation
|
|
8
8
|
*
|
|
9
9
|
* SYNC: When CodeBlock.tsx changes, update tests to match new behavior
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {describe, it, expect, vi, beforeEach
|
|
13
|
-
import {
|
|
12
|
+
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
13
|
+
import {render, screen, fireEvent} from '@testing-library/react';
|
|
14
14
|
import {CodeBlock} from './CodeBlock';
|
|
15
|
-
import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
16
|
-
import {dracula} from '../theme/syntax';
|
|
17
|
-
|
|
18
|
-
function politeRegion(): HTMLElement | null {
|
|
19
|
-
return document.querySelector('[data-astryx-live-region="polite"]');
|
|
20
|
-
}
|
|
21
15
|
|
|
22
16
|
// A code sample long enough to exceed the default collapsible threshold (10).
|
|
23
17
|
const LONG_CODE = Array.from(
|
|
@@ -33,10 +27,6 @@ describe('CodeBlock', () => {
|
|
|
33
27
|
});
|
|
34
28
|
});
|
|
35
29
|
|
|
36
|
-
afterEach(() => {
|
|
37
|
-
__resetLiveRegionsForTest();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
30
|
it('renders the code', () => {
|
|
41
31
|
render(<CodeBlock code="const x = 1;" language="javascript" />);
|
|
42
32
|
expect(screen.getByText(/const/)).toBeInTheDocument();
|
|
@@ -63,50 +53,6 @@ describe('CodeBlock', () => {
|
|
|
63
53
|
expect(navigator.clipboard.writeText).toHaveBeenCalledWith('const x = 1;');
|
|
64
54
|
});
|
|
65
55
|
|
|
66
|
-
it('announces "Copied" to a polite live region after copying', async () => {
|
|
67
|
-
render(<CodeBlock code="const x = 1;" language="javascript" />);
|
|
68
|
-
const copyButton = screen.getByRole('button', {name: 'Copy code'});
|
|
69
|
-
fireEvent.click(copyButton);
|
|
70
|
-
await waitFor(() => {
|
|
71
|
-
expect(politeRegion()).toHaveTextContent('Copied');
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('keeps the copied indicator a full 2s after a rapid re-copy', async () => {
|
|
76
|
-
vi.useFakeTimers();
|
|
77
|
-
try {
|
|
78
|
-
render(<CodeBlock code="const x = 1;" language="javascript" />);
|
|
79
|
-
fireEvent.click(screen.getByRole('button', {name: 'Copy code'}));
|
|
80
|
-
// Flush the async clipboard write.
|
|
81
|
-
await act(async () => {});
|
|
82
|
-
expect(screen.getByRole('button', {name: 'Copied'})).toBeInTheDocument();
|
|
83
|
-
|
|
84
|
-
// 1.5s later the user copies again.
|
|
85
|
-
act(() => {
|
|
86
|
-
vi.advanceTimersByTime(1500);
|
|
87
|
-
});
|
|
88
|
-
fireEvent.click(screen.getByRole('button', {name: 'Copied'}));
|
|
89
|
-
await act(async () => {});
|
|
90
|
-
|
|
91
|
-
// 600ms after the second copy (2.1s after the first): the first
|
|
92
|
-
// click's timer must not have reverted the indicator early.
|
|
93
|
-
act(() => {
|
|
94
|
-
vi.advanceTimersByTime(600);
|
|
95
|
-
});
|
|
96
|
-
expect(screen.getByRole('button', {name: 'Copied'})).toBeInTheDocument();
|
|
97
|
-
|
|
98
|
-
// It resets 2s after the most recent copy.
|
|
99
|
-
act(() => {
|
|
100
|
-
vi.advanceTimersByTime(1400);
|
|
101
|
-
});
|
|
102
|
-
expect(
|
|
103
|
-
screen.getByRole('button', {name: 'Copy code'}),
|
|
104
|
-
).toBeInTheDocument();
|
|
105
|
-
} finally {
|
|
106
|
-
vi.useRealTimers();
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
|
|
110
56
|
it('does NOT collapse the block when the copy button is clicked', () => {
|
|
111
57
|
render(
|
|
112
58
|
<CodeBlock
|
|
@@ -166,69 +112,4 @@ describe('CodeBlock', () => {
|
|
|
166
112
|
fireEvent.click(header);
|
|
167
113
|
expect(header).toHaveAttribute('aria-expanded', 'false');
|
|
168
114
|
});
|
|
169
|
-
|
|
170
|
-
it('links the collapsible header to its code region via aria-controls', () => {
|
|
171
|
-
render(
|
|
172
|
-
<CodeBlock
|
|
173
|
-
code={LONG_CODE}
|
|
174
|
-
language="javascript"
|
|
175
|
-
title="example"
|
|
176
|
-
isCollapsible
|
|
177
|
-
/>,
|
|
178
|
-
);
|
|
179
|
-
const header = screen
|
|
180
|
-
.getAllByRole('button')
|
|
181
|
-
.find(el => el.hasAttribute('aria-expanded'))!;
|
|
182
|
-
const controlsId = header.getAttribute('aria-controls');
|
|
183
|
-
// aria-controls must be present and point at the real code region.
|
|
184
|
-
expect(controlsId).toBeTruthy();
|
|
185
|
-
const region = document.getElementById(controlsId as string);
|
|
186
|
-
expect(region).not.toBeNull();
|
|
187
|
-
// The region contains the scrollable code body (role="group").
|
|
188
|
-
expect(region).toContainElement(screen.getByRole('group'));
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
it('keeps aria-controls resolvable when collapsed (region stays mounted)', () => {
|
|
192
|
-
render(
|
|
193
|
-
<CodeBlock
|
|
194
|
-
code={LONG_CODE}
|
|
195
|
-
language="javascript"
|
|
196
|
-
title="example"
|
|
197
|
-
isCollapsible
|
|
198
|
-
/>,
|
|
199
|
-
);
|
|
200
|
-
const header = screen
|
|
201
|
-
.getAllByRole('button')
|
|
202
|
-
.find(el => el.hasAttribute('aria-expanded'))!;
|
|
203
|
-
fireEvent.click(header);
|
|
204
|
-
expect(header).toHaveAttribute('aria-expanded', 'false');
|
|
205
|
-
// The code region uses a CSS grid animation to collapse, so it stays in
|
|
206
|
-
// the DOM — aria-controls stays a valid, resolvable reference (unlike a
|
|
207
|
-
// conditionally-mounted region, which would need a conditional attribute).
|
|
208
|
-
const controlsId = header.getAttribute('aria-controls');
|
|
209
|
-
expect(controlsId).toBeTruthy();
|
|
210
|
-
expect(document.getElementById(controlsId as string)).not.toBeNull();
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
it('applies a per-instance syntax theme via the syntaxTheme prop', () => {
|
|
214
|
-
const {container} = render(
|
|
215
|
-
<CodeBlock
|
|
216
|
-
code="const x = 1;"
|
|
217
|
-
language="javascript"
|
|
218
|
-
syntaxTheme={dracula}
|
|
219
|
-
/>,
|
|
220
|
-
);
|
|
221
|
-
const wrapper = container.querySelector('[data-astryx-syntax-theme]');
|
|
222
|
-
expect(wrapper).not.toBeNull();
|
|
223
|
-
expect(wrapper).toHaveAttribute('data-astryx-syntax-theme', 'dracula');
|
|
224
|
-
expect(wrapper!.querySelector('pre')).not.toBeNull();
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
it('renders no syntax theme wrapper when syntaxTheme is not set', () => {
|
|
228
|
-
const {container} = render(
|
|
229
|
-
<CodeBlock code="const x = 1;" language="javascript" />,
|
|
230
|
-
);
|
|
231
|
-
expect(container.querySelector('[data-astryx-syntax-theme]')).toBeNull();
|
|
232
|
-
expect(container.firstElementChild?.tagName).toBe('PRE');
|
|
233
|
-
});
|
|
234
115
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
'use client';
|
|
4
4
|
/**
|
|
5
5
|
* @file CodeBlock.tsx
|
|
6
|
-
* @input Uses React, StyleX, theme tokens, CSS Custom Highlight API
|
|
6
|
+
* @input Uses React, StyleX, theme tokens, CSS Custom Highlight API
|
|
7
7
|
* @output Exports CodeBlock component and CodeBlockProps
|
|
8
8
|
* @position Core implementation; read-only syntax-highlighted code display
|
|
9
9
|
*/
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
import {
|
|
12
12
|
useInsertionEffect,
|
|
13
13
|
useEffect,
|
|
14
|
-
useId,
|
|
15
14
|
useRef,
|
|
16
15
|
useState,
|
|
17
16
|
useCallback,
|
|
@@ -33,7 +32,6 @@ import {
|
|
|
33
32
|
easeVars,
|
|
34
33
|
} from '../theme/tokens.stylex';
|
|
35
34
|
import {mergeProps} from '../utils';
|
|
36
|
-
import {useAnnounce} from '../hooks/useAnnounce';
|
|
37
35
|
import {Icon} from '../Icon';
|
|
38
36
|
import {
|
|
39
37
|
tokenize,
|
|
@@ -45,7 +43,6 @@ import type {SyntaxToken, TokenLine} from './tokenizer';
|
|
|
45
43
|
import {ensureHighlightStyles} from './highlightStyles';
|
|
46
44
|
import {applyHighlightRangesChunked} from './highlightRanges';
|
|
47
45
|
import {themeProps} from '../utils/themeProps';
|
|
48
|
-
import {SyntaxTheme, type SyntaxThemeDefinition} from '../theme/syntax';
|
|
49
46
|
|
|
50
47
|
// ---------------------------------------------------------------------------
|
|
51
48
|
// Styles
|
|
@@ -176,17 +173,6 @@ const styles = stylex.create({
|
|
|
176
173
|
headerCollapsible: {
|
|
177
174
|
cursor: 'pointer',
|
|
178
175
|
userSelect: 'none',
|
|
179
|
-
// Restore a keyboard-only focus ring with the standard token/offset so this
|
|
180
|
-
// disclosure control matches the rest of the system (Collapsible, TabMenu);
|
|
181
|
-
// otherwise it falls back to the inconsistent UA default outline.
|
|
182
|
-
outline: {
|
|
183
|
-
default: null,
|
|
184
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
185
|
-
},
|
|
186
|
-
outlineOffset: {
|
|
187
|
-
default: '0',
|
|
188
|
-
':focus-visible': '2px',
|
|
189
|
-
},
|
|
190
176
|
},
|
|
191
177
|
gutter: {
|
|
192
178
|
flexShrink: 0,
|
|
@@ -396,14 +382,6 @@ export interface CodeBlockProps extends BaseProps<HTMLPreElement> {
|
|
|
396
382
|
language: string,
|
|
397
383
|
) => {type: string; start: number; end: number}[];
|
|
398
384
|
highlightMode?: 'auto' | 'ranges' | 'spans';
|
|
399
|
-
/**
|
|
400
|
-
* Per-instance syntax theme override. Shorthand for wrapping this block in
|
|
401
|
-
* `<SyntaxTheme theme={...}>` — accepts a preset from
|
|
402
|
-
* `@astryxdesign/core/theme/syntax` or a theme created with
|
|
403
|
-
* `defineSyntaxTheme()`. Without it, the block uses the theme-level syntax
|
|
404
|
-
* colors from the nearest SyntaxTheme ancestor or `defineTheme({ syntax })`.
|
|
405
|
-
*/
|
|
406
|
-
syntaxTheme?: SyntaxThemeDefinition;
|
|
407
385
|
}
|
|
408
386
|
|
|
409
387
|
// ---------------------------------------------------------------------------
|
|
@@ -655,7 +633,6 @@ export function CodeBlock({
|
|
|
655
633
|
container = 'card',
|
|
656
634
|
tokenizer: customTokenizer,
|
|
657
635
|
highlightMode = 'auto',
|
|
658
|
-
syntaxTheme,
|
|
659
636
|
xstyle,
|
|
660
637
|
className,
|
|
661
638
|
style,
|
|
@@ -663,17 +640,6 @@ export function CodeBlock({
|
|
|
663
640
|
...props
|
|
664
641
|
}: CodeBlockProps) {
|
|
665
642
|
const [copied, setCopied] = useState(false);
|
|
666
|
-
const copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
667
|
-
const announce = useAnnounce();
|
|
668
|
-
|
|
669
|
-
// Clear a pending "copied" reset when the block unmounts.
|
|
670
|
-
useEffect(() => {
|
|
671
|
-
return () => {
|
|
672
|
-
if (copyResetTimerRef.current != null) {
|
|
673
|
-
clearTimeout(copyResetTimerRef.current);
|
|
674
|
-
}
|
|
675
|
-
};
|
|
676
|
-
}, []);
|
|
677
643
|
|
|
678
644
|
const useSpans =
|
|
679
645
|
highlightMode === 'spans' ||
|
|
@@ -699,23 +665,12 @@ export function CodeBlock({
|
|
|
699
665
|
try {
|
|
700
666
|
await navigator.clipboard.writeText(code);
|
|
701
667
|
setCopied(true);
|
|
702
|
-
// Swapping the button's aria-label alone isn't reliably announced by
|
|
703
|
-
// screen readers, so confirm the copy via a polite live region.
|
|
704
|
-
announce('Copied');
|
|
705
668
|
onCopy?.();
|
|
706
|
-
|
|
707
|
-
// is reverted early by the previous click's timer.
|
|
708
|
-
if (copyResetTimerRef.current != null) {
|
|
709
|
-
clearTimeout(copyResetTimerRef.current);
|
|
710
|
-
}
|
|
711
|
-
copyResetTimerRef.current = setTimeout(() => {
|
|
712
|
-
copyResetTimerRef.current = null;
|
|
713
|
-
setCopied(false);
|
|
714
|
-
}, 2000);
|
|
669
|
+
setTimeout(() => setCopied(false), 2000);
|
|
715
670
|
} catch {
|
|
716
671
|
// Clipboard failures leave the copied state unchanged.
|
|
717
672
|
}
|
|
718
|
-
}, [code, onCopy
|
|
673
|
+
}, [code, onCopy]);
|
|
719
674
|
|
|
720
675
|
const sizeStyle = size === 'sm' ? styles.sizeSm : styles.sizeMd;
|
|
721
676
|
const gutterSizeStyle = size === 'sm' ? styles.gutterSm : styles.gutterMd;
|
|
@@ -725,11 +680,6 @@ export function CodeBlock({
|
|
|
725
680
|
|
|
726
681
|
const canCollapse = isCollapsible && lines.length >= collapsibleThreshold;
|
|
727
682
|
const [isCollapsed, setIsCollapsed] = useState(false);
|
|
728
|
-
// Links the collapsible header to the code region it shows/hides so assistive
|
|
729
|
-
// tech can move from the button to its controlled content (disclosure
|
|
730
|
-
// pattern). The region stays mounted when collapsed (CSS grid animation), so
|
|
731
|
-
// this is always a resolvable reference — aria-controls can be unconditional.
|
|
732
|
-
const regionId = useId();
|
|
733
683
|
|
|
734
684
|
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
|
735
685
|
const scrollStyle: CSSProperties | undefined = maxHeight
|
|
@@ -767,7 +717,6 @@ export function CodeBlock({
|
|
|
767
717
|
role={canCollapse ? 'button' : undefined}
|
|
768
718
|
tabIndex={canCollapse ? 0 : undefined}
|
|
769
719
|
aria-expanded={canCollapse ? !isCollapsed : undefined}
|
|
770
|
-
aria-controls={canCollapse ? regionId : undefined}
|
|
771
720
|
onClick={canCollapse ? () => setIsCollapsed(prev => !prev) : undefined}
|
|
772
721
|
onKeyDown={
|
|
773
722
|
canCollapse
|
|
@@ -853,7 +802,7 @@ export function CodeBlock({
|
|
|
853
802
|
</div>
|
|
854
803
|
);
|
|
855
804
|
|
|
856
|
-
|
|
805
|
+
return (
|
|
857
806
|
<pre
|
|
858
807
|
ref={ref}
|
|
859
808
|
{...mergeProps(
|
|
@@ -871,7 +820,6 @@ export function CodeBlock({
|
|
|
871
820
|
{headerEl}
|
|
872
821
|
{canCollapse ? (
|
|
873
822
|
<div
|
|
874
|
-
id={regionId}
|
|
875
823
|
{...stylex.props(
|
|
876
824
|
styles.collapseGrid,
|
|
877
825
|
isCollapsed && styles.collapseGridCollapsed,
|
|
@@ -884,12 +832,6 @@ export function CodeBlock({
|
|
|
884
832
|
{!showHeader && copyButtonEl}
|
|
885
833
|
</pre>
|
|
886
834
|
);
|
|
887
|
-
|
|
888
|
-
return syntaxTheme ? (
|
|
889
|
-
<SyntaxTheme theme={syntaxTheme}>{block}</SyntaxTheme>
|
|
890
|
-
) : (
|
|
891
|
-
block
|
|
892
|
-
);
|
|
893
835
|
}
|
|
894
836
|
|
|
895
837
|
CodeBlock.displayName = 'CodeBlock';
|
|
@@ -16,8 +16,7 @@ export const docs = {
|
|
|
16
16
|
},
|
|
17
17
|
theming: {
|
|
18
18
|
targets: [
|
|
19
|
-
{className: 'astryx-collapsible'
|
|
20
|
-
{className: 'astryx-collapsible-group', visualProps: ['dividers', 'density']},
|
|
19
|
+
{className: 'astryx-collapsible'},
|
|
21
20
|
],
|
|
22
21
|
},
|
|
23
22
|
description: 'A primitive that makes any content collapsible: a trigger button toggles visibility of the content area, managing its own state or deferring to a parent CollapsibleGroup.',
|
|
@@ -70,8 +69,7 @@ export const docs = {
|
|
|
70
69
|
usage: {
|
|
71
70
|
description: 'Collapsible hides and reveals content behind a trigger button. Use it in settings panels, FAQ pages, or detail views to keep the page scannable while letting users drill into sections they care about. Wrap multiple collapsibles in CollapsibleGroup for accordion behavior. For custom collapsible components, use the `useCollapsible` hook directly (`astryx hook useCollapsible`).',
|
|
72
71
|
bestPractices: [
|
|
73
|
-
{ guidance: true, description: '
|
|
74
|
-
{ guidance: true, description: 'Wrap each Collapsible in an Card for visual separation in accordion layouts, or use CollapsibleGroup dividers for flat lists; don\'t combine both.' },
|
|
72
|
+
{ guidance: true, description: 'Wrap each Collapsible in an Card for visual separation in accordion layouts.' },
|
|
75
73
|
{ guidance: true, description: 'Use CollapsibleGroup with type="single" for settings or FAQ pages where only one section should be open at a time.' },
|
|
76
74
|
{ guidance: true, description: 'Use type="multiple" when users need to compare content across sections, like feature lists or pricing tiers.' },
|
|
77
75
|
{ guidance: true, description: 'Start sections open (defaultIsOpen) when the content is likely needed on first view; don\'t make users click to see essential info.' },
|
|
@@ -92,8 +90,7 @@ export const docsZh = {
|
|
|
92
90
|
usage: {
|
|
93
91
|
description: 'Collapsible hides and reveals content behind a trigger button. Use it in settings panels, FAQ pages, or detail views to keep the page scannable while letting users drill into sections they care about. Wrap multiple collapsibles in CollapsibleGroup for accordion behavior.',
|
|
94
92
|
bestPractices: [
|
|
95
|
-
{ guidance: true, description: '
|
|
96
|
-
{ guidance: true, description: 'Wrap each Collapsible in an Card for visual separation in accordion layouts, or use CollapsibleGroup dividers for flat lists; don\'t combine both.' },
|
|
93
|
+
{ guidance: true, description: 'Wrap each Collapsible in an Card for visual separation in accordion layouts.' },
|
|
97
94
|
{ guidance: true, description: 'Use CollapsibleGroup with type="single" for settings or FAQ pages where only one section should be open at a time.' },
|
|
98
95
|
{ guidance: true, description: 'Use type="multiple" when users need to compare content across sections, like feature lists or pricing tiers.' },
|
|
99
96
|
{ guidance: true, description: 'Start sections open (defaultIsOpen) when the content is likely needed on first view; don\'t make users click to see essential info.' },
|
|
@@ -110,8 +107,7 @@ export const docsDense = {
|
|
|
110
107
|
usage: {
|
|
111
108
|
description: 'Collapsible hides and reveals content behind a trigger button. Use in settings, FAQs, or detail views. Wrap in CollapsibleGroup for accordion behavior.',
|
|
112
109
|
bestPractices: [
|
|
113
|
-
{ guidance: true, description: '
|
|
114
|
-
{ guidance: true, description: 'Wrap each Collapsible in an Card for visual separation, or use CollapsibleGroup dividers for flat lists; not both.' },
|
|
110
|
+
{ guidance: true, description: 'Wrap each Collapsible in an Card for visual separation in accordion layouts.' },
|
|
115
111
|
{ guidance: true, description: 'Use CollapsibleGroup with type="single" for settings or FAQ pages where only one section should be open at a time.' },
|
|
116
112
|
{ guidance: true, description: 'Use type="multiple" when users need to compare across sections.' },
|
|
117
113
|
{ guidance: true, description: 'Start sections open (defaultIsOpen) when content is needed on first view.' },
|