@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3
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 +161 -1
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +3 -2
- package/dist/AspectRatio/AspectRatio.d.ts +24 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +23 -4
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +58 -19
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +8 -4
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
- package/dist/Banner/Banner.d.ts +49 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +62 -20
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +17 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +11 -6
- package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +26 -7
- package/dist/Calendar/Calendar.d.ts +7 -3
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +21 -23
- package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
- package/dist/Calendar/getInitialFocusDate.js +62 -0
- package/dist/Calendar/styles.d.ts +5 -14
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -15
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +3 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +2 -3
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +3 -3
- package/dist/Chat/ChatMessageList.d.ts +22 -3
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +6 -3
- package/dist/Chat/ChatTokenizedText.d.ts +2 -0
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +11 -6
- package/dist/Chat/useChatComposerTokens.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +10 -3
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +3 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +3 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -3
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +4 -3
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -2
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +82 -23
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +406 -12
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.d.ts +21 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +110 -58
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +3 -2
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +6 -3
- package/dist/HoverCard/HoverCard.d.ts +6 -0
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +19 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +74 -26
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -19
- package/dist/Layer/LayerDepthContext.d.ts +52 -0
- package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
- package/dist/Layer/LayerDepthContext.js +66 -0
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/index.d.ts +3 -0
- package/dist/Layer/index.d.ts.map +1 -1
- package/dist/Layer/index.js +4 -0
- package/dist/Layer/layerStack.d.ts +98 -0
- package/dist/Layer/layerStack.d.ts.map +1 -0
- package/dist/Layer/layerStack.js +306 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +128 -8
- package/dist/Layer/useLayerDismissal.d.ts +93 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
- package/dist/Layer/useLayerDismissal.js +91 -0
- package/dist/Lightbox/Lightbox.d.ts +1 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +103 -81
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/index.d.ts +1 -1
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/parser.d.ts +38 -1
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +182 -32
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MobileNav/MobileNav.d.ts +6 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +61 -36
- package/dist/MultiSelector/MultiSelector.d.ts +32 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +73 -15
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +9 -5
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +54 -104
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +3 -2
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -2
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +3 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +1 -9
- package/dist/Popover/usePopover.d.ts +7 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +40 -21
- package/dist/PowerSearch/PowerSearch.d.ts +8 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +19 -6
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.js +14 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +3 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +12 -3
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +91 -18
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -3
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +8 -7
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +4 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +37 -5
- package/dist/Spinner/Spinner.d.ts +3 -3
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +130 -78
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts +140 -0
- package/dist/Stepper/Step.d.ts.map +1 -0
- package/dist/Stepper/Step.js +1045 -0
- package/dist/Stepper/StepStatus.d.ts +24 -0
- package/dist/Stepper/StepStatus.d.ts.map +1 -0
- package/dist/Stepper/StepStatus.js +1 -0
- package/dist/Stepper/Stepper.d.ts +93 -0
- package/dist/Stepper/Stepper.d.ts.map +1 -0
- package/dist/Stepper/Stepper.js +184 -0
- package/dist/Stepper/StepperContext.d.ts +41 -0
- package/dist/Stepper/StepperContext.d.ts.map +1 -0
- package/dist/Stepper/StepperContext.js +34 -0
- package/dist/Stepper/index.d.ts +8 -0
- package/dist/Stepper/index.d.ts.map +1 -0
- package/dist/Stepper/index.js +7 -0
- package/dist/Stepper/stepper.stylex.d.ts +15 -0
- package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
- package/dist/Stepper/stepper.stylex.js +20 -0
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +8 -3
- package/dist/TabList/Tab.d.ts +15 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +32 -7
- package/dist/TabList/TabList.d.ts +46 -7
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +353 -23
- package/dist/TabList/TabListContext.d.ts +11 -1
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +11 -2
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +3 -2
- package/dist/TabList/index.d.ts +2 -2
- package/dist/TabList/index.d.ts.map +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +10 -2
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/TableRow.d.ts +16 -5
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +16 -5
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
- package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +43 -5
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Table/types.d.ts +22 -4
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -0
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +6 -3
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -10
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +3 -2
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +15 -21
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +22 -7
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +71 -18
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -9
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +7 -4
- package/dist/Tokenizer/Tokenizer.d.ts +14 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +33 -21
- package/dist/Tooltip/Tooltip.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +5 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +39 -24
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +5 -4
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +31 -11
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +22 -7
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +119 -37
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +5 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +113 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +7 -4
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +60 -95
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -18
- package/dist/hooks/useMergedRefs.d.ts +18 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +25 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/utils/groupItems.d.ts +5 -1
- package/dist/utils/groupItems.d.ts.map +1 -1
- package/dist/utils/groupItems.js +9 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +10 -1
- package/dist/utils/timeParser.d.ts +1 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +26 -12
- package/locales/af-ZA.json +6 -6
- package/locales/ar-SA.json +6 -6
- package/locales/ca-ES.json +5 -5
- package/locales/cs-CZ.json +6 -6
- package/locales/da-DK.json +6 -6
- package/locales/de-DE.json +6 -6
- package/locales/el-GR.json +6 -6
- package/locales/en.json +163 -11
- package/locales/es-ES.json +5 -5
- package/locales/fi-FI.json +6 -6
- package/locales/fr-FR.json +6 -6
- package/locales/he-IL.json +6 -6
- package/locales/hu-HU.json +6 -6
- package/locales/it-IT.json +6 -6
- package/locales/ja-JP.json +6 -6
- package/locales/ko-KR.json +6 -6
- package/locales/nl-NL.json +6 -6
- package/locales/no-NO.json +6 -6
- package/locales/pl-PL.json +6 -6
- package/locales/pseudo.json +114 -0
- package/locales/pt-BR.json +6 -6
- package/locales/pt-PT.json +6 -6
- package/locales/ro-RO.json +6 -6
- package/locales/ru-RU.json +6 -6
- package/locales/sr-SP.json +6 -6
- package/locales/sv-SE.json +6 -6
- package/locales/tr-TR.json +6 -6
- package/locales/uk-UA.json +6 -6
- package/locales/vi-VN.json +6 -6
- package/locales/zh-CN.json +6 -6
- package/locales/zh-TW.json +6 -6
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AppShell/AppShell.tsx +3 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
- package/src/AspectRatio/AspectRatio.test.tsx +57 -10
- package/src/AspectRatio/AspectRatio.tsx +40 -1
- package/src/Avatar/Avatar.doc.mjs +14 -3
- package/src/Avatar/Avatar.test.tsx +97 -0
- package/src/Avatar/Avatar.tsx +125 -52
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +15 -6
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
- package/src/Banner/Banner.doc.mjs +22 -11
- package/src/Banner/Banner.test.tsx +177 -25
- package/src/Banner/Banner.tsx +93 -27
- package/src/BottomSheet/BottomSheet.test.tsx +123 -0
- package/src/BottomSheet/BottomSheet.tsx +17 -4
- package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
- package/src/Button/Button.doc.mjs +24 -1
- package/src/Button/Button.test.tsx +32 -4
- package/src/Button/Button.tsx +12 -5
- package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
- package/src/ButtonGroup/ButtonGroup.tsx +23 -5
- package/src/Calendar/Calendar.doc.mjs +7 -6
- package/src/Calendar/Calendar.test.tsx +143 -0
- package/src/Calendar/Calendar.tsx +30 -26
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Calendar/styles.ts +49 -31
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.tsx +3 -2
- package/src/Chat/ChatComposerInput.tsx +5 -1
- package/src/Chat/ChatLayout.tsx +3 -2
- package/src/Chat/ChatMessageList.doc.mjs +9 -1
- package/src/Chat/ChatMessageList.test.tsx +46 -0
- package/src/Chat/ChatMessageList.tsx +28 -4
- package/src/Chat/ChatTokenizedText.tsx +17 -10
- package/src/Chat/useChatComposerTokens.ts +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +8 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
- package/src/ComplexSelector/ComplexSelector.tsx +1 -3
- package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
- package/src/ContextMenu/ContextMenu.tsx +4 -3
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.tsx +55 -2
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +108 -24
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
- package/src/DateRangeInput/DateRangeInput.tsx +4 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
- package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
- package/src/DateTimeInput/DateTimeInput.tsx +556 -24
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +8 -3
- package/src/Dialog/Dialog.test.tsx +429 -2
- package/src/Dialog/Dialog.tsx +133 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
- package/src/Field/Field.doc.mjs +13 -2
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -3
- package/src/HoverCard/HoverCard.doc.mjs +13 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +143 -3
- package/src/HoverCard/useHoverCard.tsx +104 -33
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +5 -4
- package/src/Kbd/Kbd.tsx +2 -19
- package/src/Layer/LayerDepthContext.tsx +62 -0
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/index.ts +9 -0
- package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
- package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
- package/src/Layer/layerStack.ts +362 -0
- package/src/Layer/useLayer.test.tsx +324 -15
- package/src/Layer/useLayer.tsx +164 -8
- package/src/Layer/useLayerDismissal.test.tsx +469 -0
- package/src/Layer/useLayerDismissal.ts +173 -0
- package/src/Layout/Layout.doc.mjs +2 -2
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/Lightbox/Lightbox.doc.mjs +12 -0
- package/src/Lightbox/Lightbox.tsx +124 -102
- package/src/Link/Link.doc.mjs +39 -0
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.doc.mjs +5 -0
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/incremental.test.ts +16 -2
- package/src/Markdown/index.ts +1 -0
- package/src/Markdown/parser.perf.test.ts +96 -1
- package/src/Markdown/parser.test.ts +178 -2
- package/src/Markdown/parser.ts +253 -32
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MobileNav/MobileNav.tsx +62 -36
- package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
- package/src/MultiSelector/MultiSelector.test.tsx +311 -0
- package/src/MultiSelector/MultiSelector.tsx +151 -15
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/MultiSelector/index.ts +1 -0
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +9 -5
- package/src/NumberInput/NumberInput.doc.mjs +31 -7
- package/src/NumberInput/NumberInput.test.tsx +436 -8
- package/src/NumberInput/NumberInput.tsx +62 -114
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +3 -2
- package/src/OverflowList/OverflowList.tsx +3 -2
- package/src/Overlay/Overlay.tsx +3 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.test.tsx +14 -0
- package/src/Popover/Popover.tsx +1 -9
- package/src/Popover/usePopover.tsx +57 -32
- package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
- package/src/PowerSearch/PowerSearch.test.tsx +240 -1
- package/src/PowerSearch/PowerSearch.tsx +34 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
- package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
- package/src/PowerSearch/types.ts +2 -0
- package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
- package/src/PowerSearch/usePowerSearchSource.ts +13 -3
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/ResizeHandle.tsx +3 -2
- package/src/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +19 -2
- package/src/Selector/Selector.doc.mjs +26 -1
- package/src/Selector/Selector.test.tsx +346 -1
- package/src/Selector/Selector.tsx +148 -21
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +6 -6
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavHeading.tsx +12 -12
- package/src/SideNav/SideNavItem.tsx +4 -2
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +55 -3
- package/src/Spinner/Spinner.test.tsx +147 -1
- package/src/Spinner/Spinner.tsx +120 -101
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +98 -0
- package/src/Stepper/Step.tsx +1638 -0
- package/src/Stepper/StepStatus.ts +26 -0
- package/src/Stepper/Stepper.doc.mjs +370 -0
- package/src/Stepper/Stepper.test.tsx +1024 -0
- package/src/Stepper/Stepper.tsx +258 -0
- package/src/Stepper/StepperContext.ts +71 -0
- package/src/Stepper/index.ts +18 -0
- package/src/Stepper/stepper.stylex.ts +19 -0
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +6 -2
- package/src/TabList/Tab.doc.mjs +13 -1
- package/src/TabList/Tab.tsx +67 -7
- package/src/TabList/TabList.doc.mjs +22 -6
- package/src/TabList/TabList.test.tsx +559 -0
- package/src/TabList/TabList.tsx +490 -22
- package/src/TabList/TabListContext.ts +13 -2
- package/src/TabList/TabMenu.tsx +3 -2
- package/src/TabList/index.ts +6 -2
- package/src/Table/BaseTable.tsx +12 -4
- package/src/Table/Table.doc.mjs +9 -2
- package/src/Table/Table.test.tsx +132 -14
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +40 -0
- package/src/Table/TableFooter.doc.mjs +40 -0
- package/src/Table/TableHeader.doc.mjs +40 -0
- package/src/Table/TableRow.tsx +16 -5
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
- package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
- package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/types.ts +22 -4
- package/src/Table/useBaseTablePlugins.ts +5 -0
- package/src/Table/useTableGroupedRows.doc.mjs +5 -4
- package/src/Table/useTablePagination.doc.mjs +7 -0
- package/src/Table/useTableRowStatus.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +31 -0
- package/src/Text/Text.test.tsx +67 -1
- package/src/Text/Text.tsx +6 -3
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +37 -24
- package/src/TextInput/TextInput.doc.mjs +10 -0
- package/src/TextInput/TextInput.tsx +3 -2
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.tsx +2 -2
- package/src/Timestamp/Timestamp.test.tsx +58 -0
- package/src/Timestamp/Timestamp.tsx +12 -10
- package/src/Toast/Toast.doc.mjs +26 -12
- package/src/Toast/Toast.tsx +28 -4
- package/src/Toast/ToastViewport.test.tsx +536 -8
- package/src/Toast/ToastViewport.tsx +81 -12
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +15 -10
- package/src/Token/TokenLink.tsx +14 -5
- package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +53 -24
- package/src/Toolbar/Toolbar.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.test.tsx +32 -0
- package/src/Tooltip/Tooltip.tsx +5 -0
- package/src/Tooltip/useTooltip.tsx +47 -24
- package/src/TopNav/TopNavHeading.tsx +5 -4
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -5
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -7
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
- package/src/Typeahead/BaseTypeahead.tsx +181 -39
- package/src/Typeahead/Typeahead.doc.mjs +11 -0
- package/src/Typeahead/Typeahead.test.tsx +203 -0
- package/src/Typeahead/Typeahead.tsx +12 -2
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useFocusTrap.test.tsx +14 -0
- package/src/hooks/useFocusTrap.ts +62 -111
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
- package/src/hooks/useHotkeys.ts +3 -18
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useMergedRefs.doc.mjs +79 -0
- package/src/hooks/useMergedRefs.test.tsx +62 -0
- package/src/hooks/useMergedRefs.ts +36 -0
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +1 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/MediaTheme.doc.mjs +5 -5
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/derivedVarRegistry.test.ts +26 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/utils/groupItems.ts +12 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/sharedResizeObserver.ts +10 -2
- package/src/utils/timeParser.test.ts +6 -1
- package/src/utils/timeParser.ts +35 -13
- package/src/__tests__/inputWidthContract.test.tsx +0 -69
package/src/Card/Card.doc.mjs
CHANGED
|
@@ -57,8 +57,9 @@ export const docs = {
|
|
|
57
57
|
{
|
|
58
58
|
name: 'padding',
|
|
59
59
|
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
60
|
-
description:
|
|
61
|
-
|
|
60
|
+
description:
|
|
61
|
+
"Internal padding using the spacing scale. Omit it and the card takes the theme's card padding rather than a step, so passing a step is a decision to override the theme, not a way to restate the default.",
|
|
62
|
+
default: "the theme's card padding (spacing step 4 with no theme)",
|
|
62
63
|
},
|
|
63
64
|
{
|
|
64
65
|
name: 'variant',
|
|
@@ -77,7 +78,6 @@ export const docs = {
|
|
|
77
78
|
],
|
|
78
79
|
playground: {
|
|
79
80
|
defaults: {
|
|
80
|
-
padding: 4,
|
|
81
81
|
children: {
|
|
82
82
|
__element: 'VStack',
|
|
83
83
|
props: {gap: 2},
|
|
@@ -91,7 +91,7 @@ export const docs = {
|
|
|
91
91
|
theming: {
|
|
92
92
|
container: true,
|
|
93
93
|
targets: [
|
|
94
|
-
{className: 'astryx-card', visualProps: ['variant']},
|
|
94
|
+
{className: 'astryx-card', visualProps: ['variant', 'elevation']},
|
|
95
95
|
],
|
|
96
96
|
vars: [
|
|
97
97
|
{name: '--_card-radius', description: 'Border radius of the card', default: 'var(--radius-container)', private: true},
|
|
@@ -135,16 +135,19 @@ export const docsZh = {
|
|
|
135
135
|
{name: 'maxWidth', type: 'SizeValue', description: '卡片最大宽度。'},
|
|
136
136
|
{name: 'minHeight', type: 'SizeValue', description: '卡片最小高度。'},
|
|
137
137
|
{name: 'children', type: 'ReactNode', description: '在卡片内部渲染的内容。'},
|
|
138
|
-
{name: 'padding', type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10', description: '
|
|
138
|
+
{name: 'padding', type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10', description: '使用间距比例的内边距。省略时,卡片采用主题的卡片内边距,而不是某个步进值;传入步进值意味着覆盖主题,而不是复述默认值。', default: "the theme's card padding (spacing step 4 with no theme)"},
|
|
139
|
+
{name: 'variant', type: "'default' | 'transparent' | 'muted' | 'blue' | 'cyan' | 'gray' | 'green' | 'orange' | 'pink' | 'purple' | 'red' | 'teal' | 'yellow'", description: '背景颜色变体。`default` 使用标准卡片背景;`transparent` 完全去掉背景;`muted` 使用弱化卡片的柔和背景。非语义变体使用对应的 `--color-background-<name>` 令牌。', default: "'default'"},
|
|
139
140
|
{name: 'elevation', type: "'none' | 'low' | 'med' | 'high'", description: '静止阴影深度。`none` 为扁平;`low`/`med`/`high` 对应阴影令牌比例。', default: "'none'"},
|
|
140
141
|
],
|
|
141
142
|
theming: {
|
|
142
143
|
container: true,
|
|
143
144
|
targets: [
|
|
144
|
-
{className: 'astryx-card', visualProps: ['variant']},
|
|
145
|
+
{className: 'astryx-card', visualProps: ['variant', 'elevation']},
|
|
145
146
|
],
|
|
146
147
|
vars: [
|
|
147
148
|
{name: '--_card-radius', description: 'Border radius of the card', default: 'var(--radius-container)', private: true},
|
|
149
|
+
{name: '--_card-elevation', description: 'Resting shadow of the card, set from the elevation prop.', default: '0 0 transparent', private: true},
|
|
150
|
+
{name: '--_card-ring', description: 'Inset ring drawn in the card box-shadow list.', default: '0 0 transparent', private: true},
|
|
148
151
|
],
|
|
149
152
|
derived: [
|
|
150
153
|
{property: 'borderRadius', vars: ['--_card-radius']},
|
|
@@ -178,7 +181,7 @@ export const docsDense = {
|
|
|
178
181
|
maxWidth: 'max card width',
|
|
179
182
|
minHeight: 'min card height',
|
|
180
183
|
children: 'content inside card',
|
|
181
|
-
padding:
|
|
184
|
+
padding: "internal padding via spacing scale; omitted = the theme's card padding, NOT a fixed step. Passing a step overrides the theme.",
|
|
182
185
|
variant: 'background color variant; `default` = standard card bg, `transparent` = no background at all, `muted` = muted bg for de-emphasised cards; non-semantic variants use the corresponding `--color-background-<name>` token',
|
|
183
186
|
elevation: 'resting shadow depth: none (flat) | low | med | high (shadow token scale). Raise only to float above content.',
|
|
184
187
|
},
|
package/src/Card/Card.test.tsx
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
+
import {createRef} from 'react';
|
|
3
4
|
import {describe, it, expect} from 'vitest';
|
|
4
5
|
import {render} from '@testing-library/react';
|
|
5
6
|
import {Card} from './Card';
|
|
7
|
+
import type {CardVariant} from './Card';
|
|
6
8
|
|
|
7
9
|
describe('Card', () => {
|
|
8
10
|
it('renders children', () => {
|
|
@@ -10,17 +12,52 @@ describe('Card', () => {
|
|
|
10
12
|
expect(getByText('Hello')).toBeInTheDocument();
|
|
11
13
|
});
|
|
12
14
|
|
|
13
|
-
it('
|
|
14
|
-
const
|
|
15
|
-
const
|
|
15
|
+
it('forwards ref to the rendered element', () => {
|
|
16
|
+
const ref = createRef<HTMLDivElement>();
|
|
17
|
+
const {container} = render(<Card ref={ref}>C</Card>);
|
|
18
|
+
expect(ref.current).toBe(container.firstElementChild);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('spreads unknown props onto the same element that carries the theme target', () => {
|
|
22
|
+
const {getByTestId} = render(
|
|
23
|
+
<Card data-testid="card" id="promo" aria-label="Promotion">
|
|
24
|
+
C
|
|
25
|
+
</Card>,
|
|
26
|
+
);
|
|
27
|
+
const root = getByTestId('card');
|
|
28
|
+
expect(root).toHaveAttribute('id', 'promo');
|
|
29
|
+
expect(root).toHaveAttribute('aria-label', 'Promotion');
|
|
16
30
|
expect(root.className).toContain('astryx-card');
|
|
17
31
|
});
|
|
18
32
|
|
|
19
|
-
it('
|
|
20
|
-
const {container} = render(<Card
|
|
33
|
+
it('merges a consumer className instead of replacing the theme target', () => {
|
|
34
|
+
const {container} = render(<Card className="promo">C</Card>);
|
|
21
35
|
const root = container.firstElementChild!;
|
|
22
36
|
expect(root.className).toContain('astryx-card');
|
|
23
|
-
expect(root.className).toContain('
|
|
37
|
+
expect(root.className).toContain('promo');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('reflects variant as a theme data attribute', () => {
|
|
41
|
+
const {container} = render(<Card variant="muted">C</Card>);
|
|
42
|
+
expect(container.firstElementChild).toHaveAttribute(
|
|
43
|
+
'data-variant',
|
|
44
|
+
'muted',
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('reflects elevation as a theme data attribute', () => {
|
|
49
|
+
const {container} = render(<Card elevation="high">C</Card>);
|
|
50
|
+
expect(container.firstElementChild).toHaveAttribute(
|
|
51
|
+
'data-elevation',
|
|
52
|
+
'high',
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('defaults to the default variant at rest elevation', () => {
|
|
57
|
+
const {container} = render(<Card>C</Card>);
|
|
58
|
+
const root = container.firstElementChild!;
|
|
59
|
+
expect(root).toHaveAttribute('data-variant', 'default');
|
|
60
|
+
expect(root).toHaveAttribute('data-elevation', 'none');
|
|
24
61
|
});
|
|
25
62
|
|
|
26
63
|
it('applies a distinct class for each elevation level', () => {
|
|
@@ -28,18 +65,75 @@ describe('Card', () => {
|
|
|
28
65
|
const {container} = render(<Card elevation={elevation}>C</Card>);
|
|
29
66
|
return container.firstElementChild!.className;
|
|
30
67
|
};
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
68
|
+
const classes = (['none', 'low', 'med', 'high'] as const).map(classFor);
|
|
69
|
+
expect(new Set(classes).size).toBe(4);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Deriving the prop from CardVariantMap must not change which values it
|
|
73
|
+
// accepts. A key added to or dropped from the map fails to type-check here:
|
|
74
|
+
// a missing one against Record<CardVariant, true>, an extra one as an excess
|
|
75
|
+
// property.
|
|
76
|
+
const builtInVariants: Record<CardVariant, true> = {
|
|
77
|
+
default: true,
|
|
78
|
+
transparent: true,
|
|
79
|
+
muted: true,
|
|
80
|
+
blue: true,
|
|
81
|
+
cyan: true,
|
|
82
|
+
gray: true,
|
|
83
|
+
green: true,
|
|
84
|
+
orange: true,
|
|
85
|
+
pink: true,
|
|
86
|
+
purple: true,
|
|
87
|
+
red: true,
|
|
88
|
+
teal: true,
|
|
89
|
+
yellow: true,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
it('accepts exactly the thirteen built-in variants, each reflected', () => {
|
|
93
|
+
const variants = Object.keys(builtInVariants) as CardVariant[];
|
|
94
|
+
expect(variants).toHaveLength(13);
|
|
95
|
+
for (const variant of variants) {
|
|
96
|
+
const {container} = render(<Card variant={variant}>C</Card>);
|
|
97
|
+
expect(container.firstElementChild).toHaveAttribute(
|
|
98
|
+
'data-variant',
|
|
99
|
+
variant,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
describe('a variant a theme added', () => {
|
|
105
|
+
// The cast stands in for the module augmentation `astryx theme build`
|
|
106
|
+
// emits; that the augmentation itself widens the prop is covered by
|
|
107
|
+
// packages/cli/clients/cli/commands/build-theme.variants.test.mjs.
|
|
108
|
+
const themeAdded = 'brand' as CardVariant;
|
|
109
|
+
|
|
110
|
+
const classesFor = (variant: CardVariant) => {
|
|
111
|
+
const {container} = render(<Card variant={variant}>C</Card>);
|
|
112
|
+
return new Set(container.firstElementChild!.className.split(' '));
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
it('renders the selector a theme rule needs', () => {
|
|
116
|
+
const {container} = render(<Card variant={themeAdded}>C</Card>);
|
|
117
|
+
const root = container.firstElementChild!;
|
|
118
|
+
expect(root).toHaveAttribute('data-variant', 'brand');
|
|
119
|
+
expect(root.className).toContain('astryx-card');
|
|
120
|
+
expect(root.className).toContain('brand');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('falls through to base styles instead of another variant', () => {
|
|
124
|
+
const muted = classesFor('muted');
|
|
125
|
+
const blue = classesFor('blue');
|
|
126
|
+
const brand = classesFor(themeAdded);
|
|
127
|
+
|
|
128
|
+
const variantOwned = [
|
|
129
|
+
...[...muted].filter(c => !blue.has(c)),
|
|
130
|
+
...[...blue].filter(c => !muted.has(c)),
|
|
131
|
+
];
|
|
132
|
+
const shared = [...muted].filter(c => blue.has(c));
|
|
133
|
+
|
|
134
|
+
expect(variantOwned.length).toBeGreaterThan(0);
|
|
135
|
+
expect(variantOwned.filter(c => brand.has(c))).toEqual([]);
|
|
136
|
+
expect(shared.filter(c => !brand.has(c))).toEqual([]);
|
|
137
|
+
});
|
|
44
138
|
});
|
|
45
139
|
});
|
package/src/Card/Card.tsx
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Card.tsx
|
|
5
5
|
* @input Uses container utility, StyleX
|
|
6
|
-
* @output Exports Card component
|
|
6
|
+
* @output Exports Card component, CardProps, CardVariant types
|
|
7
7
|
* @position Core card container component
|
|
8
8
|
*
|
|
9
9
|
* SYNC: When modified, update these files to stay in sync:
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
import type {ReactNode} from 'react';
|
|
17
17
|
import * as stylex from '@stylexjs/stylex';
|
|
18
|
+
import type {StyleXStyles} from '@stylexjs/stylex';
|
|
18
19
|
import {
|
|
19
20
|
borderVars,
|
|
20
21
|
colorVars,
|
|
@@ -23,24 +24,21 @@ import {
|
|
|
23
24
|
} from '../theme/tokens.stylex';
|
|
24
25
|
import {container} from '../Layout/container.stylex';
|
|
25
26
|
import type {SpacingToken} from '../Layout/container.stylex';
|
|
26
|
-
import {
|
|
27
|
-
paddingStyles,
|
|
28
|
-
containerPaddingInlineVarStyles,
|
|
29
|
-
containerPaddingBlockStartVarStyles,
|
|
30
|
-
containerPaddingBlockEndVarStyles,
|
|
31
|
-
spacingStepToToken,
|
|
32
|
-
} from '../Layout/padding.stylex';
|
|
27
|
+
import {spacingStepToToken} from '../Layout/padding.stylex';
|
|
33
28
|
import type {Elevation, SizeValue, SpacingStep} from '../utils/types';
|
|
34
29
|
import {mergeProps} from '../utils';
|
|
35
30
|
import type {BaseProps} from '../BaseProps';
|
|
36
31
|
import {themeProps} from '../utils/themeProps';
|
|
32
|
+
import type {CardVariantMap} from './index';
|
|
37
33
|
|
|
38
34
|
// =============================================================================
|
|
39
35
|
// Variant type
|
|
40
36
|
// =============================================================================
|
|
41
37
|
|
|
42
38
|
/**
|
|
43
|
-
* Background color variant for Card.
|
|
39
|
+
* Background color variant for Card, derived from CardVariantMap.
|
|
40
|
+
* Extensible via module augmentation of CardVariantMap.
|
|
41
|
+
*
|
|
44
42
|
* - `default`: standard card background with visible border
|
|
45
43
|
* - `transparent`: no background, no visible border — for grouping content without visual weight
|
|
46
44
|
* - `muted`: subtle muted background for de-emphasised cards
|
|
@@ -52,20 +50,7 @@ import {themeProps} from '../utils/themeProps';
|
|
|
52
50
|
* keeping content geometry faithful to the spacing scale and identical to the
|
|
53
51
|
* borderless variants. Themes can override borderWidth/borderColor.
|
|
54
52
|
*/
|
|
55
|
-
export type CardVariant =
|
|
56
|
-
| 'default'
|
|
57
|
-
| 'transparent'
|
|
58
|
-
| 'muted'
|
|
59
|
-
| 'blue'
|
|
60
|
-
| 'cyan'
|
|
61
|
-
| 'gray'
|
|
62
|
-
| 'green'
|
|
63
|
-
| 'orange'
|
|
64
|
-
| 'pink'
|
|
65
|
-
| 'purple'
|
|
66
|
-
| 'red'
|
|
67
|
-
| 'teal'
|
|
68
|
-
| 'yellow';
|
|
53
|
+
export type CardVariant = keyof CardVariantMap;
|
|
69
54
|
|
|
70
55
|
// =============================================================================
|
|
71
56
|
// Styles
|
|
@@ -102,48 +87,53 @@ const styles = stylex.create({
|
|
|
102
87
|
},
|
|
103
88
|
});
|
|
104
89
|
|
|
105
|
-
// Background variant styles — each maps to a design token
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
90
|
+
// Background variant styles — each maps to a design token. Typed as PARTIAL
|
|
91
|
+
// over CardVariant: a theme can add a variant, and the record deliberately has
|
|
92
|
+
// no entry for it, so the lookup is undefined, StyleX drops it, and the card
|
|
93
|
+
// takes base styles for the theme rule to paint over.
|
|
94
|
+
const variantStyles: Partial<Record<CardVariant, StyleXStyles>> = stylex.create(
|
|
95
|
+
{
|
|
96
|
+
default: {
|
|
97
|
+
backgroundColor: colorVars['--color-background-card'],
|
|
98
|
+
},
|
|
99
|
+
transparent: {
|
|
100
|
+
backgroundColor: 'transparent',
|
|
101
|
+
},
|
|
102
|
+
muted: {
|
|
103
|
+
backgroundColor: colorVars['--color-background-muted'],
|
|
104
|
+
},
|
|
105
|
+
blue: {
|
|
106
|
+
backgroundColor: colorVars['--color-background-blue'],
|
|
107
|
+
},
|
|
108
|
+
cyan: {
|
|
109
|
+
backgroundColor: colorVars['--color-background-cyan'],
|
|
110
|
+
},
|
|
111
|
+
gray: {
|
|
112
|
+
backgroundColor: colorVars['--color-background-gray'],
|
|
113
|
+
},
|
|
114
|
+
green: {
|
|
115
|
+
backgroundColor: colorVars['--color-background-green'],
|
|
116
|
+
},
|
|
117
|
+
orange: {
|
|
118
|
+
backgroundColor: colorVars['--color-background-orange'],
|
|
119
|
+
},
|
|
120
|
+
pink: {
|
|
121
|
+
backgroundColor: colorVars['--color-background-pink'],
|
|
122
|
+
},
|
|
123
|
+
purple: {
|
|
124
|
+
backgroundColor: colorVars['--color-background-purple'],
|
|
125
|
+
},
|
|
126
|
+
red: {
|
|
127
|
+
backgroundColor: colorVars['--color-background-red'],
|
|
128
|
+
},
|
|
129
|
+
teal: {
|
|
130
|
+
backgroundColor: colorVars['--color-background-teal'],
|
|
131
|
+
},
|
|
132
|
+
yellow: {
|
|
133
|
+
backgroundColor: colorVars['--color-background-yellow'],
|
|
134
|
+
},
|
|
133
135
|
},
|
|
134
|
-
|
|
135
|
-
backgroundColor: colorVars['--color-background-purple'],
|
|
136
|
-
},
|
|
137
|
-
red: {
|
|
138
|
-
backgroundColor: colorVars['--color-background-red'],
|
|
139
|
-
},
|
|
140
|
-
teal: {
|
|
141
|
-
backgroundColor: colorVars['--color-background-teal'],
|
|
142
|
-
},
|
|
143
|
-
yellow: {
|
|
144
|
-
backgroundColor: colorVars['--color-background-yellow'],
|
|
145
|
-
},
|
|
146
|
-
});
|
|
136
|
+
);
|
|
147
137
|
|
|
148
138
|
// Elevation → shadow-token map. Sets the private --_card-elevation variable
|
|
149
139
|
// (not box-shadow directly) so it composes with --_card-ring in the shadow
|
|
@@ -176,14 +166,6 @@ export type {SizeValue} from '../utils/types';
|
|
|
176
166
|
|
|
177
167
|
export interface CardProps extends BaseProps<HTMLDivElement> {
|
|
178
168
|
ref?: React.Ref<HTMLDivElement>;
|
|
179
|
-
/**
|
|
180
|
-
* CSS class name(s) appended to the root element.
|
|
181
|
-
*/
|
|
182
|
-
className?: string;
|
|
183
|
-
/**
|
|
184
|
-
* Inline styles to apply to the root element.
|
|
185
|
-
*/
|
|
186
|
-
style?: React.CSSProperties;
|
|
187
169
|
/**
|
|
188
170
|
* Width of the card.
|
|
189
171
|
* Numbers are treated as pixels, strings are used as-is.
|
|
@@ -217,7 +199,12 @@ export interface CardProps extends BaseProps<HTMLDivElement> {
|
|
|
217
199
|
/**
|
|
218
200
|
* Internal padding of the card using the spacing scale.
|
|
219
201
|
* Accepts numeric spacing steps: 0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10.
|
|
220
|
-
*
|
|
202
|
+
*
|
|
203
|
+
* Omit it and the card takes the theme's card padding rather than a step, so
|
|
204
|
+
* passing a step is a decision to override the theme, not a way to restate
|
|
205
|
+
* the default.
|
|
206
|
+
*
|
|
207
|
+
* @default the theme's card padding (spacing step 4 with no theme)
|
|
221
208
|
*/
|
|
222
209
|
padding?: SpacingStep;
|
|
223
210
|
|
|
@@ -293,16 +280,19 @@ export function Card({
|
|
|
293
280
|
|
|
294
281
|
// When no explicit padding prop, use theme default (set via container tokens)
|
|
295
282
|
const useThemeDefault = padding == null;
|
|
296
|
-
const
|
|
297
|
-
|
|
283
|
+
const paddingToken = useThemeDefault
|
|
284
|
+
? undefined
|
|
285
|
+
: (spacingStepToToken[padding] as SpacingToken);
|
|
298
286
|
|
|
299
287
|
return (
|
|
300
288
|
<div
|
|
301
289
|
ref={ref}
|
|
302
290
|
{...mergeProps(
|
|
303
|
-
themeProps('card', {variant}),
|
|
291
|
+
themeProps('card', {variant, elevation}),
|
|
304
292
|
stylex.props(
|
|
305
293
|
styles.card,
|
|
294
|
+
// A theme's own variant is not a key here: the lookup is undefined,
|
|
295
|
+
// StyleX drops it, and the theme rule paints over base styles.
|
|
306
296
|
variantStyles[variant],
|
|
307
297
|
elevationStyles[elevation],
|
|
308
298
|
hasFixedHeight && styles.scrollable,
|
|
@@ -313,7 +303,7 @@ export function Card({
|
|
|
313
303
|
minHeight ?? null,
|
|
314
304
|
),
|
|
315
305
|
...container(
|
|
316
|
-
|
|
306
|
+
paddingToken == null
|
|
317
307
|
? {useThemeDefault: 'card'}
|
|
318
308
|
: {
|
|
319
309
|
paddingInnerX: paddingToken,
|
|
@@ -322,18 +312,6 @@ export function Card({
|
|
|
322
312
|
paddingOuterY: paddingToken,
|
|
323
313
|
},
|
|
324
314
|
),
|
|
325
|
-
!useThemeDefault &&
|
|
326
|
-
effectivePadding !== 4 &&
|
|
327
|
-
paddingStyles[effectivePadding],
|
|
328
|
-
!useThemeDefault &&
|
|
329
|
-
effectivePadding !== 4 &&
|
|
330
|
-
containerPaddingInlineVarStyles[effectivePadding],
|
|
331
|
-
!useThemeDefault &&
|
|
332
|
-
effectivePadding !== 4 &&
|
|
333
|
-
containerPaddingBlockStartVarStyles[effectivePadding],
|
|
334
|
-
!useThemeDefault &&
|
|
335
|
-
effectivePadding !== 4 &&
|
|
336
|
-
containerPaddingBlockEndVarStyles[effectivePadding],
|
|
337
315
|
// Applied after the container padding so the border-inset calc wins;
|
|
338
316
|
// it reads the --container-padding-* vars set above.
|
|
339
317
|
variant === 'default' && styles.withBorder,
|
package/src/Card/index.ts
CHANGED
|
@@ -3,11 +3,46 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file index.ts
|
|
5
5
|
* @input Imports Card component
|
|
6
|
-
* @output Exports Card
|
|
6
|
+
* @output Exports Card, CardProps, CardVariant, CardVariantMap
|
|
7
7
|
* @position Entry point for @astryxdesign/core/Card module
|
|
8
8
|
*
|
|
9
9
|
* SYNC: When modified, update /packages/core/src/Card/Card.doc.mjs
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Extensible variant map for Card.
|
|
14
|
+
*
|
|
15
|
+
* Theme packages can add custom variants via TypeScript module augmentation:
|
|
16
|
+
* @example
|
|
17
|
+
* ```
|
|
18
|
+
* declare module '@astryxdesign/core/Card' {
|
|
19
|
+
* interface CardVariantMap {
|
|
20
|
+
* 'brand': true;
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Pair the theme rule's `backgroundColor` with `--selectable-card-ring-color`.
|
|
26
|
+
* SelectableCard rings an added variant in that var, defaulting to the accent —
|
|
27
|
+
* no token the component could pick is guaranteed to contrast with a fill it
|
|
28
|
+
* cannot know, so the theme that supplied the fill picks the ring, in the same
|
|
29
|
+
* rule.
|
|
30
|
+
*/
|
|
31
|
+
export interface CardVariantMap {
|
|
32
|
+
default: true;
|
|
33
|
+
transparent: true;
|
|
34
|
+
muted: true;
|
|
35
|
+
blue: true;
|
|
36
|
+
cyan: true;
|
|
37
|
+
gray: true;
|
|
38
|
+
green: true;
|
|
39
|
+
orange: true;
|
|
40
|
+
pink: true;
|
|
41
|
+
purple: true;
|
|
42
|
+
red: true;
|
|
43
|
+
teal: true;
|
|
44
|
+
yellow: true;
|
|
45
|
+
}
|
|
46
|
+
|
|
12
47
|
export {Card} from './Card';
|
|
13
48
|
export type {CardProps, CardVariant, SizeValue} from './Card';
|
|
@@ -46,11 +46,12 @@ import {useLayer} from '../Layer';
|
|
|
46
46
|
import {useScrollOverflow} from '../hooks/useScrollOverflow';
|
|
47
47
|
import {isRtlElement} from '../hooks/isRtlElement';
|
|
48
48
|
import type {BaseProps} from '../BaseProps';
|
|
49
|
-
import {mergeProps,
|
|
49
|
+
import {mergeProps, rtlStyles} from '../utils';
|
|
50
50
|
import type {SpacingStep} from '../utils/types';
|
|
51
51
|
import {themeProps} from '../utils/themeProps';
|
|
52
52
|
import {useTranslator} from '../i18n';
|
|
53
53
|
|
|
54
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
54
55
|
/**
|
|
55
56
|
* Imperative control surface for the Carousel, accessed via the `handleRef`
|
|
56
57
|
* prop. Methods drive the same native-scroll machinery as the built-in
|
|
@@ -506,7 +507,7 @@ export function Carousel({
|
|
|
506
507
|
|
|
507
508
|
return (
|
|
508
509
|
<div
|
|
509
|
-
ref={
|
|
510
|
+
ref={useMergedRefs(ref, layer.ref as React.Ref<HTMLDivElement>)}
|
|
510
511
|
data-testid={testId}
|
|
511
512
|
{...htmlProps}
|
|
512
513
|
{...mergeProps(
|
|
@@ -255,6 +255,10 @@ const styles = stylex.create({
|
|
|
255
255
|
opacity: 0.5,
|
|
256
256
|
pointerEvents: 'none' as const,
|
|
257
257
|
},
|
|
258
|
+
tokenSpan: {
|
|
259
|
+
display: 'inline-flex',
|
|
260
|
+
verticalAlign: 'middle',
|
|
261
|
+
},
|
|
258
262
|
});
|
|
259
263
|
|
|
260
264
|
// =============================================================================
|
|
@@ -749,7 +753,7 @@ export function ChatComposerTokenElement({token}: {token: ChatComposerToken}) {
|
|
|
749
753
|
data-astryx-token=""
|
|
750
754
|
data-astryx-token-value={token.value}
|
|
751
755
|
contentEditable={false}
|
|
752
|
-
|
|
756
|
+
{...stylex.props(styles.tokenSpan)}>
|
|
753
757
|
{isCustomToken(token) ? (
|
|
754
758
|
token.render()
|
|
755
759
|
) : (
|
package/src/Chat/ChatLayout.tsx
CHANGED
|
@@ -33,7 +33,7 @@ import {type ReactNode, useMemo, useRef} from 'react';
|
|
|
33
33
|
import * as stylex from '@stylexjs/stylex';
|
|
34
34
|
import {spacingVars} from '../theme/tokens.stylex';
|
|
35
35
|
import type {BaseProps} from '../BaseProps';
|
|
36
|
-
import {mergeProps
|
|
36
|
+
import {mergeProps} from '../utils';
|
|
37
37
|
import {useChatStreamScroll} from './useChatStreamScroll';
|
|
38
38
|
import {useChatNewMessages} from './useChatNewMessages';
|
|
39
39
|
import {ChatLayoutScrollButton} from './ChatLayoutScrollButton';
|
|
@@ -41,6 +41,7 @@ import {ChatLayoutContext} from './ChatContext';
|
|
|
41
41
|
import {themeProps} from '../utils/themeProps';
|
|
42
42
|
import {useTranslator} from '../i18n';
|
|
43
43
|
|
|
44
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
44
45
|
// =============================================================================
|
|
45
46
|
// Types
|
|
46
47
|
// =============================================================================
|
|
@@ -343,7 +344,7 @@ export function ChatLayout({
|
|
|
343
344
|
<ChatLayoutContext value={layoutContext}>
|
|
344
345
|
<div
|
|
345
346
|
{...rest}
|
|
346
|
-
ref={
|
|
347
|
+
ref={useMergedRefs(ref, rootRef)}
|
|
347
348
|
data-testid={testId}
|
|
348
349
|
{...mergeProps(
|
|
349
350
|
themeProps('chat-layout', {density}),
|
|
@@ -7,7 +7,7 @@ export const docs = {
|
|
|
7
7
|
subComponentOf: 'Chat',
|
|
8
8
|
displayName: 'Chat Message List',
|
|
9
9
|
isHiddenFromOverview: true,
|
|
10
|
-
description: `Presentational message container with density context and infinite scroll support. Provides role="log" with aria-live="polite" for accessibility. A flex spacer pushes messages to the bottom when the list isn't full.`,
|
|
10
|
+
description: `Presentational message container with density context and infinite scroll support. Provides role="log" with aria-live="polite" for accessibility. A flex spacer pushes messages to the bottom when the list isn't full; set align="top" to start messages at the top instead.`,
|
|
11
11
|
props: [
|
|
12
12
|
{
|
|
13
13
|
name: 'children',
|
|
@@ -45,6 +45,12 @@ export const docs = {
|
|
|
45
45
|
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
46
46
|
description: 'Gap between top-level message rows. Defaults to the selected density; override for LLM event streams or independent rows that need different spacing from density.',
|
|
47
47
|
},
|
|
48
|
+
{
|
|
49
|
+
name: 'align',
|
|
50
|
+
type: "'top' | 'bottom'",
|
|
51
|
+
description: "Vertical alignment when the list is shorter than its container. 'bottom' fills free space with a spacer so short conversations sit above the composer; 'top' omits the spacer so messages start at the top. Only affects a non-full list; overflowing lists scroll identically, preserving auto-scroll-to-bottom.",
|
|
52
|
+
default: "'bottom'",
|
|
53
|
+
},
|
|
48
54
|
{
|
|
49
55
|
name: 'isStreaming',
|
|
50
56
|
type: 'boolean',
|
|
@@ -65,6 +71,7 @@ export const docsZh = {
|
|
|
65
71
|
scrollToTopAction: '用户滚动到顶部时触发的异步操作。用于加载更早的消息。',
|
|
66
72
|
density: '视觉密度,通过上下文传递给子消息。',
|
|
67
73
|
gap: '顶层消息行之间的间距。默认跟随密度;当 LLM 事件流等独立行需要不同间距时可覆盖。',
|
|
74
|
+
align: "列表内容不足一屏时的垂直对齐方式。'bottom' 用占位块填满剩余空间,让简短对话贴近输入框;'top' 省略占位块,让消息从顶部开始。仅影响未填满的列表,溢出后两种模式滚动一致,保持自动滚动到底部。",
|
|
68
75
|
isStreaming: '是否有助手消息正在流式输出。标记日志为 aria-busy,让屏幕阅读器等待并在完成后一次性播报,而不是每个 token 都重复播报。',
|
|
69
76
|
},
|
|
70
77
|
};
|
|
@@ -80,6 +87,7 @@ export const docsDense = {
|
|
|
80
87
|
scrollToTopAction: 'async action at scroll top; load older msgs',
|
|
81
88
|
density: 'visual density; flows to children via context',
|
|
82
89
|
gap: 'top-level row gap; defaults to density spacing; override for independent LLM/tool rows',
|
|
90
|
+
align: "'top'|'bottom' (def bottom); bottom spacer pushes short lists down, top starts at top; overflow scrolls same either way",
|
|
83
91
|
isStreaming: 'assistant streaming? marks log aria-busy so SR announces the completed msg once',
|
|
84
92
|
},
|
|
85
93
|
};
|
|
@@ -83,4 +83,50 @@ describe('ChatMessageList', () => {
|
|
|
83
83
|
);
|
|
84
84
|
expect(screen.getByTestId('chat-list')).toBeTruthy();
|
|
85
85
|
});
|
|
86
|
+
|
|
87
|
+
// With no scrollToTopAction the spacer is the only aria-hidden element in
|
|
88
|
+
// the list, so its presence maps 1:1 to the aria-hidden count.
|
|
89
|
+
it('renders the bottom spacer by default', () => {
|
|
90
|
+
render(
|
|
91
|
+
<ChatMessageList data-testid="list">
|
|
92
|
+
<div>msg</div>
|
|
93
|
+
</ChatMessageList>,
|
|
94
|
+
);
|
|
95
|
+
expect(
|
|
96
|
+
screen.getByTestId('list').querySelectorAll('[aria-hidden]'),
|
|
97
|
+
).toHaveLength(1);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('renders the bottom spacer when align="bottom"', () => {
|
|
101
|
+
render(
|
|
102
|
+
<ChatMessageList align="bottom" data-testid="list">
|
|
103
|
+
<div>msg</div>
|
|
104
|
+
</ChatMessageList>,
|
|
105
|
+
);
|
|
106
|
+
expect(
|
|
107
|
+
screen.getByTestId('list').querySelectorAll('[aria-hidden]'),
|
|
108
|
+
).toHaveLength(1);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('omits the spacer when align="top"', () => {
|
|
112
|
+
render(
|
|
113
|
+
<ChatMessageList align="top" data-testid="list">
|
|
114
|
+
<div>msg</div>
|
|
115
|
+
</ChatMessageList>,
|
|
116
|
+
);
|
|
117
|
+
expect(
|
|
118
|
+
screen.getByTestId('list').querySelectorAll('[aria-hidden]'),
|
|
119
|
+
).toHaveLength(0);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('still renders children when align="top"', () => {
|
|
123
|
+
render(
|
|
124
|
+
<ChatMessageList align="top">
|
|
125
|
+
<ChatMessage sender="assistant">
|
|
126
|
+
<ChatMessageBubble>Hello</ChatMessageBubble>
|
|
127
|
+
</ChatMessage>
|
|
128
|
+
</ChatMessageList>,
|
|
129
|
+
);
|
|
130
|
+
expect(screen.getByText('Hello')).toBeTruthy();
|
|
131
|
+
});
|
|
86
132
|
});
|