@astryxdesign/core 0.1.4 → 0.1.5-canary.76e6697
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/CHANGELOG.md +141 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +20 -18
- package/dist/AlertDialog/useImperativeAlertDialog.d.ts +0 -2
- package/dist/AlertDialog/useImperativeAlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -5
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +55 -53
- package/dist/AspectRatio/AspectRatio.d.ts +48 -10
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +33 -12
- 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 +28 -26
- package/dist/Avatar/AvatarStatusDot.js +6 -6
- package/dist/AvatarGroup/AvatarGroup.js +6 -6
- package/dist/AvatarGroup/AvatarGroupOverflow.js +7 -7
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -25
- 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 +68 -48
- 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 +4 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +18 -10
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +24 -21
- 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 +27 -15
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +13 -11
- 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 +12 -10
- 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 +14 -12
- 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 +24 -15
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +81 -74
- 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 +25 -23
- 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 +8 -6
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +32 -9
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +10 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +88 -52
- package/dist/Collapsible/Collapsible.d.ts +9 -3
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +109 -22
- package/dist/Collapsible/CollapsibleGroup.d.ts +37 -7
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +64 -12
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +24 -0
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +26 -3
- package/dist/Collapsible/index.d.ts +1 -0
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +4 -1
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +20 -6
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +36 -34
- 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 +7 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +76 -43
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +30 -26
- 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 +2 -17
- 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 +4 -3
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +29 -12
- 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 +5 -1
- 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 +16 -12
- 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 +29 -2
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +44 -31
- 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 +55 -31
- package/dist/Lightbox/useLightbox.d.ts +0 -1
- package/dist/Lightbox/useLightbox.d.ts.map +1 -1
- package/dist/Lightbox/useLightbox.js +3 -4
- package/dist/Link/Link.d.ts +0 -2
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +15 -17
- 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 +26 -23
- 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 +48 -32
- 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.d.ts +0 -3
- package/dist/Overlay/useOverlay.d.ts.map +1 -1
- package/dist/Overlay/useOverlay.js +3 -6
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +125 -72
- 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 +110 -92
- 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 +25 -18
- 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 +24 -21
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +28 -10
- 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 +32 -10
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +18 -12
- 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 +38 -34
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +8 -6
- 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 +18 -16
- 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 +8 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +34 -29
- 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 +57 -30
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +50 -39
- 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 +9 -5
- 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 +9 -5
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +9 -5
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +14 -11
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/groupedRows/index.d.ts +3 -0
- package/dist/Table/plugins/groupedRows/index.d.ts.map +1 -0
- package/dist/Table/plugins/groupedRows/index.js +3 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +78 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +250 -0
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +5 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +23 -23
- 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 +11 -1
- 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 +8 -4
- 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 +3 -2
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +30 -29
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +26 -21
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +37 -26
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +25 -17
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +23 -11
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +44 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +36 -34
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +5 -1
- 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 +25 -14
- 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 +23 -20
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +0 -3
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +0 -3
- package/dist/astryx.css +7 -0
- package/dist/astryx.umd.js +63 -63
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +8 -2
- 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 +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +3 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +38 -1
- package/dist/hooks/useHotkeys.d.ts +51 -0
- package/dist/hooks/useHotkeys.d.ts.map +1 -0
- package/dist/hooks/useHotkeys.js +160 -0
- package/dist/hooks/useInteractiveRole.d.ts +6 -2
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +6 -2
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +3 -1
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +14 -5
- 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 +10 -3
- package/dist/theme/hct.d.ts +0 -15
- 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 +10 -2
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +220 -4
- package/dist/theme/useTheme.d.ts +3 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +73 -6
- package/dist/utils/color.d.ts +42 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/color.js +150 -0
- package/dist/utils/composeEventHandlers.d.ts +30 -0
- package/dist/utils/composeEventHandlers.d.ts.map +1 -0
- package/dist/utils/composeEventHandlers.js +40 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +8 -5
- package/package.json +4 -4
- package/src/AlertDialog/AlertDialog.doc.mjs +4 -0
- package/src/AlertDialog/AlertDialog.tsx +2 -0
- package/src/AlertDialog/useImperativeAlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +2 -0
- package/src/AspectRatio/AspectRatio.doc.mjs +28 -1
- package/src/AspectRatio/AspectRatio.test.tsx +142 -1
- package/src/AspectRatio/AspectRatio.tsx +70 -10
- package/src/AspectRatio/index.ts +5 -1
- package/src/Avatar/Avatar.doc.mjs +11 -0
- package/src/Avatar/Avatar.test.tsx +32 -1
- package/src/Avatar/Avatar.tsx +14 -22
- package/src/Avatar/AvatarStatusDot.tsx +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +1 -0
- package/src/AvatarGroup/AvatarGroup.tsx +2 -2
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -2
- package/src/Banner/Banner.doc.mjs +8 -0
- package/src/Banner/Banner.test.tsx +38 -0
- package/src/Banner/Banner.tsx +8 -1
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +122 -17
- package/src/Calendar/Calendar.tsx +26 -5
- package/src/Calendar/dayCellUtils.ts +3 -1
- package/src/Calendar/styles.ts +12 -2
- package/src/Card/Card.doc.mjs +1 -1
- package/src/Card/Card.tsx +16 -6
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +13 -0
- package/src/Carousel/Carousel.tsx +4 -2
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +27 -1
- package/src/Chat/ChatComposerInput.tsx +20 -15
- package/src/Chat/ChatDictationButton.test.tsx +43 -0
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.test.tsx +33 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +3 -1
- package/src/Chat/ChatMessageMetadata.test.tsx +32 -0
- package/src/Chat/ChatMessageMetadata.tsx +4 -6
- package/src/Chat/ChatSystemMessage.test.tsx +26 -11
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +29 -16
- package/src/Chat/ChatTokenizedText.tsx +15 -8
- package/src/Chat/ChatToolCalls.test.tsx +55 -0
- package/src/Chat/ChatToolCalls.tsx +10 -12
- package/src/Chat/index.ts +1 -4
- package/src/Chat/useTriggerMenu.tsx +1 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +71 -4
- package/src/CheckboxInput/CheckboxInput.tsx +2 -0
- package/src/CheckboxList/CheckboxList.test.tsx +19 -0
- package/src/CheckboxList/CheckboxListItem.tsx +11 -2
- package/src/Citation/Citation.doc.mjs +5 -0
- package/src/ClickableCard/ClickableCard.tsx +45 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +7 -2
- package/src/CodeBlock/CodeBlock.test.tsx +122 -3
- package/src/CodeBlock/CodeBlock.tsx +62 -4
- package/src/Collapsible/Collapsible.doc.mjs +8 -4
- package/src/Collapsible/Collapsible.test.tsx +403 -0
- package/src/Collapsible/Collapsible.tsx +85 -10
- package/src/Collapsible/CollapsibleGroup.doc.mjs +27 -3
- package/src/Collapsible/CollapsibleGroup.test.tsx +314 -0
- package/src/Collapsible/CollapsibleGroup.tsx +97 -9
- package/src/Collapsible/CollapsibleGroupContext.tsx +34 -2
- package/src/Collapsible/index.ts +1 -0
- package/src/Collapsible/useCollapsible.ts +20 -6
- package/src/CommandPalette/CommandPalette.doc.mjs +5 -0
- package/src/CommandPalette/CommandPalette.tsx +5 -3
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +5 -0
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +10 -0
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteList.doc.mjs +9 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +15 -0
- package/src/ContextMenu/ContextMenu.test.tsx +87 -0
- package/src/ContextMenu/ContextMenu.tsx +87 -28
- package/src/ContextMenu/ContextMenuItem.doc.mjs +6 -0
- package/src/DateInput/DateInput.test.tsx +11 -20
- package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -6
- package/src/DateRangeInput/DateRangeInput.test.tsx +31 -44
- package/src/DateTimeInput/DateTimeInput.doc.mjs +3 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +118 -16
- package/src/DateTimeInput/DateTimeInput.tsx +8 -2
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +4 -0
- package/src/Dialog/DialogHeader.doc.mjs +45 -0
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +22 -2
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -17
- package/src/EmptyState/EmptyState.doc.mjs +1 -1
- package/src/Field/Field.test.tsx +1 -4
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FieldStatus/FieldStatus.test.tsx +282 -0
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -3
- package/src/Grid/Grid.test.tsx +43 -18
- package/src/Grid/Grid.tsx +26 -9
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +9 -2
- package/src/Icon/Icon.test.tsx +41 -29
- package/src/Icon/Icon.tsx +6 -2
- package/src/InputGroup/InputGroup.doc.mjs +1 -0
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +185 -0
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +221 -2
- package/src/Layer/useLayer.tsx +69 -30
- package/src/Layout/Layout.test.tsx +285 -0
- package/src/Layout/LayoutContent.doc.mjs +12 -0
- package/src/Layout/LayoutPanel.doc.mjs +40 -0
- package/src/Layout/LayoutSlots.test.tsx +364 -0
- package/src/Lightbox/Lightbox.doc.mjs +5 -0
- package/src/Lightbox/Lightbox.test.tsx +123 -2
- package/src/Lightbox/Lightbox.tsx +29 -1
- package/src/Lightbox/useLightbox.tsx +0 -1
- package/src/Link/Link.tsx +0 -2
- package/src/Markdown/Markdown.tsx +9 -7
- package/src/Markdown/parser.perf.test.ts +34 -12
- package/src/MobileNav/MobileNav.test.tsx +56 -0
- package/src/MobileNav/MobileNav.tsx +13 -8
- package/src/NavMenu/NavMenu.doc.mjs +15 -0
- package/src/NumberInput/NumberInput.test.tsx +48 -3
- package/src/NumberInput/NumberInput.tsx +32 -15
- package/src/Outline/Outline.doc.mjs +2 -0
- package/src/Outline/parseOutlineFromMarkdown.test.ts +80 -0
- package/src/OverflowList/OverflowList.test.tsx +416 -0
- package/src/Overlay/Overlay.doc.mjs +6 -0
- package/src/Overlay/Overlay.test.tsx +356 -0
- package/src/Overlay/useOverlay.tsx +0 -3
- package/src/Pagination/Pagination.test.tsx +162 -0
- package/src/Pagination/Pagination.tsx +80 -26
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +65 -0
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +109 -1
- package/src/PowerSearch/PowerSearch.tsx +37 -16
- package/src/ProgressBar/ProgressBar.doc.mjs +2 -0
- package/src/ProgressBar/ProgressBar.test.tsx +30 -0
- package/src/ProgressBar/ProgressBar.tsx +12 -5
- package/src/RadioList/RadioList.test.tsx +19 -0
- package/src/RadioList/RadioListItem.tsx +9 -4
- package/src/Resizable/ResizeHandle.test.tsx +218 -0
- package/src/Resizable/ResizeHandle.tsx +22 -4
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +192 -0
- package/src/SegmentedControl/SegmentedControl.tsx +27 -5
- package/src/SegmentedControl/SegmentedControlItem.tsx +9 -4
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +27 -1
- package/src/SideNav/SideNav.doc.mjs +7 -1
- package/src/SideNav/SideNav.test.tsx +66 -0
- package/src/SideNav/SideNav.tsx +6 -2
- package/src/SideNav/SideNavCollapseButton.tsx +4 -3
- package/src/SideNav/SideNavSection.tsx +6 -4
- package/src/SizeContext/SizeContext.test.tsx +226 -0
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +102 -3
- package/src/Switch/Switch.tsx +20 -7
- package/src/TabList/TabList.test.tsx +185 -1
- package/src/TabList/TabMenu.tsx +45 -9
- package/src/Table/BaseTable.tsx +13 -2
- package/src/Table/Table.doc.mjs +6 -1
- package/src/Table/Table.test.tsx +87 -0
- package/src/Table/TableBody.tsx +15 -2
- package/src/Table/TableFooter.tsx +15 -2
- package/src/Table/TableHeader.tsx +15 -2
- package/src/Table/index.ts +5 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +13 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +3 -1
- package/src/Table/plugins/groupedRows/index.ts +7 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +231 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +349 -0
- package/src/Table/plugins/pagination/paginateData.ts +5 -1
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +13 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +1 -1
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +23 -0
- package/src/Table/plugins/selection/useTableSelectionState.tsx +11 -6
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +35 -1
- package/src/Table/plugins/sortable/useTableSortableState.tsx +8 -4
- package/src/Table/useTableGroupedRows.doc.mjs +71 -0
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +36 -2
- package/src/Thumbnail/Thumbnail.tsx +4 -2
- package/src/TimeInput/TimeInput.test.tsx +37 -0
- package/src/TimeInput/TimeInput.tsx +11 -1
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +52 -0
- package/src/Timestamp/Timestamp.tsx +30 -16
- package/src/Toast/Toast.tsx +11 -3
- package/src/Toast/ToastViewport.test.tsx +64 -0
- package/src/Toast/ToastViewport.tsx +12 -0
- package/src/Toast/useToast.test.tsx +258 -0
- package/src/Toast/useToast.tsx +41 -0
- package/src/ToggleButton/ToggleButton.doc.mjs +1 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +54 -0
- package/src/Tokenizer/Tokenizer.tsx +5 -4
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +12 -2
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +23 -7
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +9 -2
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +19 -0
- package/src/Typeahead/BaseTypeahead.tsx +5 -2
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +45 -1
- package/src/VisuallyHidden/VisuallyHidden.tsx +0 -3
- package/src/__tests__/TestIcon.tsx +26 -0
- package/src/__tests__/fastRoleQueries.ts +66 -0
- package/src/docPropReferences.test.ts +178 -0
- package/src/docs-types.ts +9 -1
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useFocusTrap.doc.mjs +4 -2
- package/src/hooks/useFocusTrap.test.tsx +149 -1
- package/src/hooks/useFocusTrap.ts +50 -1
- package/src/hooks/useHotkeys.doc.mjs +52 -0
- package/src/hooks/useHotkeys.test.ts +245 -0
- package/src/hooks/useHotkeys.ts +203 -0
- package/src/hooks/useInteractiveRole.ts +12 -4
- package/src/hooks/useStreamingText.test.ts +54 -19
- package/src/hooks/useStreamingText.ts +16 -5
- package/src/hooks/useTreeFocus.test.tsx +1 -3
- package/src/reset.css +29 -0
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +4 -13
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +29 -0
- package/src/theme/expandColorScale.ts +11 -6
- package/src/theme/hct.ts +9 -17
- package/src/theme/themingTargets.test.ts +353 -0
- package/src/theme/tokens.test.ts +182 -9
- package/src/theme/tokens.ts +239 -4
- package/src/theme/useTheme.test.tsx +126 -2
- package/src/theme/useTheme.ts +87 -6
- package/src/utils/color.test.ts +133 -0
- package/src/utils/color.ts +148 -0
- package/src/utils/composeEventHandlers.test.ts +71 -0
- package/src/utils/composeEventHandlers.ts +44 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/mergeProps.test.ts +166 -0
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +13 -0
- package/src/utils/timeParser.ts +8 -5
- package/dist/Carousel/carousel.markers.stylex.d.ts +0 -7
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +0 -1
- package/dist/Carousel/carousel.markers.stylex.js +0 -12
- package/src/Carousel/carousel.markers.stylex.ts +0 -10
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @file AspectRatio.tsx
|
|
7
7
|
* @input Uses React, stylex
|
|
8
|
-
* @output Exports AspectRatio component
|
|
8
|
+
* @output Exports AspectRatio component, AspectRatioProps, AspectRatioShape, AspectRatioFit
|
|
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)
|
|
14
15
|
* - /apps/storybook/stories/AspectRatio.stories.tsx
|
|
15
16
|
* - /packages/cli/templates/blocks/components/AspectRatio/ (showcase blocks)
|
|
16
17
|
*/
|
|
@@ -29,6 +30,16 @@ import {themeProps} from '../utils/themeProps';
|
|
|
29
30
|
*/
|
|
30
31
|
export type AspectRatioShape = 'rectangle' | 'ellipse';
|
|
31
32
|
|
|
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
|
+
|
|
32
43
|
export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
|
|
33
44
|
/** Ref forwarded to the root element */
|
|
34
45
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -41,20 +52,45 @@ export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
|
|
|
41
52
|
* The shape of the container. Both shapes respect the provided `ratio`.
|
|
42
53
|
* - `rectangle` (default): a standard rectangular container.
|
|
43
54
|
* - `ellipse`: clips the container to an ellipse — a circle when `ratio={1}`,
|
|
44
|
-
* or an oval at other ratios. Pair with
|
|
45
|
-
*
|
|
55
|
+
* or an oval at other ratios. Pair with `fit="cover"` so the media fills
|
|
56
|
+
* the clipped container.
|
|
46
57
|
*
|
|
47
58
|
* @default 'rectangle'
|
|
48
59
|
*
|
|
49
60
|
* @example
|
|
50
61
|
* ```
|
|
51
|
-
* <AspectRatio ratio={1} shape="ellipse">
|
|
52
|
-
* <img src="avatar.jpg" alt=""
|
|
62
|
+
* <AspectRatio ratio={1} shape="ellipse" fit="cover">
|
|
63
|
+
* <img src="avatar.jpg" alt="" />
|
|
53
64
|
* </AspectRatio>
|
|
54
65
|
* ```
|
|
55
66
|
*/
|
|
56
67
|
shape?: AspectRatioShape;
|
|
57
68
|
|
|
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
|
+
|
|
58
94
|
/**
|
|
59
95
|
* Content to render inside the aspect ratio container.
|
|
60
96
|
* The child element will be positioned absolutely to fill the container.
|
|
@@ -82,6 +118,16 @@ const styles = stylex.create({
|
|
|
82
118
|
width: '100%',
|
|
83
119
|
height: '100%',
|
|
84
120
|
},
|
|
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
|
+
},
|
|
85
131
|
});
|
|
86
132
|
|
|
87
133
|
/**
|
|
@@ -91,27 +137,32 @@ const styles = stylex.create({
|
|
|
91
137
|
* is positioned absolutely to fill the container, which is useful for images,
|
|
92
138
|
* videos, embeds, and placeholders.
|
|
93
139
|
*
|
|
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
|
+
*
|
|
94
144
|
* Use `shape="ellipse"` to clip the container into an ellipse — a circle at
|
|
95
145
|
* `ratio={1}` or an oval at other ratios. Both shapes respect the provided
|
|
96
146
|
* `ratio`.
|
|
97
147
|
*
|
|
98
148
|
* @example
|
|
99
149
|
* ```
|
|
100
|
-
* <AspectRatio ratio={16 / 9}>
|
|
101
|
-
* <img src="image.jpg" alt="Widescreen image"
|
|
150
|
+
* <AspectRatio ratio={16 / 9} fit="cover">
|
|
151
|
+
* <img src="image.jpg" alt="Widescreen image" />
|
|
102
152
|
* </AspectRatio>
|
|
103
153
|
* ```
|
|
104
154
|
*
|
|
105
155
|
* @example
|
|
106
156
|
* ```
|
|
107
|
-
* <AspectRatio ratio={1} shape="ellipse">
|
|
108
|
-
* <img src="avatar.jpg" alt=""
|
|
157
|
+
* <AspectRatio ratio={1} shape="ellipse" fit="cover">
|
|
158
|
+
* <img src="avatar.jpg" alt="" />
|
|
109
159
|
* </AspectRatio>
|
|
110
160
|
* ```
|
|
111
161
|
*/
|
|
112
162
|
export function AspectRatio({
|
|
113
163
|
ratio,
|
|
114
164
|
shape = 'rectangle',
|
|
165
|
+
fit,
|
|
115
166
|
children,
|
|
116
167
|
xstyle,
|
|
117
168
|
className,
|
|
@@ -133,7 +184,16 @@ export function AspectRatio({
|
|
|
133
184
|
{...style, aspectRatio: ratio},
|
|
134
185
|
)}
|
|
135
186
|
{...props}>
|
|
136
|
-
|
|
187
|
+
{/* The marker attribute carries the fit value so the reset.css child
|
|
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>
|
|
137
197
|
</div>
|
|
138
198
|
);
|
|
139
199
|
}
|
package/src/AspectRatio/index.ts
CHANGED
|
@@ -106,4 +106,15 @@ 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
|
+
],
|
|
109
120
|
};
|
|
@@ -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} from '@testing-library/react';
|
|
4
|
+
import {render, screen, fireEvent} from '@testing-library/react';
|
|
5
5
|
import {Avatar} from './Avatar';
|
|
6
6
|
|
|
7
7
|
describe('Avatar', () => {
|
|
@@ -34,4 +34,35 @@ 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
|
+
});
|
|
37
68
|
});
|
package/src/Avatar/Avatar.tsx
CHANGED
|
@@ -63,20 +63,7 @@ type AvatarNamedSize = 'tiny' | 'xsmall' | 'small' | 'medium' | 'large';
|
|
|
63
63
|
* Numeric size options (in pixels)
|
|
64
64
|
*/
|
|
65
65
|
type AvatarNumericSize =
|
|
66
|
-
|
|
|
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;
|
|
66
|
+
16 | 20 | 24 | 32 | 36 | 40 | 48 | 60 | 64 | 72 | 96 | 128 | 144 | 180;
|
|
80
67
|
|
|
81
68
|
/**
|
|
82
69
|
* Avatar size - can be a named size or a specific pixel value
|
|
@@ -289,11 +276,16 @@ export function Avatar({
|
|
|
289
276
|
ref,
|
|
290
277
|
...props
|
|
291
278
|
}: AvatarProps) {
|
|
292
|
-
|
|
293
|
-
|
|
279
|
+
// Track the exact src that failed (rather than a boolean) so a changed
|
|
280
|
+
// src/fallbackSrc gets a fresh load attempt instead of the stale error.
|
|
281
|
+
const [erroredSrc, setErroredSrc] = useState<string | undefined>(undefined);
|
|
282
|
+
const [erroredFallbackSrc, setErroredFallbackSrc] = useState<
|
|
283
|
+
string | undefined
|
|
284
|
+
>(undefined);
|
|
294
285
|
|
|
295
|
-
const showImage = src &&
|
|
296
|
-
const showFallbackImage =
|
|
286
|
+
const showImage = src && erroredSrc !== src;
|
|
287
|
+
const showFallbackImage =
|
|
288
|
+
!showImage && fallbackSrc && erroredFallbackSrc !== fallbackSrc;
|
|
297
289
|
const showInitials = !showImage && !showFallbackImage && name;
|
|
298
290
|
const showIcon = !showImage && !showFallbackImage && !name;
|
|
299
291
|
|
|
@@ -309,6 +301,7 @@ export function Avatar({
|
|
|
309
301
|
return (
|
|
310
302
|
<AvatarSizeContext value={numericSize}>
|
|
311
303
|
<div
|
|
304
|
+
{...props}
|
|
312
305
|
ref={ref}
|
|
313
306
|
role={isDecorative ? 'presentation' : 'img'}
|
|
314
307
|
aria-label={isDecorative ? undefined : accessibleName}
|
|
@@ -325,14 +318,13 @@ export function Avatar({
|
|
|
325
318
|
),
|
|
326
319
|
className,
|
|
327
320
|
style,
|
|
328
|
-
)}
|
|
329
|
-
{...props}>
|
|
321
|
+
)}>
|
|
330
322
|
<div {...stylex.props(styles.content, dynamicStyles.size(numericSize))}>
|
|
331
323
|
{showImage && (
|
|
332
324
|
<img
|
|
333
325
|
src={src}
|
|
334
326
|
alt=""
|
|
335
|
-
onError={() =>
|
|
327
|
+
onError={() => setErroredSrc(src)}
|
|
336
328
|
{...stylex.props(styles.image)}
|
|
337
329
|
/>
|
|
338
330
|
)}
|
|
@@ -340,7 +332,7 @@ export function Avatar({
|
|
|
340
332
|
<img
|
|
341
333
|
src={fallbackSrc}
|
|
342
334
|
alt=""
|
|
343
|
-
onError={() =>
|
|
335
|
+
onError={() => setErroredFallbackSrc(fallbackSrc)}
|
|
344
336
|
{...stylex.props(styles.image)}
|
|
345
337
|
/>
|
|
346
338
|
)}
|
|
@@ -193,6 +193,7 @@ export function AvatarStatusDot({
|
|
|
193
193
|
|
|
194
194
|
return (
|
|
195
195
|
<div
|
|
196
|
+
{...props}
|
|
196
197
|
ref={ref}
|
|
197
198
|
{...(label ? {role: 'img', 'aria-label': label} : undefined)}
|
|
198
199
|
{...mergeProps(
|
|
@@ -205,8 +206,7 @@ export function AvatarStatusDot({
|
|
|
205
206
|
),
|
|
206
207
|
className,
|
|
207
208
|
style,
|
|
208
|
-
)}
|
|
209
|
-
{...props}>
|
|
209
|
+
)}>
|
|
210
210
|
{icon && iconSize > 0 && (
|
|
211
211
|
<span
|
|
212
212
|
aria-hidden="true"
|
|
@@ -24,6 +24,7 @@ export const docs = {
|
|
|
24
24
|
theming: {
|
|
25
25
|
targets: [
|
|
26
26
|
{className: 'astryx-avatar-group', visualProps: ['size']},
|
|
27
|
+
{className: 'astryx-avatar-group-overflow'},
|
|
27
28
|
],
|
|
28
29
|
},
|
|
29
30
|
description: 'Stacked avatar display with overlapping layout and optional overflow indicator. Children are Avatar elements.',
|
|
@@ -94,6 +94,7 @@ export function AvatarGroup({
|
|
|
94
94
|
return (
|
|
95
95
|
<AvatarGroupContext value={contextValue}>
|
|
96
96
|
<div
|
|
97
|
+
{...props}
|
|
97
98
|
ref={ref}
|
|
98
99
|
role="group"
|
|
99
100
|
aria-label={ariaLabel}
|
|
@@ -103,8 +104,7 @@ export function AvatarGroup({
|
|
|
103
104
|
stylex.props(styles.root, xstyle),
|
|
104
105
|
className,
|
|
105
106
|
style,
|
|
106
|
-
)}
|
|
107
|
-
{...props}>
|
|
107
|
+
)}>
|
|
108
108
|
{children}
|
|
109
109
|
</div>
|
|
110
110
|
</AvatarGroupContext>
|
|
@@ -147,8 +147,8 @@ export function AvatarGroupOverflow({
|
|
|
147
147
|
ref={ref as React.Ref<HTMLButtonElement>}
|
|
148
148
|
type="button"
|
|
149
149
|
onClick={onClick}
|
|
150
|
-
aria-label={label}
|
|
151
150
|
{...rest}
|
|
151
|
+
aria-label={label}
|
|
152
152
|
{...mergeProps(
|
|
153
153
|
themeProps('avatar-group-overflow'),
|
|
154
154
|
stylex.props(
|
|
@@ -171,8 +171,8 @@ export function AvatarGroupOverflow({
|
|
|
171
171
|
return (
|
|
172
172
|
<span
|
|
173
173
|
ref={ref}
|
|
174
|
-
aria-label={label}
|
|
175
174
|
{...rest}
|
|
175
|
+
aria-label={label}
|
|
176
176
|
{...mergeProps(
|
|
177
177
|
themeProps('avatar-group-overflow'),
|
|
178
178
|
stylex.props(
|
|
@@ -113,6 +113,7 @@ 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']},
|
|
116
117
|
],
|
|
117
118
|
vars: [
|
|
118
119
|
{name: '--_banner-radius', description: 'Border radius (card container only)', default: 'var(--radius-container)', private: true},
|
|
@@ -180,6 +181,13 @@ export const docsZh = {
|
|
|
180
181
|
'status',
|
|
181
182
|
],
|
|
182
183
|
},
|
|
184
|
+
{
|
|
185
|
+
className: 'astryx-banner-content',
|
|
186
|
+
visualProps: [
|
|
187
|
+
'container',
|
|
188
|
+
'status',
|
|
189
|
+
],
|
|
190
|
+
},
|
|
183
191
|
],
|
|
184
192
|
vars: [
|
|
185
193
|
{name: '--_banner-radius', description: 'Border radius (card container only)', default: 'var(--radius-container)', private: true},
|
|
@@ -270,6 +270,44 @@ 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
|
+
|
|
273
311
|
it('does not render content area when no children', () => {
|
|
274
312
|
const {container} = render(<Banner status="info" title="No Children" />);
|
|
275
313
|
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 {useState, type ReactNode} from 'react';
|
|
34
|
+
import {useId, 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,6 +387,11 @@ 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();
|
|
390
395
|
const defaultIconName = defaultIconNames[status];
|
|
391
396
|
const role = statusRole[status];
|
|
392
397
|
const iconColor = statusIconColor[status];
|
|
@@ -477,6 +482,7 @@ export function Banner({
|
|
|
477
482
|
}
|
|
478
483
|
onClick={handleToggleExpand}
|
|
479
484
|
aria-expanded={isExpanded}
|
|
485
|
+
aria-controls={showContent ? contentId : undefined}
|
|
480
486
|
isIconOnly
|
|
481
487
|
/>
|
|
482
488
|
)}
|
|
@@ -497,6 +503,7 @@ export function Banner({
|
|
|
497
503
|
{/* Content area: collapsible card background — theme target ('banner-content') */}
|
|
498
504
|
{showContent && (
|
|
499
505
|
<div
|
|
506
|
+
id={contentId}
|
|
500
507
|
{...mergeProps(
|
|
501
508
|
themeProps('banner-content', {container, status}),
|
|
502
509
|
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. The arrows mirror automatically under dir="rtl".'},
|
|
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.'},
|