@astryxdesign/core 0.1.8 → 0.1.9-canary.09e9ddd
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 +53 -3
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +203 -49
- package/dist/Avatar/AvatarStatusDot.d.ts +33 -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 +208 -6
- package/dist/Breadcrumbs/index.d.ts +5 -0
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +9 -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 +30 -2
- package/dist/Calendar/dayCellUtils.js +1 -1
- 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 +24 -4
- 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 +1 -1
- 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 +18 -9
- 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 +1 -1
- 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 +9 -2
- package/dist/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +3 -1
- 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/DateInput/DateInput.d.ts +55 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +28 -2
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +3 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +18 -3
- 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/DropdownMenuCheckboxItem.d.ts +1 -2
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +1 -2
- package/dist/DropdownMenu/DropdownMenuItem.js +1 -1
- 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/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +2 -3
- 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/FieldStatus/FieldStatus.d.ts +15 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +58 -6
- package/dist/FileInput/FileInput.d.ts +9 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +42 -20
- 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 +7 -2
- package/dist/Icon/Icon.d.ts +7 -2
- package/dist/Icon/Icon.d.ts.map +1 -1
- 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.js +4 -4
- 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 +41 -12
- 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 +9 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +8 -1
- 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/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 +7 -3
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +16 -0
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +21 -8
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +19 -2
- package/dist/Stack/stack.stylex.d.ts +9 -9
- 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 +3 -2
- 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/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 +4 -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 +87 -0
- 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/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -3
- package/dist/TextArea/TextArea.d.ts +9 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +2 -0
- package/dist/TextInput/TextInput.d.ts +9 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +6 -1
- 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 +9 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +17 -4
- 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/Tokenizer/Tokenizer.d.ts +10 -3
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +18 -4
- 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 +2 -0
- package/dist/TreeList/TreeListBranches.d.ts +5 -0
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +10 -4
- package/dist/TreeList/TreeListItem.d.ts +8 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +28 -8
- 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 +2 -0
- package/dist/astryx.css +41 -31
- package/dist/astryx.umd.js +51 -51
- 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 +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -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/useListFocus.d.ts +6 -1
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +12 -4
- 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 +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -2
- package/dist/utils/plainDate.d.ts +30 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +53 -0
- package/dist/utils/types.d.ts +13 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/locales/en.json +32 -0
- package/locales/fr-FR.json +14 -0
- package/locales/pseudo.json +24 -0
- package/package.json +1 -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 +60 -3
- package/src/Avatar/Avatar.test.tsx +281 -1
- package/src/Avatar/Avatar.tsx +324 -64
- package/src/Avatar/AvatarStatusDot.doc.mjs +23 -12
- package/src/Avatar/AvatarStatusDot.test.tsx +284 -0
- package/src/Avatar/AvatarStatusDot.tsx +178 -21
- package/src/AvatarGroup/AvatarGroup.doc.mjs +2 -0
- package/src/AvatarGroup/AvatarGroup.test.tsx +125 -0
- 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 +284 -2
- package/src/Breadcrumbs/index.ts +27 -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 +193 -0
- package/src/Calendar/Calendar.tsx +38 -16
- package/src/Calendar/dayCellUtils.test.ts +5 -0
- package/src/Calendar/dayCellUtils.ts +1 -1
- 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 +34 -4
- 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 +4 -1
- 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 +25 -4
- 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.test.tsx +32 -1
- package/src/CheckboxInput/CheckboxInput.tsx +1 -1
- 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 +10 -2
- package/src/CommandPalette/CommandPalette.doc.mjs +1 -0
- package/src/CommandPalette/CommandPalette.tsx +3 -1
- 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 +193 -0
- package/src/DateInput/DateInput.doc.mjs +31 -0
- package/src/DateInput/DateInput.test.tsx +131 -0
- package/src/DateInput/DateInput.tsx +78 -3
- package/src/DateInput/index.ts +1 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +8 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +23 -0
- package/src/DateRangeInput/DateRangeInput.tsx +13 -3
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -1
- package/src/DateTimeInput/DateTimeInput.test.tsx +147 -0
- package/src/DateTimeInput/DateTimeInput.tsx +42 -18
- 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 +169 -0
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +1 -2
- package/src/DropdownMenu/DropdownMenuItem.tsx +1 -1
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +1 -2
- package/src/Field/Field.test.tsx +57 -12
- package/src/Field/Field.tsx +6 -5
- package/src/Field/FieldLabel.tsx +9 -1
- package/src/FieldStatus/FieldStatus.doc.mjs +17 -5
- package/src/FieldStatus/FieldStatus.test.tsx +150 -40
- package/src/FieldStatus/FieldStatus.tsx +63 -5
- package/src/FileInput/FileInput.doc.mjs +17 -2
- package/src/FileInput/FileInput.test.tsx +135 -12
- package/src/FileInput/FileInput.tsx +53 -28
- 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 +24 -2
- package/src/Icon/Icon.doc.mjs +3 -2
- package/src/Icon/Icon.tsx +7 -2
- 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 +4 -4
- package/src/List/List.test.tsx +9 -8
- 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 +13 -2
- package/src/MultiSelector/MultiSelector.test.tsx +195 -3
- package/src/MultiSelector/MultiSelector.tsx +65 -12
- package/src/MultiSelector/hooks.ts +17 -0
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NumberInput/NumberInput.doc.mjs +15 -0
- package/src/NumberInput/NumberInput.test.tsx +82 -7
- package/src/NumberInput/NumberInput.tsx +21 -4
- 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/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 +7 -0
- package/src/Selector/Selector.test.tsx +92 -0
- package/src/Selector/Selector.tsx +16 -2
- package/src/Selector/hooks.ts +17 -0
- package/src/SideNav/SideNav.test.tsx +119 -3
- package/src/SideNav/SideNavCollapseButton.tsx +6 -1
- package/src/SideNav/SideNavHeading.tsx +24 -8
- package/src/SideNav/SideNavItem.tsx +5 -1
- package/src/Slider/Slider.test.tsx +75 -2
- package/src/Slider/Slider.tsx +21 -5
- package/src/Switch/Switch.test.tsx +32 -1
- package/src/TabList/Tab.tsx +2 -2
- package/src/TabList/TabMenu.tsx +2 -2
- package/src/Table/BaseTable.tsx +3 -5
- 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 +6 -2
- 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 +16 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +19 -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 +128 -1
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +104 -0
- package/src/Table/plugins/tree/useTableTreeState.tsx +46 -2
- 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 +15 -0
- package/src/TextArea/TextArea.test.tsx +32 -1
- package/src/TextArea/TextArea.tsx +10 -0
- package/src/TextInput/TextInput.doc.mjs +15 -0
- package/src/TextInput/TextInput.test.tsx +44 -0
- package/src/TextInput/TextInput.tsx +13 -1
- 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 +15 -0
- package/src/TimeInput/TimeInput.test.tsx +99 -1
- package/src/TimeInput/TimeInput.tsx +29 -6
- 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/Tokenizer/Tokenizer.doc.mjs +30 -1
- package/src/Tokenizer/Tokenizer.test.tsx +206 -2
- package/src/Tokenizer/Tokenizer.tsx +26 -4
- 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 +22 -0
- package/src/TreeList/TreeList.test.tsx +232 -0
- package/src/TreeList/TreeList.tsx +18 -2
- package/src/TreeList/TreeListBranches.tsx +16 -2
- package/src/TreeList/TreeListItem.tsx +52 -12
- 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 +7 -0
- package/src/Typeahead/Typeahead.test.tsx +50 -0
- package/src/Typeahead/Typeahead.tsx +10 -0
- package/src/authoring/doc.ts +1 -3
- 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 +2 -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/useListFocus.doc.mjs +3 -3
- package/src/hooks/useListFocus.test.tsx +67 -1
- package/src/hooks/useListFocus.ts +21 -5
- 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 +6 -0
- package/src/utils/plainDate.test.ts +22 -0
- package/src/utils/plainDate.ts +61 -0
- package/src/utils/types.ts +14 -0
|
@@ -834,4 +834,135 @@ describe('DateInput', () => {
|
|
|
834
834
|
expect(input).not.toHaveAttribute('aria-disabled');
|
|
835
835
|
});
|
|
836
836
|
});
|
|
837
|
+
|
|
838
|
+
describe('format', () => {
|
|
839
|
+
it('defaults to the long-month date_long shape', () => {
|
|
840
|
+
// Non-breaking default: byte-identical to the historical hardcoded
|
|
841
|
+
// DATE_FORMAT_LONG rendering. `format` now defaults to 'date_long'.
|
|
842
|
+
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
843
|
+
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
844
|
+
});
|
|
845
|
+
|
|
846
|
+
it('renders the long-month shape for explicit format="date_long"', () => {
|
|
847
|
+
// Explicit date_long is identical to the unset default above and to the
|
|
848
|
+
// old hardcoded long-month output — real named parity with Timestamp.
|
|
849
|
+
render(
|
|
850
|
+
<DateInput
|
|
851
|
+
label="Date"
|
|
852
|
+
value="2026-01-25"
|
|
853
|
+
onChange={() => {}}
|
|
854
|
+
format="date_long"
|
|
855
|
+
/>,
|
|
856
|
+
);
|
|
857
|
+
expect(screen.getByDisplayValue('January 25, 2026')).toBeInTheDocument();
|
|
858
|
+
});
|
|
859
|
+
|
|
860
|
+
it('renders the short-month shape for format="date"', () => {
|
|
861
|
+
// Same literal + same shape as <Timestamp format="date" />.
|
|
862
|
+
render(
|
|
863
|
+
<DateInput
|
|
864
|
+
label="Date"
|
|
865
|
+
value="2026-01-25"
|
|
866
|
+
onChange={() => {}}
|
|
867
|
+
format="date"
|
|
868
|
+
/>,
|
|
869
|
+
);
|
|
870
|
+
expect(screen.getByDisplayValue('Jan 25, 2026')).toBeInTheDocument();
|
|
871
|
+
});
|
|
872
|
+
|
|
873
|
+
it('renders the ISO shape for format="system_date"', () => {
|
|
874
|
+
render(
|
|
875
|
+
<DateInput
|
|
876
|
+
label="Date"
|
|
877
|
+
value="2026-01-25"
|
|
878
|
+
onChange={() => {}}
|
|
879
|
+
format="system_date"
|
|
880
|
+
/>,
|
|
881
|
+
);
|
|
882
|
+
expect(screen.getByDisplayValue('2026-01-25')).toBeInTheDocument();
|
|
883
|
+
});
|
|
884
|
+
|
|
885
|
+
it('renders a weekday prefix for format="date_weekday"', () => {
|
|
886
|
+
render(
|
|
887
|
+
<DateInput
|
|
888
|
+
label="Date"
|
|
889
|
+
value="2026-01-25"
|
|
890
|
+
onChange={() => {}}
|
|
891
|
+
format="date_weekday"
|
|
892
|
+
/>,
|
|
893
|
+
);
|
|
894
|
+
// 2026-01-25 is a Sunday; assert the weekday-prefixed shape without
|
|
895
|
+
// over-fitting locale punctuation.
|
|
896
|
+
const input = screen.getByRole('combobox');
|
|
897
|
+
expect(input).toHaveValue('Sun, Jan 25, 2026');
|
|
898
|
+
});
|
|
899
|
+
|
|
900
|
+
it('supports a custom function format', () => {
|
|
901
|
+
render(
|
|
902
|
+
<DateInput
|
|
903
|
+
label="Date"
|
|
904
|
+
value="2026-01-25"
|
|
905
|
+
onChange={() => {}}
|
|
906
|
+
format={iso => `custom:${iso}`}
|
|
907
|
+
/>,
|
|
908
|
+
);
|
|
909
|
+
expect(screen.getByDisplayValue('custom:2026-01-25')).toBeInTheDocument();
|
|
910
|
+
});
|
|
911
|
+
|
|
912
|
+
it('does not apply format to in-progress typed input', async () => {
|
|
913
|
+
const user = userEvent.setup();
|
|
914
|
+
render(
|
|
915
|
+
<DateInput label="Date" onChange={() => {}} format="system_date" />,
|
|
916
|
+
);
|
|
917
|
+
const input = screen.getByRole('combobox');
|
|
918
|
+
await user.click(input);
|
|
919
|
+
await user.type(input, 'January 25');
|
|
920
|
+
// While typing, the raw text is shown verbatim — not reformatted.
|
|
921
|
+
expect(input).toHaveValue('January 25');
|
|
922
|
+
});
|
|
923
|
+
|
|
924
|
+
it('recomputes the display in format on external value change', () => {
|
|
925
|
+
const {rerender} = render(
|
|
926
|
+
<DateInput
|
|
927
|
+
label="Date"
|
|
928
|
+
value="2026-01-25"
|
|
929
|
+
onChange={() => {}}
|
|
930
|
+
format="date"
|
|
931
|
+
/>,
|
|
932
|
+
);
|
|
933
|
+
expect(screen.getByDisplayValue('Jan 25, 2026')).toBeInTheDocument();
|
|
934
|
+
rerender(
|
|
935
|
+
<DateInput
|
|
936
|
+
label="Date"
|
|
937
|
+
value="2026-03-10"
|
|
938
|
+
onChange={() => {}}
|
|
939
|
+
format="date"
|
|
940
|
+
/>,
|
|
941
|
+
);
|
|
942
|
+
expect(screen.getByDisplayValue('Mar 10, 2026')).toBeInTheDocument();
|
|
943
|
+
});
|
|
944
|
+
});
|
|
945
|
+
});
|
|
946
|
+
|
|
947
|
+
|
|
948
|
+
describe('DateInput statusVariant forwarding', () => {
|
|
949
|
+
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
950
|
+
const {container} = render(
|
|
951
|
+
<DateInput label="Date" onChange={() => {}} status={{type: 'error', message: 'Bad date'}} />,
|
|
952
|
+
);
|
|
953
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
954
|
+
'data-variant',
|
|
955
|
+
'attached',
|
|
956
|
+
);
|
|
957
|
+
});
|
|
958
|
+
|
|
959
|
+
it('forwards statusVariant="detached" to the underlying Field status', () => {
|
|
960
|
+
const {container} = render(
|
|
961
|
+
<DateInput label="Date" onChange={() => {}} status={{type: 'error', message: 'Bad date'}} statusVariant="detached" />,
|
|
962
|
+
);
|
|
963
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
964
|
+
'data-variant',
|
|
965
|
+
'detached',
|
|
966
|
+
);
|
|
967
|
+
});
|
|
837
968
|
});
|
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
inputStatusBorderStyles,
|
|
43
43
|
inputStatusHoverShadowStyles,
|
|
44
44
|
inputStatusFocusWithinStyles,
|
|
45
|
+
type FieldStatusVariant,
|
|
45
46
|
} from '../Field';
|
|
46
47
|
import {Icon} from '../Icon';
|
|
47
48
|
import {VisuallyHidden} from '../VisuallyHidden';
|
|
@@ -57,9 +58,9 @@ import {getInputARIA, parseDateInput} from '../utils';
|
|
|
57
58
|
import {
|
|
58
59
|
plainDateFromISO,
|
|
59
60
|
plainDateToISO,
|
|
60
|
-
|
|
61
|
-
DATE_FORMAT_LONG,
|
|
61
|
+
formatSharedDate,
|
|
62
62
|
} from '../utils/plainDate';
|
|
63
|
+
import type {TimestampFormat} from '../Timestamp';
|
|
63
64
|
|
|
64
65
|
const styles = stylex.create({
|
|
65
66
|
iconButton: {
|
|
@@ -127,6 +128,25 @@ const sizeStyles = stylex.create({
|
|
|
127
128
|
|
|
128
129
|
export type DateInputSize = keyof typeof sizeStyles;
|
|
129
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Named display formats for a committed date value. These are the date-only
|
|
133
|
+
* members of Timestamp's `format` vocabulary — reused verbatim (via
|
|
134
|
+
* `Extract`) so the same literal renders the same date shape in both
|
|
135
|
+
* `Timestamp` and `DateInput`:
|
|
136
|
+
* - `'date'`: locale short-month date, e.g. "Mar 21, 2026"
|
|
137
|
+
* - `'date_long'`: locale long-month date, e.g. "March 21, 2026" (the default)
|
|
138
|
+
* - `'date_weekday'`: short weekday + date, e.g. "Wed, Mar 21, 2026"
|
|
139
|
+
* - `'system_date'`: ISO 8601 calendar date, e.g. "2026-03-21"
|
|
140
|
+
*
|
|
141
|
+
* Because `DateInputFormat` is `Extract`ed from `TimestampFormat`, the two
|
|
142
|
+
* types stay in compile-time lockstep: renaming or removing one of these
|
|
143
|
+
* members from `TimestampFormat` breaks this type at build time.
|
|
144
|
+
*/
|
|
145
|
+
export type DateInputFormat = Extract<
|
|
146
|
+
TimestampFormat,
|
|
147
|
+
'date' | 'date_long' | 'date_weekday' | 'system_date'
|
|
148
|
+
>;
|
|
149
|
+
|
|
130
150
|
// Re-export shared types for convenience
|
|
131
151
|
|
|
132
152
|
export type {
|
|
@@ -259,6 +279,13 @@ export interface DateInputProps extends Omit<
|
|
|
259
279
|
* If message is provided, displays below the input.
|
|
260
280
|
*/
|
|
261
281
|
status?: InputStatus;
|
|
282
|
+
/**
|
|
283
|
+
* How the status message is placed relative to the input.
|
|
284
|
+
* - 'attached': message overlaps directly below the input (bordered treatment)
|
|
285
|
+
* - 'detached': message floats below as a separate element with spacing
|
|
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,
|
|
@@ -404,12 +464,26 @@ export function DateInput({
|
|
|
404
464
|
}
|
|
405
465
|
}
|
|
406
466
|
|
|
467
|
+
// Format a committed ISO value for display. The default `date_long` renders
|
|
468
|
+
// the long-month shape (byte-identical to the historical hardcoded
|
|
469
|
+
// DATE_FORMAT_LONG rendering, so still non-breaking); a function is called
|
|
470
|
+
// with the ISO value; every other named member reuses Timestamp's shared
|
|
471
|
+
// date mapping. Applies ONLY to the committed value, never to in-progress
|
|
472
|
+
// typed input.
|
|
473
|
+
const formatCommittedValue = useCallback(
|
|
474
|
+
(iso: ISODateString): string =>
|
|
475
|
+
typeof format === 'function'
|
|
476
|
+
? format(iso)
|
|
477
|
+
: formatSharedDate(plainDateFromISO(iso), format),
|
|
478
|
+
[format],
|
|
479
|
+
);
|
|
480
|
+
|
|
407
481
|
// Display value: pending input if typing, otherwise formatted value
|
|
408
482
|
const displayValue =
|
|
409
483
|
pendingInput !== null
|
|
410
484
|
? pendingInput
|
|
411
485
|
: optimisticValue && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue)
|
|
412
|
-
?
|
|
486
|
+
? formatCommittedValue(optimisticValue)
|
|
413
487
|
: '';
|
|
414
488
|
|
|
415
489
|
// Check if current input is valid (for styling purposes)
|
|
@@ -699,6 +773,7 @@ export function DateInput({
|
|
|
699
773
|
}
|
|
700
774
|
: undefined
|
|
701
775
|
}
|
|
776
|
+
statusVariant={statusVariant}
|
|
702
777
|
labelTooltip={labelTooltip}
|
|
703
778
|
width={width}>
|
|
704
779
|
{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'",
|
|
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.',
|
|
135
|
+
default: "'attached'",
|
|
136
|
+
},
|
|
130
137
|
{
|
|
131
138
|
name: 'labelTooltip',
|
|
132
139
|
type: 'string',
|
|
@@ -296,6 +303,7 @@ export const docsDense = {
|
|
|
296
303
|
placeholder: 'placeholder when empty',
|
|
297
304
|
size: 'trigger size',
|
|
298
305
|
status: 'error/warning/success status',
|
|
306
|
+
statusVariant: 'How status message is placed: attached overlaps below input; detached floats below w/ spacing.',
|
|
299
307
|
labelTooltip: 'tooltip via info icon at label end',
|
|
300
308
|
numberOfMonths: 'months in calendar (default 2)',
|
|
301
309
|
changeAction:
|
|
@@ -471,3 +471,26 @@ describe('DateRangeInput', () => {
|
|
|
471
471
|
});
|
|
472
472
|
});
|
|
473
473
|
});
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
describe('DateRangeInput statusVariant forwarding', () => {
|
|
477
|
+
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
478
|
+
const {container} = render(
|
|
479
|
+
<DateRangeInput label="Range" value={null} onChange={() => {}} status={{type: 'error', message: 'Required'}} />,
|
|
480
|
+
);
|
|
481
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
482
|
+
'data-variant',
|
|
483
|
+
'attached',
|
|
484
|
+
);
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
it('forwards statusVariant="detached" to the underlying Field status', () => {
|
|
488
|
+
const {container} = render(
|
|
489
|
+
<DateRangeInput label="Range" value={null} onChange={() => {}} status={{type: 'error', message: 'Required'}} statusVariant="detached" />,
|
|
490
|
+
);
|
|
491
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
492
|
+
'data-variant',
|
|
493
|
+
'detached',
|
|
494
|
+
);
|
|
495
|
+
});
|
|
496
|
+
});
|
|
@@ -43,6 +43,7 @@ import {
|
|
|
43
43
|
inputStatusBorderStyles,
|
|
44
44
|
inputStatusHoverShadowStyles,
|
|
45
45
|
inputStatusFocusWithinStyles,
|
|
46
|
+
type FieldStatusVariant,
|
|
46
47
|
} from '../Field';
|
|
47
48
|
import {Icon} from '../Icon';
|
|
48
49
|
import {Spinner} from '../Spinner';
|
|
@@ -127,9 +128,9 @@ const styles = stylex.create({
|
|
|
127
128
|
flexDirection: 'column',
|
|
128
129
|
gap: spacingVars['--spacing-1'],
|
|
129
130
|
padding: spacingVars['--spacing-3'],
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
borderInlineEndWidth: borderVars['--border-width'],
|
|
132
|
+
borderInlineEndStyle: 'solid',
|
|
133
|
+
borderInlineEndColor: colorVars['--color-border-emphasized'],
|
|
133
134
|
minWidth: 140,
|
|
134
135
|
},
|
|
135
136
|
presetButton: {
|
|
@@ -330,6 +331,13 @@ export interface DateRangeInputProps extends Omit<
|
|
|
330
331
|
* Status indicator for the input.
|
|
331
332
|
*/
|
|
332
333
|
status?: InputStatus;
|
|
334
|
+
/**
|
|
335
|
+
* How the status message is placed relative to the input.
|
|
336
|
+
* - 'attached': message overlaps directly below the input (bordered treatment)
|
|
337
|
+
* - 'detached': message floats below as a separate element with spacing
|
|
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,
|
|
@@ -529,6 +538,7 @@ export function DateRangeInput({
|
|
|
529
538
|
}
|
|
530
539
|
: undefined
|
|
531
540
|
}
|
|
541
|
+
statusVariant={statusVariant}
|
|
532
542
|
labelTooltip={labelTooltip}
|
|
533
543
|
width={width}>
|
|
534
544
|
<div
|
|
@@ -183,6 +183,14 @@ export const docs = {
|
|
|
183
183
|
theming: {
|
|
184
184
|
targets: [
|
|
185
185
|
{className: 'astryx-date-time-input', visualProps: ['size', 'status']},
|
|
186
|
+
{
|
|
187
|
+
className: 'astryx-date-time-input-date-segment',
|
|
188
|
+
visualProps: ['size', 'status'],
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
className: 'astryx-date-time-input-time-segment',
|
|
192
|
+
visualProps: ['size', 'status'],
|
|
193
|
+
},
|
|
186
194
|
],
|
|
187
195
|
},
|
|
188
196
|
usage: {
|
|
@@ -469,11 +477,18 @@ export const docsZh = {
|
|
|
469
477
|
description:
|
|
470
478
|
'用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。',
|
|
471
479
|
},
|
|
472
|
-
|
|
473
480
|
],
|
|
474
481
|
theming: {
|
|
475
482
|
targets: [
|
|
476
483
|
{className: 'astryx-date-time-input', visualProps: ['size', 'status']},
|
|
484
|
+
{
|
|
485
|
+
className: 'astryx-date-time-input-date-segment',
|
|
486
|
+
visualProps: ['size', 'status'],
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
className: 'astryx-date-time-input-time-segment',
|
|
490
|
+
visualProps: ['size', 'status'],
|
|
491
|
+
},
|
|
477
492
|
],
|
|
478
493
|
},
|
|
479
494
|
};
|
|
@@ -15,6 +15,8 @@ import userEvent from '@testing-library/user-event';
|
|
|
15
15
|
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
16
16
|
import {DateTimeInput} from './DateTimeInput';
|
|
17
17
|
import type {ISODateTimeString} from './DateTimeInput';
|
|
18
|
+
import {defineTheme} from '../theme/defineTheme';
|
|
19
|
+
import {generateThemeCSSFlat} from '../theme/generateThemeRules';
|
|
18
20
|
|
|
19
21
|
describe('DateTimeInput', () => {
|
|
20
22
|
it('renders with label', () => {
|
|
@@ -185,6 +187,41 @@ describe('DateTimeInput', () => {
|
|
|
185
187
|
);
|
|
186
188
|
});
|
|
187
189
|
|
|
190
|
+
it('opens the calendar popover on ArrowDown (keyboard, forms-13)', () => {
|
|
191
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
192
|
+
const input = screen.getByRole('combobox');
|
|
193
|
+
input.focus();
|
|
194
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
195
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
196
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
197
|
+
// skipAutoFocus keeps focus in the input, per the APG date-picker pattern
|
|
198
|
+
expect(input).toHaveFocus();
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('opens the calendar popover on Alt+ArrowDown (keyboard, forms-13)', () => {
|
|
202
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
203
|
+
const input = screen.getByRole('combobox');
|
|
204
|
+
fireEvent.keyDown(input, {key: 'ArrowDown', altKey: true});
|
|
205
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it('does not open on ArrowDown when disabled', () => {
|
|
209
|
+
render(<DateTimeInput label="Meeting" isDisabled onChange={() => {}} />);
|
|
210
|
+
const input = screen.getByRole('combobox');
|
|
211
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
212
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('does not re-trigger on ArrowDown when the calendar is already open', () => {
|
|
216
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
217
|
+
const input = screen.getByRole('combobox');
|
|
218
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
219
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
220
|
+
// A second ArrowDown is a no-op: the calendar stays open
|
|
221
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
222
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
223
|
+
});
|
|
224
|
+
|
|
188
225
|
it('calendar button is focusable and clickable', () => {
|
|
189
226
|
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
190
227
|
const button = getButton('Open calendar');
|
|
@@ -779,4 +816,114 @@ describe('DateTimeInput', () => {
|
|
|
779
816
|
expect(onChange.mock.calls[0][0]).toContain('14:31');
|
|
780
817
|
});
|
|
781
818
|
});
|
|
819
|
+
// ===========================================================================
|
|
820
|
+
// Segment theme targets (#4075)
|
|
821
|
+
// ===========================================================================
|
|
822
|
+
|
|
823
|
+
describe('segment theme targets', () => {
|
|
824
|
+
// The root only publishes `astryx-date-time-input`; the date and time
|
|
825
|
+
// wrappers were anonymous nodes carrying hashed atomic classes only, so a
|
|
826
|
+
// theme that restyles input geometry through the text-input/date-input/
|
|
827
|
+
// time-input targets could not reach them and DateTimeInput rendered
|
|
828
|
+
// shorter than every other input under that theme.
|
|
829
|
+
|
|
830
|
+
it('renders the date segment target on the date wrapper', () => {
|
|
831
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
832
|
+
const wrapper = screen
|
|
833
|
+
.getByLabelText('Meeting')
|
|
834
|
+
.closest('.astryx-date-time-input-date-segment');
|
|
835
|
+
|
|
836
|
+
expect(wrapper).not.toBeNull();
|
|
837
|
+
// The wrapper is the input's own container, not an ancestor further up.
|
|
838
|
+
expect(wrapper).toBe(screen.getByLabelText('Meeting').parentElement);
|
|
839
|
+
});
|
|
840
|
+
|
|
841
|
+
it('renders the time segment target on the time wrapper', () => {
|
|
842
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
843
|
+
const wrapper = screen
|
|
844
|
+
.getByLabelText('Meeting time')
|
|
845
|
+
.closest('.astryx-date-time-input-time-segment');
|
|
846
|
+
|
|
847
|
+
expect(wrapper).not.toBeNull();
|
|
848
|
+
expect(wrapper).toBe(screen.getByLabelText('Meeting time').parentElement);
|
|
849
|
+
});
|
|
850
|
+
|
|
851
|
+
it('reflects size on both segments so themes can restyle geometry', () => {
|
|
852
|
+
render(<DateTimeInput label="Meeting" size="lg" onChange={() => {}} />);
|
|
853
|
+
|
|
854
|
+
const date = screen
|
|
855
|
+
.getByLabelText('Meeting')
|
|
856
|
+
.closest('.astryx-date-time-input-date-segment');
|
|
857
|
+
const time = screen
|
|
858
|
+
.getByLabelText('Meeting time')
|
|
859
|
+
.closest('.astryx-date-time-input-time-segment');
|
|
860
|
+
|
|
861
|
+
expect(date).toHaveAttribute('data-size', 'lg');
|
|
862
|
+
expect(date).toHaveClass('lg');
|
|
863
|
+
expect(time).toHaveAttribute('data-size', 'lg');
|
|
864
|
+
expect(time).toHaveClass('lg');
|
|
865
|
+
});
|
|
866
|
+
|
|
867
|
+
it('reflects status on both segments, mirroring the root', () => {
|
|
868
|
+
render(
|
|
869
|
+
<DateTimeInput
|
|
870
|
+
label="Meeting"
|
|
871
|
+
status={{type: 'error', message: 'Required'}}
|
|
872
|
+
onChange={() => {}}
|
|
873
|
+
/>,
|
|
874
|
+
);
|
|
875
|
+
|
|
876
|
+
const date = screen
|
|
877
|
+
.getByLabelText('Meeting')
|
|
878
|
+
.closest('.astryx-date-time-input-date-segment');
|
|
879
|
+
const time = screen
|
|
880
|
+
.getByLabelText('Meeting time')
|
|
881
|
+
.closest('.astryx-date-time-input-time-segment');
|
|
882
|
+
|
|
883
|
+
expect(date).toHaveAttribute('data-status', 'error');
|
|
884
|
+
expect(time).toHaveAttribute('data-status', 'error');
|
|
885
|
+
});
|
|
886
|
+
|
|
887
|
+
it('omits data-status when there is no status, like the root does', () => {
|
|
888
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
889
|
+
|
|
890
|
+
const date = screen
|
|
891
|
+
.getByLabelText('Meeting')
|
|
892
|
+
.closest('.astryx-date-time-input-date-segment');
|
|
893
|
+
|
|
894
|
+
expect(date).not.toHaveAttribute('data-status');
|
|
895
|
+
});
|
|
896
|
+
|
|
897
|
+
it('keeps the root target intact', () => {
|
|
898
|
+
const {container} = render(
|
|
899
|
+
<DateTimeInput label="Meeting" onChange={() => {}} />,
|
|
900
|
+
);
|
|
901
|
+
// Additive change — the existing root target still renders.
|
|
902
|
+
expect(container.querySelector('.astryx-date-time-input')).not.toBeNull();
|
|
903
|
+
});
|
|
904
|
+
|
|
905
|
+
it('exposes both segments as themeable defineTheme targets', () => {
|
|
906
|
+
// jsdom cannot resolve the @layer cascade, so the generated CSS is what
|
|
907
|
+
// proves a theme can actually reach these nodes.
|
|
908
|
+
const theme = defineTheme({
|
|
909
|
+
name: 'date-time-input-segments-test',
|
|
910
|
+
components: {
|
|
911
|
+
'date-time-input-date-segment': {
|
|
912
|
+
base: {blockSize: 'var(--size-element-lg)'},
|
|
913
|
+
lg: {paddingInline: 'var(--spacing-4)'},
|
|
914
|
+
},
|
|
915
|
+
'date-time-input-time-segment': {
|
|
916
|
+
base: {blockSize: 'var(--size-element-lg)'},
|
|
917
|
+
},
|
|
918
|
+
},
|
|
919
|
+
});
|
|
920
|
+
const css = generateThemeCSSFlat(theme);
|
|
921
|
+
|
|
922
|
+
expect(css).toContain('.astryx-date-time-input-date-segment {');
|
|
923
|
+
expect(css).toContain('.astryx-date-time-input-date-segment.lg');
|
|
924
|
+
expect(css).toContain('.astryx-date-time-input-time-segment {');
|
|
925
|
+
expect(css).toContain('block-size: var(--size-element-lg)');
|
|
926
|
+
expect(css).toContain('padding-inline: var(--spacing-4)');
|
|
927
|
+
});
|
|
928
|
+
});
|
|
782
929
|
});
|
|
@@ -719,12 +719,22 @@ export function DateTimeInput({
|
|
|
719
719
|
if (e.key === 'Escape' && popover.isOpen) {
|
|
720
720
|
e.preventDefault();
|
|
721
721
|
popover.hide();
|
|
722
|
+
} else if (
|
|
723
|
+
(e.key === 'ArrowDown' || (e.altKey && e.key === 'ArrowDown')) &&
|
|
724
|
+
!popover.isOpen
|
|
725
|
+
) {
|
|
726
|
+
// APG combobox: ArrowDown (and Alt+ArrowDown) opens the calendar
|
|
727
|
+
// popover from the keyboard, keeping focus in the input (forms-13).
|
|
728
|
+
e.preventDefault();
|
|
729
|
+
if (!isEffectivelyDisabled) {
|
|
730
|
+
popover.show({skipAutoFocus: true});
|
|
731
|
+
}
|
|
722
732
|
} else if (e.key === 'Enter') {
|
|
723
733
|
e.preventDefault();
|
|
724
734
|
commitDatePendingInput();
|
|
725
735
|
}
|
|
726
736
|
},
|
|
727
|
-
[popover, commitDatePendingInput],
|
|
737
|
+
[popover, commitDatePendingInput, isEffectivelyDisabled],
|
|
728
738
|
);
|
|
729
739
|
|
|
730
740
|
// --- Time handlers ---
|
|
@@ -880,14 +890,20 @@ export function DateTimeInput({
|
|
|
880
890
|
{/* Date input */}
|
|
881
891
|
<div
|
|
882
892
|
ref={popover.triggerRef}
|
|
883
|
-
{...
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
893
|
+
{...mergeProps(
|
|
894
|
+
themeProps('date-time-input-date-segment', {
|
|
895
|
+
size,
|
|
896
|
+
status: status?.type ?? null,
|
|
897
|
+
}),
|
|
898
|
+
stylex.props(
|
|
899
|
+
inputWrapperStyles.base,
|
|
900
|
+
sizeStyles[size],
|
|
901
|
+
styles.dateWrapper,
|
|
902
|
+
isEffectivelyDisabled && inputWrapperStyles.disabled,
|
|
903
|
+
status && inputStatusBorderStyles[status.type],
|
|
904
|
+
status && inputStatusHoverShadowStyles[status.type],
|
|
905
|
+
status && inputStatusFocusWithinStyles[status.type],
|
|
906
|
+
),
|
|
891
907
|
)}>
|
|
892
908
|
<button
|
|
893
909
|
type="button"
|
|
@@ -972,14 +988,20 @@ export function DateTimeInput({
|
|
|
972
988
|
ref={timeContainerRef}
|
|
973
989
|
onClick={handleTimeWrapperClick}
|
|
974
990
|
onMouseUp={handleTimeWrapperMouseUp}
|
|
975
|
-
{...
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
991
|
+
{...mergeProps(
|
|
992
|
+
themeProps('date-time-input-time-segment', {
|
|
993
|
+
size,
|
|
994
|
+
status: status?.type ?? null,
|
|
995
|
+
}),
|
|
996
|
+
stylex.props(
|
|
997
|
+
inputWrapperStyles.base,
|
|
998
|
+
sizeStyles[size],
|
|
999
|
+
styles.timeWrapper,
|
|
1000
|
+
isEffectivelyDisabled && inputWrapperStyles.disabled,
|
|
1001
|
+
status && inputStatusBorderStyles[status.type],
|
|
1002
|
+
status && inputStatusHoverShadowStyles[status.type],
|
|
1003
|
+
status && inputStatusFocusWithinStyles[status.type],
|
|
1004
|
+
),
|
|
983
1005
|
)}>
|
|
984
1006
|
<div {...stylex.props(styles.icon)}>
|
|
985
1007
|
<Icon icon="clock" size="sm" color="secondary" />
|
|
@@ -1000,7 +1022,9 @@ export function DateTimeInput({
|
|
|
1000
1022
|
disabled={isEffectivelyDisabled && !showsDisabledMessage}
|
|
1001
1023
|
aria-disabled={showsDisabledMessage ? 'true' : undefined}
|
|
1002
1024
|
readOnly={showsDisabledMessage || undefined}
|
|
1003
|
-
aria-label={
|
|
1025
|
+
aria-label={
|
|
1026
|
+
timeLabel ?? t('@astryx.dateTimeInput.timeSuffix', {label})
|
|
1027
|
+
}
|
|
1004
1028
|
aria-describedby={ariaDescribedBy}
|
|
1005
1029
|
aria-required={isRequired === true ? 'true' : undefined}
|
|
1006
1030
|
aria-invalid={
|