@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
package/src/Grid/Grid.tsx
CHANGED
|
@@ -38,10 +38,9 @@ export type GridAlignment = 'start' | 'center' | 'end' | 'stretch';
|
|
|
38
38
|
* - `minWidth` — minimum width (px) for each column track
|
|
39
39
|
* - `repeat` — `'fill'` (default) preserves empty tracks for consistent widths;
|
|
40
40
|
* `'fit'` collapses empty tracks so items stretch to fill
|
|
41
|
-
* - `max` — caps the maximum number of columns
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* (no dead space on the right).
|
|
41
|
+
* - `max` — caps the maximum number of columns by limiting track max size.
|
|
42
|
+
* The grid stretches to 100% of its parent; `max` only limits how many
|
|
43
|
+
* columns appear.
|
|
45
44
|
*/
|
|
46
45
|
export type GridColumns =
|
|
47
46
|
| number
|
|
@@ -322,20 +321,9 @@ const spacingVarNames: Record<SpacingStep, string> = {
|
|
|
322
321
|
};
|
|
323
322
|
|
|
324
323
|
/**
|
|
325
|
-
* Build a grid-template-columns value that caps
|
|
326
|
-
*
|
|
327
|
-
* the
|
|
328
|
-
*
|
|
329
|
-
* The cap lives on the track's **min** size, not its max: each track is at
|
|
330
|
-
* least `perColumn = (100% - (max-1) * gap) / max`, so more than `max` columns
|
|
331
|
-
* can never fit. The track **max** stays `1fr`, so whenever fewer than `max`
|
|
332
|
-
* columns fit (most importantly a lone column on mobile) they still grow to
|
|
333
|
-
* fill the whole row — no dead space on the right.
|
|
334
|
-
*
|
|
335
|
-
* The track min is `max(minWidth, perColumn)` so an explicit `minWidth` is
|
|
336
|
-
* still honored, wrapped in `min(100%, …)` so a single column on a viewport
|
|
337
|
-
* narrower than `minWidth`/`perColumn` shrinks to the container instead of
|
|
338
|
-
* overflowing it.
|
|
324
|
+
* Build a grid-template-columns value that caps columns at `max` by
|
|
325
|
+
* limiting each track's max size to `(100% - (max-1) * gap) / max`.
|
|
326
|
+
* The grid stays 100% width; the track-max prevents more than `max` columns.
|
|
339
327
|
*/
|
|
340
328
|
function buildCappedTemplate(
|
|
341
329
|
minWidth: number,
|
|
@@ -351,17 +339,12 @@ function buildCappedTemplate(
|
|
|
351
339
|
? spacingVarNames[gap]
|
|
352
340
|
: null;
|
|
353
341
|
|
|
354
|
-
//
|
|
355
|
-
|
|
356
|
-
// the grid never fits more than `maxCols` columns.
|
|
357
|
-
const perColumn = gapVar
|
|
342
|
+
// trackMax = (100% - (maxCols - 1) * gap) / maxCols
|
|
343
|
+
const trackMax = gapVar
|
|
358
344
|
? `calc((100% - ${maxCols - 1} * var(${gapVar})) / ${maxCols})`
|
|
359
345
|
: `calc(100% / ${maxCols})`;
|
|
360
346
|
|
|
361
|
-
|
|
362
|
-
const trackMin = `min(100%, max(${minWidth}px, ${perColumn}))`;
|
|
363
|
-
|
|
364
|
-
return `repeat(${repeatMode}, minmax(${trackMin}, 1fr))`;
|
|
347
|
+
return `repeat(${repeatMode}, minmax(${minWidth}px, ${trackMax}))`;
|
|
365
348
|
}
|
|
366
349
|
|
|
367
350
|
/**
|
|
@@ -46,13 +46,13 @@ export const docs = {
|
|
|
46
46
|
{
|
|
47
47
|
name: 'placement',
|
|
48
48
|
type: "'above' | 'below' | 'start' | 'end'",
|
|
49
|
-
description:
|
|
49
|
+
description: 'Position relative to the anchor element.',
|
|
50
50
|
default: "'above'",
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
name: 'alignment',
|
|
54
54
|
type: "'start' | 'center' | 'end'",
|
|
55
|
-
description:
|
|
55
|
+
description: 'Alignment along the placement axis.',
|
|
56
56
|
default: "'center'",
|
|
57
57
|
},
|
|
58
58
|
{
|
|
@@ -155,13 +155,13 @@ export const docsZh = {
|
|
|
155
155
|
{
|
|
156
156
|
name: 'placement',
|
|
157
157
|
type: "'above' | 'below' | 'start' | 'end'",
|
|
158
|
-
description: '
|
|
158
|
+
description: '相对于锚点元素的位置。',
|
|
159
159
|
default: "'above'",
|
|
160
160
|
},
|
|
161
161
|
{
|
|
162
162
|
name: 'alignment',
|
|
163
163
|
type: "'start' | 'center' | 'end'",
|
|
164
|
-
description: '
|
|
164
|
+
description: '沿放置轴的对齐方式。',
|
|
165
165
|
default: "'center'",
|
|
166
166
|
},
|
|
167
167
|
{
|
|
@@ -246,8 +246,8 @@ export const docsDense = {
|
|
|
246
246
|
propDescriptions: {
|
|
247
247
|
children: 'Trigger element; must accept ref.',
|
|
248
248
|
content: 'Hover card content.',
|
|
249
|
-
placement: 'Position relative to anchor element.
|
|
250
|
-
alignment: 'Alignment along placement axis.
|
|
249
|
+
placement: 'Position relative to anchor element.',
|
|
250
|
+
alignment: 'Alignment along placement axis.',
|
|
251
251
|
delay: 'Show delay in ms.',
|
|
252
252
|
hideDelay: 'Hide delay in ms.',
|
|
253
253
|
focusTrigger: 'Controls when focus events trigger hover card.',
|
|
@@ -7,8 +7,8 @@ export const docs = {
|
|
|
7
7
|
group: 'HoverCard',
|
|
8
8
|
keywords: ['hovercard', 'hover', 'preview', 'card', 'tooltip', 'popup', 'floating', 'anchor'],
|
|
9
9
|
params: [
|
|
10
|
-
{name: 'placement', type: "'above' | 'below' | 'start' | 'end'", description:
|
|
11
|
-
{name: 'alignment', type: "'start' | 'center' | 'end'", description:
|
|
10
|
+
{name: 'placement', type: "'above' | 'below' | 'start' | 'end'", description: 'Position relative to the trigger.', default: "'above'"},
|
|
11
|
+
{name: 'alignment', type: "'start' | 'center' | 'end'", description: 'Alignment along the placement axis.', default: "'center'"},
|
|
12
12
|
{name: 'delay', type: 'number', description: 'Delay before showing the hover card on hover, in milliseconds.', default: '300'},
|
|
13
13
|
{name: 'hideDelay', type: 'number', description: 'Delay before hiding after mouse or focus leaves, in milliseconds.', default: '200'},
|
|
14
14
|
{name: 'focusTrigger', type: "'auto' | 'always' | 'never'", description: 'When focus should open the hover card. auto only attaches focus listeners to naturally focusable elements.', default: "'auto'"},
|
|
@@ -24,7 +24,7 @@ export const docs = {
|
|
|
24
24
|
{name: 'interactionRef', type: 'RefCallback<HTMLElement>', description: 'Ref for the hover/focus interaction element. Use with positionRef for split trigger patterns.'},
|
|
25
25
|
{name: 'anchorId', type: 'string', description: 'CSS anchor name for advanced positioning cases.'},
|
|
26
26
|
{name: 'describedBy', type: 'string', description: 'ID to compose into aria-describedby on the trigger.'},
|
|
27
|
-
{name: 'renderHoverCard', type:
|
|
27
|
+
{name: 'renderHoverCard', type: '(children: ReactNode, props?: ContextRenderProps) => ReactNode', description: 'Render function for the anchor-positioned hover card content.'},
|
|
28
28
|
{name: 'show', type: '() => void', description: 'Imperatively show the hover card immediately.'},
|
|
29
29
|
{name: 'hide', type: '() => void', description: 'Imperatively hide the hover card immediately.'},
|
|
30
30
|
],
|
|
@@ -46,8 +46,8 @@ export const docs = {
|
|
|
46
46
|
export const docsDense = {
|
|
47
47
|
description: 'Headless hover-triggered floating cards. Builds on useLayer w/ hover/focus intent, delays, safe hover behavior, aria-describedby. Use for rich previews when trigger/content rendering needs full control.',
|
|
48
48
|
paramDescriptions: {
|
|
49
|
-
placement: 'position relative to trigger.
|
|
50
|
-
alignment: 'alignment along placement axis.
|
|
49
|
+
placement: 'position relative to trigger.',
|
|
50
|
+
alignment: 'alignment along placement axis.',
|
|
51
51
|
delay: 'show delay in ms.',
|
|
52
52
|
hideDelay: 'hide delay after mouse/focus leave in ms.',
|
|
53
53
|
focusTrigger: 'when focus opens hover card; auto = naturally focusable elements only.',
|
|
@@ -181,14 +181,10 @@ export interface HoverCardReturn {
|
|
|
181
181
|
/**
|
|
182
182
|
* Render function for hover card content.
|
|
183
183
|
* Returns anchor-positioned popover element.
|
|
184
|
-
*
|
|
185
|
-
* `positioning` is excluded: the hover card always derives its position
|
|
186
|
-
* from placement/alignment, so accepting the custom opt-out here would be
|
|
187
|
-
* a silent no-op.
|
|
188
184
|
*/
|
|
189
185
|
renderHoverCard: (
|
|
190
186
|
children: ReactNode,
|
|
191
|
-
props?:
|
|
187
|
+
props?: ContextRenderProps,
|
|
192
188
|
) => ReactNode;
|
|
193
189
|
|
|
194
190
|
/**
|
|
@@ -454,10 +450,7 @@ export function useHoverCard(options: HoverCardOptions = {}): HoverCardReturn {
|
|
|
454
450
|
|
|
455
451
|
// Render function that wraps layer.render with hover card behavior
|
|
456
452
|
const renderHoverCard = useCallback(
|
|
457
|
-
(
|
|
458
|
-
children: ReactNode,
|
|
459
|
-
props?: Omit<ContextRenderProps, 'positioning'>,
|
|
460
|
-
): ReactNode => {
|
|
453
|
+
(children: ReactNode, props?: ContextRenderProps): ReactNode => {
|
|
461
454
|
const renderPlacement = props?.placement ?? placement;
|
|
462
455
|
const renderProps = {
|
|
463
456
|
placement: renderPlacement,
|
package/src/Icon/Icon.test.tsx
CHANGED
|
@@ -11,48 +11,48 @@
|
|
|
11
11
|
|
|
12
12
|
import {describe, it, expect, vi} from 'vitest';
|
|
13
13
|
import {render, screen} from '@testing-library/react';
|
|
14
|
-
import {
|
|
14
|
+
import {HomeIcon} from '@heroicons/react/24/outline';
|
|
15
15
|
import {Icon} from './Icon';
|
|
16
16
|
|
|
17
17
|
describe('Icon', () => {
|
|
18
18
|
it('renders the icon component', () => {
|
|
19
|
-
render(<Icon icon={
|
|
19
|
+
render(<Icon icon={HomeIcon} data-testid="icon" />);
|
|
20
20
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
it('renders as an SVG element', () => {
|
|
24
|
-
render(<Icon icon={
|
|
24
|
+
render(<Icon icon={HomeIcon} data-testid="icon" />);
|
|
25
25
|
const icon = screen.getByTestId('icon');
|
|
26
26
|
expect(icon.tagName.toLowerCase()).toBe('svg');
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
it('applies aria-hidden by default', () => {
|
|
30
|
-
render(<Icon icon={
|
|
30
|
+
render(<Icon icon={HomeIcon} data-testid="icon" />);
|
|
31
31
|
expect(screen.getByTestId('icon')).toHaveAttribute('aria-hidden', 'true');
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
it('renders with different color variants', () => {
|
|
35
35
|
const {rerender} = render(
|
|
36
|
-
<Icon icon={
|
|
36
|
+
<Icon icon={HomeIcon} color="primary" data-testid="icon" />,
|
|
37
37
|
);
|
|
38
38
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
39
39
|
|
|
40
|
-
rerender(<Icon icon={
|
|
40
|
+
rerender(<Icon icon={HomeIcon} color="secondary" data-testid="icon" />);
|
|
41
41
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
42
42
|
|
|
43
|
-
rerender(<Icon icon={
|
|
43
|
+
rerender(<Icon icon={HomeIcon} color="accent" data-testid="icon" />);
|
|
44
44
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
45
45
|
|
|
46
|
-
rerender(<Icon icon={
|
|
46
|
+
rerender(<Icon icon={HomeIcon} color="success" data-testid="icon" />);
|
|
47
47
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
48
48
|
|
|
49
|
-
rerender(<Icon icon={
|
|
49
|
+
rerender(<Icon icon={HomeIcon} color="error" data-testid="icon" />);
|
|
50
50
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
51
51
|
|
|
52
|
-
rerender(<Icon icon={
|
|
52
|
+
rerender(<Icon icon={HomeIcon} color="warning" data-testid="icon" />);
|
|
53
53
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
54
54
|
|
|
55
|
-
rerender(<Icon icon={
|
|
55
|
+
rerender(<Icon icon={HomeIcon} color="inherit" data-testid="icon" />);
|
|
56
56
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
57
57
|
});
|
|
58
58
|
|
|
@@ -70,41 +70,50 @@ describe('Icon', () => {
|
|
|
70
70
|
'purple',
|
|
71
71
|
] as const;
|
|
72
72
|
const {rerender} = render(
|
|
73
|
-
<Icon
|
|
73
|
+
<Icon
|
|
74
|
+
icon={HomeIcon}
|
|
75
|
+
color={nonSemanticColors[0]}
|
|
76
|
+
data-testid="icon"
|
|
77
|
+
/>,
|
|
74
78
|
);
|
|
75
79
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
76
80
|
|
|
77
81
|
for (const c of nonSemanticColors.slice(1)) {
|
|
78
|
-
rerender(<Icon icon={
|
|
82
|
+
rerender(<Icon icon={HomeIcon} color={c} data-testid="icon" />);
|
|
79
83
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
80
84
|
}
|
|
81
85
|
});
|
|
82
86
|
|
|
83
87
|
it('renders with different size variants', () => {
|
|
84
88
|
const {rerender} = render(
|
|
85
|
-
<Icon icon={
|
|
89
|
+
<Icon icon={HomeIcon} size="xsm" data-testid="icon" />,
|
|
86
90
|
);
|
|
87
91
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
88
92
|
|
|
89
|
-
rerender(<Icon icon={
|
|
93
|
+
rerender(<Icon icon={HomeIcon} size="sm" data-testid="icon" />);
|
|
90
94
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
91
95
|
|
|
92
|
-
rerender(<Icon icon={
|
|
96
|
+
rerender(<Icon icon={HomeIcon} size="md" data-testid="icon" />);
|
|
93
97
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
94
98
|
|
|
95
|
-
rerender(<Icon icon={
|
|
99
|
+
rerender(<Icon icon={HomeIcon} size="lg" data-testid="icon" />);
|
|
96
100
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
97
101
|
});
|
|
98
102
|
|
|
99
103
|
it('forwards ref correctly', () => {
|
|
100
104
|
const ref = vi.fn();
|
|
101
|
-
render(<Icon icon={
|
|
105
|
+
render(<Icon icon={HomeIcon} ref={ref} />);
|
|
102
106
|
expect(ref).toHaveBeenCalledWith(expect.any(SVGSVGElement));
|
|
103
107
|
});
|
|
104
108
|
|
|
105
109
|
it('passes additional SVG props', () => {
|
|
106
110
|
render(
|
|
107
|
-
<Icon
|
|
111
|
+
<Icon
|
|
112
|
+
icon={HomeIcon}
|
|
113
|
+
data-testid="icon"
|
|
114
|
+
role="img"
|
|
115
|
+
aria-label="Home"
|
|
116
|
+
/>,
|
|
108
117
|
);
|
|
109
118
|
const icon = screen.getByTestId('icon');
|
|
110
119
|
expect(icon).toHaveAttribute('role', 'img');
|
|
@@ -112,29 +121,8 @@ describe('Icon', () => {
|
|
|
112
121
|
});
|
|
113
122
|
|
|
114
123
|
it('uses default color and size when not specified', () => {
|
|
115
|
-
render(<Icon icon={
|
|
124
|
+
render(<Icon icon={HomeIcon} data-testid="icon" />);
|
|
116
125
|
// The component should render without errors with defaults
|
|
117
126
|
expect(screen.getByTestId('icon')).toBeInTheDocument();
|
|
118
127
|
});
|
|
119
|
-
|
|
120
|
-
it('applies aria-hidden by default in string (registry) mode', () => {
|
|
121
|
-
render(<Icon icon="check" data-testid="icon" />);
|
|
122
|
-
expect(screen.getByTestId('icon')).toHaveAttribute('aria-hidden', 'true');
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('lets a string-mode icon be made meaningful by overriding aria-hidden', () => {
|
|
126
|
-
render(
|
|
127
|
-
<Icon
|
|
128
|
-
icon="check"
|
|
129
|
-
data-testid="icon"
|
|
130
|
-
role="img"
|
|
131
|
-
aria-label="Done"
|
|
132
|
-
aria-hidden={false}
|
|
133
|
-
/>,
|
|
134
|
-
);
|
|
135
|
-
const icon = screen.getByTestId('icon');
|
|
136
|
-
expect(icon).toHaveAttribute('role', 'img');
|
|
137
|
-
expect(icon).toHaveAttribute('aria-label', 'Done');
|
|
138
|
-
expect(icon).toHaveAttribute('aria-hidden', 'false');
|
|
139
|
-
});
|
|
140
128
|
});
|
package/src/Icon/Icon.tsx
CHANGED
|
@@ -281,16 +281,12 @@ function IconFromRegistry({
|
|
|
281
281
|
|
|
282
282
|
return (
|
|
283
283
|
<span
|
|
284
|
-
// Decorative by default, but placed BEFORE the prop spread so consumers
|
|
285
|
-
// can override it (e.g. `aria-hidden={false}` + `role="img"` +
|
|
286
|
-
// `aria-label`) to expose a meaningful standalone icon. This matches
|
|
287
|
-
// component-mode Icon, which already sets aria-hidden before its spread.
|
|
288
|
-
aria-hidden="true"
|
|
289
284
|
{...(spanProps as React.HTMLAttributes<HTMLSpanElement>)}
|
|
290
285
|
{...mergeProps(
|
|
291
286
|
themeProps('icon', {size, color}),
|
|
292
287
|
stylex.props(styles.span, colorStyles[color], spanSizeStyles[size]),
|
|
293
|
-
)}
|
|
288
|
+
)}
|
|
289
|
+
aria-hidden="true">
|
|
294
290
|
{resolvedIcon}
|
|
295
291
|
</span>
|
|
296
292
|
);
|
|
@@ -201,11 +201,11 @@ export function InputGroup({
|
|
|
201
201
|
labelTooltip={labelTooltip}>
|
|
202
202
|
<div
|
|
203
203
|
ref={ref}
|
|
204
|
-
data-testid={testId}
|
|
205
|
-
{...rest}
|
|
206
204
|
role="group"
|
|
207
205
|
aria-labelledby={labelID}
|
|
208
206
|
aria-describedby={describedByIDs}
|
|
207
|
+
data-testid={testId}
|
|
208
|
+
{...rest}
|
|
209
209
|
{...mergeProps(
|
|
210
210
|
themeProps('input-group', {
|
|
211
211
|
size,
|
package/src/Item/Item.tsx
CHANGED
|
@@ -470,9 +470,9 @@ export function Item({
|
|
|
470
470
|
return (
|
|
471
471
|
<Component
|
|
472
472
|
ref={ref as React.Ref<never>}
|
|
473
|
-
{...restProps}
|
|
474
473
|
aria-selected={isSelected || undefined}
|
|
475
474
|
aria-disabled={isDisabled || undefined}
|
|
475
|
+
{...restProps}
|
|
476
476
|
{...mergeProps(
|
|
477
477
|
themeProps('item', {density, align}),
|
|
478
478
|
stylex.props(
|
|
@@ -78,7 +78,7 @@ export const docs = {
|
|
|
78
78
|
name: 'render',
|
|
79
79
|
type: '(children: ReactNode, props: ContextRenderProps | FixedRenderProps) => ReactNode',
|
|
80
80
|
description:
|
|
81
|
-
'Render function for the popover element. Pass placement/alignment in context mode or x/y in fixed mode.
|
|
81
|
+
'Render function for the popover element. Pass placement/alignment in context mode or x/y in fixed mode. In context mode, pass `as: "span"` to render an inline-safe layer (e.g. inside a paragraph). The layer renders inline in the React tree; the Popover API promotes it to the top layer when shown, so it escapes ancestor clipping and stacking without a portal.',
|
|
82
82
|
},
|
|
83
83
|
],
|
|
84
84
|
usage: {
|
|
@@ -130,7 +130,7 @@ export const docsDense = {
|
|
|
130
130
|
hide: 'hide layer.',
|
|
131
131
|
isOpen: 'whether layer is open.',
|
|
132
132
|
id: 'unique ARIA id.',
|
|
133
|
-
render: 'renders popover element; pass placement/alignment or x/y.
|
|
133
|
+
render: 'renders popover element; pass placement/alignment or x/y. Context mode accepts `as: "span"` for inline-safe layers. Renders inline; the Popover API top layer escapes clipping/stacking without a portal.',
|
|
134
134
|
},
|
|
135
135
|
usage: {
|
|
136
136
|
description:
|
|
@@ -3,21 +3,15 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file useLayer.test.tsx
|
|
5
5
|
* @input Uses vitest, @testing-library/react, useLayer hook
|
|
6
|
-
* @output
|
|
6
|
+
* @output Unit tests for useLayer show/hide behavior and feature-detection guards
|
|
7
7
|
* @position Testing; validates useLayer.tsx implementation
|
|
8
8
|
*
|
|
9
|
-
* SYNC: When useLayer.tsx changes, update tests
|
|
9
|
+
* SYNC: When useLayer.tsx changes, update tests to match new behavior
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import {describe, it, expect, vi, afterEach} from 'vitest';
|
|
13
13
|
import {render, act} from '@testing-library/react';
|
|
14
|
-
import userEvent from '@testing-library/user-event';
|
|
15
14
|
import {useLayer} from './useLayer';
|
|
16
|
-
import type {
|
|
17
|
-
LayerPlacement,
|
|
18
|
-
LayerAlignment,
|
|
19
|
-
ContextRenderProps,
|
|
20
|
-
} from './useLayer';
|
|
21
15
|
|
|
22
16
|
/**
|
|
23
17
|
* Minimal harness that exposes the imperative show/hide callbacks and renders
|
|
@@ -115,216 +109,3 @@ describe('useLayer', () => {
|
|
|
115
109
|
});
|
|
116
110
|
});
|
|
117
111
|
});
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Harness that owns the trigger element.
|
|
121
|
-
*/
|
|
122
|
-
function Harness({
|
|
123
|
-
placement,
|
|
124
|
-
alignment,
|
|
125
|
-
triggerStyle,
|
|
126
|
-
triggerDir,
|
|
127
|
-
}: {
|
|
128
|
-
placement: LayerPlacement;
|
|
129
|
-
alignment: LayerAlignment;
|
|
130
|
-
triggerStyle?: React.CSSProperties;
|
|
131
|
-
triggerDir?: string;
|
|
132
|
-
}) {
|
|
133
|
-
const layer = useLayer({mode: 'context'});
|
|
134
|
-
return (
|
|
135
|
-
<>
|
|
136
|
-
<button
|
|
137
|
-
type="button"
|
|
138
|
-
ref={layer.ref}
|
|
139
|
-
dir={triggerDir}
|
|
140
|
-
style={triggerStyle}
|
|
141
|
-
onClick={layer.isOpen ? layer.hide : layer.show}>
|
|
142
|
-
trigger
|
|
143
|
-
</button>
|
|
144
|
-
{layer.render(<span>content</span>, {placement, alignment})}
|
|
145
|
-
</>
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
async function openAndGetStyle(ui: React.ReactElement): Promise<string> {
|
|
150
|
-
const user = userEvent.setup();
|
|
151
|
-
const {container, getByRole} = render(ui);
|
|
152
|
-
await user.click(getByRole('button', {name: 'trigger'}));
|
|
153
|
-
const popover = container.querySelector('[popover]');
|
|
154
|
-
return popover?.getAttribute('style') ?? '';
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
describe('useLayer context positioning', () => {
|
|
158
|
-
// The mapping uses the self-* logical keyword family, so the emitted
|
|
159
|
-
// string is direction-independent by construction: the browser resolves
|
|
160
|
-
// the inline axis against the popover's own inherited direction, and RTL
|
|
161
|
-
// mirrors with no JS. jsdom has no layout engine, so these tests can only
|
|
162
|
-
// assert the emitted string — the actual RTL geometry is covered by the
|
|
163
|
-
// RTL Storybook story (and was verified against the full 12-cell matrix
|
|
164
|
-
// in a real browser).
|
|
165
|
-
describe('self-* position-area mapping', () => {
|
|
166
|
-
it.each([
|
|
167
|
-
// [placement, alignment, expected position-area]
|
|
168
|
-
['above', 'start', 'self-block-start span-self-inline-end'],
|
|
169
|
-
['above', 'center', 'self-block-start'],
|
|
170
|
-
['above', 'end', 'self-block-start span-self-inline-start'],
|
|
171
|
-
['below', 'start', 'self-block-end span-self-inline-end'],
|
|
172
|
-
['below', 'center', 'self-block-end'],
|
|
173
|
-
['below', 'end', 'self-block-end span-self-inline-start'],
|
|
174
|
-
['start', 'start', 'self-inline-start span-self-block-end'],
|
|
175
|
-
['start', 'center', 'self-inline-start'],
|
|
176
|
-
['start', 'end', 'self-inline-start span-self-block-start'],
|
|
177
|
-
['end', 'start', 'self-inline-end span-self-block-end'],
|
|
178
|
-
['end', 'center', 'self-inline-end'],
|
|
179
|
-
['end', 'end', 'self-inline-end span-self-block-start'],
|
|
180
|
-
] as const)(
|
|
181
|
-
'placement=%s alignment=%s emits position-area %s',
|
|
182
|
-
async (placement, alignment, expectedArea) => {
|
|
183
|
-
const style = await openAndGetStyle(
|
|
184
|
-
<Harness placement={placement} alignment={alignment} />,
|
|
185
|
-
);
|
|
186
|
-
expect(style).toMatch(
|
|
187
|
-
new RegExp(`position-area: ${expectedArea}(;|$)`),
|
|
188
|
-
);
|
|
189
|
-
expect(style).not.toContain('justify-self');
|
|
190
|
-
},
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
it('emits the same string regardless of trigger direction', async () => {
|
|
194
|
-
const user = userEvent.setup();
|
|
195
|
-
const first = render(<Harness placement="below" alignment="start" />);
|
|
196
|
-
await user.click(first.getByRole('button', {name: 'trigger'}));
|
|
197
|
-
const ltr =
|
|
198
|
-
first.container.querySelector('[popover]')?.getAttribute('style') ?? '';
|
|
199
|
-
first.unmount();
|
|
200
|
-
|
|
201
|
-
const second = render(
|
|
202
|
-
<Harness
|
|
203
|
-
placement="below"
|
|
204
|
-
alignment="start"
|
|
205
|
-
triggerDir="rtl"
|
|
206
|
-
triggerStyle={{direction: 'rtl'}}
|
|
207
|
-
/>,
|
|
208
|
-
);
|
|
209
|
-
await user.click(second.getByRole('button', {name: 'trigger'}));
|
|
210
|
-
const rtl =
|
|
211
|
-
second.container.querySelector('[popover]')?.getAttribute('style') ??
|
|
212
|
-
'';
|
|
213
|
-
// The unique position-anchor id differs per render; the placement
|
|
214
|
-
// mapping must not.
|
|
215
|
-
const positionArea = (s: string) => s.match(/position-area:[^;]*/)?.[0];
|
|
216
|
-
expect(positionArea(rtl)).toBeDefined();
|
|
217
|
-
expect(positionArea(rtl)).toBe(positionArea(ltr));
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it('keeps position-try fallbacks intact', async () => {
|
|
221
|
-
const style = await openAndGetStyle(
|
|
222
|
-
<Harness placement="below" alignment="start" />,
|
|
223
|
-
);
|
|
224
|
-
expect(style).toContain(
|
|
225
|
-
'position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline',
|
|
226
|
-
);
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
describe("positioning='custom' (consumer-authored position styles)", () => {
|
|
231
|
-
// Consumers like Carousel and Tokenizer keep useLayer's popover behavior
|
|
232
|
-
// and anchor wiring but position the layer themselves. The opt-out must
|
|
233
|
-
// suppress every placement-derived style — position-area and the try
|
|
234
|
-
// fallbacks — so those consumers never need to know which properties
|
|
235
|
-
// the hook would have emitted.
|
|
236
|
-
function CustomHarness({
|
|
237
|
-
triggerStyle,
|
|
238
|
-
renderProps,
|
|
239
|
-
}: {
|
|
240
|
-
triggerStyle?: React.CSSProperties;
|
|
241
|
-
renderProps: ContextRenderProps;
|
|
242
|
-
}) {
|
|
243
|
-
const layer = useLayer({mode: 'context'});
|
|
244
|
-
return (
|
|
245
|
-
<>
|
|
246
|
-
<button
|
|
247
|
-
type="button"
|
|
248
|
-
ref={layer.ref}
|
|
249
|
-
style={triggerStyle}
|
|
250
|
-
onClick={layer.isOpen ? layer.hide : layer.show}>
|
|
251
|
-
trigger
|
|
252
|
-
</button>
|
|
253
|
-
{layer.render(<span>content</span>, renderProps)}
|
|
254
|
-
</>
|
|
255
|
-
);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
it('keeps the anchor wiring but derives no placement styles', async () => {
|
|
259
|
-
const style = await openAndGetStyle(
|
|
260
|
-
<CustomHarness
|
|
261
|
-
renderProps={{
|
|
262
|
-
positioning: 'custom',
|
|
263
|
-
style: {positionArea: 'center'},
|
|
264
|
-
}}
|
|
265
|
-
/>,
|
|
266
|
-
);
|
|
267
|
-
expect(style).toContain('position-anchor');
|
|
268
|
-
// The consumer-authored area is the only one present…
|
|
269
|
-
expect(style).toContain('position-area: center');
|
|
270
|
-
// …and no placement-derived styles leak through.
|
|
271
|
-
expect(style).not.toContain('position-try-fallbacks');
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
it('ignores placement and alignment when positioning is custom', async () => {
|
|
275
|
-
// placement/alignment are documented as ignored under custom. Derived
|
|
276
|
-
// output would be position-area "self-block-end span-self-inline-end";
|
|
277
|
-
// none of it may appear.
|
|
278
|
-
const style = await openAndGetStyle(
|
|
279
|
-
<CustomHarness
|
|
280
|
-
renderProps={{
|
|
281
|
-
positioning: 'custom',
|
|
282
|
-
placement: 'below',
|
|
283
|
-
alignment: 'start',
|
|
284
|
-
style: {positionArea: 'center'},
|
|
285
|
-
}}
|
|
286
|
-
/>,
|
|
287
|
-
);
|
|
288
|
-
expect(style).toContain('position-anchor');
|
|
289
|
-
expect(style).toContain('position-area: center');
|
|
290
|
-
expect(style).not.toContain('self-block');
|
|
291
|
-
expect(style).not.toContain('position-try-fallbacks');
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
it('emits only the anchor wiring when custom positioning passes no style at all', async () => {
|
|
295
|
-
// The strongest suppression probe: with no consumer style in the merge
|
|
296
|
-
// (Tokenizer's insets-only shape reduces to this in jsdom), nothing can
|
|
297
|
-
// clobber a leaked derived value — any position-area or try-fallbacks
|
|
298
|
-
// in the output is a genuine leak.
|
|
299
|
-
const style = await openAndGetStyle(
|
|
300
|
-
<CustomHarness renderProps={{positioning: 'custom'}} />,
|
|
301
|
-
);
|
|
302
|
-
expect(style).toContain('position-anchor');
|
|
303
|
-
expect(style).not.toContain('position-area');
|
|
304
|
-
expect(style).not.toContain('position-try-fallbacks');
|
|
305
|
-
});
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
it('fixed mode emits no anchor-positioning styles', async () => {
|
|
309
|
-
function FixedHarness() {
|
|
310
|
-
const layer = useLayer({mode: 'fixed'});
|
|
311
|
-
return (
|
|
312
|
-
<>
|
|
313
|
-
<button type="button" onClick={layer.show}>
|
|
314
|
-
opener
|
|
315
|
-
</button>
|
|
316
|
-
{layer.render(<span>content</span>, {x: 10, y: 20})}
|
|
317
|
-
</>
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
const user = userEvent.setup();
|
|
322
|
-
const {container, getByRole} = render(<FixedHarness />);
|
|
323
|
-
await user.click(getByRole('button', {name: 'opener'}));
|
|
324
|
-
|
|
325
|
-
const style =
|
|
326
|
-
container.querySelector('[popover]')?.getAttribute('style') ?? '';
|
|
327
|
-
expect(style).not.toContain('position-area');
|
|
328
|
-
expect(style).not.toContain('position-anchor');
|
|
329
|
-
});
|
|
330
|
-
});
|