@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +18 -20
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +53 -55
- package/dist/AspectRatio/AspectRatio.d.ts +10 -48
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +12 -33
- package/dist/AspectRatio/index.d.ts +1 -1
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +25 -27
- package/dist/Avatar/AvatarStatusDot.js +5 -5
- package/dist/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +25 -32
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.js +19 -19
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +48 -68
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +2 -2
- package/dist/Card/Card.d.ts +2 -4
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +10 -18
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +21 -24
- package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
- package/dist/Carousel/carousel.markers.stylex.js +12 -0
- package/dist/Center/Center.js +3 -3
- package/dist/Chat/ChatComposer.js +23 -23
- package/dist/Chat/ChatComposerDrawer.js +14 -14
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +15 -27
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +11 -13
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +10 -12
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +12 -14
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +15 -24
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +74 -81
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +23 -25
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +6 -8
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +9 -32
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +1 -10
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +52 -88
- package/dist/Collapsible/Collapsible.d.ts +3 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +22 -110
- package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +12 -73
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
- package/dist/Collapsible/index.d.ts +0 -1
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +1 -4
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +6 -20
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +34 -36
- package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
- package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
- package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
- package/dist/CommandPalette/CommandPaletteInput.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/CommandPalette/CommandPaletteList.js +3 -3
- package/dist/ContextMenu/ContextMenu.d.ts +2 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +43 -76
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +26 -30
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +3 -4
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +12 -29
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.d.ts +1 -5
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +12 -16
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.d.ts +2 -29
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +31 -44
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +31 -55
- package/dist/Lightbox/useLightbox.js +3 -3
- package/dist/Link/Link.js +15 -15
- package/dist/Link/LinkProvider.js +3 -3
- package/dist/Link/useLinkify.js +3 -3
- package/dist/List/List.js +11 -11
- package/dist/List/ListItem.js +11 -11
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +102 -102
- package/dist/MetadataList/MetadataList.js +10 -10
- package/dist/MetadataList/MetadataListItem.js +15 -15
- package/dist/MobileNav/MobileNav.js +15 -15
- package/dist/MobileNav/MobileNavToggle.js +5 -5
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.js +56 -56
- package/dist/NavIcon/NavIcon.js +3 -3
- package/dist/NavMenu/NavHeadingMenu.js +5 -5
- package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +32 -48
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.js +3 -3
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +72 -125
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +92 -110
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -25
- package/dist/RadioList/RadioList.js +7 -7
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +21 -24
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +10 -28
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +10 -32
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.js +46 -46
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +34 -38
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +6 -8
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +16 -18
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.js +23 -23
- package/dist/Spinner/Spinner.js +9 -9
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +4 -8
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +29 -34
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +30 -57
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +39 -50
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +5 -9
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +5 -9
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +5 -9
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +1 -5
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
- package/dist/Table/plugins/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
- package/dist/Table/tableContextMenu.js +9 -9
- package/dist/Text/Text.js +10 -10
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +2 -3
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +29 -30
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -26
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +26 -37
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +17 -25
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +11 -23
- package/dist/Toast/useToast.js +4 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +34 -36
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +1 -5
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -3
- package/dist/TopNav/TopNav.js +32 -32
- package/dist/TopNav/TopNavHeading.js +67 -67
- package/dist/TopNav/TopNavItem.js +5 -5
- package/dist/TopNav/TopNavMegaMenu.js +30 -30
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +20 -23
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/astryx.css +0 -7
- package/dist/astryx.umd.js +60 -60
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +2 -8
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +0 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/useFocusTrap.d.ts +0 -3
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +1 -38
- package/dist/hooks/useInteractiveRole.d.ts +2 -6
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +2 -6
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +1 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +5 -14
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +3 -10
- package/dist/theme/hct.d.ts +15 -0
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +2 -10
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +4 -220
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -8
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
- package/src/AlertDialog/AlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +0 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
- package/src/AspectRatio/AspectRatio.test.tsx +1 -142
- package/src/AspectRatio/AspectRatio.tsx +10 -70
- package/src/AspectRatio/index.ts +1 -5
- package/src/Avatar/Avatar.doc.mjs +0 -11
- package/src/Avatar/Avatar.test.tsx +1 -32
- package/src/Avatar/Avatar.tsx +20 -12
- package/src/Banner/Banner.doc.mjs +0 -8
- package/src/Banner/Banner.test.tsx +0 -38
- package/src/Banner/Banner.tsx +1 -8
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +17 -122
- package/src/Calendar/Calendar.tsx +5 -26
- package/src/Calendar/dayCellUtils.ts +1 -3
- package/src/Calendar/styles.ts +2 -12
- package/src/Card/Card.tsx +6 -16
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +0 -13
- package/src/Carousel/Carousel.tsx +2 -4
- package/src/Carousel/carousel.markers.stylex.ts +10 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +1 -27
- package/src/Chat/ChatComposerInput.tsx +15 -20
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
- package/src/Chat/ChatMessageMetadata.tsx +6 -4
- package/src/Chat/ChatSystemMessage.test.tsx +11 -26
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +16 -29
- package/src/Chat/ChatTokenizedText.tsx +8 -15
- package/src/Chat/ChatToolCalls.test.tsx +0 -55
- package/src/Chat/ChatToolCalls.tsx +12 -10
- package/src/Chat/index.ts +4 -1
- package/src/Chat/useTriggerMenu.tsx +4 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
- package/src/CheckboxInput/CheckboxInput.tsx +0 -2
- package/src/CheckboxList/CheckboxList.test.tsx +0 -19
- package/src/CheckboxList/CheckboxListItem.tsx +2 -11
- package/src/Citation/Citation.doc.mjs +0 -5
- package/src/ClickableCard/ClickableCard.tsx +2 -45
- package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
- package/src/CodeBlock/CodeBlock.test.tsx +3 -122
- package/src/CodeBlock/CodeBlock.tsx +4 -62
- package/src/Collapsible/Collapsible.doc.mjs +4 -8
- package/src/Collapsible/Collapsible.tsx +10 -86
- package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
- package/src/Collapsible/CollapsibleGroup.tsx +9 -107
- package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
- package/src/Collapsible/index.ts +0 -4
- package/src/Collapsible/useCollapsible.ts +6 -20
- package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
- package/src/CommandPalette/CommandPalette.tsx +3 -5
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
- package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
- package/src/ContextMenu/ContextMenu.test.tsx +0 -87
- package/src/ContextMenu/ContextMenu.tsx +28 -87
- package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
- package/src/DateInput/DateInput.test.tsx +20 -11
- package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
- package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
- package/src/DateTimeInput/DateTimeInput.tsx +2 -8
- package/src/DateTimeInput/index.ts +0 -1
- package/src/Dialog/Dialog.doc.mjs +0 -4
- package/src/Dialog/DialogHeader.doc.mjs +0 -45
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
- package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
- package/src/Field/Field.test.tsx +4 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
- package/src/Grid/Grid.test.tsx +18 -43
- package/src/Grid/Grid.tsx +9 -26
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +2 -9
- package/src/Icon/Icon.test.tsx +29 -41
- package/src/Icon/Icon.tsx +2 -6
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +2 -221
- package/src/Layer/useLayer.tsx +30 -69
- package/src/Layout/LayoutContent.doc.mjs +0 -12
- package/src/Layout/LayoutPanel.doc.mjs +0 -40
- package/src/Lightbox/Lightbox.doc.mjs +0 -5
- package/src/Lightbox/Lightbox.test.tsx +2 -123
- package/src/Lightbox/Lightbox.tsx +1 -29
- package/src/Markdown/Markdown.tsx +7 -9
- package/src/Markdown/parser.perf.test.ts +12 -34
- package/src/NavMenu/NavMenu.doc.mjs +0 -15
- package/src/NumberInput/NumberInput.test.tsx +3 -48
- package/src/NumberInput/NumberInput.tsx +15 -32
- package/src/Overlay/Overlay.doc.mjs +0 -6
- package/src/Pagination/Pagination.test.tsx +0 -162
- package/src/Pagination/Pagination.tsx +26 -80
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +0 -65
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +1 -109
- package/src/PowerSearch/PowerSearch.tsx +16 -37
- package/src/ProgressBar/ProgressBar.test.tsx +0 -30
- package/src/ProgressBar/ProgressBar.tsx +5 -12
- package/src/RadioList/RadioList.test.tsx +0 -19
- package/src/RadioList/RadioListItem.tsx +4 -9
- package/src/Resizable/ResizeHandle.tsx +4 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
- package/src/SegmentedControl/SegmentedControl.tsx +5 -27
- package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +1 -27
- package/src/SideNav/SideNav.doc.mjs +1 -7
- package/src/SideNav/SideNav.test.tsx +0 -66
- package/src/SideNav/SideNav.tsx +2 -6
- package/src/SideNav/SideNavCollapseButton.tsx +3 -4
- package/src/SideNav/SideNavSection.tsx +4 -6
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +3 -102
- package/src/Switch/Switch.tsx +7 -20
- package/src/TabList/TabList.test.tsx +1 -185
- package/src/TabList/TabMenu.tsx +9 -45
- package/src/Table/BaseTable.tsx +2 -13
- package/src/Table/Table.test.tsx +0 -87
- package/src/Table/TableBody.tsx +2 -15
- package/src/Table/TableFooter.tsx +2 -15
- package/src/Table/TableHeader.tsx +2 -15
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
- package/src/Table/plugins/pagination/paginateData.ts +1 -5
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
- package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
- package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +2 -36
- package/src/Thumbnail/Thumbnail.tsx +2 -4
- package/src/TimeInput/TimeInput.test.tsx +0 -37
- package/src/TimeInput/TimeInput.tsx +1 -11
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +0 -52
- package/src/Timestamp/Timestamp.tsx +16 -30
- package/src/Toast/Toast.tsx +3 -11
- package/src/Toast/ToastViewport.test.tsx +0 -64
- package/src/Toast/ToastViewport.tsx +0 -12
- package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +0 -54
- package/src/Tokenizer/Tokenizer.tsx +4 -5
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +2 -12
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +7 -23
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
- package/src/Typeahead/BaseTypeahead.tsx +2 -5
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +1 -45
- package/src/docs-types.ts +1 -9
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +0 -3
- package/src/hooks/useFocusTrap.doc.mjs +2 -4
- package/src/hooks/useFocusTrap.test.tsx +1 -149
- package/src/hooks/useFocusTrap.ts +1 -50
- package/src/hooks/useInteractiveRole.ts +4 -12
- package/src/hooks/useStreamingText.test.ts +19 -54
- package/src/hooks/useStreamingText.ts +5 -16
- package/src/hooks/useTreeFocus.test.tsx +3 -1
- package/src/reset.css +0 -29
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +13 -4
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +0 -29
- package/src/theme/expandColorScale.ts +6 -11
- package/src/theme/hct.ts +17 -9
- package/src/theme/tokens.test.ts +9 -182
- package/src/theme/tokens.ts +4 -239
- package/src/theme/useTheme.test.tsx +0 -20
- package/src/utils/index.ts +0 -4
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +0 -13
- package/src/utils/timeParser.ts +5 -8
- package/dist/hooks/useHotkeys.d.ts +0 -51
- package/dist/hooks/useHotkeys.d.ts.map +0 -1
- package/dist/hooks/useHotkeys.js +0 -160
- package/dist/utils/color.d.ts +0 -42
- package/dist/utils/color.d.ts.map +0 -1
- package/dist/utils/color.js +0 -150
- package/dist/utils/composeEventHandlers.d.ts +0 -30
- package/dist/utils/composeEventHandlers.d.ts.map +0 -1
- package/dist/utils/composeEventHandlers.js +0 -40
- package/src/Chat/ChatDictationButton.test.tsx +0 -43
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
- package/src/Collapsible/Collapsible.test.tsx +0 -405
- package/src/FieldStatus/FieldStatus.test.tsx +0 -282
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Layout/Layout.test.tsx +0 -285
- package/src/Layout/LayoutSlots.test.tsx +0 -364
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
- package/src/OverflowList/OverflowList.test.tsx +0 -416
- package/src/Overlay/Overlay.test.tsx +0 -356
- package/src/Resizable/ResizeHandle.test.tsx +0 -218
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/docPropReferences.test.ts +0 -178
- package/src/hooks/useHotkeys.doc.mjs +0 -52
- package/src/hooks/useHotkeys.test.ts +0 -245
- package/src/hooks/useHotkeys.ts +0 -203
- package/src/utils/color.test.ts +0 -133
- package/src/utils/color.ts +0 -148
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/composeEventHandlers.ts +0 -44
- package/src/utils/mergeProps.test.ts +0 -166
|
@@ -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.' },
|
|
@@ -4,21 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file Collapsible.tsx
|
|
7
|
-
* @input Uses React, StyleX, useCollapsible hook,
|
|
7
|
+
* @input Uses React, StyleX, useCollapsible hook, getIcon, theme tokens
|
|
8
8
|
* @output Exports Collapsible component and CollapsibleProps
|
|
9
9
|
* @position Collapsible content primitive — trigger toggles visibility of children
|
|
10
10
|
*
|
|
11
11
|
* Collapsible is a standalone primitive that makes any content collapsible.
|
|
12
12
|
* It renders a trigger area (always visible) and a content area that toggles.
|
|
13
|
-
* Handles state management, accessibility (aria-expanded
|
|
14
|
-
* the trigger to its content region), and chevron indicator.
|
|
13
|
+
* Handles state management, accessibility (aria-expanded), and chevron indicator.
|
|
15
14
|
*
|
|
16
15
|
* Works standalone or coordinated by CollapsibleGroup via the `value` prop.
|
|
17
|
-
* When the surrounding CollapsibleGroup enables `dividers`, each Collapsible
|
|
18
|
-
* draws its own row chrome (borderBlockStart suppressed on :first-child, plus
|
|
19
|
-
* density padding) from CollapsibleGroupPresentationContext — StyleX has no
|
|
20
|
-
* child selectors, so the group cannot draw it from outside. The presentation
|
|
21
|
-
* context is reset around children so nested collapsibles stay chrome-free.
|
|
22
16
|
*
|
|
23
17
|
* SYNC: When modified, update these files to stay in sync:
|
|
24
18
|
* - /packages/core/src/Collapsible/index.ts (exports)
|
|
@@ -27,10 +21,9 @@
|
|
|
27
21
|
* - /packages/cli/templates/blocks/components/Collapsible/ (showcase blocks)
|
|
28
22
|
*/
|
|
29
23
|
|
|
30
|
-
import
|
|
24
|
+
import type {ReactNode} from 'react';
|
|
31
25
|
import * as stylex from '@stylexjs/stylex';
|
|
32
26
|
import {
|
|
33
|
-
borderVars,
|
|
34
27
|
colorVars,
|
|
35
28
|
typographyVars,
|
|
36
29
|
fontWeightVars,
|
|
@@ -40,7 +33,6 @@ import {
|
|
|
40
33
|
easeVars,
|
|
41
34
|
} from '../theme/tokens.stylex';
|
|
42
35
|
import {useCollapsible} from './useCollapsible';
|
|
43
|
-
import {CollapsibleGroupPresentationContext} from './CollapsibleGroupContext';
|
|
44
36
|
import {getIcon} from '../Icon/globalIconRegistry';
|
|
45
37
|
import {mergeProps} from '../utils';
|
|
46
38
|
import type {BaseProps} from '../BaseProps';
|
|
@@ -65,16 +57,6 @@ const styles = stylex.create({
|
|
|
65
57
|
color: colorVars['--color-text-primary'],
|
|
66
58
|
textAlign: 'start',
|
|
67
59
|
paddingBlock: 0,
|
|
68
|
-
// `all: unset` above wipes the UA focus outline; restore a keyboard-only
|
|
69
|
-
// focus ring using the standard token/offset (WCAG 2.4.7).
|
|
70
|
-
outline: {
|
|
71
|
-
default: null,
|
|
72
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
73
|
-
},
|
|
74
|
-
outlineOffset: {
|
|
75
|
-
default: '0',
|
|
76
|
-
':focus-visible': '2px',
|
|
77
|
-
},
|
|
78
60
|
},
|
|
79
61
|
// Capsize: trim leading from text triggers
|
|
80
62
|
triggerLabel: {
|
|
@@ -105,42 +87,8 @@ const styles = stylex.create({
|
|
|
105
87
|
content: {
|
|
106
88
|
paddingBlockStart: spacingVars['--spacing-1'],
|
|
107
89
|
},
|
|
108
|
-
// Group divider chrome — a hairline above every item except the first.
|
|
109
|
-
// The group's wrapper (or 'all' mode) owns the outer edges.
|
|
110
|
-
divided: {
|
|
111
|
-
borderBlockStartWidth: {
|
|
112
|
-
default: borderVars['--border-width'],
|
|
113
|
-
':first-child': '0',
|
|
114
|
-
},
|
|
115
|
-
borderBlockStartStyle: 'solid',
|
|
116
|
-
borderBlockStartColor: colorVars['--color-border'],
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// Density padding for divided/padded accordion rows. paddingBlock mapping
|
|
121
|
-
// follows Table's density scale (spacing-1/2/3); content only pads its end
|
|
122
|
-
// so text doesn't sit on the divider below (block-start stays spacing-1).
|
|
123
|
-
const densityStyles = stylex.create({
|
|
124
|
-
triggerCompact: {paddingBlock: spacingVars['--spacing-1']},
|
|
125
|
-
triggerBalanced: {paddingBlock: spacingVars['--spacing-2']},
|
|
126
|
-
triggerSpacious: {paddingBlock: spacingVars['--spacing-3']},
|
|
127
|
-
contentCompact: {paddingBlockEnd: spacingVars['--spacing-1']},
|
|
128
|
-
contentBalanced: {paddingBlockEnd: spacingVars['--spacing-2']},
|
|
129
|
-
contentSpacious: {paddingBlockEnd: spacingVars['--spacing-3']},
|
|
130
90
|
});
|
|
131
91
|
|
|
132
|
-
const triggerDensity = {
|
|
133
|
-
compact: densityStyles.triggerCompact,
|
|
134
|
-
balanced: densityStyles.triggerBalanced,
|
|
135
|
-
spacious: densityStyles.triggerSpacious,
|
|
136
|
-
} as const;
|
|
137
|
-
|
|
138
|
-
const contentDensity = {
|
|
139
|
-
compact: densityStyles.contentCompact,
|
|
140
|
-
balanced: densityStyles.contentBalanced,
|
|
141
|
-
spacious: densityStyles.contentSpacious,
|
|
142
|
-
} as const;
|
|
143
|
-
|
|
144
92
|
export interface CollapsibleProps extends BaseProps {
|
|
145
93
|
/** Ref forwarded to the root element */
|
|
146
94
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -244,25 +192,14 @@ export function Collapsible({
|
|
|
244
192
|
value,
|
|
245
193
|
});
|
|
246
194
|
|
|
247
|
-
const presentation = use(CollapsibleGroupPresentationContext);
|
|
248
|
-
const isDivided = presentation != null && presentation.dividers !== 'none';
|
|
249
|
-
const density = presentation?.density ?? null;
|
|
250
|
-
|
|
251
195
|
const chevronIcon = getIcon('chevronDown');
|
|
252
196
|
|
|
253
|
-
// Links the trigger to the region it shows/hides so assistive tech can move
|
|
254
|
-
// from the button to its controlled content (disclosure pattern).
|
|
255
|
-
const contentId = useId();
|
|
256
|
-
|
|
257
197
|
return (
|
|
258
198
|
<div
|
|
259
199
|
ref={ref}
|
|
260
200
|
{...mergeProps(
|
|
261
|
-
themeProps('collapsible',
|
|
262
|
-
|
|
263
|
-
density: density ?? undefined,
|
|
264
|
-
}),
|
|
265
|
-
stylex.props(styles.root, isDivided && styles.divided, xstyle),
|
|
201
|
+
themeProps('collapsible'),
|
|
202
|
+
stylex.props(styles.root, xstyle),
|
|
266
203
|
className,
|
|
267
204
|
style,
|
|
268
205
|
)}
|
|
@@ -271,11 +208,7 @@ export function Collapsible({
|
|
|
271
208
|
type="button"
|
|
272
209
|
onClick={toggle}
|
|
273
210
|
aria-expanded={isOpen}
|
|
274
|
-
|
|
275
|
-
{...stylex.props(
|
|
276
|
-
styles.trigger,
|
|
277
|
-
density != null && triggerDensity[density],
|
|
278
|
-
)}>
|
|
211
|
+
{...stylex.props(styles.trigger)}>
|
|
279
212
|
<span {...stylex.props(styles.triggerLabel)}>{trigger}</span>
|
|
280
213
|
<span
|
|
281
214
|
{...stylex.props(
|
|
@@ -286,19 +219,10 @@ export function Collapsible({
|
|
|
286
219
|
</span>
|
|
287
220
|
</button>
|
|
288
221
|
<div
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
styles.content,
|
|
292
|
-
|
|
293
|
-
!isOpen && styles.contentHidden,
|
|
294
|
-
)}>
|
|
295
|
-
{presentation != null ? (
|
|
296
|
-
<CollapsibleGroupPresentationContext value={null}>
|
|
297
|
-
{children}
|
|
298
|
-
</CollapsibleGroupPresentationContext>
|
|
299
|
-
) : (
|
|
300
|
-
children
|
|
301
|
-
)}
|
|
222
|
+
{...(isOpen
|
|
223
|
+
? stylex.props(styles.content)
|
|
224
|
+
: stylex.props(styles.content, styles.contentHidden))}>
|
|
225
|
+
{children}
|
|
302
226
|
</div>
|
|
303
227
|
</div>
|
|
304
228
|
);
|
|
@@ -7,7 +7,7 @@ export const docs = {
|
|
|
7
7
|
subComponentOf: 'Collapsible',
|
|
8
8
|
displayName: 'Collapsible Group',
|
|
9
9
|
isHiddenFromOverview: true,
|
|
10
|
-
description: 'Coordinates multiple Collapsible instances so only one (single mode) or any number (multiple mode) can be open at a time. Renders no wrapper DOM element
|
|
10
|
+
description: 'Coordinates multiple Collapsible instances so only one (single mode) or any number (multiple mode) can be open at a time. Renders no wrapper DOM element.',
|
|
11
11
|
props: [
|
|
12
12
|
{
|
|
13
13
|
name: 'type',
|
|
@@ -30,17 +30,6 @@ export const docs = {
|
|
|
30
30
|
type: '(value: string | string[]) => void',
|
|
31
31
|
description: 'Callback invoked when the set of open items changes.',
|
|
32
32
|
},
|
|
33
|
-
{
|
|
34
|
-
name: 'dividers',
|
|
35
|
-
type: "'between' | 'all' | 'none'",
|
|
36
|
-
description: "Divider style rendered around the group's items. 'between' draws hairlines between adjacent items; 'all' adds the group's top and bottom edges. When enabled, the group renders a wrapper div and items default to 'balanced' density. Pair with bare Collapsible children; Card-wrapped items provide their own separation.",
|
|
37
|
-
default: "'none'",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: 'density',
|
|
41
|
-
type: "'compact' | 'balanced' | 'spacious'",
|
|
42
|
-
description: "Row density controlling trigger and content block padding on the group's items. Defaults to 'balanced' when dividers are shown; otherwise items keep their default unpadded look.",
|
|
43
|
-
},
|
|
44
33
|
{
|
|
45
34
|
name: 'children',
|
|
46
35
|
type: 'ReactNode',
|
|
@@ -63,7 +52,7 @@ export const docsZh = {
|
|
|
63
52
|
name: 'CollapsibleGroup',
|
|
64
53
|
isHiddenFromOverview: true,
|
|
65
54
|
displayName: 'Collapsible Group',
|
|
66
|
-
description: '协调多个 Collapsible 实例,使同一时间只有一个(single 模式)或任意数量(multiple
|
|
55
|
+
description: '协调多个 Collapsible 实例,使同一时间只有一个(single 模式)或任意数量(multiple 模式)可以展开。不渲染包裹 DOM 元素。',
|
|
67
56
|
props: [
|
|
68
57
|
{
|
|
69
58
|
name: 'type',
|
|
@@ -86,17 +75,6 @@ export const docsZh = {
|
|
|
86
75
|
type: '(value: string | string[]) => void',
|
|
87
76
|
description: '展开项目集合变更时调用的回调。',
|
|
88
77
|
},
|
|
89
|
-
{
|
|
90
|
-
name: 'dividers',
|
|
91
|
-
type: "'between' | 'all' | 'none'",
|
|
92
|
-
description: "渲染在组项目周围的分隔线样式。'between' 仅在相邻项目之间绘制细线;'all' 额外绘制组的顶部和底部边缘。启用后组会渲染一个包裹 div,且项目默认使用 'balanced' 密度。适合搭配裸 Collapsible 子项使用;用 Card 包裹的项目自带视觉分隔。",
|
|
93
|
-
default: "'none'",
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: 'density',
|
|
97
|
-
type: "'compact' | 'balanced' | 'spacious'",
|
|
98
|
-
description: "控制组内项目触发器和内容块内边距的行密度。显示分隔线时默认为 'balanced';否则项目保持默认的无内边距外观。",
|
|
99
|
-
},
|
|
100
78
|
{
|
|
101
79
|
name: 'children',
|
|
102
80
|
type: 'ReactNode',
|
|
@@ -110,14 +88,12 @@ export const docsDense = {
|
|
|
110
88
|
name: 'CollapsibleGroup',
|
|
111
89
|
isHiddenFromOverview: true,
|
|
112
90
|
displayName: 'Collapsible Group',
|
|
113
|
-
description: 'coordinates multiple Collapsible instances; single or multiple open. no wrapper DOM
|
|
91
|
+
description: 'coordinates multiple Collapsible instances; single or multiple open. no wrapper DOM.',
|
|
114
92
|
propDescriptions: {
|
|
115
93
|
type: 'one or many items open simultaneously',
|
|
116
94
|
defaultValue: 'default open item(s) (uncontrolled); string for single, array for multiple',
|
|
117
95
|
value: 'controlled open item(s)',
|
|
118
96
|
onChange: 'callback on open items change',
|
|
119
|
-
dividers: "row hairlines: 'between' items only, 'all' adds outer edges, 'none' (default); enables wrapper div + 'balanced' density; use bare Collapsible children",
|
|
120
|
-
density: "row padding 'compact' | 'balanced' | 'spacious'; defaults 'balanced' with dividers, else unpadded",
|
|
121
97
|
children: 'Collapsible instances to coordinate',
|
|
122
98
|
},
|
|
123
99
|
};
|