@astryxdesign/core 0.1.3 → 0.1.4-canary.01e5b29
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 +51 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +20 -18
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +55 -53
- package/dist/AspectRatio/AspectRatio.js +5 -5
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +27 -25
- package/dist/Avatar/AvatarStatusDot.js +5 -5
- package/dist/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -25
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +47 -26
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +108 -64
- package/dist/Calendar/dayCellUtils.d.ts +67 -5
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/dayCellUtils.js +139 -18
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +2 -2
- package/dist/Card/Card.d.ts +4 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +18 -10
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +20 -19
- package/dist/Center/Center.js +3 -3
- package/dist/Chat/ChatComposer.js +23 -23
- package/dist/Chat/ChatComposerDrawer.js +14 -14
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +27 -15
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +13 -11
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +12 -10
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +14 -12
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +24 -15
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +81 -74
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +6 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +32 -24
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +8 -6
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +32 -9
- package/dist/Code/Code.d.ts +15 -1
- package/dist/Code/Code.d.ts.map +1 -1
- package/dist/Code/Code.js +35 -5
- package/dist/Code/index.d.ts +1 -1
- package/dist/Code/index.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.d.ts +10 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +88 -52
- package/dist/CodeBlock/index.d.ts +1 -1
- package/dist/CodeBlock/index.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.d.ts +9 -3
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +110 -22
- package/dist/Collapsible/CollapsibleGroup.d.ts +39 -7
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +73 -12
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +31 -0
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +33 -3
- package/dist/Collapsible/index.d.ts +1 -0
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +4 -1
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +20 -6
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +36 -34
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.js +27 -7
- package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
- package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
- package/dist/CommandPalette/CommandPaletteInput.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/CommandPalette/CommandPaletteList.js +3 -3
- package/dist/ContextMenu/ContextMenu.d.ts +9 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +16 -11
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +23 -23
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -7
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +30 -26
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.d.ts +0 -22
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -17
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +4 -3
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +29 -12
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +16 -12
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.js +5 -5
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +55 -31
- package/dist/Lightbox/useLightbox.js +3 -3
- package/dist/Link/Link.js +15 -15
- package/dist/Link/LinkProvider.js +3 -3
- package/dist/Link/useLinkify.js +3 -3
- package/dist/List/List.js +11 -11
- package/dist/List/ListItem.js +11 -11
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +102 -102
- package/dist/Markdown/parser.d.ts +7 -0
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +300 -6
- package/dist/MetadataList/MetadataList.js +10 -10
- package/dist/MetadataList/MetadataListItem.js +15 -15
- package/dist/MobileNav/MobileNav.js +15 -15
- package/dist/MobileNav/MobileNavToggle.js +5 -5
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.d.ts +7 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +64 -55
- package/dist/NavIcon/NavIcon.js +3 -3
- package/dist/NavMenu/NavHeadingMenu.js +5 -5
- package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +48 -32
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.js +3 -3
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +125 -72
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +110 -92
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +25 -18
- package/dist/RadioList/RadioList.d.ts +7 -1
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +10 -8
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +30 -22
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +28 -10
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +32 -10
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +18 -12
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.d.ts +6 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +54 -45
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +38 -34
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +8 -6
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +18 -16
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.d.ts +6 -0
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +31 -22
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +10 -10
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +13 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +41 -30
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +57 -30
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +51 -39
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +9 -5
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +76 -7
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +9 -5
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +9 -5
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +14 -11
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +5 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/index.d.ts +3 -0
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -0
- package/dist/Table/plugins/rowExpansion/index.js +3 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +90 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +398 -0
- package/dist/Table/plugins/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +11 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +8 -4
- package/dist/Table/tableContextMenu.d.ts +5 -1
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +19 -12
- package/dist/Text/Text.d.ts +1 -1
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +14 -13
- package/dist/Text/text.stylex.d.ts +35 -0
- package/dist/Text/text.stylex.d.ts.map +1 -1
- package/dist/Text/text.stylex.js +52 -1
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +3 -2
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +30 -29
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +26 -21
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +37 -26
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +25 -17
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +23 -11
- package/dist/Toast/useToast.js +4 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts +6 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +38 -29
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.js +3 -3
- package/dist/TopNav/TopNav.js +32 -32
- package/dist/TopNav/TopNavHeading.js +67 -67
- package/dist/TopNav/TopNavItem.js +5 -5
- package/dist/TopNav/TopNavMegaMenu.js +30 -30
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +25 -14
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +23 -20
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/astryx.css +23 -0
- package/dist/astryx.umd.js +60 -58
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +13 -1
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +3 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +38 -1
- package/dist/hooks/useHotkeys.d.ts +51 -0
- package/dist/hooks/useHotkeys.d.ts.map +1 -0
- package/dist/hooks/useHotkeys.js +160 -0
- package/dist/hooks/useInteractiveRole.d.ts +6 -2
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +6 -2
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +3 -1
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +14 -5
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +10 -3
- package/dist/theme/hct.d.ts +0 -15
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +10 -2
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +220 -4
- package/dist/utils/color.d.ts +42 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/color.js +150 -0
- package/dist/utils/composeEventHandlers.d.ts +30 -0
- package/dist/utils/composeEventHandlers.d.ts.map +1 -0
- package/dist/utils/composeEventHandlers.js +40 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +8 -5
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.tsx +2 -0
- package/src/AppShell/AppShell.tsx +2 -0
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -1
- package/src/Avatar/Avatar.doc.mjs +13 -2
- package/src/Avatar/Avatar.test.tsx +32 -1
- package/src/Avatar/Avatar.tsx +12 -20
- package/src/Banner/Banner.doc.mjs +8 -0
- package/src/Banner/Banner.test.tsx +38 -0
- package/src/Banner/Banner.tsx +8 -1
- package/src/Button/Button.tsx +39 -6
- package/src/ButtonGroup/ButtonGroup.doc.mjs +1 -1
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +201 -17
- package/src/Calendar/Calendar.tsx +79 -26
- package/src/Calendar/dayCellUtils.test.ts +306 -1
- package/src/Calendar/dayCellUtils.ts +206 -13
- package/src/Calendar/styles.ts +12 -2
- package/src/Card/Card.doc.mjs +1 -1
- package/src/Card/Card.tsx +16 -6
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +13 -0
- package/src/Carousel/Carousel.tsx +1 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +24 -0
- package/src/Chat/ChatComposerInput.tsx +17 -1
- package/src/Chat/ChatDictationButton.test.tsx +43 -0
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.test.tsx +33 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +3 -1
- package/src/Chat/ChatMessageMetadata.test.tsx +32 -0
- package/src/Chat/ChatMessageMetadata.tsx +4 -6
- package/src/Chat/ChatSystemMessage.test.tsx +26 -11
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +29 -16
- package/src/Chat/ChatTokenizedText.tsx +15 -8
- package/src/Chat/ChatToolCalls.test.tsx +55 -0
- package/src/Chat/ChatToolCalls.tsx +10 -12
- package/src/Chat/index.ts +1 -4
- package/src/Chat/useChatNewMessages.test.tsx +4 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +12 -4
- package/src/CheckboxInput/CheckboxInput.test.tsx +103 -0
- package/src/CheckboxInput/CheckboxInput.tsx +13 -0
- package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
- package/src/CheckboxList/CheckboxList.test.tsx +19 -0
- package/src/CheckboxList/CheckboxListItem.tsx +11 -2
- package/src/Citation/Citation.doc.mjs +5 -0
- package/src/ClickableCard/ClickableCard.tsx +45 -2
- package/src/Code/Code.test.tsx +54 -0
- package/src/Code/Code.tsx +48 -4
- package/src/Code/index.ts +1 -1
- package/src/CodeBlock/CodeBlock.doc.mjs +7 -2
- package/src/CodeBlock/CodeBlock.test.tsx +122 -3
- package/src/CodeBlock/CodeBlock.tsx +62 -4
- package/src/CodeBlock/index.ts +1 -1
- package/src/Collapsible/Collapsible.doc.mjs +8 -4
- package/src/Collapsible/Collapsible.test.tsx +405 -0
- package/src/Collapsible/Collapsible.tsx +86 -10
- package/src/Collapsible/CollapsibleGroup.doc.mjs +27 -3
- package/src/Collapsible/CollapsibleGroup.test.tsx +318 -0
- package/src/Collapsible/CollapsibleGroup.tsx +107 -9
- package/src/Collapsible/CollapsibleGroupContext.tsx +42 -2
- package/src/Collapsible/index.ts +4 -0
- package/src/Collapsible/useCollapsible.ts +20 -6
- package/src/CommandPalette/CommandPalette.tsx +5 -3
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +5 -0
- package/src/CommandPalette/CommandPaletteEmpty.tsx +15 -1
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +10 -0
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteList.doc.mjs +9 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +15 -0
- package/src/ContextMenu/ContextMenu.test.tsx +15 -0
- package/src/ContextMenu/ContextMenu.tsx +19 -1
- package/src/ContextMenu/ContextMenuItem.doc.mjs +6 -0
- package/src/DateInput/DateInput.doc.mjs +6 -1
- package/src/DateInput/DateInput.test.tsx +11 -20
- package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
- package/src/DateRangeInput/DateRangeInput.test.tsx +31 -44
- package/src/DateRangeInput/DateRangeInput.tsx +2 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +4 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +118 -16
- package/src/DateTimeInput/DateTimeInput.tsx +9 -8
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/DialogHeader.doc.mjs +45 -0
- package/src/Divider/Divider.tsx +1 -23
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +5 -3
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -17
- package/src/EmptyState/EmptyState.doc.mjs +1 -1
- package/src/Field/Field.doc.mjs +1 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FieldStatus/FieldStatus.test.tsx +282 -0
- package/src/FileInput/FileInput.doc.mjs +1 -1
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -3
- package/src/Grid/Grid.doc.mjs +3 -3
- package/src/Grid/Grid.test.tsx +43 -18
- package/src/Grid/Grid.tsx +26 -9
- package/src/Icon/Icon.test.tsx +41 -29
- package/src/Icon/Icon.tsx +6 -2
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +185 -0
- package/src/Item/Item.tsx +1 -1
- package/src/Layout/Layout.test.tsx +285 -0
- package/src/Layout/LayoutContent.doc.mjs +12 -0
- package/src/Layout/LayoutPanel.doc.mjs +40 -0
- package/src/Layout/LayoutSlots.test.tsx +364 -0
- package/src/Layout/__tests__/edgeCompensation.test.tsx +72 -0
- package/src/Lightbox/Lightbox.doc.mjs +5 -0
- package/src/Lightbox/Lightbox.test.tsx +123 -2
- package/src/Lightbox/Lightbox.tsx +29 -1
- package/src/Markdown/Markdown.test.tsx +23 -0
- package/src/Markdown/Markdown.tsx +9 -7
- package/src/Markdown/incremental.test.ts +36 -0
- package/src/Markdown/parser.perf.test.ts +34 -12
- package/src/Markdown/parser.test.ts +210 -0
- package/src/Markdown/parser.ts +301 -6
- package/src/MobileNav/MobileNav.doc.mjs +20 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +14 -1
- package/src/MultiSelector/MultiSelector.test.tsx +33 -0
- package/src/MultiSelector/MultiSelector.tsx +20 -0
- package/src/NavMenu/NavMenu.doc.mjs +15 -0
- package/src/NumberInput/NumberInput.test.tsx +48 -3
- package/src/NumberInput/NumberInput.tsx +32 -15
- package/src/Outline/parseOutlineFromMarkdown.test.ts +80 -0
- package/src/OverflowList/OverflowList.test.tsx +416 -0
- package/src/Overlay/Overlay.doc.mjs +6 -0
- package/src/Overlay/Overlay.test.tsx +356 -0
- package/src/Pagination/Pagination.test.tsx +162 -0
- package/src/Pagination/Pagination.tsx +80 -26
- package/src/Popover/Popover.test.tsx +65 -0
- package/src/PowerSearch/PowerSearch.doc.mjs +4 -4
- package/src/PowerSearch/PowerSearch.test.tsx +109 -1
- package/src/PowerSearch/PowerSearch.tsx +37 -16
- package/src/ProgressBar/ProgressBar.test.tsx +30 -0
- package/src/ProgressBar/ProgressBar.tsx +12 -5
- package/src/RadioList/RadioList.doc.mjs +7 -1
- package/src/RadioList/RadioList.test.tsx +65 -0
- package/src/RadioList/RadioList.tsx +10 -1
- package/src/RadioList/RadioListItem.tsx +13 -4
- package/src/Resizable/ResizeHandle.test.tsx +218 -0
- package/src/Resizable/ResizeHandle.tsx +22 -4
- package/src/Section/Section.test.tsx +4 -10
- package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
- package/src/SegmentedControl/SegmentedControl.test.tsx +192 -0
- package/src/SegmentedControl/SegmentedControl.tsx +27 -5
- package/src/SegmentedControl/SegmentedControlItem.tsx +9 -4
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.doc.mjs +12 -1
- package/src/Selector/Selector.test.tsx +30 -0
- package/src/Selector/Selector.tsx +18 -0
- package/src/SideNav/SideNav.doc.mjs +7 -1
- package/src/SideNav/SideNav.test.tsx +66 -0
- package/src/SideNav/SideNav.tsx +6 -2
- package/src/SideNav/SideNavCollapseButton.tsx +4 -3
- package/src/SideNav/SideNavSection.tsx +6 -4
- package/src/SizeContext/SizeContext.test.tsx +226 -0
- package/src/Slider/Slider.doc.mjs +14 -2
- package/src/Slider/Slider.test.tsx +30 -0
- package/src/Slider/Slider.tsx +20 -0
- package/src/Spinner/Spinner.tsx +1 -0
- package/src/Switch/Switch.doc.mjs +21 -9
- package/src/Switch/Switch.test.tsx +137 -0
- package/src/Switch/Switch.tsx +32 -7
- package/src/TabList/TabList.doc.mjs +3 -3
- package/src/TabList/TabList.test.tsx +185 -1
- package/src/TabList/TabMenu.tsx +45 -9
- package/src/Table/BaseTable.tsx +16 -3
- package/src/Table/Table.test.tsx +87 -0
- package/src/Table/TableBody.tsx +15 -2
- package/src/Table/TableCell.tsx +87 -8
- package/src/Table/TableFooter.tsx +15 -2
- package/src/Table/TableHeader.tsx +15 -2
- package/src/Table/index.ts +5 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +13 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +3 -1
- package/src/Table/plugins/pagination/paginateData.ts +5 -1
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +13 -0
- package/src/Table/plugins/rowExpansion/index.ts +7 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +155 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +590 -0
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +23 -0
- package/src/Table/plugins/selection/useTableSelectionState.tsx +11 -6
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +35 -1
- package/src/Table/plugins/sortable/useTableSortableState.tsx +8 -4
- package/src/Table/tableContextMenu.test.tsx +27 -3
- package/src/Table/tableContextMenu.tsx +20 -2
- package/src/Table/useTablePagination.doc.mjs +4 -1
- package/src/Table/useTableRowExpansion.doc.mjs +80 -0
- package/src/Table/useTableSortable.doc.mjs +4 -1
- package/src/Text/Text.doc.mjs +2 -2
- package/src/Text/Text.test.tsx +11 -0
- package/src/Text/Text.tsx +4 -2
- package/src/Text/text.stylex.ts +41 -0
- package/src/TextArea/TextArea.doc.mjs +1 -1
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.doc.mjs +1 -1
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +36 -2
- package/src/Thumbnail/Thumbnail.tsx +4 -2
- package/src/TimeInput/TimeInput.doc.mjs +11 -6
- package/src/TimeInput/TimeInput.test.tsx +37 -0
- package/src/TimeInput/TimeInput.tsx +11 -1
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +52 -0
- package/src/Timestamp/Timestamp.tsx +30 -16
- package/src/Toast/Toast.tsx +11 -3
- package/src/Toast/ToastViewport.test.tsx +64 -0
- package/src/Toast/ToastViewport.tsx +12 -0
- package/src/ToggleButton/ToggleButton.doc.mjs +1 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -4
- package/src/Tokenizer/Tokenizer.test.tsx +33 -0
- package/src/Tokenizer/Tokenizer.tsx +19 -0
- package/src/Toolbar/Toolbar.test.tsx +1 -1
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +18 -0
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +9 -2
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +19 -0
- package/src/Typeahead/BaseTypeahead.tsx +5 -2
- package/src/Typeahead/Typeahead.doc.mjs +7 -2
- package/src/Typeahead/Typeahead.test.tsx +45 -1
- package/src/__tests__/TestIcon.tsx +26 -0
- package/src/__tests__/fastRoleQueries.ts +66 -0
- package/src/docPropReferences.test.ts +178 -0
- package/src/docs-types.ts +14 -0
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useFocusTrap.doc.mjs +4 -2
- package/src/hooks/useFocusTrap.test.tsx +149 -1
- package/src/hooks/useFocusTrap.ts +50 -1
- package/src/hooks/useHotkeys.doc.mjs +52 -0
- package/src/hooks/useHotkeys.test.ts +245 -0
- package/src/hooks/useHotkeys.ts +203 -0
- package/src/hooks/useInteractiveRole.ts +12 -4
- package/src/hooks/useKeyboardHint.doc.mjs +6 -6
- package/src/hooks/useStreamingText.test.ts +54 -19
- package/src/hooks/useStreamingText.ts +16 -5
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +4 -13
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +29 -0
- package/src/theme/expandColorScale.ts +11 -6
- package/src/theme/hct.ts +9 -17
- package/src/theme/tokens.test.ts +182 -9
- package/src/theme/tokens.ts +239 -4
- package/src/theme/useTheme.test.tsx +20 -0
- package/src/utils/color.test.ts +133 -0
- package/src/utils/color.ts +148 -0
- package/src/utils/composeEventHandlers.test.ts +71 -0
- package/src/utils/composeEventHandlers.ts +44 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/mergeProps.test.ts +166 -0
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +13 -0
- package/src/utils/timeParser.ts +8 -5
|
@@ -5,10 +5,13 @@ import {
|
|
|
5
5
|
computeDayCellState,
|
|
6
6
|
computeRangeRounding,
|
|
7
7
|
computePreviewRounding,
|
|
8
|
+
computeDayNeighborContinuity,
|
|
8
9
|
isEndpoint,
|
|
10
|
+
isRangeHighlighted,
|
|
11
|
+
isPreviewHighlighted,
|
|
9
12
|
type DayCellStateInput,
|
|
10
13
|
} from './dayCellUtils';
|
|
11
|
-
import {plainDateFromISO} from '../utils/plainDate';
|
|
14
|
+
import {plainDateFromISO, plainDateIsEqual} from '../utils/plainDate';
|
|
12
15
|
|
|
13
16
|
function makeInput(
|
|
14
17
|
overrides: Partial<DayCellStateInput> = {},
|
|
@@ -118,6 +121,49 @@ describe('computeDayCellState', () => {
|
|
|
118
121
|
expect(stateLast.isFirstColumn).toBe(false);
|
|
119
122
|
expect(stateLast.isLastColumn).toBe(true);
|
|
120
123
|
});
|
|
124
|
+
|
|
125
|
+
// Regression (#2715): outside (adjacent-month) days must not receive
|
|
126
|
+
// selection/range/preview state. In the two-month layout the same date
|
|
127
|
+
// renders in both panes, so highlighting the spillover copy would duplicate
|
|
128
|
+
// the selection onto the wrong month's pane.
|
|
129
|
+
it('does not apply range state to outside days', () => {
|
|
130
|
+
const state = computeDayCellState(
|
|
131
|
+
makeInput({
|
|
132
|
+
date: plainDateFromISO('2024-03-17'),
|
|
133
|
+
isOutside: true,
|
|
134
|
+
mode: 'range',
|
|
135
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
136
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
137
|
+
}),
|
|
138
|
+
);
|
|
139
|
+
expect(state.isInRange).toBe(false);
|
|
140
|
+
expect(state.isRangeStart).toBe(false);
|
|
141
|
+
expect(state.isRangeEnd).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('does not apply preview state to outside days', () => {
|
|
145
|
+
const state = computeDayCellState(
|
|
146
|
+
makeInput({
|
|
147
|
+
date: plainDateFromISO('2024-03-17'),
|
|
148
|
+
isOutside: true,
|
|
149
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
150
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
151
|
+
}),
|
|
152
|
+
);
|
|
153
|
+
expect(state.isInPreview).toBe(false);
|
|
154
|
+
expect(state.isPreviewStart).toBe(false);
|
|
155
|
+
expect(state.isPreviewEnd).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('does not mark an outside day as selected', () => {
|
|
159
|
+
const state = computeDayCellState(
|
|
160
|
+
makeInput({
|
|
161
|
+
isOutside: true,
|
|
162
|
+
selectedDate: plainDateFromISO('2024-03-15'),
|
|
163
|
+
}),
|
|
164
|
+
);
|
|
165
|
+
expect(state.isSelected).toBe(false);
|
|
166
|
+
});
|
|
121
167
|
});
|
|
122
168
|
|
|
123
169
|
describe('computeRangeRounding', () => {
|
|
@@ -161,6 +207,96 @@ describe('computeRangeRounding', () => {
|
|
|
161
207
|
const rounding = computeRangeRounding(state);
|
|
162
208
|
expect(rounding.roundRight).toBe(true);
|
|
163
209
|
});
|
|
210
|
+
|
|
211
|
+
// #2715 follow-up: cap the highlight where the range meets a disabled or
|
|
212
|
+
// adjacent-month (outside) day. A mid-range day (neither endpoint nor grid
|
|
213
|
+
// edge) gets an end cap on the side whose neighbour breaks the run.
|
|
214
|
+
it('caps the right edge when the next day breaks the range (e.g. disabled)', () => {
|
|
215
|
+
const state = computeDayCellState(
|
|
216
|
+
makeInput({
|
|
217
|
+
date: plainDateFromISO('2024-03-17'),
|
|
218
|
+
dayIndex: 3,
|
|
219
|
+
mode: 'range',
|
|
220
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
221
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
const rounding = computeRangeRounding(state, {
|
|
225
|
+
prevInRange: true,
|
|
226
|
+
nextInRange: false,
|
|
227
|
+
});
|
|
228
|
+
expect(rounding.roundLeft).toBe(false);
|
|
229
|
+
expect(rounding.roundRight).toBe(true);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('caps the left edge when the previous day breaks the range', () => {
|
|
233
|
+
const state = computeDayCellState(
|
|
234
|
+
makeInput({
|
|
235
|
+
date: plainDateFromISO('2024-03-17'),
|
|
236
|
+
dayIndex: 3,
|
|
237
|
+
mode: 'range',
|
|
238
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
239
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
240
|
+
}),
|
|
241
|
+
);
|
|
242
|
+
const rounding = computeRangeRounding(state, {
|
|
243
|
+
prevInRange: false,
|
|
244
|
+
nextInRange: true,
|
|
245
|
+
});
|
|
246
|
+
expect(rounding.roundLeft).toBe(true);
|
|
247
|
+
expect(rounding.roundRight).toBe(false);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('does not cap a mid-range day when both neighbours continue the range', () => {
|
|
251
|
+
const state = computeDayCellState(
|
|
252
|
+
makeInput({
|
|
253
|
+
date: plainDateFromISO('2024-03-17'),
|
|
254
|
+
dayIndex: 3,
|
|
255
|
+
mode: 'range',
|
|
256
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
257
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
258
|
+
}),
|
|
259
|
+
);
|
|
260
|
+
const rounding = computeRangeRounding(state, {
|
|
261
|
+
prevInRange: true,
|
|
262
|
+
nextInRange: true,
|
|
263
|
+
});
|
|
264
|
+
expect(rounding.roundLeft).toBe(false);
|
|
265
|
+
expect(rounding.roundRight).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
describe('isRangeHighlighted', () => {
|
|
270
|
+
const base = {
|
|
271
|
+
date: plainDateFromISO('2024-03-17'),
|
|
272
|
+
mode: 'range' as const,
|
|
273
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
274
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
275
|
+
isDisabled: false,
|
|
276
|
+
isOutside: false,
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
it('true for an enabled in-month day inside the range', () => {
|
|
280
|
+
expect(isRangeHighlighted(base)).toBe(true);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it('false for a disabled day (breaks continuity)', () => {
|
|
284
|
+
expect(isRangeHighlighted({...base, isDisabled: true})).toBe(false);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('false for an adjacent-month (outside) day', () => {
|
|
288
|
+
expect(isRangeHighlighted({...base, isOutside: true})).toBe(false);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('false outside the range bounds', () => {
|
|
292
|
+
expect(
|
|
293
|
+
isRangeHighlighted({...base, date: plainDateFromISO('2024-03-25')}),
|
|
294
|
+
).toBe(false);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('false in single mode', () => {
|
|
298
|
+
expect(isRangeHighlighted({...base, mode: 'single'})).toBe(false);
|
|
299
|
+
});
|
|
164
300
|
});
|
|
165
301
|
|
|
166
302
|
describe('computePreviewRounding', () => {
|
|
@@ -175,6 +311,175 @@ describe('computePreviewRounding', () => {
|
|
|
175
311
|
expect(rounding.roundLeft).toBe(true);
|
|
176
312
|
expect(rounding.roundRight).toBe(false);
|
|
177
313
|
});
|
|
314
|
+
|
|
315
|
+
// #2715: the hover preview needs the same disabled/outside caps as the
|
|
316
|
+
// committed range, so the transient highlight terminates cleanly at the gap.
|
|
317
|
+
it('caps the right edge when the next day breaks the preview run', () => {
|
|
318
|
+
const state = computeDayCellState(
|
|
319
|
+
makeInput({
|
|
320
|
+
date: plainDateFromISO('2024-03-17'),
|
|
321
|
+
dayIndex: 3,
|
|
322
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
323
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
324
|
+
}),
|
|
325
|
+
);
|
|
326
|
+
const rounding = computePreviewRounding(state, {
|
|
327
|
+
prevInPreview: true,
|
|
328
|
+
nextInPreview: false,
|
|
329
|
+
});
|
|
330
|
+
expect(rounding.roundLeft).toBe(false);
|
|
331
|
+
expect(rounding.roundRight).toBe(true);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it('caps the left edge when the previous day breaks the preview run', () => {
|
|
335
|
+
const state = computeDayCellState(
|
|
336
|
+
makeInput({
|
|
337
|
+
date: plainDateFromISO('2024-03-17'),
|
|
338
|
+
dayIndex: 3,
|
|
339
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
340
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
341
|
+
}),
|
|
342
|
+
);
|
|
343
|
+
const rounding = computePreviewRounding(state, {
|
|
344
|
+
prevInPreview: false,
|
|
345
|
+
nextInPreview: true,
|
|
346
|
+
});
|
|
347
|
+
expect(rounding.roundLeft).toBe(true);
|
|
348
|
+
expect(rounding.roundRight).toBe(false);
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
it('does not cap a mid-preview day when both neighbours continue', () => {
|
|
352
|
+
const state = computeDayCellState(
|
|
353
|
+
makeInput({
|
|
354
|
+
date: plainDateFromISO('2024-03-17'),
|
|
355
|
+
dayIndex: 3,
|
|
356
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
357
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
358
|
+
}),
|
|
359
|
+
);
|
|
360
|
+
const rounding = computePreviewRounding(state, {
|
|
361
|
+
prevInPreview: true,
|
|
362
|
+
nextInPreview: true,
|
|
363
|
+
});
|
|
364
|
+
expect(rounding.roundLeft).toBe(false);
|
|
365
|
+
expect(rounding.roundRight).toBe(false);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
describe('isPreviewHighlighted', () => {
|
|
370
|
+
const base = {
|
|
371
|
+
date: plainDateFromISO('2024-03-17'),
|
|
372
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
373
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
374
|
+
isDisabled: false,
|
|
375
|
+
isOutside: false,
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
it('true for an enabled in-month day inside the preview span', () => {
|
|
379
|
+
expect(isPreviewHighlighted(base)).toBe(true);
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
it('false for a disabled day', () => {
|
|
383
|
+
expect(isPreviewHighlighted({...base, isDisabled: true})).toBe(false);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
it('false for an adjacent-month (outside) day', () => {
|
|
387
|
+
expect(isPreviewHighlighted({...base, isOutside: true})).toBe(false);
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
it('false outside the preview bounds', () => {
|
|
391
|
+
expect(
|
|
392
|
+
isPreviewHighlighted({...base, date: plainDateFromISO('2024-03-25')}),
|
|
393
|
+
).toBe(false);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
it('false with no preview span', () => {
|
|
397
|
+
expect(
|
|
398
|
+
isPreviewHighlighted({...base, previewStart: null, previewEnd: null}),
|
|
399
|
+
).toBe(false);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
describe('computeDayNeighborContinuity', () => {
|
|
404
|
+
// A week row of 5 consecutive in-month days, Mar 15–19.
|
|
405
|
+
const week = (
|
|
406
|
+
[
|
|
407
|
+
'2024-03-15',
|
|
408
|
+
'2024-03-16',
|
|
409
|
+
'2024-03-17',
|
|
410
|
+
'2024-03-18',
|
|
411
|
+
'2024-03-19',
|
|
412
|
+
] as const
|
|
413
|
+
).map(iso => ({
|
|
414
|
+
date: plainDateFromISO(iso),
|
|
415
|
+
isOutside: false,
|
|
416
|
+
}));
|
|
417
|
+
|
|
418
|
+
const baseInput = {
|
|
419
|
+
week,
|
|
420
|
+
mode: 'range' as const,
|
|
421
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
422
|
+
rangeEnd: plainDateFromISO('2024-03-19'),
|
|
423
|
+
previewStart: null,
|
|
424
|
+
previewEnd: null,
|
|
425
|
+
isDisabled: () => false,
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
it('reports both range neighbours continuing for a mid-range day', () => {
|
|
429
|
+
const c = computeDayNeighborContinuity({...baseInput, dayIndex: 2});
|
|
430
|
+
expect(c.prevInRange).toBe(true);
|
|
431
|
+
expect(c.nextInRange).toBe(true);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
it('breaks continuity where a neighbour is disabled', () => {
|
|
435
|
+
// Disable Mar 18 (index 3): its neighbour Mar 17 (index 2) sees a break to
|
|
436
|
+
// the right.
|
|
437
|
+
const disabledDay = plainDateFromISO('2024-03-18');
|
|
438
|
+
const c = computeDayNeighborContinuity({
|
|
439
|
+
...baseInput,
|
|
440
|
+
dayIndex: 2,
|
|
441
|
+
isDisabled: date => plainDateIsEqual(date, disabledDay),
|
|
442
|
+
});
|
|
443
|
+
expect(c.prevInRange).toBe(true);
|
|
444
|
+
expect(c.nextInRange).toBe(false);
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
it('breaks continuity where a neighbour is an outside day', () => {
|
|
448
|
+
const weekWithOutside = week.map((d, i) =>
|
|
449
|
+
i === 3 ? {...d, isOutside: true} : d,
|
|
450
|
+
);
|
|
451
|
+
const c = computeDayNeighborContinuity({
|
|
452
|
+
...baseInput,
|
|
453
|
+
week: weekWithOutside,
|
|
454
|
+
dayIndex: 2,
|
|
455
|
+
});
|
|
456
|
+
expect(c.nextInRange).toBe(false);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
it('treats a missing neighbour (row edge) as a break', () => {
|
|
460
|
+
const first = computeDayNeighborContinuity({...baseInput, dayIndex: 0});
|
|
461
|
+
expect(first.prevInRange).toBe(false);
|
|
462
|
+
const last = computeDayNeighborContinuity({
|
|
463
|
+
...baseInput,
|
|
464
|
+
dayIndex: week.length - 1,
|
|
465
|
+
});
|
|
466
|
+
expect(last.nextInRange).toBe(false);
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
it('derives preview continuity independently of range', () => {
|
|
470
|
+
const c = computeDayNeighborContinuity({
|
|
471
|
+
...baseInput,
|
|
472
|
+
rangeStart: null,
|
|
473
|
+
rangeEnd: null,
|
|
474
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
475
|
+
previewEnd: plainDateFromISO('2024-03-19'),
|
|
476
|
+
dayIndex: 2,
|
|
477
|
+
});
|
|
478
|
+
expect(c.prevInRange).toBe(false);
|
|
479
|
+
expect(c.nextInRange).toBe(false);
|
|
480
|
+
expect(c.prevInPreview).toBe(true);
|
|
481
|
+
expect(c.nextInPreview).toBe(true);
|
|
482
|
+
});
|
|
178
483
|
});
|
|
179
484
|
|
|
180
485
|
describe('isEndpoint', () => {
|
|
@@ -31,7 +31,14 @@ export interface DayCellStateInput {
|
|
|
31
31
|
isOutside: boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Derives all visual/interaction states for a single day cell.
|
|
36
|
+
*
|
|
37
|
+
* Outside (adjacent-month) days never receive selection, range, or preview
|
|
38
|
+
* state: in the two-month layout the same date renders in both panes, and
|
|
39
|
+
* highlighting the spillover copy would duplicate the selection onto the wrong
|
|
40
|
+
* month's pane (#2715).
|
|
41
|
+
*/
|
|
35
42
|
export function computeDayCellState(input: DayCellStateInput): DayCellState {
|
|
36
43
|
const {
|
|
37
44
|
date,
|
|
@@ -51,55 +58,241 @@ export function computeDayCellState(input: DayCellStateInput): DayCellState {
|
|
|
51
58
|
effectivelyDisabled: isDisabled || isOutside,
|
|
52
59
|
isToday: plainDateIsEqual(date, today),
|
|
53
60
|
isSelected: !!(
|
|
61
|
+
!isOutside &&
|
|
54
62
|
mode === 'single' &&
|
|
55
63
|
selectedDate &&
|
|
56
64
|
plainDateIsEqual(date, selectedDate)
|
|
57
65
|
),
|
|
58
66
|
isInRange: !!(
|
|
67
|
+
!isOutside &&
|
|
59
68
|
mode === 'range' &&
|
|
60
69
|
rangeStart &&
|
|
61
70
|
rangeEnd &&
|
|
62
71
|
plainDateIsInRange(date, [rangeStart, rangeEnd])
|
|
63
72
|
),
|
|
64
73
|
isRangeStart: !!(
|
|
74
|
+
!isOutside &&
|
|
65
75
|
mode === 'range' &&
|
|
66
76
|
rangeStart &&
|
|
67
77
|
plainDateIsEqual(date, rangeStart)
|
|
68
78
|
),
|
|
69
79
|
isRangeEnd: !!(
|
|
80
|
+
!isOutside &&
|
|
70
81
|
mode === 'range' &&
|
|
71
82
|
rangeEnd &&
|
|
72
83
|
plainDateIsEqual(date, rangeEnd)
|
|
73
84
|
),
|
|
74
85
|
isInPreview: !!(
|
|
86
|
+
!isOutside &&
|
|
75
87
|
previewStart &&
|
|
76
88
|
previewEnd &&
|
|
77
89
|
plainDateIsInRange(date, [previewStart, previewEnd])
|
|
78
90
|
),
|
|
79
|
-
isPreviewStart: !!(
|
|
80
|
-
|
|
91
|
+
isPreviewStart: !!(
|
|
92
|
+
!isOutside &&
|
|
93
|
+
previewStart &&
|
|
94
|
+
plainDateIsEqual(date, previewStart)
|
|
95
|
+
),
|
|
96
|
+
isPreviewEnd: !!(
|
|
97
|
+
!isOutside &&
|
|
98
|
+
previewEnd &&
|
|
99
|
+
plainDateIsEqual(date, previewEnd)
|
|
100
|
+
),
|
|
81
101
|
isFirstColumn: dayIndex === 0,
|
|
82
102
|
isLastColumn: dayIndex === 6,
|
|
83
103
|
};
|
|
84
104
|
}
|
|
85
105
|
|
|
86
|
-
/**
|
|
87
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Generic rounding for a highlight run (range or preview).
|
|
108
|
+
*
|
|
109
|
+
* Rounds at the run's endpoints and the grid row edges, and also caps the
|
|
110
|
+
* highlight where the run meets a break in continuity — a neighbouring cell
|
|
111
|
+
* that is disabled or an adjacent-month (outside) day (#2715).
|
|
112
|
+
*/
|
|
113
|
+
function computeHighlightRounding(input: {
|
|
114
|
+
isStart: boolean;
|
|
115
|
+
isEnd: boolean;
|
|
116
|
+
isFirstColumn: boolean;
|
|
117
|
+
isLastColumn: boolean;
|
|
118
|
+
prevContinues?: boolean;
|
|
119
|
+
nextContinues?: boolean;
|
|
120
|
+
}) {
|
|
121
|
+
const prevBreaks =
|
|
122
|
+
input.prevContinues !== undefined ? !input.prevContinues : false;
|
|
123
|
+
const nextBreaks =
|
|
124
|
+
input.nextContinues !== undefined ? !input.nextContinues : false;
|
|
88
125
|
return {
|
|
89
|
-
roundLeft:
|
|
90
|
-
roundRight:
|
|
126
|
+
roundLeft: input.isStart || input.isFirstColumn || prevBreaks,
|
|
127
|
+
roundRight: input.isEnd || input.isLastColumn || nextBreaks,
|
|
91
128
|
};
|
|
92
129
|
}
|
|
93
130
|
|
|
94
|
-
/**
|
|
95
|
-
export function
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
131
|
+
/** Rounding for the committed range background. */
|
|
132
|
+
export function computeRangeRounding(
|
|
133
|
+
state: DayCellState,
|
|
134
|
+
neighbors?: {prevInRange?: boolean; nextInRange?: boolean},
|
|
135
|
+
) {
|
|
136
|
+
return computeHighlightRounding({
|
|
137
|
+
isStart: state.isRangeStart,
|
|
138
|
+
isEnd: state.isRangeEnd,
|
|
139
|
+
isFirstColumn: state.isFirstColumn,
|
|
140
|
+
isLastColumn: state.isLastColumn,
|
|
141
|
+
prevContinues: neighbors?.prevInRange,
|
|
142
|
+
nextContinues: neighbors?.nextInRange,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Rounding for the hover-preview background. */
|
|
147
|
+
export function computePreviewRounding(
|
|
148
|
+
state: DayCellState,
|
|
149
|
+
neighbors?: {prevInPreview?: boolean; nextInPreview?: boolean},
|
|
150
|
+
) {
|
|
151
|
+
return computeHighlightRounding({
|
|
152
|
+
isStart: state.isPreviewStart,
|
|
153
|
+
isEnd: state.isPreviewEnd,
|
|
154
|
+
isFirstColumn: state.isFirstColumn,
|
|
155
|
+
isLastColumn: state.isLastColumn,
|
|
156
|
+
prevContinues: neighbors?.prevInPreview,
|
|
157
|
+
nextContinues: neighbors?.nextInPreview,
|
|
158
|
+
});
|
|
100
159
|
}
|
|
101
160
|
|
|
102
161
|
/** Whether a day is a selection endpoint (selected, range start, or range end). */
|
|
103
162
|
export function isEndpoint(state: DayCellState): boolean {
|
|
104
163
|
return state.isSelected || state.isRangeStart || state.isRangeEnd;
|
|
105
164
|
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Whether a day is part of an unbroken highlight run (enabled, in-month, inside
|
|
168
|
+
* the given span). Outside and disabled days break the run, producing end caps.
|
|
169
|
+
*/
|
|
170
|
+
function isSpanHighlighted(input: {
|
|
171
|
+
date: PlainDate;
|
|
172
|
+
spanStart: PlainDate | null;
|
|
173
|
+
spanEnd: PlainDate | null;
|
|
174
|
+
isDisabled: boolean;
|
|
175
|
+
isOutside: boolean;
|
|
176
|
+
}): boolean {
|
|
177
|
+
const {date, spanStart, spanEnd, isDisabled, isOutside} = input;
|
|
178
|
+
return !!(
|
|
179
|
+
!isOutside &&
|
|
180
|
+
!isDisabled &&
|
|
181
|
+
spanStart &&
|
|
182
|
+
spanEnd &&
|
|
183
|
+
plainDateIsInRange(date, [spanStart, spanEnd])
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Whether a day participates in the continuous committed-range highlight. */
|
|
188
|
+
export function isRangeHighlighted(input: {
|
|
189
|
+
date: PlainDate;
|
|
190
|
+
mode: 'single' | 'range';
|
|
191
|
+
rangeStart: PlainDate | null;
|
|
192
|
+
rangeEnd: PlainDate | null;
|
|
193
|
+
isDisabled: boolean;
|
|
194
|
+
isOutside: boolean;
|
|
195
|
+
}): boolean {
|
|
196
|
+
if (input.mode !== 'range') {return false;}
|
|
197
|
+
return isSpanHighlighted({
|
|
198
|
+
date: input.date,
|
|
199
|
+
spanStart: input.rangeStart,
|
|
200
|
+
spanEnd: input.rangeEnd,
|
|
201
|
+
isDisabled: input.isDisabled,
|
|
202
|
+
isOutside: input.isOutside,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Whether a day participates in the continuous hover-preview highlight. */
|
|
207
|
+
export function isPreviewHighlighted(input: {
|
|
208
|
+
date: PlainDate;
|
|
209
|
+
previewStart: PlainDate | null;
|
|
210
|
+
previewEnd: PlainDate | null;
|
|
211
|
+
isDisabled: boolean;
|
|
212
|
+
isOutside: boolean;
|
|
213
|
+
}): boolean {
|
|
214
|
+
return isSpanHighlighted({
|
|
215
|
+
date: input.date,
|
|
216
|
+
spanStart: input.previewStart,
|
|
217
|
+
spanEnd: input.previewEnd,
|
|
218
|
+
isDisabled: input.isDisabled,
|
|
219
|
+
isOutside: input.isOutside,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Continuity of the highlighted run through a day's immediate neighbours in the
|
|
225
|
+
* same week row, for both the committed range and the hover preview. A day gets
|
|
226
|
+
* an end cap on whichever side its neighbour does not continue the run (see
|
|
227
|
+
* {@link computeRangeRounding} / {@link computePreviewRounding}).
|
|
228
|
+
*/
|
|
229
|
+
export interface DayNeighborContinuity {
|
|
230
|
+
prevInRange: boolean;
|
|
231
|
+
nextInRange: boolean;
|
|
232
|
+
prevInPreview: boolean;
|
|
233
|
+
nextInPreview: boolean;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** Minimal shape needed from a week's day cells to derive neighbour continuity. */
|
|
237
|
+
export interface NeighborDay {
|
|
238
|
+
date: PlainDate;
|
|
239
|
+
isOutside: boolean;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Derives whether the previous/next day in the same week row continues the
|
|
244
|
+
* highlighted run, for both range and preview. Broken out from the render path
|
|
245
|
+
* so the neighbour logic is unit-testable in isolation.
|
|
246
|
+
*/
|
|
247
|
+
export function computeDayNeighborContinuity(input: {
|
|
248
|
+
week: ReadonlyArray<NeighborDay>;
|
|
249
|
+
dayIndex: number;
|
|
250
|
+
mode: 'single' | 'range';
|
|
251
|
+
rangeStart: PlainDate | null;
|
|
252
|
+
rangeEnd: PlainDate | null;
|
|
253
|
+
previewStart: PlainDate | null;
|
|
254
|
+
previewEnd: PlainDate | null;
|
|
255
|
+
isDisabled: (date: PlainDate) => boolean;
|
|
256
|
+
}): DayNeighborContinuity {
|
|
257
|
+
const {
|
|
258
|
+
week,
|
|
259
|
+
dayIndex,
|
|
260
|
+
mode,
|
|
261
|
+
rangeStart,
|
|
262
|
+
rangeEnd,
|
|
263
|
+
previewStart,
|
|
264
|
+
previewEnd,
|
|
265
|
+
isDisabled,
|
|
266
|
+
} = input;
|
|
267
|
+
|
|
268
|
+
const prev = week[dayIndex - 1];
|
|
269
|
+
const next = week[dayIndex + 1];
|
|
270
|
+
|
|
271
|
+
const rangeContinues = (day: NeighborDay | undefined): boolean =>
|
|
272
|
+
day != null &&
|
|
273
|
+
isRangeHighlighted({
|
|
274
|
+
date: day.date,
|
|
275
|
+
mode,
|
|
276
|
+
rangeStart,
|
|
277
|
+
rangeEnd,
|
|
278
|
+
isDisabled: isDisabled(day.date),
|
|
279
|
+
isOutside: day.isOutside,
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
const previewContinues = (day: NeighborDay | undefined): boolean =>
|
|
283
|
+
day != null &&
|
|
284
|
+
isPreviewHighlighted({
|
|
285
|
+
date: day.date,
|
|
286
|
+
previewStart,
|
|
287
|
+
previewEnd,
|
|
288
|
+
isDisabled: isDisabled(day.date),
|
|
289
|
+
isOutside: day.isOutside,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
return {
|
|
293
|
+
prevInRange: rangeContinues(prev),
|
|
294
|
+
nextInRange: rangeContinues(next),
|
|
295
|
+
prevInPreview: previewContinues(prev),
|
|
296
|
+
nextInPreview: previewContinues(next),
|
|
297
|
+
};
|
|
298
|
+
}
|
package/src/Calendar/styles.ts
CHANGED
|
@@ -64,9 +64,19 @@ export const calendarStyles = stylex.create({
|
|
|
64
64
|
whiteSpace: 'nowrap',
|
|
65
65
|
borderWidth: 0,
|
|
66
66
|
},
|
|
67
|
+
/**
|
|
68
|
+
* Wrapper for the month nav chevrons. In RTL the flex header already
|
|
69
|
+
* swaps the buttons' visual sides; the glyphs must mirror with them so
|
|
70
|
+
* "Previous month" points outward (visually right) instead of inward.
|
|
71
|
+
* Keyed on the dir attribute (dir="rtl"), same as MobileNav's drawer
|
|
72
|
+
* transform — bare CSS `direction: rtl` alone won't trigger it.
|
|
73
|
+
*/
|
|
67
74
|
navIcon: {
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
display: 'inline-flex',
|
|
76
|
+
transform: {
|
|
77
|
+
default: null,
|
|
78
|
+
':is([dir="rtl"] *)': 'scaleX(-1)',
|
|
79
|
+
},
|
|
70
80
|
},
|
|
71
81
|
});
|
|
72
82
|
|
package/src/Card/Card.doc.mjs
CHANGED
|
@@ -84,7 +84,7 @@ export const docs = {
|
|
|
84
84
|
theming: {
|
|
85
85
|
container: true,
|
|
86
86
|
targets: [
|
|
87
|
-
{className: 'astryx-card'},
|
|
87
|
+
{className: 'astryx-card', visualProps: ['variant']},
|
|
88
88
|
],
|
|
89
89
|
vars: [
|
|
90
90
|
{name: '--_card-radius', description: 'Border radius of the card', default: 'var(--radius-container)', private: true},
|
package/src/Card/Card.tsx
CHANGED
|
@@ -44,8 +44,10 @@ import {themeProps} from '../utils/themeProps';
|
|
|
44
44
|
* - Non-semantic palette: `blue | cyan | gray | green | orange | pink | purple | red | teal | yellow`
|
|
45
45
|
* Each uses the corresponding `--color-background-<name>` token (20% opacity tint).
|
|
46
46
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
47
|
+
* Only `default` draws a visible border. Its border width is subtracted from
|
|
48
|
+
* the padding so the total inset (border + padding) equals the padding token —
|
|
49
|
+
* keeping content geometry faithful to the spacing scale and identical to the
|
|
50
|
+
* borderless variants. Themes can override borderWidth/borderColor.
|
|
49
51
|
*/
|
|
50
52
|
export type CardVariant =
|
|
51
53
|
| 'default'
|
|
@@ -71,12 +73,18 @@ const styles = stylex.create({
|
|
|
71
73
|
'--_card-radius': radiusVars['--radius-container'],
|
|
72
74
|
borderRadius: 'var(--_card-radius)',
|
|
73
75
|
overflow: 'clip',
|
|
74
|
-
borderWidth: borderVars['--border-width'],
|
|
75
|
-
borderStyle: 'solid',
|
|
76
|
-
borderColor: 'transparent',
|
|
77
76
|
},
|
|
77
|
+
// The border is drawn *inside* the padding — its width is subtracted from
|
|
78
|
+
// each side — so total inset (border + padding) equals the padding token
|
|
79
|
+
// rather than exceeding it by the border width.
|
|
78
80
|
withBorder: {
|
|
81
|
+
borderWidth: borderVars['--border-width'],
|
|
82
|
+
borderStyle: 'solid',
|
|
79
83
|
borderColor: colorVars['--color-border-emphasized'],
|
|
84
|
+
paddingInlineStart: `calc(var(--container-padding-inline-start) - ${borderVars['--border-width']})`,
|
|
85
|
+
paddingInlineEnd: `calc(var(--container-padding-inline-end) - ${borderVars['--border-width']})`,
|
|
86
|
+
paddingBlockStart: `calc(var(--container-padding-block-start) - ${borderVars['--border-width']})`,
|
|
87
|
+
paddingBlockEnd: `calc(var(--container-padding-block-end) - ${borderVars['--border-width']})`,
|
|
80
88
|
},
|
|
81
89
|
// Fixed-height cards scroll content; overflow: auto also clips to border-radius
|
|
82
90
|
scrollable: {
|
|
@@ -266,7 +274,6 @@ export function Card({
|
|
|
266
274
|
stylex.props(
|
|
267
275
|
styles.card,
|
|
268
276
|
variantStyles[variant],
|
|
269
|
-
variant === 'default' && styles.withBorder,
|
|
270
277
|
hasFixedHeight && styles.scrollable,
|
|
271
278
|
dynamicStyles.sizing(
|
|
272
279
|
width ?? null,
|
|
@@ -296,6 +303,9 @@ export function Card({
|
|
|
296
303
|
!useThemeDefault &&
|
|
297
304
|
effectivePadding !== 4 &&
|
|
298
305
|
containerPaddingBlockEndVarStyles[effectivePadding],
|
|
306
|
+
// Applied after the container padding so the border-inset calc wins;
|
|
307
|
+
// it reads the --container-padding-* vars set above.
|
|
308
|
+
variant === 'default' && styles.withBorder,
|
|
299
309
|
xstyle,
|
|
300
310
|
),
|
|
301
311
|
className,
|