@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
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* SYNC: When AspectRatio.tsx changes, update tests to match new behavior
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {describe, it, expect, vi
|
|
12
|
+
import {describe, it, expect, vi} from 'vitest';
|
|
13
13
|
import {render, screen} from '@testing-library/react';
|
|
14
14
|
import {AspectRatio} from './AspectRatio';
|
|
15
15
|
|
|
@@ -176,145 +176,4 @@ describe('AspectRatio', () => {
|
|
|
176
176
|
const video = screen.getByTestId('video');
|
|
177
177
|
expect(video).toBeInTheDocument();
|
|
178
178
|
});
|
|
179
|
-
|
|
180
|
-
describe('fit', () => {
|
|
181
|
-
it('marks the child\'s direct parent with data-astryx-aspect-ratio-override for fit="cover"', () => {
|
|
182
|
-
render(
|
|
183
|
-
<AspectRatio ratio={16 / 9} fit="cover">
|
|
184
|
-
<img src="test.jpg" alt="Test" data-testid="image" />
|
|
185
|
-
</AspectRatio>,
|
|
186
|
-
);
|
|
187
|
-
// The marker sits on the child's actual parent, so the reset.css
|
|
188
|
-
// sizing rules are direct-child selectors with no dependence on
|
|
189
|
-
// AspectRatio's internal structure.
|
|
190
|
-
const wrapper = screen.getByTestId('image').parentElement;
|
|
191
|
-
expect(wrapper).toHaveAttribute(
|
|
192
|
-
'data-astryx-aspect-ratio-override',
|
|
193
|
-
'cover',
|
|
194
|
-
);
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it('marks the child\'s direct parent with data-astryx-aspect-ratio-override for fit="contain"', () => {
|
|
198
|
-
render(
|
|
199
|
-
<AspectRatio ratio={16 / 9} fit="contain">
|
|
200
|
-
<img src="test.jpg" alt="Test" data-testid="image" />
|
|
201
|
-
</AspectRatio>,
|
|
202
|
-
);
|
|
203
|
-
const wrapper = screen.getByTestId('image').parentElement;
|
|
204
|
-
expect(wrapper).toHaveAttribute(
|
|
205
|
-
'data-astryx-aspect-ratio-override',
|
|
206
|
-
'contain',
|
|
207
|
-
);
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
it('does not expose fit on the theming surface', () => {
|
|
211
|
-
render(
|
|
212
|
-
<AspectRatio ratio={16 / 9} fit="cover" data-testid="aspect-ratio">
|
|
213
|
-
<img src="test.jpg" alt="Test" />
|
|
214
|
-
</AspectRatio>,
|
|
215
|
-
);
|
|
216
|
-
const element = screen.getByTestId('aspect-ratio');
|
|
217
|
-
// fit is structural, not visual — no data-fit attribute or class
|
|
218
|
-
// token on the themeable root (only shape is a theming target).
|
|
219
|
-
expect(element).not.toHaveAttribute('data-fit');
|
|
220
|
-
expect(element.className).not.toContain('cover');
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
it('emits no marker when fit is omitted (back-compat)', () => {
|
|
224
|
-
render(
|
|
225
|
-
<AspectRatio ratio={16 / 9} data-testid="aspect-ratio">
|
|
226
|
-
<img src="test.jpg" alt="Test" data-testid="image" />
|
|
227
|
-
</AspectRatio>,
|
|
228
|
-
);
|
|
229
|
-
const wrapper = screen.getByTestId('image').parentElement;
|
|
230
|
-
expect(wrapper).not.toHaveAttribute('data-astryx-aspect-ratio-override');
|
|
231
|
-
// Without the marker, none of the reset.css fit rules can match, so
|
|
232
|
-
// existing self-styled children render exactly as before.
|
|
233
|
-
expect(screen.getByTestId('image')).not.toHaveAttribute('class');
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it('never touches the child element props', () => {
|
|
237
|
-
render(
|
|
238
|
-
<AspectRatio ratio={16 / 9} fit="cover">
|
|
239
|
-
<img
|
|
240
|
-
src="test.jpg"
|
|
241
|
-
alt="Test"
|
|
242
|
-
data-testid="image"
|
|
243
|
-
className="consumer-class"
|
|
244
|
-
style={{objectFit: 'contain'}}
|
|
245
|
-
/>
|
|
246
|
-
</AspectRatio>,
|
|
247
|
-
);
|
|
248
|
-
const image = screen.getByTestId('image');
|
|
249
|
-
// Fit styling is pure CSS (zero-specificity reset rules); the child's
|
|
250
|
-
// own className/style pass through untouched and always win, so
|
|
251
|
-
// children that already size themselves keep their behavior.
|
|
252
|
-
expect(image.className).toBe('consumer-class');
|
|
253
|
-
expect(image.style.objectFit).toBe('contain');
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
it('centers the child via the wrapper with fit="center"', () => {
|
|
257
|
-
render(
|
|
258
|
-
<AspectRatio ratio={16 / 9} fit="center">
|
|
259
|
-
<img src="test.jpg" alt="Test" data-testid="image" />
|
|
260
|
-
</AspectRatio>,
|
|
261
|
-
);
|
|
262
|
-
const image = screen.getByTestId('image');
|
|
263
|
-
expect(image).not.toHaveAttribute('class');
|
|
264
|
-
const wrapper = image.parentElement;
|
|
265
|
-
expect(wrapper?.className).toContain('childCenter');
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it('does not center the wrapper for other fit values', () => {
|
|
269
|
-
render(
|
|
270
|
-
<AspectRatio ratio={16 / 9} fit="cover">
|
|
271
|
-
<img src="test.jpg" alt="Test" data-testid="image" />
|
|
272
|
-
</AspectRatio>,
|
|
273
|
-
);
|
|
274
|
-
const wrapper = screen.getByTestId('image').parentElement;
|
|
275
|
-
expect(wrapper?.className).not.toContain('childCenter');
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
describe('reset.css fit baseline rules', () => {
|
|
280
|
-
// The cover/contain child sizing ships as zero-specificity baseline
|
|
281
|
-
// rules in reset.css keyed on the data-astryx-aspect-ratio-override
|
|
282
|
-
// marker the component sets on the child's direct parent. These
|
|
283
|
-
// assertions keep the stylesheet in sync with the component contract.
|
|
284
|
-
let resetCSS: string;
|
|
285
|
-
|
|
286
|
-
beforeAll(async () => {
|
|
287
|
-
const fs = await import('fs');
|
|
288
|
-
const path = await import('path');
|
|
289
|
-
resetCSS = fs.readFileSync(
|
|
290
|
-
path.resolve(__dirname, '../reset.css'),
|
|
291
|
-
'utf-8',
|
|
292
|
-
);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it('sizes the child to fill the box for cover and contain', () => {
|
|
296
|
-
const fillMatch = resetCSS.match(
|
|
297
|
-
/:where\(\[data-astryx-aspect-ratio-override="cover"\], \[data-astryx-aspect-ratio-override="contain"\]\)\s*>\s*:where\(\*\)\s*\{([^}]+)\}/,
|
|
298
|
-
);
|
|
299
|
-
expect(fillMatch).not.toBeNull();
|
|
300
|
-
expect(fillMatch![1]).toContain('width: 100%');
|
|
301
|
-
expect(fillMatch![1]).toContain('height: 100%');
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
it('crops media with object-fit: cover for fit="cover"', () => {
|
|
305
|
-
const coverMatch = resetCSS.match(
|
|
306
|
-
/:where\(\[data-astryx-aspect-ratio-override="cover"\]\)\s*>\s*:where\(img, video\)\s*\{([^}]+)\}/,
|
|
307
|
-
);
|
|
308
|
-
expect(coverMatch).not.toBeNull();
|
|
309
|
-
expect(coverMatch![1]).toContain('object-fit: cover');
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
it('letterboxes media with object-fit: contain for fit="contain"', () => {
|
|
313
|
-
const containMatch = resetCSS.match(
|
|
314
|
-
/:where\(\[data-astryx-aspect-ratio-override="contain"\]\)\s*>\s*:where\(img, video\)\s*\{([^}]+)\}/,
|
|
315
|
-
);
|
|
316
|
-
expect(containMatch).not.toBeNull();
|
|
317
|
-
expect(containMatch![1]).toContain('object-fit: contain');
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
179
|
});
|
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @file AspectRatio.tsx
|
|
7
7
|
* @input Uses React, stylex
|
|
8
|
-
* @output Exports AspectRatio component
|
|
8
|
+
* @output Exports AspectRatio component and AspectRatioProps
|
|
9
9
|
* @position AspectRatio component; maintains a specific aspect ratio for its children
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update these files to stay in sync:
|
|
12
12
|
* - /packages/core/src/AspectRatio/AspectRatio.doc.mjs
|
|
13
13
|
* - /packages/core/src/AspectRatio/AspectRatio.test.tsx
|
|
14
|
-
* - /packages/core/src/reset.css (AspectRatio fit baseline rules)
|
|
15
14
|
* - /apps/storybook/stories/AspectRatio.stories.tsx
|
|
16
15
|
* - /packages/cli/templates/blocks/components/AspectRatio/ (showcase blocks)
|
|
17
16
|
*/
|
|
@@ -30,16 +29,6 @@ import {themeProps} from '../utils/themeProps';
|
|
|
30
29
|
*/
|
|
31
30
|
export type AspectRatioShape = 'rectangle' | 'ellipse';
|
|
32
31
|
|
|
33
|
-
/**
|
|
34
|
-
* How the child is sized and positioned inside the ratio box.
|
|
35
|
-
* - `cover`: the child fills the box; media is cropped to preserve its own
|
|
36
|
-
* aspect ratio (`object-fit: cover`).
|
|
37
|
-
* - `contain`: the child fills the box; media is letterboxed to stay fully
|
|
38
|
-
* visible (`object-fit: contain`).
|
|
39
|
-
* - `center`: the child keeps its natural size and sits centered in the box.
|
|
40
|
-
*/
|
|
41
|
-
export type AspectRatioFit = 'cover' | 'contain' | 'center';
|
|
42
|
-
|
|
43
32
|
export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
|
|
44
33
|
/** Ref forwarded to the root element */
|
|
45
34
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -52,45 +41,20 @@ export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
|
|
|
52
41
|
* The shape of the container. Both shapes respect the provided `ratio`.
|
|
53
42
|
* - `rectangle` (default): a standard rectangular container.
|
|
54
43
|
* - `ellipse`: clips the container to an ellipse — a circle when `ratio={1}`,
|
|
55
|
-
* or an oval at other ratios. Pair with
|
|
56
|
-
*
|
|
44
|
+
* or an oval at other ratios. Pair with a child that fills the container
|
|
45
|
+
* (e.g. an image with `objectFit: 'cover'`).
|
|
57
46
|
*
|
|
58
47
|
* @default 'rectangle'
|
|
59
48
|
*
|
|
60
49
|
* @example
|
|
61
50
|
* ```
|
|
62
|
-
* <AspectRatio ratio={1} shape="ellipse"
|
|
63
|
-
* <img src="avatar.jpg" alt="" />
|
|
51
|
+
* <AspectRatio ratio={1} shape="ellipse">
|
|
52
|
+
* <img src="avatar.jpg" alt="" style={{objectFit: 'cover'}} />
|
|
64
53
|
* </AspectRatio>
|
|
65
54
|
* ```
|
|
66
55
|
*/
|
|
67
56
|
shape?: AspectRatioShape;
|
|
68
57
|
|
|
69
|
-
/**
|
|
70
|
-
* How the child is laid out inside the ratio box, so the child does not
|
|
71
|
-
* have to declare `width`/`height`/`objectFit` itself.
|
|
72
|
-
* - `cover`: child fills the box; media is cropped (`object-fit: cover`).
|
|
73
|
-
* - `contain`: child fills the box; media is letterboxed
|
|
74
|
-
* (`object-fit: contain`).
|
|
75
|
-
* - `center`: child keeps its natural size, centered in the box.
|
|
76
|
-
*
|
|
77
|
-
* `cover`/`contain` child sizing ships as zero-specificity baseline rules
|
|
78
|
-
* in `reset.css`, keyed on the `data-astryx-aspect-ratio-override`
|
|
79
|
-
* attribute the component sets on the child's direct parent. Any styles
|
|
80
|
-
* the child sets itself still win, so children that already size
|
|
81
|
-
* themselves keep their behavior. When omitted, the child is left
|
|
82
|
-
* unstyled (the pre-existing contract). `fit` is structural, not visual,
|
|
83
|
-
* so it is not exposed on the theming surface.
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```
|
|
87
|
-
* <AspectRatio ratio={16 / 9} fit="cover">
|
|
88
|
-
* <img src="image.jpg" alt="Widescreen image" />
|
|
89
|
-
* </AspectRatio>
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
fit?: AspectRatioFit;
|
|
93
|
-
|
|
94
58
|
/**
|
|
95
59
|
* Content to render inside the aspect ratio container.
|
|
96
60
|
* The child element will be positioned absolutely to fill the container.
|
|
@@ -118,16 +82,6 @@ const styles = stylex.create({
|
|
|
118
82
|
width: '100%',
|
|
119
83
|
height: '100%',
|
|
120
84
|
},
|
|
121
|
-
// fit="center" centers the child at its natural size from the wrapper —
|
|
122
|
-
// no styles on the child itself. The `cover`/`contain` child sizing can't
|
|
123
|
-
// live here (StyleX has no descendant selectors); it ships as baseline
|
|
124
|
-
// rules in reset.css keyed on the `data-astryx-aspect-ratio-override`
|
|
125
|
-
// attribute the wrapper carries (see below).
|
|
126
|
-
childCenter: {
|
|
127
|
-
display: 'flex',
|
|
128
|
-
alignItems: 'center',
|
|
129
|
-
justifyContent: 'center',
|
|
130
|
-
},
|
|
131
85
|
});
|
|
132
86
|
|
|
133
87
|
/**
|
|
@@ -137,32 +91,27 @@ const styles = stylex.create({
|
|
|
137
91
|
* is positioned absolutely to fill the container, which is useful for images,
|
|
138
92
|
* videos, embeds, and placeholders.
|
|
139
93
|
*
|
|
140
|
-
* Use `fit` to let the component size the child: `cover`/`contain` stretch
|
|
141
|
-
* the child to fill the box (cropping or letterboxing media), `center` keeps
|
|
142
|
-
* the child at its natural size. Without `fit`, the child styles itself.
|
|
143
|
-
*
|
|
144
94
|
* Use `shape="ellipse"` to clip the container into an ellipse — a circle at
|
|
145
95
|
* `ratio={1}` or an oval at other ratios. Both shapes respect the provided
|
|
146
96
|
* `ratio`.
|
|
147
97
|
*
|
|
148
98
|
* @example
|
|
149
99
|
* ```
|
|
150
|
-
* <AspectRatio ratio={16 / 9}
|
|
151
|
-
* <img src="image.jpg" alt="Widescreen image" />
|
|
100
|
+
* <AspectRatio ratio={16 / 9}>
|
|
101
|
+
* <img src="image.jpg" alt="Widescreen image" style={{objectFit: 'cover'}} />
|
|
152
102
|
* </AspectRatio>
|
|
153
103
|
* ```
|
|
154
104
|
*
|
|
155
105
|
* @example
|
|
156
106
|
* ```
|
|
157
|
-
* <AspectRatio ratio={1} shape="ellipse"
|
|
158
|
-
* <img src="avatar.jpg" alt="" />
|
|
107
|
+
* <AspectRatio ratio={1} shape="ellipse">
|
|
108
|
+
* <img src="avatar.jpg" alt="" style={{objectFit: 'cover'}} />
|
|
159
109
|
* </AspectRatio>
|
|
160
110
|
* ```
|
|
161
111
|
*/
|
|
162
112
|
export function AspectRatio({
|
|
163
113
|
ratio,
|
|
164
114
|
shape = 'rectangle',
|
|
165
|
-
fit,
|
|
166
115
|
children,
|
|
167
116
|
xstyle,
|
|
168
117
|
className,
|
|
@@ -184,16 +133,7 @@ export function AspectRatio({
|
|
|
184
133
|
{...style, aspectRatio: ratio},
|
|
185
134
|
)}
|
|
186
135
|
{...props}>
|
|
187
|
-
{
|
|
188
|
-
sizing can use direct-child selectors on this wrapper — the child's
|
|
189
|
-
actual parent — without depending on AspectRatio's internal
|
|
190
|
-
structure or on the theming surface (fit is structural, not
|
|
191
|
-
themeable). The name is namespaced to avoid collisions. */}
|
|
192
|
-
<div
|
|
193
|
-
data-astryx-aspect-ratio-override={fit}
|
|
194
|
-
{...stylex.props(styles.child, fit === 'center' && styles.childCenter)}>
|
|
195
|
-
{children}
|
|
196
|
-
</div>
|
|
136
|
+
<div {...stylex.props(styles.child)}>{children}</div>
|
|
197
137
|
</div>
|
|
198
138
|
);
|
|
199
139
|
}
|
package/src/AspectRatio/index.ts
CHANGED
|
@@ -106,15 +106,4 @@ export const docsDense = {
|
|
|
106
106
|
{guidance: false, description: 'Force a square or custom shape. Avatars are always circular.'},
|
|
107
107
|
],
|
|
108
108
|
},
|
|
109
|
-
propDescriptions: {
|
|
110
|
-
src: 'primary image source URL',
|
|
111
|
-
fallbackSrc: 'fallback image when primary fails',
|
|
112
|
-
name: 'user name for initials and alt text',
|
|
113
|
-
alt: 'alt text; falls back to name',
|
|
114
|
-
size: "avatar size. Named ('tiny', 'xsmall', 'small', 'medium', 'large') or numeric px. Short names 'sm'/'md'/'lg' are NOT valid; use full words.",
|
|
115
|
-
status: 'corner content for status indicators',
|
|
116
|
-
},
|
|
117
|
-
components: [
|
|
118
|
-
{name: 'AvatarStatusDot', description: 'size-aware status indicator rendered in the Avatar corner'},
|
|
119
|
-
],
|
|
120
109
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
import {describe, it, expect} from 'vitest';
|
|
4
|
-
import {render, screen
|
|
4
|
+
import {render, screen} from '@testing-library/react';
|
|
5
5
|
import {Avatar} from './Avatar';
|
|
6
6
|
|
|
7
7
|
describe('Avatar', () => {
|
|
@@ -34,35 +34,4 @@ describe('Avatar', () => {
|
|
|
34
34
|
// The inner <img> carries an empty alt so it isn't announced separately.
|
|
35
35
|
expect(innerImg).toHaveAttribute('alt', '');
|
|
36
36
|
});
|
|
37
|
-
|
|
38
|
-
it('retries a new src after a previous src failed to load', () => {
|
|
39
|
-
const {rerender} = render(
|
|
40
|
-
<Avatar name="Ada" src="https://example.com/broken.jpg" />,
|
|
41
|
-
);
|
|
42
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
43
|
-
fireEvent.error(wrapper.querySelector('img')!);
|
|
44
|
-
// Broken image falls back to initials.
|
|
45
|
-
expect(wrapper.querySelector('img')).toBeNull();
|
|
46
|
-
expect(wrapper).toHaveTextContent('A');
|
|
47
|
-
|
|
48
|
-
// A different src must get a fresh load attempt, not the stale error.
|
|
49
|
-
rerender(<Avatar name="Ada" src="https://example.com/ada.jpg" />);
|
|
50
|
-
const img = wrapper.querySelector('img');
|
|
51
|
-
expect(img).not.toBeNull();
|
|
52
|
-
expect(img).toHaveAttribute('src', 'https://example.com/ada.jpg');
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('retries a new fallbackSrc after a previous fallbackSrc failed to load', () => {
|
|
56
|
-
const {rerender} = render(
|
|
57
|
-
<Avatar name="Ada" fallbackSrc="https://example.com/broken.jpg" />,
|
|
58
|
-
);
|
|
59
|
-
const wrapper = screen.getByRole('img', {name: 'Ada'});
|
|
60
|
-
fireEvent.error(wrapper.querySelector('img')!);
|
|
61
|
-
expect(wrapper.querySelector('img')).toBeNull();
|
|
62
|
-
|
|
63
|
-
rerender(<Avatar name="Ada" fallbackSrc="https://example.com/ada.jpg" />);
|
|
64
|
-
const img = wrapper.querySelector('img');
|
|
65
|
-
expect(img).not.toBeNull();
|
|
66
|
-
expect(img).toHaveAttribute('src', 'https://example.com/ada.jpg');
|
|
67
|
-
});
|
|
68
37
|
});
|
package/src/Avatar/Avatar.tsx
CHANGED
|
@@ -63,7 +63,20 @@ type AvatarNamedSize = 'tiny' | 'xsmall' | 'small' | 'medium' | 'large';
|
|
|
63
63
|
* Numeric size options (in pixels)
|
|
64
64
|
*/
|
|
65
65
|
type AvatarNumericSize =
|
|
66
|
-
|
|
66
|
+
| 16
|
|
67
|
+
| 20
|
|
68
|
+
| 24
|
|
69
|
+
| 32
|
|
70
|
+
| 36
|
|
71
|
+
| 40
|
|
72
|
+
| 48
|
|
73
|
+
| 60
|
|
74
|
+
| 64
|
|
75
|
+
| 72
|
|
76
|
+
| 96
|
|
77
|
+
| 128
|
|
78
|
+
| 144
|
|
79
|
+
| 180;
|
|
67
80
|
|
|
68
81
|
/**
|
|
69
82
|
* Avatar size - can be a named size or a specific pixel value
|
|
@@ -276,16 +289,11 @@ export function Avatar({
|
|
|
276
289
|
ref,
|
|
277
290
|
...props
|
|
278
291
|
}: AvatarProps) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const [erroredSrc, setErroredSrc] = useState<string | undefined>(undefined);
|
|
282
|
-
const [erroredFallbackSrc, setErroredFallbackSrc] = useState<
|
|
283
|
-
string | undefined
|
|
284
|
-
>(undefined);
|
|
292
|
+
const [imageError, setImageError] = useState(false);
|
|
293
|
+
const [fallbackError, setFallbackError] = useState(false);
|
|
285
294
|
|
|
286
|
-
const showImage = src &&
|
|
287
|
-
const showFallbackImage =
|
|
288
|
-
!showImage && fallbackSrc && erroredFallbackSrc !== fallbackSrc;
|
|
295
|
+
const showImage = src && !imageError;
|
|
296
|
+
const showFallbackImage = !showImage && fallbackSrc && !fallbackError;
|
|
289
297
|
const showInitials = !showImage && !showFallbackImage && name;
|
|
290
298
|
const showIcon = !showImage && !showFallbackImage && !name;
|
|
291
299
|
|
|
@@ -324,7 +332,7 @@ export function Avatar({
|
|
|
324
332
|
<img
|
|
325
333
|
src={src}
|
|
326
334
|
alt=""
|
|
327
|
-
onError={() =>
|
|
335
|
+
onError={() => setImageError(true)}
|
|
328
336
|
{...stylex.props(styles.image)}
|
|
329
337
|
/>
|
|
330
338
|
)}
|
|
@@ -332,7 +340,7 @@ export function Avatar({
|
|
|
332
340
|
<img
|
|
333
341
|
src={fallbackSrc}
|
|
334
342
|
alt=""
|
|
335
|
-
onError={() =>
|
|
343
|
+
onError={() => setFallbackError(true)}
|
|
336
344
|
{...stylex.props(styles.image)}
|
|
337
345
|
/>
|
|
338
346
|
)}
|
|
@@ -24,7 +24,6 @@ export const docs = {
|
|
|
24
24
|
theming: {
|
|
25
25
|
targets: [
|
|
26
26
|
{className: 'astryx-avatar-group', visualProps: ['size']},
|
|
27
|
-
{className: 'astryx-avatar-group-overflow'},
|
|
28
27
|
],
|
|
29
28
|
},
|
|
30
29
|
description: 'Stacked avatar display with overlapping layout and optional overflow indicator. Children are Avatar elements.',
|
|
@@ -113,7 +113,6 @@ export const docs = {
|
|
|
113
113
|
targets: [
|
|
114
114
|
{className: 'astryx-banner', visualProps: ['container', 'status']},
|
|
115
115
|
{className: 'astryx-banner-icon', visualProps: ['status']},
|
|
116
|
-
{className: 'astryx-banner-content', visualProps: ['container', 'status']},
|
|
117
116
|
],
|
|
118
117
|
vars: [
|
|
119
118
|
{name: '--_banner-radius', description: 'Border radius (card container only)', default: 'var(--radius-container)', private: true},
|
|
@@ -181,13 +180,6 @@ export const docsZh = {
|
|
|
181
180
|
'status',
|
|
182
181
|
],
|
|
183
182
|
},
|
|
184
|
-
{
|
|
185
|
-
className: 'astryx-banner-content',
|
|
186
|
-
visualProps: [
|
|
187
|
-
'container',
|
|
188
|
-
'status',
|
|
189
|
-
],
|
|
190
|
-
},
|
|
191
183
|
],
|
|
192
184
|
vars: [
|
|
193
185
|
{name: '--_banner-radius', description: 'Border radius (card container only)', default: 'var(--radius-container)', private: true},
|
|
@@ -270,44 +270,6 @@ describe('Banner', () => {
|
|
|
270
270
|
expect(expandIndex).toBeLessThan(dismissIndex);
|
|
271
271
|
});
|
|
272
272
|
|
|
273
|
-
it('links the expand toggle to its content region via aria-controls', () => {
|
|
274
|
-
render(
|
|
275
|
-
<Banner status="info" title="Controls Test" defaultIsExpanded>
|
|
276
|
-
<div data-testid="region-content">Region content</div>
|
|
277
|
-
</Banner>,
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
const toggle = screen.getByRole('button', {name: 'Collapse'});
|
|
281
|
-
const controlsId = toggle.getAttribute('aria-controls');
|
|
282
|
-
// aria-controls must be present and point at the real content region.
|
|
283
|
-
expect(controlsId).toBeTruthy();
|
|
284
|
-
const region = document.getElementById(controlsId as string);
|
|
285
|
-
expect(region).not.toBeNull();
|
|
286
|
-
expect(region).toContainElement(screen.getByTestId('region-content'));
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
it('sets aria-controls only while the content region is mounted', async () => {
|
|
290
|
-
const user = userEvent.setup();
|
|
291
|
-
render(
|
|
292
|
-
<Banner status="info" title="Controls Toggle">
|
|
293
|
-
<div data-testid="region-content">Region content</div>
|
|
294
|
-
</Banner>,
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
// Collapsed: the region is unmounted, so no dangling aria-controls target.
|
|
298
|
-
const collapsedToggle = screen.getByRole('button', {name: 'Expand'});
|
|
299
|
-
expect(collapsedToggle).not.toHaveAttribute('aria-controls');
|
|
300
|
-
|
|
301
|
-
// Expanded: aria-controls resolves to the mounted region with the children.
|
|
302
|
-
await user.click(collapsedToggle);
|
|
303
|
-
const expandedToggle = screen.getByRole('button', {name: 'Collapse'});
|
|
304
|
-
const controlsId = expandedToggle.getAttribute('aria-controls');
|
|
305
|
-
expect(controlsId).toBeTruthy();
|
|
306
|
-
const region = document.getElementById(controlsId as string);
|
|
307
|
-
expect(region).not.toBeNull();
|
|
308
|
-
expect(region).toContainElement(screen.getByTestId('region-content'));
|
|
309
|
-
});
|
|
310
|
-
|
|
311
273
|
it('does not render content area when no children', () => {
|
|
312
274
|
const {container} = render(<Banner status="info" title="No Children" />);
|
|
313
275
|
const root = container.firstElementChild;
|
package/src/Banner/Banner.tsx
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* - /packages/cli/templates/blocks/components/Banner/ (showcase blocks)
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
|
-
import {
|
|
34
|
+
import {useState, type ReactNode} from 'react';
|
|
35
35
|
import * as stylex from '@stylexjs/stylex';
|
|
36
36
|
import type {BaseProps} from '../BaseProps';
|
|
37
37
|
import {Button} from '../Button';
|
|
@@ -387,11 +387,6 @@ export function Banner({
|
|
|
387
387
|
}: BannerProps) {
|
|
388
388
|
const [isDismissed, setIsDismissed] = useState(false);
|
|
389
389
|
const [isExpanded, setIsExpanded] = useState(defaultIsExpanded);
|
|
390
|
-
// Links the expand/collapse toggle to the content region it shows/hides so
|
|
391
|
-
// assistive tech can move from the button to its controlled content
|
|
392
|
-
// (disclosure pattern). The region is conditionally rendered, so aria-controls
|
|
393
|
-
// below is set only while it's mounted to avoid a dangling reference.
|
|
394
|
-
const contentId = useId();
|
|
395
390
|
const defaultIconName = defaultIconNames[status];
|
|
396
391
|
const role = statusRole[status];
|
|
397
392
|
const iconColor = statusIconColor[status];
|
|
@@ -482,7 +477,6 @@ export function Banner({
|
|
|
482
477
|
}
|
|
483
478
|
onClick={handleToggleExpand}
|
|
484
479
|
aria-expanded={isExpanded}
|
|
485
|
-
aria-controls={showContent ? contentId : undefined}
|
|
486
480
|
isIconOnly
|
|
487
481
|
/>
|
|
488
482
|
)}
|
|
@@ -503,7 +497,6 @@ export function Banner({
|
|
|
503
497
|
{/* Content area: collapsible card background — theme target ('banner-content') */}
|
|
504
498
|
{showContent && (
|
|
505
499
|
<div
|
|
506
|
-
id={contentId}
|
|
507
500
|
{...mergeProps(
|
|
508
501
|
themeProps('banner-content', {container, status}),
|
|
509
502
|
stylex.props(styles.contentArea, isCard && styles.contentAreaCard),
|
|
@@ -19,7 +19,7 @@ export const docs = {
|
|
|
19
19
|
{guidance: false, description: 'Disable large blocks of dates without context. The user should understand why dates are unavailable.'},
|
|
20
20
|
],
|
|
21
21
|
anatomy: [
|
|
22
|
-
{name: 'Month header', required: true, description: 'The month name and year with navigation arrows to move between months.
|
|
22
|
+
{name: 'Month header', required: true, description: 'The month name and year with navigation arrows to move between months.'},
|
|
23
23
|
{name: 'Day grid', required: true, description: 'A 7-column grid of days with column headers for the day names.'},
|
|
24
24
|
{name: 'Selected day', required: false, description: 'The currently selected date, highlighted. In range mode, the start and end dates plus the days between them.'},
|
|
25
25
|
{name: 'Today marker', required: false, description: 'A subtle indicator on the current date for orientation.'},
|