@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
|
@@ -25,7 +25,6 @@ import {
|
|
|
25
25
|
useTransition,
|
|
26
26
|
} from 'react';
|
|
27
27
|
import * as stylex from '@stylexjs/stylex';
|
|
28
|
-
import type {IconName} from '../Icon';
|
|
29
28
|
import {
|
|
30
29
|
colorVars,
|
|
31
30
|
sizeVars,
|
|
@@ -37,11 +36,11 @@ import {
|
|
|
37
36
|
import {
|
|
38
37
|
Field,
|
|
39
38
|
type InputStatus,
|
|
40
|
-
type InputStatusType,
|
|
41
39
|
inputWrapperStyles,
|
|
42
40
|
inputStatusBorderStyles,
|
|
43
41
|
inputStatusHoverShadowStyles,
|
|
44
42
|
inputStatusFocusWithinStyles,
|
|
43
|
+
type FieldStatusVariant,
|
|
45
44
|
} from '../Field';
|
|
46
45
|
import {Icon} from '../Icon';
|
|
47
46
|
import {VisuallyHidden} from '../VisuallyHidden';
|
|
@@ -51,15 +50,16 @@ import {useSize} from '../SizeContext/SizeContext';
|
|
|
51
50
|
import {Spinner} from '../Spinner';
|
|
52
51
|
import {Calendar, type ISODateString, type CalendarHandle} from '../Calendar';
|
|
53
52
|
import {useCalendarConstraints} from '../Calendar/hooks';
|
|
53
|
+
import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
|
|
54
54
|
import {usePopover} from '../Popover';
|
|
55
55
|
import {useTooltip} from '../Tooltip';
|
|
56
56
|
import {getInputARIA, parseDateInput} from '../utils';
|
|
57
57
|
import {
|
|
58
58
|
plainDateFromISO,
|
|
59
59
|
plainDateToISO,
|
|
60
|
-
|
|
61
|
-
DATE_FORMAT_LONG,
|
|
60
|
+
formatSharedDate,
|
|
62
61
|
} from '../utils/plainDate';
|
|
62
|
+
import type {TimestampFormat} from '../Timestamp';
|
|
63
63
|
|
|
64
64
|
const styles = stylex.create({
|
|
65
65
|
iconButton: {
|
|
@@ -127,6 +127,25 @@ const sizeStyles = stylex.create({
|
|
|
127
127
|
|
|
128
128
|
export type DateInputSize = keyof typeof sizeStyles;
|
|
129
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Named display formats for a committed date value. These are the date-only
|
|
132
|
+
* members of Timestamp's `format` vocabulary — reused verbatim (via
|
|
133
|
+
* `Extract`) so the same literal renders the same date shape in both
|
|
134
|
+
* `Timestamp` and `DateInput`:
|
|
135
|
+
* - `'date'`: locale short-month date, e.g. "Mar 21, 2026"
|
|
136
|
+
* - `'date_long'`: locale long-month date, e.g. "March 21, 2026" (the default)
|
|
137
|
+
* - `'date_weekday'`: short weekday + date, e.g. "Wed, Mar 21, 2026"
|
|
138
|
+
* - `'system_date'`: ISO 8601 calendar date, e.g. "2026-03-21"
|
|
139
|
+
*
|
|
140
|
+
* Because `DateInputFormat` is `Extract`ed from `TimestampFormat`, the two
|
|
141
|
+
* types stay in compile-time lockstep: renaming or removing one of these
|
|
142
|
+
* members from `TimestampFormat` breaks this type at build time.
|
|
143
|
+
*/
|
|
144
|
+
export type DateInputFormat = Extract<
|
|
145
|
+
TimestampFormat,
|
|
146
|
+
'date' | 'date_long' | 'date_weekday' | 'system_date'
|
|
147
|
+
>;
|
|
148
|
+
|
|
130
149
|
// Re-export shared types for convenience
|
|
131
150
|
|
|
132
151
|
export type {
|
|
@@ -259,6 +278,14 @@ export interface DateInputProps extends Omit<
|
|
|
259
278
|
* If message is provided, displays below the input.
|
|
260
279
|
*/
|
|
261
280
|
status?: InputStatus;
|
|
281
|
+
/**
|
|
282
|
+
* How the status message is placed relative to the input.
|
|
283
|
+
* - 'attached': message overlaps directly below the input (bordered treatment)
|
|
284
|
+
* - 'detached': message floats below as a separate element with spacing
|
|
285
|
+
* - 'tooltip': no message box; the status icon becomes a focusable info-tip button that reveals the message on hover, keyboard focus, or tap
|
|
286
|
+
* @default 'attached'
|
|
287
|
+
*/
|
|
288
|
+
statusVariant?: FieldStatusVariant;
|
|
262
289
|
|
|
263
290
|
/**
|
|
264
291
|
* Width of the field. Numbers are treated as pixels, strings are used as-is
|
|
@@ -283,6 +310,37 @@ export interface DateInputProps extends Omit<
|
|
|
283
310
|
* @default 1
|
|
284
311
|
*/
|
|
285
312
|
numberOfMonths?: 1 | 2;
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* How the committed date value is displayed in the text field. Accepts a
|
|
316
|
+
* named format reused from `Timestamp`'s `format` vocabulary (so the same
|
|
317
|
+
* literal renders the same date shape in both components) or a function that
|
|
318
|
+
* maps the ISO value to a custom display string.
|
|
319
|
+
*
|
|
320
|
+
* - `'date_long'` (default): long-month date, e.g. "March 21, 2026"
|
|
321
|
+
* - `'date'`: short-month date, e.g. "Mar 21, 2026"
|
|
322
|
+
* - `'date_weekday'`: short weekday + date, e.g. "Wed, Mar 21, 2026"
|
|
323
|
+
* - `'system_date'`: ISO 8601 calendar date, e.g. "2026-03-21"
|
|
324
|
+
* - `(value: ISODateString) => string`: fully custom display string
|
|
325
|
+
*
|
|
326
|
+
* Formatting applies only to the committed value — never to text the user is
|
|
327
|
+
* actively typing. A custom function's output that `parseDateInput` cannot
|
|
328
|
+
* read back can't be re-committed after an edit; external `value` changes
|
|
329
|
+
* always recompute the display from the ISO value.
|
|
330
|
+
*
|
|
331
|
+
* @default 'date_long'
|
|
332
|
+
* @example
|
|
333
|
+
* ```
|
|
334
|
+
* <DateInput label="Ship date" value={date} onChange={setDate} format="date" />
|
|
335
|
+
* <DateInput
|
|
336
|
+
* label="Ship date"
|
|
337
|
+
* value={date}
|
|
338
|
+
* onChange={setDate}
|
|
339
|
+
* format={iso => new Date(iso + 'T00:00').toDateString()}
|
|
340
|
+
* />
|
|
341
|
+
* ```
|
|
342
|
+
*/
|
|
343
|
+
format?: DateInputFormat | ((value: ISODateString) => string);
|
|
286
344
|
}
|
|
287
345
|
|
|
288
346
|
/**
|
|
@@ -315,9 +373,11 @@ export function DateInput({
|
|
|
315
373
|
placeholder: placeholderFromProps,
|
|
316
374
|
size: sizeProp,
|
|
317
375
|
status,
|
|
376
|
+
statusVariant = 'attached',
|
|
318
377
|
labelTooltip,
|
|
319
378
|
hasClear = false,
|
|
320
379
|
numberOfMonths = 1,
|
|
380
|
+
format = 'date_long',
|
|
321
381
|
width,
|
|
322
382
|
xstyle,
|
|
323
383
|
className,
|
|
@@ -359,30 +419,24 @@ export function DateInput({
|
|
|
359
419
|
isEnabled: showsDisabledMessage,
|
|
360
420
|
});
|
|
361
421
|
|
|
362
|
-
// Status icon mapping
|
|
363
|
-
const statusIconMap: Record<InputStatusType, IconName> = {
|
|
364
|
-
warning: 'warning',
|
|
365
|
-
error: 'error',
|
|
366
|
-
success: 'success',
|
|
367
|
-
};
|
|
368
|
-
|
|
369
|
-
const statusIconColorMap: Record<
|
|
370
|
-
InputStatusType,
|
|
371
|
-
'warning' | 'error' | 'success'
|
|
372
|
-
> = {
|
|
373
|
-
warning: 'warning',
|
|
374
|
-
error: 'error',
|
|
375
|
-
success: 'success',
|
|
376
|
-
};
|
|
377
|
-
|
|
378
422
|
// Constraint checking for text input validation (reuses calendar logic)
|
|
379
423
|
const {isDateDisabled} = useCalendarConstraints({min, max, dateConstraints});
|
|
380
424
|
|
|
425
|
+
const {statusIcon, describedBy: statusTooltipDescribedBy} =
|
|
426
|
+
useInputStatusIcon({
|
|
427
|
+
status,
|
|
428
|
+
statusVariant,
|
|
429
|
+
isInGroup: !!inputGroup,
|
|
430
|
+
});
|
|
431
|
+
|
|
381
432
|
const {ariaLabelledBy, ariaDescribedBy} = getInputARIA(
|
|
382
433
|
inputLabelID,
|
|
383
434
|
[
|
|
384
435
|
description ? descriptionID : null,
|
|
385
|
-
status?.message ? statusMessageID : null,
|
|
436
|
+
statusVariant !== 'tooltip' && status?.message ? statusMessageID : null,
|
|
437
|
+
// The tooltip variant renders no message box; describe the input by the
|
|
438
|
+
// tooltip's content instead so the status is still announced.
|
|
439
|
+
statusTooltipDescribedBy,
|
|
386
440
|
showsDisabledMessage ? disabledMessageTooltip.describedBy : null,
|
|
387
441
|
],
|
|
388
442
|
inputGroup,
|
|
@@ -404,12 +458,26 @@ export function DateInput({
|
|
|
404
458
|
}
|
|
405
459
|
}
|
|
406
460
|
|
|
461
|
+
// Format a committed ISO value for display. The default `date_long` renders
|
|
462
|
+
// the long-month shape (byte-identical to the historical hardcoded
|
|
463
|
+
// DATE_FORMAT_LONG rendering, so still non-breaking); a function is called
|
|
464
|
+
// with the ISO value; every other named member reuses Timestamp's shared
|
|
465
|
+
// date mapping. Applies ONLY to the committed value, never to in-progress
|
|
466
|
+
// typed input.
|
|
467
|
+
const formatCommittedValue = useCallback(
|
|
468
|
+
(iso: ISODateString): string =>
|
|
469
|
+
typeof format === 'function'
|
|
470
|
+
? format(iso)
|
|
471
|
+
: formatSharedDate(plainDateFromISO(iso), format),
|
|
472
|
+
[format],
|
|
473
|
+
);
|
|
474
|
+
|
|
407
475
|
// Display value: pending input if typing, otherwise formatted value
|
|
408
476
|
const displayValue =
|
|
409
477
|
pendingInput !== null
|
|
410
478
|
? pendingInput
|
|
411
479
|
: optimisticValue && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue)
|
|
412
|
-
?
|
|
480
|
+
? formatCommittedValue(optimisticValue)
|
|
413
481
|
: '';
|
|
414
482
|
|
|
415
483
|
// Check if current input is valid (for styling purposes)
|
|
@@ -573,7 +641,9 @@ export function DateInput({
|
|
|
573
641
|
sizeStyles[size],
|
|
574
642
|
isEffectivelyDisabled && inputWrapperStyles.disabled,
|
|
575
643
|
status && inputStatusBorderStyles[status.type],
|
|
576
|
-
status &&
|
|
644
|
+
status &&
|
|
645
|
+
!isEffectivelyDisabled &&
|
|
646
|
+
inputStatusHoverShadowStyles[status.type],
|
|
577
647
|
status && inputStatusFocusWithinStyles[status.type],
|
|
578
648
|
inputGroup && groupStyles.inGroup,
|
|
579
649
|
xstyle,
|
|
@@ -595,7 +665,20 @@ export function DateInput({
|
|
|
595
665
|
styles.iconButton,
|
|
596
666
|
isEffectivelyDisabled && styles.iconButtonDisabled,
|
|
597
667
|
)}>
|
|
598
|
-
<Icon
|
|
668
|
+
<Icon
|
|
669
|
+
icon="calendar"
|
|
670
|
+
size="sm"
|
|
671
|
+
color="secondary"
|
|
672
|
+
// Stable theme target on the toggle glyph itself, so a theme can
|
|
673
|
+
// restyle just this icon (color, size, hover) — and each open/closed
|
|
674
|
+
// state — via `defineTheme`. Same-element rules in @layer astryx-theme
|
|
675
|
+
// win over the icon's own base color/size, which a button-level target
|
|
676
|
+
// could not reach. Reflects the popover's open/closed state as a
|
|
677
|
+
// `data-state` attribute.
|
|
678
|
+
{...themeProps('date-input-toggle-icon', {
|
|
679
|
+
state: popover.isOpen ? 'expanded' : 'collapsed',
|
|
680
|
+
})}
|
|
681
|
+
/>
|
|
599
682
|
</button>
|
|
600
683
|
<input
|
|
601
684
|
ref={mergeRefs(ref, inputRef)}
|
|
@@ -647,17 +730,20 @@ export function DateInput({
|
|
|
647
730
|
onClick={handleClear}
|
|
648
731
|
aria-label={t('@astryx.dateInput.clear', {label})}
|
|
649
732
|
{...stylex.props(styles.iconButton)}>
|
|
650
|
-
<Icon
|
|
733
|
+
<Icon
|
|
734
|
+
icon="close"
|
|
735
|
+
size="sm"
|
|
736
|
+
color="secondary"
|
|
737
|
+
// Stable theme target on the clear glyph itself, so a theme can
|
|
738
|
+
// restyle just this icon (color, size, hover) via `defineTheme`.
|
|
739
|
+
// Same-element rules in @layer astryx-theme win over the icon's own
|
|
740
|
+
// base color/size, which a button-level target could not reach.
|
|
741
|
+
{...themeProps('date-input-clear-icon')}
|
|
742
|
+
/>
|
|
651
743
|
</button>
|
|
652
744
|
)}
|
|
653
745
|
{isBusy && <Spinner size="sm" />}
|
|
654
|
-
{
|
|
655
|
-
<Icon
|
|
656
|
-
icon={statusIconMap[status.type]}
|
|
657
|
-
size="md"
|
|
658
|
-
color={statusIconColorMap[status.type]}
|
|
659
|
-
/>
|
|
660
|
-
)}
|
|
746
|
+
{statusIcon}
|
|
661
747
|
{popover.render(
|
|
662
748
|
<Calendar
|
|
663
749
|
handleRef={calendarRef}
|
|
@@ -699,6 +785,7 @@ export function DateInput({
|
|
|
699
785
|
}
|
|
700
786
|
: undefined
|
|
701
787
|
}
|
|
788
|
+
statusVariant={statusVariant}
|
|
702
789
|
labelTooltip={labelTooltip}
|
|
703
790
|
width={width}>
|
|
704
791
|
{inputWrapper}
|
package/src/DateInput/index.ts
CHANGED
|
@@ -127,6 +127,13 @@ export const docs = {
|
|
|
127
127
|
type: "{type: 'warning' | 'error' | 'success', message?: string}",
|
|
128
128
|
description: 'Status indicator for error, warning, or success states.',
|
|
129
129
|
},
|
|
130
|
+
{
|
|
131
|
+
name: 'statusVariant',
|
|
132
|
+
type: "'attached' | 'detached' | 'tooltip'",
|
|
133
|
+
description:
|
|
134
|
+
'How the status message is placed relative to the input. attached overlaps directly below the input (bordered treatment); detached floats below as a separate element with spacing; tooltip hides the message box and surfaces it in a tooltip on the status icon.',
|
|
135
|
+
default: "'attached'",
|
|
136
|
+
},
|
|
130
137
|
{
|
|
131
138
|
name: 'labelTooltip',
|
|
132
139
|
type: 'string',
|
|
@@ -138,6 +145,12 @@ export const docs = {
|
|
|
138
145
|
description: 'Number of months in the calendar.',
|
|
139
146
|
default: '2',
|
|
140
147
|
},
|
|
148
|
+
{
|
|
149
|
+
name: 'width',
|
|
150
|
+
type: 'SizeValue',
|
|
151
|
+
description:
|
|
152
|
+
'Width of the field (number = pixels, string used as-is, e.g. "100%"). Sizes the whole field (label, control, and status) so they stay aligned.',
|
|
153
|
+
},
|
|
141
154
|
{
|
|
142
155
|
name: 'xstyle',
|
|
143
156
|
type: 'StyleXStyles',
|
|
@@ -147,6 +160,8 @@ export const docs = {
|
|
|
147
160
|
theming: {
|
|
148
161
|
targets: [
|
|
149
162
|
{className: 'astryx-date-range-input', visualProps: ['size', 'status']},
|
|
163
|
+
{className: 'astryx-date-range-input-toggle-icon', states: ['state']},
|
|
164
|
+
{className: 'astryx-date-range-input-clear-icon'},
|
|
150
165
|
],
|
|
151
166
|
},
|
|
152
167
|
usage: {
|
|
@@ -296,6 +311,7 @@ export const docsDense = {
|
|
|
296
311
|
placeholder: 'placeholder when empty',
|
|
297
312
|
size: 'trigger size',
|
|
298
313
|
status: 'error/warning/success status',
|
|
314
|
+
statusVariant: 'How status message is placed: attached overlaps below input; detached floats below w/ spacing; tooltip hides the box and shows it on the status icon.',
|
|
299
315
|
labelTooltip: 'tooltip via info icon at label end',
|
|
300
316
|
numberOfMonths: 'months in calendar (default 2)',
|
|
301
317
|
changeAction:
|
|
@@ -19,6 +19,9 @@ import userEvent from '@testing-library/user-event';
|
|
|
19
19
|
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
20
20
|
import {DateRangeInput} from './DateRangeInput';
|
|
21
21
|
import type {DateRange} from './DateRangeInput';
|
|
22
|
+
import {Icon} from '../Icon';
|
|
23
|
+
import {defineTheme} from '../theme/defineTheme';
|
|
24
|
+
import {generateThemeCSSFlat} from '../theme/generateThemeRules';
|
|
22
25
|
|
|
23
26
|
describe('DateRangeInput', () => {
|
|
24
27
|
it('renders with label', () => {
|
|
@@ -471,3 +474,140 @@ describe('DateRangeInput', () => {
|
|
|
471
474
|
});
|
|
472
475
|
});
|
|
473
476
|
});
|
|
477
|
+
|
|
478
|
+
describe('DateRangeInput statusVariant forwarding', () => {
|
|
479
|
+
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
480
|
+
const {container} = render(
|
|
481
|
+
<DateRangeInput
|
|
482
|
+
label="Range"
|
|
483
|
+
value={null}
|
|
484
|
+
onChange={() => {}}
|
|
485
|
+
status={{type: 'error', message: 'Required'}}
|
|
486
|
+
/>,
|
|
487
|
+
);
|
|
488
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
489
|
+
'data-variant',
|
|
490
|
+
'attached',
|
|
491
|
+
);
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
it('forwards statusVariant="detached" to the underlying Field status', () => {
|
|
495
|
+
const {container} = render(
|
|
496
|
+
<DateRangeInput
|
|
497
|
+
label="Range"
|
|
498
|
+
value={null}
|
|
499
|
+
onChange={() => {}}
|
|
500
|
+
status={{type: 'error', message: 'Required'}}
|
|
501
|
+
statusVariant="detached"
|
|
502
|
+
/>,
|
|
503
|
+
);
|
|
504
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
505
|
+
'data-variant',
|
|
506
|
+
'detached',
|
|
507
|
+
);
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
describe('DateRangeInput icon theme targets', () => {
|
|
512
|
+
const RANGE: DateRange = {start: '2026-03-15', end: '2026-03-22'};
|
|
513
|
+
|
|
514
|
+
// Resolve a glyph span (the astryx-icon element) inside a given button,
|
|
515
|
+
// independent of the theme target class.
|
|
516
|
+
const iconIn = (button: HTMLElement): HTMLElement => {
|
|
517
|
+
const icon = button.querySelector('.astryx-icon');
|
|
518
|
+
if (icon == null) {
|
|
519
|
+
throw new Error('icon not found');
|
|
520
|
+
}
|
|
521
|
+
return icon as HTMLElement;
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
it('renders astryx-date-range-input-clear-icon on the clear glyph', () => {
|
|
525
|
+
render(
|
|
526
|
+
<DateRangeInput
|
|
527
|
+
label="Range"
|
|
528
|
+
value={RANGE}
|
|
529
|
+
onChange={() => {}}
|
|
530
|
+
hasClear
|
|
531
|
+
/>,
|
|
532
|
+
);
|
|
533
|
+
// The stable target lands on the icon element itself (not the button), so a
|
|
534
|
+
// theme can restyle just this glyph (color, size, hover) via defineTheme —
|
|
535
|
+
// a button-level target could not reach the icon's own color/size.
|
|
536
|
+
const icon = iconIn(getButton('Clear Range'));
|
|
537
|
+
expect(icon).toHaveClass('astryx-date-range-input-clear-icon');
|
|
538
|
+
expect(icon).toHaveClass('astryx-icon');
|
|
539
|
+
});
|
|
540
|
+
|
|
541
|
+
it('renders astryx-date-range-input-toggle-icon on the calendar-toggle glyph, reflecting state', () => {
|
|
542
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
543
|
+
const icon = iconIn(getButton('Open calendar'));
|
|
544
|
+
expect(icon).toHaveClass('astryx-date-range-input-toggle-icon');
|
|
545
|
+
expect(icon).toHaveClass('astryx-icon');
|
|
546
|
+
// Closed by default → data-state="collapsed".
|
|
547
|
+
expect(icon).toHaveAttribute('data-state', 'collapsed');
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
it('renders the default icons (secondary color, sm size) byte-identically', () => {
|
|
551
|
+
// Pixel-identical default guard: the glyphs must carry the exact same
|
|
552
|
+
// StyleX color/size classes as a standalone secondary/sm icon. The added
|
|
553
|
+
// target class is purely additive — it changes nothing until a theme
|
|
554
|
+
// targets it.
|
|
555
|
+
render(
|
|
556
|
+
<DateRangeInput
|
|
557
|
+
label="Range"
|
|
558
|
+
value={RANGE}
|
|
559
|
+
onChange={() => {}}
|
|
560
|
+
hasClear
|
|
561
|
+
/>,
|
|
562
|
+
);
|
|
563
|
+
const clearIcon = iconIn(getButton('Clear Range'));
|
|
564
|
+
|
|
565
|
+
const {container: refContainer} = render(
|
|
566
|
+
<Icon icon="close" size="sm" color="secondary" />,
|
|
567
|
+
);
|
|
568
|
+
const refIcon = refContainer.querySelector('.astryx-icon') as HTMLElement;
|
|
569
|
+
|
|
570
|
+
const styleClasses = (el: HTMLElement) =>
|
|
571
|
+
el.className
|
|
572
|
+
.split(' ')
|
|
573
|
+
.filter(
|
|
574
|
+
c =>
|
|
575
|
+
c !== 'astryx-date-range-input-clear-icon' &&
|
|
576
|
+
c !== 'astryx-date-range-input-toggle-icon',
|
|
577
|
+
)
|
|
578
|
+
.sort();
|
|
579
|
+
|
|
580
|
+
expect(styleClasses(clearIcon)).toEqual(styleClasses(refIcon));
|
|
581
|
+
});
|
|
582
|
+
|
|
583
|
+
it('exposes the icon targets so a theme reaches icon color, size, and hover', () => {
|
|
584
|
+
// jsdom cannot resolve the @layer cascade, so the DOM-class assertions
|
|
585
|
+
// above (targets land on the icon elements) plus this generation assertion
|
|
586
|
+
// (the theme emits same-element icon rules in @layer astryx-theme) together
|
|
587
|
+
// prove the seam: a same-element theme rule wins over the icon's own
|
|
588
|
+
// base-layer color/size.
|
|
589
|
+
const theme = defineTheme({
|
|
590
|
+
name: 'date-range-input-icon-test',
|
|
591
|
+
components: {
|
|
592
|
+
'date-range-input-clear-icon': {
|
|
593
|
+
base: {
|
|
594
|
+
width: '12px',
|
|
595
|
+
height: '12px',
|
|
596
|
+
fontSize: '12px',
|
|
597
|
+
color: 'var(--color-icon-secondary)',
|
|
598
|
+
':hover': {color: 'var(--color-icon-primary)'},
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
'date-range-input-toggle-icon': {
|
|
602
|
+
base: {width: '14px', height: '14px', fontSize: '14px'},
|
|
603
|
+
},
|
|
604
|
+
},
|
|
605
|
+
});
|
|
606
|
+
const css = generateThemeCSSFlat(theme);
|
|
607
|
+
expect(css).toContain('.astryx-date-range-input-clear-icon');
|
|
608
|
+
expect(css).toContain('.astryx-date-range-input-toggle-icon');
|
|
609
|
+
expect(css).toContain(':hover');
|
|
610
|
+
expect(css).toContain('12px');
|
|
611
|
+
expect(css).toContain('14px');
|
|
612
|
+
});
|
|
613
|
+
});
|
|
@@ -25,7 +25,6 @@ import {
|
|
|
25
25
|
DATE_FORMAT_SHORT,
|
|
26
26
|
DATE_FORMAT_SHORT_WITH_YEAR,
|
|
27
27
|
} from '../utils/plainDate';
|
|
28
|
-
import type {IconName} from '../Icon';
|
|
29
28
|
import {
|
|
30
29
|
colorVars,
|
|
31
30
|
sizeVars,
|
|
@@ -38,11 +37,11 @@ import {
|
|
|
38
37
|
import {
|
|
39
38
|
Field,
|
|
40
39
|
type InputStatus,
|
|
41
|
-
type InputStatusType,
|
|
42
40
|
inputWrapperStyles,
|
|
43
41
|
inputStatusBorderStyles,
|
|
44
42
|
inputStatusHoverShadowStyles,
|
|
45
43
|
inputStatusFocusWithinStyles,
|
|
44
|
+
type FieldStatusVariant,
|
|
46
45
|
} from '../Field';
|
|
47
46
|
import {Icon} from '../Icon';
|
|
48
47
|
import {Spinner} from '../Spinner';
|
|
@@ -53,6 +52,7 @@ import {mergeProps} from '../utils';
|
|
|
53
52
|
import type {BaseProps} from '../BaseProps';
|
|
54
53
|
import type {SizeValue} from '../utils/types';
|
|
55
54
|
import {useSize} from '../SizeContext/SizeContext';
|
|
55
|
+
import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
|
|
56
56
|
import {themeProps} from '../utils/themeProps';
|
|
57
57
|
import {useTranslator} from '../i18n';
|
|
58
58
|
|
|
@@ -127,9 +127,9 @@ const styles = stylex.create({
|
|
|
127
127
|
flexDirection: 'column',
|
|
128
128
|
gap: spacingVars['--spacing-1'],
|
|
129
129
|
padding: spacingVars['--spacing-3'],
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
borderInlineEndWidth: borderVars['--border-width'],
|
|
131
|
+
borderInlineEndStyle: 'solid',
|
|
132
|
+
borderInlineEndColor: colorVars['--color-border-emphasized'],
|
|
133
133
|
minWidth: 140,
|
|
134
134
|
},
|
|
135
135
|
presetButton: {
|
|
@@ -330,6 +330,14 @@ export interface DateRangeInputProps extends Omit<
|
|
|
330
330
|
* Status indicator for the input.
|
|
331
331
|
*/
|
|
332
332
|
status?: InputStatus;
|
|
333
|
+
/**
|
|
334
|
+
* How the status message is placed relative to the input.
|
|
335
|
+
* - 'attached': message overlaps directly below the input (bordered treatment)
|
|
336
|
+
* - 'detached': message floats below as a separate element with spacing
|
|
337
|
+
* - 'tooltip': no message box; the status icon becomes a focusable info-tip button that reveals the message on hover, keyboard focus, or tap
|
|
338
|
+
* @default 'attached'
|
|
339
|
+
*/
|
|
340
|
+
statusVariant?: FieldStatusVariant;
|
|
333
341
|
|
|
334
342
|
/**
|
|
335
343
|
* Width of the field. Numbers are treated as pixels, strings are used as-is
|
|
@@ -385,6 +393,7 @@ export function DateRangeInput({
|
|
|
385
393
|
placeholder: placeholderFromProps,
|
|
386
394
|
size: sizeProp,
|
|
387
395
|
status,
|
|
396
|
+
statusVariant = 'attached',
|
|
388
397
|
labelTooltip,
|
|
389
398
|
numberOfMonths = 2,
|
|
390
399
|
width,
|
|
@@ -422,25 +431,19 @@ export function DateRangeInput({
|
|
|
422
431
|
isEnabled: showsDisabledMessage,
|
|
423
432
|
});
|
|
424
433
|
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
const statusIconColorMap: Record<
|
|
432
|
-
InputStatusType,
|
|
433
|
-
'warning' | 'error' | 'success'
|
|
434
|
-
> = {
|
|
435
|
-
warning: 'warning',
|
|
436
|
-
error: 'error',
|
|
437
|
-
success: 'success',
|
|
438
|
-
};
|
|
434
|
+
const {statusIcon, describedBy: statusTooltipDescribedBy} =
|
|
435
|
+
useInputStatusIcon({
|
|
436
|
+
status,
|
|
437
|
+
statusVariant,
|
|
438
|
+
});
|
|
439
439
|
|
|
440
440
|
const ariaDescribedBy =
|
|
441
441
|
[
|
|
442
442
|
description ? descriptionID : null,
|
|
443
|
-
status?.message ? statusMessageID : null,
|
|
443
|
+
statusVariant !== 'tooltip' && status?.message ? statusMessageID : null,
|
|
444
|
+
// The tooltip variant renders no message box; describe the input by the
|
|
445
|
+
// tooltip's content instead so the status is still announced.
|
|
446
|
+
statusTooltipDescribedBy,
|
|
444
447
|
showsDisabledMessage ? disabledMessageTooltip.describedBy : null,
|
|
445
448
|
]
|
|
446
449
|
.filter(Boolean)
|
|
@@ -529,6 +532,7 @@ export function DateRangeInput({
|
|
|
529
532
|
}
|
|
530
533
|
: undefined
|
|
531
534
|
}
|
|
535
|
+
statusVariant={statusVariant}
|
|
532
536
|
labelTooltip={labelTooltip}
|
|
533
537
|
width={width}>
|
|
534
538
|
<div
|
|
@@ -550,7 +554,9 @@ export function DateRangeInput({
|
|
|
550
554
|
sizeStyles[size],
|
|
551
555
|
isEffectivelyDisabled && inputWrapperStyles.disabled,
|
|
552
556
|
status && inputStatusBorderStyles[status.type],
|
|
553
|
-
status &&
|
|
557
|
+
status &&
|
|
558
|
+
!isEffectivelyDisabled &&
|
|
559
|
+
inputStatusHoverShadowStyles[status.type],
|
|
554
560
|
status && inputStatusFocusWithinStyles[status.type],
|
|
555
561
|
xstyle,
|
|
556
562
|
),
|
|
@@ -571,7 +577,14 @@ export function DateRangeInput({
|
|
|
571
577
|
styles.iconButton,
|
|
572
578
|
isEffectivelyDisabled && styles.iconButtonDisabled,
|
|
573
579
|
)}>
|
|
574
|
-
<Icon
|
|
580
|
+
<Icon
|
|
581
|
+
icon="calendar"
|
|
582
|
+
size="sm"
|
|
583
|
+
color="secondary"
|
|
584
|
+
{...themeProps('date-range-input-toggle-icon', {
|
|
585
|
+
state: popover.isOpen ? 'expanded' : 'collapsed',
|
|
586
|
+
})}
|
|
587
|
+
/>
|
|
575
588
|
</button>
|
|
576
589
|
<button
|
|
577
590
|
ref={ref}
|
|
@@ -604,17 +617,16 @@ export function DateRangeInput({
|
|
|
604
617
|
onClick={handleClear}
|
|
605
618
|
aria-label={t('@astryx.dateInput.clear', {label})}
|
|
606
619
|
{...stylex.props(styles.iconButton)}>
|
|
607
|
-
<Icon
|
|
620
|
+
<Icon
|
|
621
|
+
icon="close"
|
|
622
|
+
size="sm"
|
|
623
|
+
color="secondary"
|
|
624
|
+
{...themeProps('date-range-input-clear-icon')}
|
|
625
|
+
/>
|
|
608
626
|
</button>
|
|
609
627
|
)}
|
|
610
628
|
{isBusy && <Spinner size="sm" />}
|
|
611
|
-
{
|
|
612
|
-
<Icon
|
|
613
|
-
icon={statusIconMap[status.type]}
|
|
614
|
-
size="md"
|
|
615
|
-
color={statusIconColorMap[status.type]}
|
|
616
|
-
/>
|
|
617
|
-
)}
|
|
629
|
+
{statusIcon}
|
|
618
630
|
</div>
|
|
619
631
|
{popover.render(
|
|
620
632
|
<div {...stylex.props(styles.popoverLayout)}>
|
|
@@ -173,6 +173,12 @@ export const docs = {
|
|
|
173
173
|
description: 'Number of months displayed simultaneously in the calendar.',
|
|
174
174
|
default: '1',
|
|
175
175
|
},
|
|
176
|
+
{
|
|
177
|
+
name: 'width',
|
|
178
|
+
type: 'SizeValue',
|
|
179
|
+
description:
|
|
180
|
+
'Width of the field (number = pixels, string used as-is, e.g. "100%"). Sizes the whole field (label, control, and status) so they stay aligned.',
|
|
181
|
+
},
|
|
176
182
|
{
|
|
177
183
|
name: 'xstyle',
|
|
178
184
|
type: 'StyleXStyles',
|
|
@@ -183,6 +189,14 @@ export const docs = {
|
|
|
183
189
|
theming: {
|
|
184
190
|
targets: [
|
|
185
191
|
{className: 'astryx-date-time-input', visualProps: ['size', 'status']},
|
|
192
|
+
{
|
|
193
|
+
className: 'astryx-date-time-input-date-segment',
|
|
194
|
+
visualProps: ['size', 'status'],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
className: 'astryx-date-time-input-time-segment',
|
|
198
|
+
visualProps: ['size', 'status'],
|
|
199
|
+
},
|
|
186
200
|
],
|
|
187
201
|
},
|
|
188
202
|
usage: {
|
|
@@ -469,11 +483,18 @@ export const docsZh = {
|
|
|
469
483
|
description:
|
|
470
484
|
'用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。',
|
|
471
485
|
},
|
|
472
|
-
|
|
473
486
|
],
|
|
474
487
|
theming: {
|
|
475
488
|
targets: [
|
|
476
489
|
{className: 'astryx-date-time-input', visualProps: ['size', 'status']},
|
|
490
|
+
{
|
|
491
|
+
className: 'astryx-date-time-input-date-segment',
|
|
492
|
+
visualProps: ['size', 'status'],
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
className: 'astryx-date-time-input-time-segment',
|
|
496
|
+
visualProps: ['size', 'status'],
|
|
497
|
+
},
|
|
477
498
|
],
|
|
478
499
|
},
|
|
479
500
|
};
|