@astryxdesign/core 0.1.8 → 0.1.9-canary.02ef052
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 +100 -0
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +6 -2
- package/dist/AppShell/AppShellMobileContext.d.ts +8 -0
- package/dist/AppShell/AppShellMobileContext.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts +58 -3
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +240 -53
- package/dist/Avatar/AvatarStatusDot.d.ts +35 -5
- package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
- package/dist/Avatar/AvatarStatusDot.js +144 -19
- package/dist/AvatarGroup/AvatarGroup.d.ts +7 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +58 -6
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +1 -0
- package/dist/Banner/Banner.d.ts +9 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +33 -4
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +31 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +215 -6
- package/dist/Breadcrumbs/index.d.ts +6 -0
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +10 -1
- package/dist/Button/Button.d.ts +8 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +33 -4
- package/dist/ButtonGroup/ButtonGroup.d.ts +9 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +30 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +80 -11
- package/dist/Calendar/dayCellUtils.d.ts +4 -4
- package/dist/Calendar/dayCellUtils.js +3 -3
- package/dist/Calendar/styles.d.ts +30 -31
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +30 -31
- package/dist/Card/Card.d.ts +8 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +28 -2
- package/dist/Carousel/Carousel.d.ts +4 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +46 -16
- package/dist/Chat/ChatComposer.d.ts +8 -0
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +46 -7
- package/dist/Chat/ChatComposerDrawer.d.ts +2 -0
- package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
- package/dist/Chat/ChatComposerDrawer.js +11 -1
- package/dist/Chat/ChatComposerInput.d.ts +20 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +36 -4
- package/dist/Chat/ChatContext.d.ts +33 -0
- package/dist/Chat/ChatContext.d.ts.map +1 -1
- package/dist/Chat/ChatContext.js +16 -2
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +4 -2
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +4 -4
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +4 -4
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +7 -1
- package/dist/Chat/ChatToolCalls.d.ts +5 -1
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +27 -11
- package/dist/Chat/index.d.ts +2 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/index.js +1 -1
- package/dist/Chat/useChatStreamScroll.d.ts +2 -1
- package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.js +22 -8
- package/dist/Chat/useSpeechRecognition.d.ts +0 -1
- package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.js +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -2
- package/dist/CheckboxInput/CheckboxInput.js +5 -5
- package/dist/CheckboxList/CheckboxListItem.d.ts +20 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +11 -1
- package/dist/Citation/Citation.d.ts +22 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +20 -6
- package/dist/ClickableCard/ClickableCard.d.ts +9 -2
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +5 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +22 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +3 -1
- package/dist/CommandPalette/CommandPalette.d.ts +2 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +45 -4
- package/dist/CommandPalette/CommandPaletteGroup.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteGroup.js +9 -2
- package/dist/CommandPalette/CommandPaletteInput.d.ts +7 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +6 -1
- package/dist/CommandPalette/CommandPaletteItem.js +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +14 -5
- package/dist/ContextMenu/index.d.ts +1 -0
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +3 -1
- package/dist/DateInput/DateInput.d.ts +56 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +59 -21
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts +10 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +23 -20
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +33 -19
- package/dist/Dialog/Dialog.d.ts +3 -0
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +57 -6
- package/dist/Dialog/DialogContext.d.ts +7 -0
- package/dist/Dialog/DialogContext.d.ts.map +1 -1
- package/dist/Dialog/DialogContext.js +2 -2
- package/dist/Dialog/DialogHeader.d.ts +5 -2
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +6 -1
- package/dist/Divider/Divider.js +1 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts +6 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +22 -5
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +1 -2
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +5 -3
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +5 -2
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -2
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +1 -2
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +4 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +104 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +427 -0
- package/dist/DropdownMenu/index.d.ts +10 -0
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +13 -0
- package/dist/DropdownMenu/menuItemHover.d.ts +23 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -0
- package/dist/DropdownMenu/menuItemHover.js +33 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts +8 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemRoles.js +10 -1
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +21 -6
- package/dist/Field/Field.d.ts +3 -1
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +6 -4
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +43 -16
- package/dist/Field/inputStyles.stylex.d.ts +1 -0
- package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
- package/dist/Field/inputStyles.stylex.js +1 -0
- package/dist/FieldStatus/FieldStatus.d.ts +18 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +60 -6
- package/dist/FileInput/FileInput.d.ts +10 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +54 -35
- package/dist/HoverCard/HoverCard.d.ts +9 -1
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +2 -0
- package/dist/HoverCard/useHoverCard.d.ts +8 -0
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +17 -6
- package/dist/Icon/Icon.d.ts +22 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +19 -3
- package/dist/Item/Item.d.ts +6 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +22 -1
- package/dist/Layer/useLayer.d.ts +6 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +2 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +19 -13
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +7 -0
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +6 -1
- package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
- package/dist/MobileNav/MobileNavToggle.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts +9 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +104 -50
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +16 -0
- package/dist/NavMenu/NavHeadingMenuItem.js +1 -1
- package/dist/NumberInput/NumberInput.d.ts +10 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +22 -17
- package/dist/Outline/Outline.d.ts +0 -1
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +0 -1
- package/dist/OverflowList/OverflowList.d.ts +20 -3
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +29 -4
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +11 -3
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +3 -2
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +3 -9
- package/dist/PowerSearch/PowerSearch.d.ts +9 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +2 -0
- package/dist/PowerSearch/PowerSearchEditPopover.js +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/RadioList/RadioList.d.ts +2 -2
- package/dist/RadioList/RadioListItem.js +4 -4
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -1
- package/dist/SelectableCard/SelectableCard.d.ts +9 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +16 -13
- package/dist/Selector/Selector.d.ts +8 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +65 -19
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +16 -0
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +5 -5
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +13 -10
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +21 -8
- package/dist/SideNav/SideNavItem.d.ts +1 -1
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +12 -10
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +106 -36
- package/dist/Stack/stack.stylex.d.ts +9 -9
- package/dist/Switch/Switch.d.ts +8 -1
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +160 -91
- package/dist/TabList/Tab.js +2 -2
- package/dist/TabList/TabMenu.js +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +33 -6
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableHeaderCell.js +3 -3
- 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/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +15 -11
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +36 -26
- package/dist/Table/plugins/rowStatus/index.d.ts +3 -0
- package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -0
- package/dist/Table/plugins/rowStatus/index.js +3 -0
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +60 -0
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -0
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +145 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts +13 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +7 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +16 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +105 -12
- package/dist/Table/plugins/tree/useTableTreeState.d.ts +6 -0
- package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeState.js +22 -1
- package/dist/Table/types.d.ts +32 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -3
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +18 -19
- package/dist/TextInput/TextInput.d.ts +10 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +20 -17
- package/dist/Thumbnail/Thumbnail.d.ts +26 -5
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +97 -54
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts +9 -0
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts.map +1 -0
- package/dist/Thumbnail/thumbnail.markers.stylex.js +14 -0
- package/dist/TimeInput/TimeInput.d.ts +10 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +32 -21
- package/dist/Timestamp/Timestamp.d.ts +3 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +8 -6
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +2 -5
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +0 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +1 -1
- package/dist/Token/Token.d.ts +30 -3
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +17 -2
- package/dist/Token/index.d.ts +1 -1
- package/dist/Token/index.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.d.ts +10 -3
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +20 -6
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +17 -1
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +18 -8
- package/dist/TopNav/TopNavMegaMenu.js +10 -4
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +9 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +8 -1
- package/dist/TopNav/TopNavMenu.d.ts +2 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +68 -6
- package/dist/TreeList/TreeList.d.ts +12 -3
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +3 -0
- package/dist/TreeList/TreeListBranches.d.ts +5 -0
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +18 -10
- package/dist/TreeList/TreeListItem.d.ts +8 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +59 -21
- package/dist/TreeList/TreeListTypes.d.ts +25 -1
- package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
- package/dist/TreeList/index.d.ts +2 -2
- package/dist/TreeList/index.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +20 -11
- package/dist/Typeahead/Typeahead.d.ts +9 -2
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +3 -1
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +20 -10
- package/dist/astryx.css +61 -39
- package/dist/astryx.umd.js +53 -53
- package/dist/astryx.umd.js.map +4 -4
- package/dist/authoring/doc.d.ts.map +1 -1
- package/dist/docs-types.d.ts +8 -0
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/computeOverflow.d.ts +47 -0
- package/dist/hooks/computeOverflow.d.ts.map +1 -0
- package/dist/hooks/computeOverflow.js +213 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/isRtlElement.d.ts +18 -0
- package/dist/hooks/isRtlElement.d.ts.map +1 -0
- package/dist/hooks/isRtlElement.js +27 -0
- package/dist/hooks/useDevWarning.d.ts +18 -0
- package/dist/hooks/useDevWarning.d.ts.map +1 -0
- package/dist/hooks/useDevWarning.js +49 -0
- package/dist/hooks/useGridFocus.d.ts +6 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +12 -9
- package/dist/hooks/useInputStatusIcon.d.ts +38 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -0
- package/dist/hooks/useInputStatusIcon.js +158 -0
- package/dist/hooks/useListFocus.d.ts +39 -1
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +54 -9
- package/dist/hooks/useOverflow.d.ts +19 -0
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +36 -25
- package/dist/i18n/InternationalizationContext.d.ts +1 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +3 -0
- package/dist/i18n/InternationalizationProvider.d.ts +8 -1
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +5 -1
- package/dist/i18n/getLocaleDirection.d.ts +18 -0
- package/dist/i18n/getLocaleDirection.d.ts.map +1 -0
- package/dist/i18n/getLocaleDirection.js +29 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +7 -1
- package/dist/i18n/resolve.d.ts.map +1 -1
- package/dist/i18n/resolve.js +7 -18
- package/dist/i18n/useDirection.d.ts +2 -0
- package/dist/i18n/useDirection.d.ts.map +1 -0
- package/dist/i18n/useDirection.js +27 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +2 -7
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +13 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +51 -0
- package/dist/theme/hct.d.ts +0 -1
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.d.ts.map +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.js +2 -1
- package/dist/utils/devWarning.d.ts +42 -0
- package/dist/utils/devWarning.d.ts.map +1 -0
- package/dist/utils/devWarning.js +88 -0
- package/dist/utils/index.d.ts +4 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -2
- package/dist/utils/plainDate.d.ts +30 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +65 -3
- package/dist/utils/rtlStyles.d.ts +24 -0
- package/dist/utils/rtlStyles.d.ts.map +1 -0
- package/dist/utils/rtlStyles.js +27 -0
- package/dist/utils/types.d.ts +13 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/locales/en.json +104 -0
- package/locales/fr-FR.json +14 -0
- package/locales/pseudo.json +78 -0
- package/package.json +6 -1
- package/src/AppShell/AppShell.tsx +6 -0
- package/src/AppShell/AppShellMobileContext.tsx +8 -0
- package/src/AppShell/useAppShellMobile.doc.mjs +8 -0
- package/src/Avatar/Avatar.doc.mjs +64 -5
- package/src/Avatar/Avatar.test.tsx +374 -1
- package/src/Avatar/Avatar.tsx +367 -69
- package/src/Avatar/AvatarStatusDot.doc.mjs +23 -12
- package/src/Avatar/AvatarStatusDot.test.tsx +284 -0
- package/src/Avatar/AvatarStatusDot.tsx +180 -21
- package/src/AvatarGroup/AvatarGroup.doc.mjs +2 -0
- package/src/AvatarGroup/AvatarGroup.test.tsx +141 -1
- package/src/AvatarGroup/AvatarGroup.tsx +58 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +1 -0
- package/src/Banner/Banner.doc.mjs +9 -0
- package/src/Banner/Banner.test.tsx +30 -0
- package/src/Banner/Banner.tsx +53 -9
- package/src/Breadcrumbs/BreadcrumbItem.doc.mjs +26 -0
- package/src/Breadcrumbs/BreadcrumbItem.tsx +333 -14
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +2 -0
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +335 -2
- package/src/Breadcrumbs/index.ts +31 -0
- package/src/Button/Button.doc.mjs +9 -4
- package/src/Button/Button.test.tsx +49 -0
- package/src/Button/Button.tsx +27 -3
- package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -0
- package/src/ButtonGroup/ButtonGroup.test.tsx +37 -0
- package/src/ButtonGroup/ButtonGroup.tsx +32 -0
- package/src/Calendar/Calendar.doc.mjs +12 -1
- package/src/Calendar/Calendar.test.tsx +362 -19
- package/src/Calendar/Calendar.tsx +111 -32
- package/src/Calendar/dayCellUtils.test.ts +23 -18
- package/src/Calendar/dayCellUtils.ts +3 -3
- package/src/Calendar/styles.ts +33 -39
- package/src/Card/Card.doc.mjs +9 -0
- package/src/Card/Card.test.tsx +21 -3
- package/src/Card/Card.tsx +35 -2
- package/src/Carousel/Carousel.doc.mjs +1 -0
- package/src/Carousel/Carousel.test.tsx +53 -0
- package/src/Carousel/Carousel.tsx +59 -10
- package/src/Chat/ChatComposer.doc.mjs +12 -3
- package/src/Chat/ChatComposer.test.tsx +115 -0
- package/src/Chat/ChatComposer.tsx +73 -9
- package/src/Chat/ChatComposerDrawer.test.tsx +61 -0
- package/src/Chat/ChatComposerDrawer.tsx +11 -1
- package/src/Chat/ChatComposerInput.doc.mjs +7 -0
- package/src/Chat/ChatComposerInput.test.tsx +103 -0
- package/src/Chat/ChatComposerInput.tsx +51 -5
- package/src/Chat/ChatContext.tsx +37 -10
- package/src/Chat/ChatDictationButton.tsx +11 -2
- package/src/Chat/ChatLayout.tsx +7 -5
- package/src/Chat/ChatLayoutScrollButton.tsx +7 -2
- package/src/Chat/ChatMessageMetadata.tsx +1 -2
- package/src/Chat/ChatSendButton.tsx +11 -1
- package/src/Chat/ChatToolCalls.test.tsx +64 -0
- package/src/Chat/ChatToolCalls.tsx +33 -5
- package/src/Chat/index.ts +5 -1
- package/src/Chat/useChatStreamScroll.test.tsx +49 -0
- package/src/Chat/useChatStreamScroll.ts +27 -10
- package/src/Chat/useSpeechRecognition.ts +1 -1
- package/src/Chat/useTriggerMenu.tsx +4 -2
- package/src/CheckboxInput/CheckboxInput.doc.mjs +6 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +32 -1
- package/src/CheckboxInput/CheckboxInput.tsx +5 -5
- package/src/CheckboxList/CheckboxList.doc.mjs +6 -0
- package/src/CheckboxList/CheckboxList.test.tsx +81 -3
- package/src/CheckboxList/CheckboxListItem.doc.mjs +33 -5
- package/src/CheckboxList/CheckboxListItem.tsx +41 -5
- package/src/Citation/Citation.doc.mjs +4 -3
- package/src/Citation/Citation.test.tsx +97 -0
- package/src/Citation/Citation.tsx +43 -11
- package/src/ClickableCard/ClickableCard.doc.mjs +2 -0
- package/src/ClickableCard/ClickableCard.test.tsx +34 -0
- package/src/ClickableCard/ClickableCard.tsx +13 -3
- package/src/CodeBlock/CodeBlock.test.tsx +56 -0
- package/src/CodeBlock/CodeBlock.tsx +45 -10
- package/src/Collapsible/Collapsible.doc.mjs +1 -0
- package/src/Collapsible/Collapsible.test.tsx +7 -0
- package/src/Collapsible/Collapsible.tsx +16 -6
- package/src/CommandPalette/CommandPalette.doc.mjs +1 -0
- package/src/CommandPalette/CommandPalette.test.tsx +95 -1
- package/src/CommandPalette/CommandPalette.tsx +44 -3
- package/src/CommandPalette/CommandPaletteGroup.test.tsx +71 -0
- package/src/CommandPalette/CommandPaletteGroup.tsx +12 -1
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +26 -9
- package/src/CommandPalette/CommandPaletteInput.test.tsx +34 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +11 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +235 -0
- package/src/ContextMenu/ContextMenu.tsx +13 -11
- package/src/ContextMenu/index.ts +5 -0
- package/src/DateInput/DateInput.doc.mjs +41 -0
- package/src/DateInput/DateInput.test.tsx +338 -0
- package/src/DateInput/DateInput.tsx +119 -32
- package/src/DateInput/index.ts +1 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +16 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +140 -0
- package/src/DateRangeInput/DateRangeInput.tsx +42 -30
- package/src/DateTimeInput/DateTimeInput.doc.mjs +22 -1
- package/src/DateTimeInput/DateTimeInput.test.tsx +147 -0
- package/src/DateTimeInput/DateTimeInput.tsx +58 -41
- package/src/Dialog/Dialog.doc.mjs +2 -2
- package/src/Dialog/Dialog.test.tsx +77 -4
- package/src/Dialog/Dialog.tsx +89 -5
- package/src/Dialog/DialogContext.ts +9 -2
- package/src/Dialog/DialogHeader.doc.mjs +2 -2
- package/src/Dialog/DialogHeader.tsx +9 -2
- package/src/Divider/Divider.tsx +2 -2
- package/src/DropdownMenu/DropdownMenu.test.tsx +229 -0
- package/src/DropdownMenu/DropdownMenu.tsx +31 -12
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +9 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +9 -3
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +1 -2
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +8 -2
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +88 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +635 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +553 -0
- package/src/DropdownMenu/index.ts +16 -0
- package/src/DropdownMenu/menuItemHover.ts +39 -0
- package/src/DropdownMenu/menuItemRoles.ts +9 -0
- package/src/DropdownMenu/renderDropdownItems.tsx +29 -15
- package/src/Field/Field.test.tsx +57 -12
- package/src/Field/Field.tsx +20 -14
- package/src/Field/FieldLabel.tsx +9 -1
- package/src/Field/inputStyles.stylex.ts +2 -0
- package/src/FieldStatus/FieldStatus.doc.mjs +17 -5
- package/src/FieldStatus/FieldStatus.test.tsx +150 -40
- package/src/FieldStatus/FieldStatus.tsx +69 -5
- package/src/FileInput/FileInput.doc.mjs +23 -2
- package/src/FileInput/FileInput.test.tsx +135 -12
- package/src/FileInput/FileInput.tsx +65 -51
- package/src/HoverCard/HoverCard.doc.mjs +13 -0
- package/src/HoverCard/HoverCard.test.tsx +21 -2
- package/src/HoverCard/HoverCard.tsx +11 -0
- package/src/HoverCard/useHoverCard.doc.mjs +2 -0
- package/src/HoverCard/useHoverCard.tsx +39 -5
- package/src/Icon/Icon.doc.mjs +16 -2
- package/src/Icon/Icon.test.tsx +89 -0
- package/src/Icon/Icon.tsx +58 -5
- package/src/IconButton/IconButton.doc.mjs +8 -0
- package/src/IconButton/IconButton.test.tsx +15 -18
- package/src/Item/Item.test.tsx +40 -18
- package/src/Item/Item.tsx +38 -2
- package/src/Layer/useLayer.tsx +8 -0
- package/src/Lightbox/Lightbox.tsx +15 -7
- package/src/List/List.test.tsx +9 -8
- package/src/Markdown/Markdown.test.tsx +21 -0
- package/src/Markdown/Markdown.tsx +4 -0
- package/src/MobileNav/MobileNav.tsx +12 -1
- package/src/MobileNav/MobileNavToggle.test.tsx +116 -0
- package/src/MobileNav/MobileNavToggle.tsx +9 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +24 -2
- package/src/MultiSelector/MultiSelector.test.tsx +498 -3
- package/src/MultiSelector/MultiSelector.tsx +149 -65
- package/src/MultiSelector/hooks.ts +17 -0
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NumberInput/NumberInput.doc.mjs +21 -0
- package/src/NumberInput/NumberInput.test.tsx +82 -7
- package/src/NumberInput/NumberInput.tsx +36 -28
- package/src/Outline/Outline.tsx +0 -1
- package/src/OverflowList/OverflowList.doc.mjs +39 -6
- package/src/OverflowList/OverflowList.test.tsx +111 -0
- package/src/OverflowList/OverflowList.tsx +48 -8
- package/src/Pagination/Pagination.tsx +11 -3
- package/src/Popover/Popover.tsx +7 -4
- package/src/Popover/usePopover.tsx +9 -13
- package/src/PowerSearch/PowerSearch.doc.mjs +29 -0
- package/src/PowerSearch/PowerSearch.test.tsx +43 -0
- package/src/PowerSearch/PowerSearch.tsx +10 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +67 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +1 -1
- package/src/PowerSearch/usePowerSearchSource.ts +1 -2
- package/src/RadioList/RadioList.doc.mjs +6 -0
- package/src/RadioList/RadioList.tsx +2 -2
- package/src/RadioList/RadioListItem.tsx +4 -4
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -0
- package/src/SelectableCard/SelectableCard.doc.mjs +2 -0
- package/src/SelectableCard/SelectableCard.test.tsx +46 -4
- package/src/SelectableCard/SelectableCard.tsx +29 -16
- package/src/Selector/Selector.doc.mjs +15 -0
- package/src/Selector/Selector.test.tsx +417 -0
- package/src/Selector/Selector.tsx +86 -21
- package/src/Selector/hooks.ts +17 -0
- package/src/SideNav/SideNav.test.tsx +119 -3
- package/src/SideNav/SideNav.tsx +1 -8
- package/src/SideNav/SideNavCollapseButton.tsx +15 -8
- package/src/SideNav/SideNavHeading.tsx +24 -8
- package/src/SideNav/SideNavItem.tsx +10 -4
- package/src/Slider/Slider.doc.mjs +6 -0
- package/src/Slider/Slider.test.tsx +314 -13
- package/src/Slider/Slider.tsx +117 -28
- package/src/Switch/Switch.doc.mjs +142 -42
- package/src/Switch/Switch.test.tsx +54 -1
- package/src/Switch/Switch.tsx +90 -33
- package/src/TabList/Tab.tsx +2 -2
- package/src/TabList/TabMenu.tsx +2 -2
- package/src/Table/BaseTable.tsx +37 -7
- package/src/Table/Table.doc.mjs +11 -0
- package/src/Table/Table.test.tsx +85 -0
- package/src/Table/TableCell.tsx +3 -3
- package/src/Table/TableHeaderCell.tsx +3 -3
- package/src/Table/index.ts +5 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +15 -8
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +24 -17
- package/src/Table/plugins/rowStatus/index.ts +7 -0
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +138 -0
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +189 -0
- package/src/Table/plugins/selection/useTableSelection.test.tsx +77 -3
- package/src/Table/plugins/selection/useTableSelection.tsx +22 -1
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -1
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +135 -3
- package/src/Table/plugins/tree/useTableTreeData.tsx +139 -8
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +104 -0
- package/src/Table/plugins/tree/useTableTreeState.tsx +46 -2
- package/src/Table/types.ts +33 -0
- package/src/Table/useBaseTablePlugins.ts +10 -6
- package/src/Table/useTableRowStatus.doc.mjs +30 -0
- package/src/Table/useTableSelection.doc.mjs +65 -14
- package/src/Table/useTableTreeData.doc.mjs +29 -0
- package/src/Table/useTableTreeState.doc.mjs +2 -2
- package/src/TextArea/TextArea.doc.mjs +21 -0
- package/src/TextArea/TextArea.test.tsx +32 -1
- package/src/TextArea/TextArea.tsx +27 -26
- package/src/TextInput/TextInput.doc.mjs +21 -0
- package/src/TextInput/TextInput.test.tsx +150 -0
- package/src/TextInput/TextInput.tsx +28 -25
- package/src/Thumbnail/Thumbnail.doc.mjs +19 -10
- package/src/Thumbnail/Thumbnail.test.tsx +98 -7
- package/src/Thumbnail/Thumbnail.tsx +142 -42
- package/src/Thumbnail/thumbnail.markers.stylex.ts +12 -0
- package/src/TimeInput/TimeInput.doc.mjs +21 -0
- package/src/TimeInput/TimeInput.test.tsx +99 -1
- package/src/TimeInput/TimeInput.tsx +43 -31
- package/src/Timestamp/Timestamp.doc.mjs +4 -4
- package/src/Timestamp/Timestamp.test.tsx +32 -0
- package/src/Timestamp/Timestamp.tsx +28 -8
- package/src/Toast/useToast.tsx +7 -8
- package/src/ToggleButton/ToggleButtonGroup.tsx +1 -1
- package/src/Token/Token.test.tsx +21 -15
- package/src/Token/Token.tsx +31 -14
- package/src/Token/index.ts +1 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +38 -2
- package/src/Tokenizer/Tokenizer.test.tsx +206 -2
- package/src/Tokenizer/Tokenizer.tsx +30 -6
- package/src/Tooltip/Tooltip.test.tsx +46 -0
- package/src/Tooltip/useTooltip.tsx +20 -0
- package/src/TopNav/TopNav.test.tsx +125 -1
- package/src/TopNav/TopNavHeading.tsx +24 -8
- package/src/TopNav/TopNavMegaMenu.test.tsx +149 -1
- package/src/TopNav/TopNavMegaMenu.tsx +10 -4
- package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +3 -3
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +19 -2
- package/src/TopNav/TopNavMenu.test.tsx +118 -4
- package/src/TopNav/TopNavMenu.tsx +83 -5
- package/src/TreeList/TreeList.doc.mjs +28 -0
- package/src/TreeList/TreeList.test.tsx +272 -0
- package/src/TreeList/TreeList.tsx +23 -2
- package/src/TreeList/TreeListBranches.tsx +24 -8
- package/src/TreeList/TreeListItem.tsx +84 -22
- package/src/TreeList/TreeListTypes.ts +27 -1
- package/src/TreeList/index.ts +2 -2
- package/src/Typeahead/BaseTypeahead.tsx +30 -15
- package/src/Typeahead/Typeahead.doc.mjs +13 -0
- package/src/Typeahead/Typeahead.test.tsx +50 -0
- package/src/Typeahead/Typeahead.tsx +11 -1
- package/src/Typeahead/TypeaheadItem.tsx +2 -1
- package/src/__tests__/inputWidthContract.test.tsx +62 -0
- package/src/authoring/doc.ts +1 -3
- package/src/doc-mjs.d.ts +19 -0
- package/src/docs-types.ts +5 -0
- package/src/hooks/computeOverflow.test.ts +422 -0
- package/src/hooks/computeOverflow.ts +290 -0
- package/src/hooks/index.ts +8 -0
- package/src/hooks/isRtlElement.ts +27 -0
- package/src/hooks/useDevWarning.test.tsx +45 -0
- package/src/hooks/useDevWarning.ts +54 -0
- package/src/hooks/useGridFocus.doc.mjs +3 -3
- package/src/hooks/useGridFocus.test.tsx +41 -0
- package/src/hooks/useGridFocus.ts +21 -10
- package/src/hooks/useInputStatusIcon.test.tsx +162 -0
- package/src/hooks/useInputStatusIcon.tsx +224 -0
- package/src/hooks/useListFocus.doc.mjs +25 -3
- package/src/hooks/useListFocus.test.tsx +153 -1
- package/src/hooks/useListFocus.ts +102 -9
- package/src/hooks/useOverflow.test.ts +96 -4
- package/src/hooks/useOverflow.ts +74 -33
- package/src/i18n/InternationalizationContext.ts +4 -0
- package/src/i18n/InternationalizationProvider.doc.mjs +99 -2
- package/src/i18n/InternationalizationProvider.tsx +12 -2
- package/src/i18n/__tests__/getLocaleDirection.test.ts +40 -0
- package/src/i18n/__tests__/useDirection.test.tsx +66 -0
- package/src/i18n/getLocaleDirection.ts +29 -0
- package/src/i18n/index.ts +6 -0
- package/src/i18n/resolve.ts +9 -21
- package/src/i18n/useDirection.ts +29 -0
- package/src/reset.css +0 -26
- package/src/reset.test.ts +60 -0
- package/src/theme/Theme.tsx +11 -14
- package/src/theme/derivedVarRegistry.test.ts +1 -0
- package/src/theme/derivedVarRegistry.ts +6 -0
- package/src/theme/generateThemeRules.test.ts +107 -0
- package/src/theme/generateThemeRules.ts +56 -0
- package/src/theme/hct.ts +1 -1
- package/src/theme/syntax/defineSyntaxTheme.ts +5 -6
- package/src/utils/devWarning.test.ts +56 -0
- package/src/utils/devWarning.ts +102 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/plainDate.test.ts +46 -6
- package/src/utils/plainDate.ts +69 -3
- package/src/utils/rtlStyles.ts +27 -0
- package/src/utils/types.ts +14 -0
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
import {useMemo, type ReactNode} from 'react';
|
|
25
25
|
import * as stylex from '@stylexjs/stylex';
|
|
26
26
|
import type {ButtonSize} from '../Button';
|
|
27
|
+
import {radiusVars, shadowVars} from '../theme/tokens.stylex';
|
|
28
|
+
import type {Elevation} from '../utils/types';
|
|
27
29
|
import {SizeProvider, useSize} from '../SizeContext/SizeContext';
|
|
28
30
|
import {useListFocus} from '../hooks/useListFocus';
|
|
29
31
|
import {mergeProps, mergeRefs, composeEventHandlers} from '../utils';
|
|
@@ -63,6 +65,14 @@ export interface ButtonGroupProps extends BaseProps<HTMLDivElement> {
|
|
|
63
65
|
*/
|
|
64
66
|
size?: ButtonSize;
|
|
65
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Resting elevation for the group. The connected buttons share one surface,
|
|
70
|
+
* so the shadow sits on the group and lifts them together. Use for a floating
|
|
71
|
+
* group of actions above content.
|
|
72
|
+
* @default 'none'
|
|
73
|
+
*/
|
|
74
|
+
elevation?: Elevation;
|
|
75
|
+
|
|
66
76
|
/**
|
|
67
77
|
* Whether all buttons in the group are disabled.
|
|
68
78
|
* @default false
|
|
@@ -89,6 +99,26 @@ const styles = stylex.create({
|
|
|
89
99
|
},
|
|
90
100
|
});
|
|
91
101
|
|
|
102
|
+
// Resting elevation for the whole group — the connected buttons share one
|
|
103
|
+
// surface, so the shadow sits on the group wrapper and lifts them as a unit.
|
|
104
|
+
// The wrapper takes the element radius so the shadow follows the group's
|
|
105
|
+
// rounded outer corners rather than a bare rectangle. 'none' is the default.
|
|
106
|
+
const elevationStyles = stylex.create({
|
|
107
|
+
none: {boxShadow: 'none'},
|
|
108
|
+
low: {
|
|
109
|
+
boxShadow: shadowVars['--shadow-low'],
|
|
110
|
+
borderRadius: radiusVars['--radius-element'],
|
|
111
|
+
},
|
|
112
|
+
med: {
|
|
113
|
+
boxShadow: shadowVars['--shadow-med'],
|
|
114
|
+
borderRadius: radiusVars['--radius-element'],
|
|
115
|
+
},
|
|
116
|
+
high: {
|
|
117
|
+
boxShadow: shadowVars['--shadow-high'],
|
|
118
|
+
borderRadius: radiusVars['--radius-element'],
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
|
|
92
122
|
// =============================================================================
|
|
93
123
|
// Component
|
|
94
124
|
// =============================================================================
|
|
@@ -129,6 +159,7 @@ export function ButtonGroup({
|
|
|
129
159
|
orientation = 'horizontal',
|
|
130
160
|
size: sizeProp,
|
|
131
161
|
isDisabled = false,
|
|
162
|
+
elevation = 'none',
|
|
132
163
|
xstyle,
|
|
133
164
|
className,
|
|
134
165
|
style,
|
|
@@ -160,6 +191,7 @@ export function ButtonGroup({
|
|
|
160
191
|
stylex.props(
|
|
161
192
|
styles.group,
|
|
162
193
|
orientation === 'vertical' && styles.vertical,
|
|
194
|
+
elevationStyles[elevation],
|
|
163
195
|
xstyle,
|
|
164
196
|
),
|
|
165
197
|
className,
|
|
@@ -111,7 +111,8 @@ export const docs = {
|
|
|
111
111
|
theming: {
|
|
112
112
|
targets: [
|
|
113
113
|
{className: 'astryx-calendar', visualProps: ['mode']},
|
|
114
|
-
{className: 'astryx-calendar-
|
|
114
|
+
{className: 'astryx-calendar-nav', visualProps: ['nav'], states: ['disabled']},
|
|
115
|
+
{className: 'astryx-calendar-day', states: ['selected', 'today', 'disabled', 'in-range', 'marker']},
|
|
115
116
|
],
|
|
116
117
|
},
|
|
117
118
|
};
|
|
@@ -157,6 +158,15 @@ export const docsZh = {
|
|
|
157
158
|
'mode',
|
|
158
159
|
],
|
|
159
160
|
},
|
|
161
|
+
{
|
|
162
|
+
className: 'astryx-calendar-nav',
|
|
163
|
+
visualProps: [
|
|
164
|
+
'nav',
|
|
165
|
+
],
|
|
166
|
+
states: [
|
|
167
|
+
'disabled',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
160
170
|
{
|
|
161
171
|
className: 'astryx-calendar-day',
|
|
162
172
|
states: [
|
|
@@ -164,6 +174,7 @@ export const docsZh = {
|
|
|
164
174
|
'today',
|
|
165
175
|
'disabled',
|
|
166
176
|
'in-range',
|
|
177
|
+
'marker',
|
|
167
178
|
],
|
|
168
179
|
},
|
|
169
180
|
],
|
|
@@ -16,7 +16,10 @@ import {getButton} from '../__tests__/fastRoleQueries';
|
|
|
16
16
|
import * as stylex from '@stylexjs/stylex';
|
|
17
17
|
import {Calendar} from './Calendar';
|
|
18
18
|
import type {CalendarHandle} from './Calendar';
|
|
19
|
+
import type {ISODateString} from './Calendar';
|
|
19
20
|
import {calendarStyles} from './styles';
|
|
21
|
+
import {defineTheme} from '../theme/defineTheme';
|
|
22
|
+
import {generateThemeCSSFlat} from '../theme/generateThemeRules';
|
|
20
23
|
import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
21
24
|
|
|
22
25
|
afterEach(() => {
|
|
@@ -391,10 +394,10 @@ describe('Calendar', () => {
|
|
|
391
394
|
|
|
392
395
|
it('caps the range highlight next to a disabled mid-range day (#2715)', () => {
|
|
393
396
|
// Disable Jan 13. With Jan 10–15 selected, day 12 (immediately before the
|
|
394
|
-
// disabled day) should get a rounded end cap on its
|
|
395
|
-
// (immediately after) a rounded cap on its
|
|
396
|
-
// reads as terminating at the disabled gap rather than
|
|
397
|
-
// into it.
|
|
397
|
+
// disabled day) should get a rounded end cap on its inline-end edge, and
|
|
398
|
+
// day 14 (immediately after) a rounded cap on its inline-start edge — so
|
|
399
|
+
// the highlight reads as terminating at the disabled gap rather than
|
|
400
|
+
// running square-edged into it.
|
|
398
401
|
const disableJan13 = (d: Date) =>
|
|
399
402
|
!(d.getFullYear() === 2026 && d.getMonth() === 0 && d.getDate() === 13);
|
|
400
403
|
render(
|
|
@@ -419,10 +422,11 @@ describe('Calendar', () => {
|
|
|
419
422
|
const day14Bg = rangeBgFor(14);
|
|
420
423
|
|
|
421
424
|
// Capped edges have a border radius; the un-capped edge stays square.
|
|
422
|
-
|
|
423
|
-
expect(getComputedStyle(day12Bg).
|
|
424
|
-
expect(getComputedStyle(
|
|
425
|
-
expect(getComputedStyle(day14Bg).
|
|
425
|
+
// Radii are logical (inline start/end), so they follow reading direction.
|
|
426
|
+
expect(getComputedStyle(day12Bg).borderStartEndRadius).not.toBe('');
|
|
427
|
+
expect(getComputedStyle(day12Bg).borderStartEndRadius).not.toBe('0px');
|
|
428
|
+
expect(getComputedStyle(day14Bg).borderStartStartRadius).not.toBe('');
|
|
429
|
+
expect(getComputedStyle(day14Bg).borderStartStartRadius).not.toBe('0px');
|
|
426
430
|
});
|
|
427
431
|
|
|
428
432
|
it('does not range-highlight adjacent-month spillover days in two-month view', () => {
|
|
@@ -646,6 +650,150 @@ describe('Calendar', () => {
|
|
|
646
650
|
});
|
|
647
651
|
});
|
|
648
652
|
|
|
653
|
+
// ─── Selection Semantics for AT (WCAG 4.1.2 / 1.3.1) ────────
|
|
654
|
+
|
|
655
|
+
describe('selection state in day accessible names', () => {
|
|
656
|
+
it("appends 'selected' to the selected day's button name in single mode", () => {
|
|
657
|
+
render(<Calendar value="2026-01-15" focusDate="2026-01-01" />);
|
|
658
|
+
|
|
659
|
+
// Roving focus lands on the day <button>, which cannot carry
|
|
660
|
+
// aria-selected (invalid on role="button") — the selection state must
|
|
661
|
+
// be encoded in the button's accessible name instead.
|
|
662
|
+
expect(getDayButton(15).getAttribute('aria-label')).toBe(
|
|
663
|
+
'Thursday, January 15, 2026, selected',
|
|
664
|
+
);
|
|
665
|
+
// Unselected days carry the plain date name.
|
|
666
|
+
expect(getDayButton(20).getAttribute('aria-label')).toBe(
|
|
667
|
+
'Tuesday, January 20, 2026',
|
|
668
|
+
);
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
it('marks range start, end, and in-range days in their accessible names', () => {
|
|
672
|
+
render(
|
|
673
|
+
<Calendar
|
|
674
|
+
mode="range"
|
|
675
|
+
value={{start: '2026-01-10', end: '2026-01-15'}}
|
|
676
|
+
focusDate="2026-01-01"
|
|
677
|
+
/>,
|
|
678
|
+
);
|
|
679
|
+
|
|
680
|
+
expect(getDayButton(10).getAttribute('aria-label')).toBe(
|
|
681
|
+
'Saturday, January 10, 2026, range start',
|
|
682
|
+
);
|
|
683
|
+
expect(getDayButton(15).getAttribute('aria-label')).toBe(
|
|
684
|
+
'Thursday, January 15, 2026, range end',
|
|
685
|
+
);
|
|
686
|
+
expect(getDayButton(12).getAttribute('aria-label')).toBe(
|
|
687
|
+
'Monday, January 12, 2026, in range',
|
|
688
|
+
);
|
|
689
|
+
// Days outside the range keep the plain date name.
|
|
690
|
+
expect(getDayButton(20).getAttribute('aria-label')).toBe(
|
|
691
|
+
'Tuesday, January 20, 2026',
|
|
692
|
+
);
|
|
693
|
+
});
|
|
694
|
+
|
|
695
|
+
it('labels a one-day range as both range start and range end', () => {
|
|
696
|
+
render(
|
|
697
|
+
<Calendar
|
|
698
|
+
mode="range"
|
|
699
|
+
value={{start: '2026-01-10', end: '2026-01-10'}}
|
|
700
|
+
focusDate="2026-01-01"
|
|
701
|
+
/>,
|
|
702
|
+
);
|
|
703
|
+
|
|
704
|
+
expect(getDayButton(10).getAttribute('aria-label')).toBe(
|
|
705
|
+
'Saturday, January 10, 2026, range start and range end',
|
|
706
|
+
);
|
|
707
|
+
});
|
|
708
|
+
|
|
709
|
+
it("labels the in-progress first pick as 'range start' only", async () => {
|
|
710
|
+
const user = userEvent.setup();
|
|
711
|
+
render(<Calendar mode="range" focusDate="2026-01-01" />);
|
|
712
|
+
|
|
713
|
+
await user.click(getDayButton(10));
|
|
714
|
+
|
|
715
|
+
// While the range is in progress the picked day is only the start —
|
|
716
|
+
// not a completed one-day range.
|
|
717
|
+
expect(getDayButton(10).getAttribute('aria-label')).toBe(
|
|
718
|
+
'Saturday, January 10, 2026, range start',
|
|
719
|
+
);
|
|
720
|
+
});
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
describe('range selection announcements', () => {
|
|
724
|
+
it('announces the start pick and prompts for an end date', async () => {
|
|
725
|
+
const user = userEvent.setup();
|
|
726
|
+
render(<Calendar mode="range" focusDate="2026-01-01" />);
|
|
727
|
+
|
|
728
|
+
await user.click(getDayButton(10));
|
|
729
|
+
|
|
730
|
+
await waitFor(() => {
|
|
731
|
+
expect(politeRegion()).toHaveTextContent(
|
|
732
|
+
'Start date Saturday, January 10, 2026. Select an end date.',
|
|
733
|
+
);
|
|
734
|
+
});
|
|
735
|
+
});
|
|
736
|
+
|
|
737
|
+
it('announces the completed range after the second pick', async () => {
|
|
738
|
+
const user = userEvent.setup();
|
|
739
|
+
render(<Calendar mode="range" focusDate="2026-01-01" />);
|
|
740
|
+
|
|
741
|
+
await user.click(getDayButton(10));
|
|
742
|
+
await user.click(getDayButton(15));
|
|
743
|
+
|
|
744
|
+
await waitFor(() => {
|
|
745
|
+
expect(politeRegion()).toHaveTextContent(
|
|
746
|
+
'Selected range: Saturday, January 10, 2026 to Thursday, January 15, 2026.',
|
|
747
|
+
);
|
|
748
|
+
});
|
|
749
|
+
});
|
|
750
|
+
|
|
751
|
+
it('announces the completed range in chronological order for a reverse pick', async () => {
|
|
752
|
+
const user = userEvent.setup();
|
|
753
|
+
render(<Calendar mode="range" focusDate="2026-01-01" />);
|
|
754
|
+
|
|
755
|
+
await user.click(getDayButton(20));
|
|
756
|
+
await user.click(getDayButton(10));
|
|
757
|
+
|
|
758
|
+
await waitFor(() => {
|
|
759
|
+
expect(politeRegion()).toHaveTextContent(
|
|
760
|
+
'Selected range: Saturday, January 10, 2026 to Tuesday, January 20, 2026.',
|
|
761
|
+
);
|
|
762
|
+
});
|
|
763
|
+
});
|
|
764
|
+
});
|
|
765
|
+
|
|
766
|
+
describe('aria-multiselectable', () => {
|
|
767
|
+
it('sets aria-multiselectable="true" on the grid in range mode', () => {
|
|
768
|
+
render(<Calendar mode="range" focusDate="2026-01-01" />);
|
|
769
|
+
|
|
770
|
+
expect(screen.getByRole('grid')).toHaveAttribute(
|
|
771
|
+
'aria-multiselectable',
|
|
772
|
+
'true',
|
|
773
|
+
);
|
|
774
|
+
});
|
|
775
|
+
|
|
776
|
+
it('does not set aria-multiselectable in single mode', () => {
|
|
777
|
+
render(<Calendar focusDate="2026-01-01" />);
|
|
778
|
+
|
|
779
|
+
expect(screen.getByRole('grid')).not.toHaveAttribute(
|
|
780
|
+
'aria-multiselectable',
|
|
781
|
+
);
|
|
782
|
+
});
|
|
783
|
+
|
|
784
|
+
it('sets aria-multiselectable on both grids in a two-month range view', () => {
|
|
785
|
+
render(
|
|
786
|
+
<Calendar mode="range" numberOfMonths={2} focusDate="2026-01-01" />,
|
|
787
|
+
);
|
|
788
|
+
|
|
789
|
+
const grids = screen.getAllByRole('grid');
|
|
790
|
+
expect(grids.length).toBe(2);
|
|
791
|
+
for (const grid of grids) {
|
|
792
|
+
expect(grid).toHaveAttribute('aria-multiselectable', 'true');
|
|
793
|
+
}
|
|
794
|
+
});
|
|
795
|
+
});
|
|
796
|
+
|
|
649
797
|
// ─── Bug Regression Tests ───────────────────────────────────
|
|
650
798
|
|
|
651
799
|
it('day buttons have data-date attribute with ISO string', () => {
|
|
@@ -841,21 +989,22 @@ describe('Calendar', () => {
|
|
|
841
989
|
// ─── RTL (#3388) ─────────────────────────────────────────────
|
|
842
990
|
|
|
843
991
|
describe('RTL month navigation', () => {
|
|
844
|
-
// jsdom does not apply compiled StyleX CSS, so the scaleX
|
|
845
|
-
//
|
|
846
|
-
//
|
|
847
|
-
//
|
|
848
|
-
//
|
|
849
|
-
it('wraps both nav chevrons in the
|
|
992
|
+
// jsdom does not apply compiled StyleX CSS, so the RTL scaleX mirror is
|
|
993
|
+
// only observable in a browser (see the dir="rtl" Storybook story). These
|
|
994
|
+
// tests pin the structure the mirror relies on: both nav chevrons render
|
|
995
|
+
// inside the navIcon wrapper (which composes the shared rtlStyles.mirror
|
|
996
|
+
// transform), and navigation semantics stay identical under dir="rtl".
|
|
997
|
+
it('wraps both nav chevrons in the navIcon wrapper', () => {
|
|
850
998
|
render(<Calendar focusDate="2026-01-01" />);
|
|
851
999
|
|
|
852
1000
|
const {className: navIconClass} = stylex.props(calendarStyles.navIcon);
|
|
853
1001
|
expect(navIconClass).toBeTruthy();
|
|
1002
|
+
const navIconAtoms = navIconClass!.split(' ');
|
|
854
1003
|
|
|
855
1004
|
for (const name of ['Previous month', 'Next month']) {
|
|
856
1005
|
const button = getButton(name);
|
|
857
1006
|
const wrappers = Array.from(button.querySelectorAll('span')).filter(
|
|
858
|
-
span =>
|
|
1007
|
+
span => navIconAtoms.every(atom => span.classList.contains(atom)),
|
|
859
1008
|
);
|
|
860
1009
|
expect(wrappers.length).toBe(1);
|
|
861
1010
|
}
|
|
@@ -864,21 +1013,215 @@ describe('Calendar', () => {
|
|
|
864
1013
|
it('keeps navigation semantics unchanged under dir="rtl"', async () => {
|
|
865
1014
|
const user = userEvent.setup();
|
|
866
1015
|
|
|
867
|
-
|
|
1016
|
+
// Scope month-label queries to the rendered tree: month navigation also
|
|
1017
|
+
// announces the month name through the body-level polite live region,
|
|
1018
|
+
// and whether that text has landed by assertion time depends on jsdom's
|
|
1019
|
+
// 16ms rAF frame phase — an unscoped getByText intermittently finds two
|
|
1020
|
+
// matches ("February 2026" in both the header and the live region).
|
|
1021
|
+
const {container} = render(
|
|
868
1022
|
<div dir="rtl">
|
|
869
1023
|
<Calendar focusDate="2026-02-01" />
|
|
870
1024
|
</div>,
|
|
871
1025
|
);
|
|
872
1026
|
|
|
873
|
-
expect(
|
|
1027
|
+
expect(within(container).getByText('February 2026')).toBeInTheDocument();
|
|
874
1028
|
|
|
875
1029
|
// DOM order and handlers must not change in RTL: flexbox already
|
|
876
1030
|
// places "Previous month" at the visual right; only the glyph mirrors.
|
|
877
1031
|
await user.click(getButton('Previous month'));
|
|
878
|
-
expect(
|
|
1032
|
+
expect(within(container).getByText('January 2026')).toBeInTheDocument();
|
|
879
1033
|
|
|
880
1034
|
await user.click(getButton('Next month'));
|
|
881
|
-
expect(
|
|
1035
|
+
expect(within(container).getByText('February 2026')).toBeInTheDocument();
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
1038
|
+
|
|
1039
|
+
// ─── Day-cell marker theming (#4286) ─────────────────────────
|
|
1040
|
+
describe('day-cell marker theme state', () => {
|
|
1041
|
+
// Tests use the real "today" (as the existing aria-current tests do) since
|
|
1042
|
+
// Calendar derives it internally. Helpers pin the exact ISO strings.
|
|
1043
|
+
function todayISO(): ISODateString {
|
|
1044
|
+
const n = new Date();
|
|
1045
|
+
return `${n.getFullYear()}-${String(n.getMonth() + 1).padStart(2, '0')}-${String(n.getDate()).padStart(2, '0')}` as ISODateString;
|
|
1046
|
+
}
|
|
1047
|
+
function isoOffsetFromToday(deltaDays: number): ISODateString {
|
|
1048
|
+
const n = new Date();
|
|
1049
|
+
n.setDate(n.getDate() + deltaDays);
|
|
1050
|
+
return `${n.getFullYear()}-${String(n.getMonth() + 1).padStart(2, '0')}-${String(n.getDate()).padStart(2, '0')}` as ISODateString;
|
|
1051
|
+
}
|
|
1052
|
+
function todayCell(): HTMLElement {
|
|
1053
|
+
const el = document.querySelector<HTMLElement>(
|
|
1054
|
+
`button[data-date="${todayISO()}"]`,
|
|
1055
|
+
);
|
|
1056
|
+
expect(el).not.toBeNull();
|
|
1057
|
+
return el as HTMLElement;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
it('reflects marker="today-only" for a plain today cell (no selection)', () => {
|
|
1061
|
+
render(<Calendar />);
|
|
1062
|
+
const cell = todayCell();
|
|
1063
|
+
expect(cell).toHaveAttribute('data-marker', 'today-only');
|
|
1064
|
+
expect(cell).toHaveAttribute('data-today', 'today');
|
|
1065
|
+
expect(cell).not.toHaveAttribute('data-selected');
|
|
1066
|
+
expect(cell).not.toHaveAttribute('data-in-range');
|
|
1067
|
+
});
|
|
1068
|
+
|
|
1069
|
+
it('reflects marker="today-in-range" when today is strictly inside a range', () => {
|
|
1070
|
+
render(
|
|
1071
|
+
<Calendar
|
|
1072
|
+
mode="range"
|
|
1073
|
+
value={{start: isoOffsetFromToday(-2), end: isoOffsetFromToday(2)}}
|
|
1074
|
+
/>,
|
|
1075
|
+
);
|
|
1076
|
+
const cell = todayCell();
|
|
1077
|
+
// Today is inside the range but not an endpoint: the today-in-range ring
|
|
1078
|
+
// is shown, so `marker` reflects that compound state precisely.
|
|
1079
|
+
expect(cell).toHaveAttribute('data-marker', 'today-in-range');
|
|
1080
|
+
expect(cell).toHaveAttribute('data-in-range', 'in-range');
|
|
1081
|
+
expect(cell).not.toHaveAttribute('data-selected');
|
|
1082
|
+
});
|
|
1083
|
+
|
|
1084
|
+
it('shows no marker state when today is the single-selected date', () => {
|
|
1085
|
+
render(<Calendar mode="single" value={todayISO()} />);
|
|
1086
|
+
const cell = todayCell();
|
|
1087
|
+
// A single-mode selected cell shows no ring by default — `marker` is
|
|
1088
|
+
// absent, while `selected` (which owns the selected treatment) is present.
|
|
1089
|
+
expect(cell).not.toHaveAttribute('data-marker');
|
|
1090
|
+
expect(cell).toHaveAttribute('data-selected', 'selected');
|
|
1091
|
+
expect(cell).toHaveAttribute('data-today', 'today');
|
|
1092
|
+
});
|
|
1093
|
+
|
|
1094
|
+
it('preserves the today-in-range ring on a today range endpoint', () => {
|
|
1095
|
+
render(
|
|
1096
|
+
<Calendar
|
|
1097
|
+
mode="range"
|
|
1098
|
+
value={{start: todayISO(), end: isoOffsetFromToday(3)}}
|
|
1099
|
+
/>,
|
|
1100
|
+
);
|
|
1101
|
+
const cell = todayCell();
|
|
1102
|
+
// A range endpoint is NOT `isSelected` (that flag is single-mode only),
|
|
1103
|
+
// so by default the today-in-range ring IS drawn on a today endpoint
|
|
1104
|
+
// alongside the endpoint styling. `marker` mirrors that exactly — this
|
|
1105
|
+
// asserts the default rendering is preserved, byte-for-byte.
|
|
1106
|
+
expect(cell).toHaveAttribute('data-marker', 'today-in-range');
|
|
1107
|
+
expect(cell).toHaveAttribute('data-in-range', 'in-range');
|
|
1108
|
+
});
|
|
1109
|
+
|
|
1110
|
+
it('omits the marker state for non-today cells', () => {
|
|
1111
|
+
render(<Calendar />);
|
|
1112
|
+
const other = document.querySelector(
|
|
1113
|
+
`button[data-date="${isoOffsetFromToday(1)}"]`,
|
|
1114
|
+
);
|
|
1115
|
+
// Guard against the +1 day landing in an adjacent month with outside days
|
|
1116
|
+
// hidden; if present it must carry no marker.
|
|
1117
|
+
if (other) {
|
|
1118
|
+
expect(other).not.toHaveAttribute('data-marker');
|
|
1119
|
+
}
|
|
1120
|
+
});
|
|
1121
|
+
|
|
1122
|
+
it('exposes the marker states as themeable defineTheme targets', () => {
|
|
1123
|
+
// jsdom can't resolve the @layer cascade, so the DOM-reflection tests
|
|
1124
|
+
// above cover that the right state renders; this asserts the state is
|
|
1125
|
+
// reachable by a theme via the sanctioned defineTheme channel.
|
|
1126
|
+
const theme = defineTheme({
|
|
1127
|
+
name: 'calendar-marker-test',
|
|
1128
|
+
components: {
|
|
1129
|
+
'calendar-day': {
|
|
1130
|
+
'marker:today-only': {
|
|
1131
|
+
boxShadow: 'inset 0 0 0 2px var(--color-accent)',
|
|
1132
|
+
},
|
|
1133
|
+
'marker:today-in-range': {
|
|
1134
|
+
boxShadow: 'inset 0 0 0 2px var(--color-text-primary)',
|
|
1135
|
+
},
|
|
1136
|
+
},
|
|
1137
|
+
},
|
|
1138
|
+
});
|
|
1139
|
+
const css = generateThemeCSSFlat(theme);
|
|
1140
|
+
expect(css).toContain('.astryx-calendar-day.today-only');
|
|
1141
|
+
expect(css).toContain('.astryx-calendar-day.today-in-range');
|
|
1142
|
+
expect(css).toContain('box-shadow: inset 0 0 0 2px var(--color-accent)');
|
|
1143
|
+
expect(css).toContain(
|
|
1144
|
+
'box-shadow: inset 0 0 0 2px var(--color-text-primary)',
|
|
1145
|
+
);
|
|
1146
|
+
});
|
|
1147
|
+
});
|
|
1148
|
+
|
|
1149
|
+
// ─── Theming targets ─────────────────────────────────────────
|
|
1150
|
+
describe('theming targets', () => {
|
|
1151
|
+
it('renders the astryx-calendar-nav target on both month-nav buttons', () => {
|
|
1152
|
+
render(<Calendar focusDate="2026-01-01" />);
|
|
1153
|
+
|
|
1154
|
+
const prev = getButton('Previous month');
|
|
1155
|
+
const next = getButton('Next month');
|
|
1156
|
+
|
|
1157
|
+
// Dedicated, stable theme target — scoped to the nav controls, not the
|
|
1158
|
+
// global astryx-button handle that hits every Button in the app.
|
|
1159
|
+
expect(prev).toHaveClass('astryx-calendar-nav');
|
|
1160
|
+
expect(next).toHaveClass('astryx-calendar-nav');
|
|
1161
|
+
|
|
1162
|
+
// Direction is reflected so a theme can target one arrow alone.
|
|
1163
|
+
expect(prev).toHaveAttribute('data-nav', 'prev');
|
|
1164
|
+
expect(next).toHaveAttribute('data-nav', 'next');
|
|
1165
|
+
});
|
|
1166
|
+
|
|
1167
|
+
it('reflects the disabled nav state as a data attribute at the range edges', () => {
|
|
1168
|
+
// Clamp navigation so "Previous month" is disabled and "Next" is not.
|
|
1169
|
+
render(
|
|
1170
|
+
<Calendar focusDate="2026-01-15" min="2026-01-01" max="2026-03-31" />,
|
|
1171
|
+
);
|
|
1172
|
+
|
|
1173
|
+
const prev = getButton('Previous month');
|
|
1174
|
+
const next = getButton('Next month');
|
|
1175
|
+
|
|
1176
|
+
expect(prev).toHaveAttribute('data-disabled', 'disabled');
|
|
1177
|
+
expect(next).not.toHaveAttribute('data-disabled');
|
|
1178
|
+
});
|
|
1179
|
+
|
|
1180
|
+
it('keeps the default nav rendering unchanged (still a ghost icon button)', () => {
|
|
1181
|
+
render(<Calendar focusDate="2026-01-01" />);
|
|
1182
|
+
|
|
1183
|
+
// The new target is additive — the nav still carries the stock Button
|
|
1184
|
+
// classes, so default appearance is preserved.
|
|
1185
|
+
const prev = getButton('Previous month');
|
|
1186
|
+
expect(prev).toHaveClass('astryx-button');
|
|
1187
|
+
expect(prev).toHaveClass('ghost');
|
|
1188
|
+
expect(prev.tagName).toBe('BUTTON');
|
|
1189
|
+
});
|
|
1190
|
+
|
|
1191
|
+
it('renders the astryx-calendar-day target with its reflected states', () => {
|
|
1192
|
+
render(
|
|
1193
|
+
<Calendar mode="single" value="2026-01-15" focusDate="2026-01-01" />,
|
|
1194
|
+
);
|
|
1195
|
+
|
|
1196
|
+
const selected = getDayButton(15);
|
|
1197
|
+
expect(selected).toHaveClass('astryx-calendar-day');
|
|
1198
|
+
expect(selected).toHaveAttribute('data-selected', 'selected');
|
|
1199
|
+
|
|
1200
|
+
// A non-selected weekday cell still carries the base target and no
|
|
1201
|
+
// selected/today reflection.
|
|
1202
|
+
const plain = getDayButton(20);
|
|
1203
|
+
expect(plain).toHaveClass('astryx-calendar-day');
|
|
1204
|
+
expect(plain).not.toHaveAttribute('data-selected');
|
|
1205
|
+
});
|
|
1206
|
+
|
|
1207
|
+
it('exposes calendar-nav as a themeable defineTheme target', () => {
|
|
1208
|
+
// The generated CSS is what proves the target is reachable by a theme:
|
|
1209
|
+
// jsdom cannot resolve the @layer cascade, so the DOM-class assertions
|
|
1210
|
+
// above and this generation assertion together cover the seam.
|
|
1211
|
+
const theme = defineTheme({
|
|
1212
|
+
name: 'calendar-nav-test',
|
|
1213
|
+
components: {
|
|
1214
|
+
'calendar-nav': {
|
|
1215
|
+
base: {color: 'var(--color-accent)'},
|
|
1216
|
+
'nav:next': {backgroundColor: 'var(--color-accent-muted)'},
|
|
1217
|
+
},
|
|
1218
|
+
},
|
|
1219
|
+
});
|
|
1220
|
+
const css = generateThemeCSSFlat(theme);
|
|
1221
|
+
expect(css).toContain('.astryx-calendar-nav {');
|
|
1222
|
+
expect(css).toContain('color: var(--color-accent)');
|
|
1223
|
+
expect(css).toContain('.astryx-calendar-nav.next');
|
|
1224
|
+
expect(css).toContain('background-color: var(--color-accent-muted)');
|
|
882
1225
|
});
|
|
883
1226
|
});
|
|
884
1227
|
});
|