@astryxdesign/core 0.3.0 → 0.4.0-canary.3112e99
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 +156 -0
- package/dist/AlertDialog/AlertDialog.d.ts +10 -2
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +22 -3
- package/dist/AppShell/AppShell.d.ts +2 -2
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +40 -9
- package/dist/AspectRatio/AspectRatio.d.ts +13 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +9 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +33 -20
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
- package/dist/Banner/Banner.d.ts +3 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -17
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
- package/dist/Breadcrumbs/index.d.ts +2 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +1 -0
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +12 -16
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +2 -1
- package/dist/Calendar/styles.d.ts +0 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +0 -2
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -12
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +2 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +3 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +4 -3
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +17 -17
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -6
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +36 -125
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -11
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +84 -67
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +35 -15
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +6 -3
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +32 -31
- package/dist/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +1 -1
- package/dist/ContextMenu/index.d.ts +2 -1
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +1 -0
- package/dist/DateInput/DateInput.d.ts +9 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +47 -33
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +55 -32
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +54 -30
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +62 -20
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
- package/dist/DropdownMenu/index.d.ts +2 -1
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +4 -0
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +35 -27
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +9 -5
- package/dist/Field/InputClearButton.d.ts +16 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +15 -4
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +21 -10
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -19
- package/dist/Indicator/CheckIndicator.d.ts +25 -0
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckIndicator.js +155 -0
- package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckboxIndicator.js +173 -0
- package/dist/Indicator/RadioIndicator.d.ts +23 -0
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
- package/dist/Indicator/RadioIndicator.js +137 -0
- package/dist/Indicator/index.d.ts +24 -0
- package/dist/Indicator/index.d.ts.map +1 -0
- package/dist/Indicator/index.js +26 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
- package/dist/Indicator/indicator.markers.stylex.js +21 -0
- package/dist/Indicator/indicatorRegistry.d.ts +71 -0
- package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
- package/dist/Indicator/indicatorRegistry.js +93 -0
- package/dist/Indicator/types.d.ts +177 -0
- package/dist/Indicator/types.d.ts.map +1 -0
- package/dist/Indicator/types.js +1 -0
- package/dist/Indicator/useIndicator.d.ts +18 -0
- package/dist/Indicator/useIndicator.d.ts.map +1 -0
- package/dist/Indicator/useIndicator.js +30 -0
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -8
- package/dist/Layer/useLayer.d.ts +14 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +25 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +80 -103
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +4 -5
- package/dist/MobileNav/MobileNav.js +8 -8
- package/dist/MoreMenu/MoreMenu.d.ts +14 -1
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts +8 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +119 -95
- package/dist/NumberInput/NumberInput.d.ts +27 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +230 -42
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +61 -63
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -8
- package/dist/Popover/usePopover.d.ts +15 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
- package/dist/ProgressBar/ProgressBar.d.ts +11 -4
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +95 -6
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +29 -84
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +2 -3
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +3 -11
- package/dist/Selector/Selector.d.ts +12 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +222 -111
- package/dist/Selector/hooks.d.ts +18 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +57 -40
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +29 -14
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +56 -20
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +28 -22
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +2 -6
- package/dist/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +14 -13
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +2 -3
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +41 -19
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +8 -0
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +4 -2
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
- package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/index.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +2 -1
- package/dist/Table/types.d.ts +11 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -6
- package/dist/TextInput/TextInput.d.ts +10 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +13 -19
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +32 -26
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +14 -17
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -3
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- package/dist/Timestamp/formatInstant.d.ts +11 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +3 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -11
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +4 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -19
- package/dist/TopNav/TopNav.d.ts.map +1 -1
- package/dist/TopNav/TopNav.js +6 -5
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +54 -16
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -9
- package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +146 -60
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +83 -38
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +13 -0
- package/dist/TreeList/TreeListBranches.d.ts +1 -1
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +14 -4
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +57 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -8
- package/dist/astryx.css +84 -96
- package/dist/astryx.umd.js +56 -56
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.stylex.d.ts +61 -0
- package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.stylex.js +63 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useClipboard.d.ts +59 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +106 -0
- package/dist/hooks/useContainerReveal.d.ts +14 -8
- package/dist/hooks/useContainerReveal.d.ts.map +1 -1
- package/dist/hooks/useContainerReveal.js +28 -69
- package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
- package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
- package/dist/hooks/useIndicatorFocusRing.js +96 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +17 -4
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +12 -2
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +33 -18
- package/dist/hooks/useStreamingText.d.ts +18 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +47 -7
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +9 -3
- package/dist/hooks/useTypeahead.d.ts +3 -2
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +19 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/defineTheme.d.ts +18 -2
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +10 -1
- package/dist/theme/derivedVarRegistry.d.ts +8 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +14 -13
- package/dist/theme/expandColorScale.d.ts +3 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +17 -7
- package/dist/theme/expandTypeScale.d.ts.map +1 -1
- package/dist/theme/expandTypeScale.js +17 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +11 -0
- package/dist/theme/index.d.ts +2 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +23 -0
- package/dist/utils/focusOutline.stylex.d.ts +122 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +143 -0
- package/dist/utils/focusReturn.d.ts +24 -0
- package/dist/utils/focusReturn.d.ts.map +1 -0
- package/dist/utils/focusReturn.js +29 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -1
- package/dist/utils/mergeRefs.d.ts.map +1 -1
- package/dist/utils/mergeRefs.js +7 -5
- package/dist/utils/rtlStyles.d.ts +2 -2
- package/dist/utils/rtlStyles.js +2 -2
- package/dist/utils/themeProps.d.ts +20 -1
- package/dist/utils/themeProps.d.ts.map +1 -1
- package/dist/utils/themeProps.js +8 -2
- package/locales/en.json +52 -0
- package/locales/pseudo.json +39 -0
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
- package/src/AlertDialog/AlertDialog.test.tsx +208 -1
- package/src/AlertDialog/AlertDialog.tsx +21 -3
- package/src/AppShell/AppShell.doc.mjs +11 -0
- package/src/AppShell/AppShell.test.tsx +139 -0
- package/src/AppShell/AppShell.tsx +32 -22
- package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
- package/src/AspectRatio/AspectRatio.test.tsx +30 -0
- package/src/AspectRatio/AspectRatio.tsx +13 -0
- package/src/Avatar/Avatar.doc.mjs +2 -13
- package/src/Avatar/Avatar.test.tsx +33 -8
- package/src/Avatar/Avatar.tsx +52 -50
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
- package/src/Banner/Banner.test.tsx +58 -1
- package/src/Banner/Banner.tsx +33 -11
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.doc.mjs +2 -2
- package/src/Button/Button.tsx +22 -41
- package/src/Calendar/Calendar.tsx +2 -1
- package/src/Calendar/styles.ts +0 -8
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.tsx +10 -6
- package/src/Chat/Chat.doc.mjs +2 -0
- package/src/Chat/ChatDictationButton.tsx +7 -1
- package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
- package/src/Chat/ChatSendButton.tsx +2 -3
- package/src/Chat/ChatToolCalls.test.tsx +35 -0
- package/src/Chat/ChatToolCalls.tsx +36 -16
- package/src/Chat/useTriggerMenu.tsx +2 -5
- package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +120 -0
- package/src/CheckboxInput/CheckboxInput.tsx +45 -202
- package/src/ClickableCard/ClickableCard.tsx +6 -11
- package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
- package/src/CodeBlock/CodeBlock.test.tsx +91 -0
- package/src/CodeBlock/CodeBlock.tsx +57 -80
- package/src/Collapsible/Collapsible.tsx +22 -18
- package/src/CommandPalette/CommandPalette.test.tsx +29 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
- package/src/CommandPalette/CommandPaletteList.tsx +2 -2
- package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +73 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -28
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +41 -0
- package/src/ContextMenu/ContextMenu.tsx +3 -3
- package/src/ContextMenu/index.ts +5 -1
- package/src/DateInput/DateInput.doc.mjs +18 -3
- package/src/DateInput/DateInput.test.tsx +112 -11
- package/src/DateInput/DateInput.tsx +44 -25
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +27 -21
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +154 -1
- package/src/DateTimeInput/DateTimeInput.tsx +58 -17
- package/src/Dialog/Dialog.tsx +2 -9
- package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
- package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
- package/src/DropdownMenu/DropdownMenu.tsx +113 -52
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
- package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
- package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
- package/src/DropdownMenu/index.ts +8 -1
- package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
- package/src/EmptyState/EmptyState.doc.mjs +4 -0
- package/src/EmptyState/EmptyState.test.tsx +62 -0
- package/src/EmptyState/EmptyState.tsx +16 -6
- package/src/Field/Field.doc.mjs +1 -0
- package/src/Field/InputClearButton.test.tsx +117 -0
- package/src/Field/InputClearButton.tsx +30 -3
- package/src/FileInput/FileInput.tsx +21 -8
- package/src/HoverCard/useHoverCard.tsx +2 -23
- package/src/Icon/Icon.doc.mjs +2 -1
- package/src/Indicator/CheckIndicator.tsx +174 -0
- package/src/Indicator/CheckboxIndicator.tsx +257 -0
- package/src/Indicator/Indicator.doc.mjs +344 -0
- package/src/Indicator/Indicator.test.tsx +393 -0
- package/src/Indicator/RadioIndicator.tsx +206 -0
- package/src/Indicator/index.ts +46 -0
- package/src/Indicator/indicator.markers.stylex.ts +19 -0
- package/src/Indicator/indicatorRegistry.test.tsx +106 -0
- package/src/Indicator/indicatorRegistry.ts +120 -0
- package/src/Indicator/types.ts +197 -0
- package/src/Indicator/useIndicator.ts +39 -0
- package/src/Item/Item.doc.mjs +1 -1
- package/src/Item/Item.tsx +7 -14
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +85 -0
- package/src/Layer/useLayer.tsx +39 -1
- package/src/Lightbox/Lightbox.doc.mjs +1 -1
- package/src/Lightbox/Lightbox.tsx +45 -49
- package/src/Link/Link.tsx +4 -11
- package/src/MobileNav/MobileNav.tsx +3 -3
- package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
- package/src/MoreMenu/MoreMenu.test.tsx +68 -1
- package/src/MoreMenu/MoreMenu.tsx +19 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +16 -1
- package/src/MultiSelector/MultiSelector.test.tsx +259 -16
- package/src/MultiSelector/MultiSelector.tsx +144 -121
- package/src/NumberInput/NumberInput.doc.mjs +265 -50
- package/src/NumberInput/NumberInput.test.tsx +726 -21
- package/src/NumberInput/NumberInput.tsx +353 -59
- package/src/Outline/Outline.tsx +2 -5
- package/src/Pagination/Pagination.doc.mjs +1 -1
- package/src/Pagination/Pagination.test.tsx +22 -7
- package/src/Pagination/Pagination.tsx +38 -35
- package/src/Popover/Popover.doc.mjs +2 -0
- package/src/Popover/Popover.tsx +6 -7
- package/src/Popover/usePopover.tsx +37 -4
- package/src/PowerSearch/PowerSearch.tsx +1 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
- package/src/ProgressBar/ProgressBar.test.tsx +224 -1
- package/src/ProgressBar/ProgressBar.tsx +126 -30
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioListItem.tsx +31 -130
- package/src/Resizable/ResizeHandle.tsx +2 -9
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
- package/src/SelectableCard/SelectableCard.tsx +4 -9
- package/src/Selector/Selector.doc.mjs +15 -4
- package/src/Selector/Selector.test.tsx +1234 -98
- package/src/Selector/Selector.tsx +254 -126
- package/src/Selector/hooks.ts +77 -50
- package/src/SideNav/SideNav.test.tsx +46 -0
- package/src/SideNav/SideNav.tsx +1 -0
- package/src/SideNav/SideNavCollapseButton.tsx +15 -10
- package/src/SideNav/SideNavHeading.tsx +48 -10
- package/src/SideNav/SideNavItem.tsx +20 -12
- package/src/Slider/Slider.tsx +2 -11
- package/src/Stack/Stack.doc.mjs +110 -0
- package/src/StatusDot/StatusDot.doc.mjs +12 -3
- package/src/Switch/Switch.test.tsx +32 -0
- package/src/Switch/Switch.tsx +18 -10
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -0
- package/src/Table/Table.test.tsx +31 -0
- package/src/Table/TableRow.tsx +6 -0
- package/src/Table/index.ts +1 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
- package/src/Table/plugins/rowExpansion/index.ts +1 -4
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
- package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
- package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
- package/src/Table/tableContextMenu.test.tsx +27 -0
- package/src/Table/tableContextMenu.tsx +1 -0
- package/src/Table/types.ts +11 -0
- package/src/Table/useTableGroupedRows.doc.mjs +1 -1
- package/src/Table/useTableRowExpansion.doc.mjs +43 -66
- package/src/TextArea/TextArea.doc.mjs +42 -2
- package/src/TextArea/TextArea.test.tsx +219 -0
- package/src/TextArea/TextArea.tsx +34 -7
- package/src/TextInput/TextInput.doc.mjs +18 -2
- package/src/TextInput/TextInput.test.tsx +189 -0
- package/src/TextInput/TextInput.tsx +25 -31
- package/src/Thumbnail/Thumbnail.tsx +2 -9
- package/src/TimeInput/TimeInput.doc.mjs +2 -2
- package/src/TimeInput/TimeInput.test.tsx +84 -3
- package/src/TimeInput/TimeInput.tsx +26 -28
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/Timestamp.test.tsx +91 -14
- package/src/Timestamp/Timestamp.tsx +14 -2
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- package/src/Timestamp/formatInstant.ts +16 -1
- package/src/Token/Token.tsx +5 -28
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +45 -3
- package/src/Tokenizer/Tokenizer.tsx +10 -2
- package/src/Tooltip/useTooltip.tsx +2 -23
- package/src/TopNav/TopNav.tsx +1 -3
- package/src/TopNav/TopNavHeading.tsx +42 -13
- package/src/TopNav/TopNavItem.tsx +3 -21
- package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
- package/src/TopNav/TopNavMegaMenu.tsx +118 -53
- package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
- package/src/TopNav/TopNavMenu.tsx +34 -37
- package/src/TreeList/TreeList.doc.mjs +5 -0
- package/src/TreeList/TreeList.test.tsx +208 -8
- package/src/TreeList/TreeList.tsx +22 -0
- package/src/TreeList/TreeListBranches.tsx +25 -2
- package/src/TreeList/TreeListItem.tsx +89 -52
- package/src/Typeahead/BaseTypeahead.tsx +19 -6
- package/src/Typeahead/Typeahead.doc.mjs +1 -0
- package/src/Typeahead/Typeahead.test.tsx +76 -3
- package/src/hooks/containerReveal.stylex.ts +102 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useClipboard.doc.mjs +87 -0
- package/src/hooks/useClipboard.test.tsx +151 -0
- package/src/hooks/useClipboard.ts +135 -0
- package/src/hooks/useContainerReveal.doc.mjs +7 -7
- package/src/hooks/useContainerReveal.test.tsx +42 -62
- package/src/hooks/useContainerReveal.ts +36 -91
- package/src/hooks/useImageMode.test.ts +1 -1
- package/src/hooks/useIndicatorFocusRing.tsx +120 -0
- package/src/hooks/useInputStatusIcon.tsx +8 -8
- package/src/hooks/useLongPress.test.tsx +18 -0
- package/src/hooks/useLongPress.ts +12 -2
- package/src/hooks/useScrollLock.test.ts +72 -0
- package/src/hooks/useScrollLock.ts +51 -19
- package/src/hooks/useStreamingText.test.ts +46 -1
- package/src/hooks/useStreamingText.ts +49 -7
- package/src/hooks/useTreeFocus.test.tsx +50 -0
- package/src/hooks/useTreeFocus.ts +14 -3
- package/src/hooks/useTypeahead.test.tsx +150 -0
- package/src/hooks/useTypeahead.ts +24 -9
- package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
- package/src/index.ts +1 -0
- package/src/theme/defineTheme.ts +27 -0
- package/src/theme/derivedVarRegistry.test.ts +21 -1
- package/src/theme/derivedVarRegistry.ts +19 -6
- package/src/theme/expandColorScale.test.ts +14 -0
- package/src/theme/expandColorScale.ts +24 -9
- package/src/theme/expandTypeScale.test.ts +43 -0
- package/src/theme/expandTypeScale.ts +17 -0
- package/src/theme/generateThemeRules.test.ts +78 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +15 -0
- package/src/theme/tokens.stylex.ts +18 -0
- package/src/theme/tokens.test.ts +37 -0
- package/src/utils/focusOutline.stylex.ts +177 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/mergeRefs.test.ts +48 -0
- package/src/utils/mergeRefs.ts +12 -6
- package/src/utils/rtlStyles.ts +2 -2
- package/src/utils/themeProps.ts +26 -4
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
- package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
- package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
- package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
- package/dist/RadioList/radio.markers.stylex.js +0 -12
- package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
- package/dist/hooks/containerReveal.pool.stylex.js +0 -292
- package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
- package/src/RadioList/radio.markers.stylex.ts +0 -10
- package/src/hooks/containerReveal.pool.stylex.ts +0 -571
|
@@ -145,6 +145,13 @@ export const docs = {
|
|
|
145
145
|
description: 'Number of months in the calendar.',
|
|
146
146
|
default: '2',
|
|
147
147
|
},
|
|
148
|
+
{
|
|
149
|
+
name: 'weekStartsOn',
|
|
150
|
+
type: "0 | 1 | 2 | 3 | 4 | 5 | 6 | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'",
|
|
151
|
+
description:
|
|
152
|
+
'First day of week in the calendar. A number (0 = Sunday to 6 = Saturday) or a three-letter day name.',
|
|
153
|
+
default: '0',
|
|
154
|
+
},
|
|
148
155
|
{
|
|
149
156
|
name: 'width',
|
|
150
157
|
type: 'SizeValue',
|
|
@@ -159,9 +166,9 @@ export const docs = {
|
|
|
159
166
|
],
|
|
160
167
|
theming: {
|
|
161
168
|
targets: [
|
|
162
|
-
{className: 'astryx-date-range-input', visualProps: ['size', 'status']},
|
|
169
|
+
{className: 'astryx-date-range-input', visualProps: ['size', 'status'], states: ['disabled']},
|
|
163
170
|
{className: 'astryx-date-range-input-toggle-icon', states: ['state']},
|
|
164
|
-
{className: 'astryx-date-range-input-clear-icon'},
|
|
171
|
+
{className: 'astryx-date-range-input-clear-icon', deprecatedFor: 'input-clear-icon'},
|
|
165
172
|
],
|
|
166
173
|
},
|
|
167
174
|
usage: {
|
|
@@ -314,6 +321,7 @@ export const docsDense = {
|
|
|
314
321
|
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.',
|
|
315
322
|
labelTooltip: 'tooltip via info icon at label end',
|
|
316
323
|
numberOfMonths: 'months in calendar (default 2)',
|
|
324
|
+
weekStartsOn: 'first day of week in calendar (0=Sunday, or name e.g. "mon")',
|
|
317
325
|
changeAction:
|
|
318
326
|
'async action fired after onChange; drives optimistic UI updates via useTransition',
|
|
319
327
|
isLoading: 'loading state; disables interaction + shows a spinner',
|
|
@@ -511,6 +511,72 @@ describe('DateRangeInput statusVariant forwarding', () => {
|
|
|
511
511
|
'detached',
|
|
512
512
|
);
|
|
513
513
|
});
|
|
514
|
+
|
|
515
|
+
describe('weekStartsOn', () => {
|
|
516
|
+
// The calendar popover renders in the top layer; jsdom keeps the content in
|
|
517
|
+
// the DOM but role queries skip it, so read the columnheaders directly.
|
|
518
|
+
const openAndReadWeekdays = (container: HTMLElement): (string | null)[] => {
|
|
519
|
+
fireEvent.click(getButton('Open calendar'));
|
|
520
|
+
return Array.from(container.querySelectorAll('[role="columnheader"]'))
|
|
521
|
+
.slice(0, 7)
|
|
522
|
+
.map(h => h.textContent);
|
|
523
|
+
};
|
|
524
|
+
|
|
525
|
+
it('defaults to a Sunday-first week', () => {
|
|
526
|
+
const {container} = render(
|
|
527
|
+
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
528
|
+
);
|
|
529
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
530
|
+
'Su',
|
|
531
|
+
'Mo',
|
|
532
|
+
'Tu',
|
|
533
|
+
'We',
|
|
534
|
+
'Th',
|
|
535
|
+
'Fr',
|
|
536
|
+
'Sa',
|
|
537
|
+
]);
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
it('forwards a numeric weekStartsOn to the calendar', () => {
|
|
541
|
+
const {container} = render(
|
|
542
|
+
<DateRangeInput
|
|
543
|
+
label="Range"
|
|
544
|
+
value={null}
|
|
545
|
+
onChange={() => {}}
|
|
546
|
+
weekStartsOn={1}
|
|
547
|
+
/>,
|
|
548
|
+
);
|
|
549
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
550
|
+
'Mo',
|
|
551
|
+
'Tu',
|
|
552
|
+
'We',
|
|
553
|
+
'Th',
|
|
554
|
+
'Fr',
|
|
555
|
+
'Sa',
|
|
556
|
+
'Su',
|
|
557
|
+
]);
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
it('accepts a three-letter day name', () => {
|
|
561
|
+
const {container} = render(
|
|
562
|
+
<DateRangeInput
|
|
563
|
+
label="Range"
|
|
564
|
+
value={null}
|
|
565
|
+
onChange={() => {}}
|
|
566
|
+
weekStartsOn="mon"
|
|
567
|
+
/>,
|
|
568
|
+
);
|
|
569
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
570
|
+
'Mo',
|
|
571
|
+
'Tu',
|
|
572
|
+
'We',
|
|
573
|
+
'Th',
|
|
574
|
+
'Fr',
|
|
575
|
+
'Sa',
|
|
576
|
+
'Su',
|
|
577
|
+
]);
|
|
578
|
+
});
|
|
579
|
+
});
|
|
514
580
|
});
|
|
515
581
|
|
|
516
582
|
describe('DateRangeInput icon theme targets', () => {
|
|
@@ -526,7 +592,7 @@ describe('DateRangeInput icon theme targets', () => {
|
|
|
526
592
|
return icon as HTMLElement;
|
|
527
593
|
};
|
|
528
594
|
|
|
529
|
-
it('renders astryx-
|
|
595
|
+
it('renders astryx-input-clear-icon (plus the legacy alias) on the clear glyph', () => {
|
|
530
596
|
render(
|
|
531
597
|
<DateRangeInput
|
|
532
598
|
label="Range"
|
|
@@ -535,10 +601,13 @@ describe('DateRangeInput icon theme targets', () => {
|
|
|
535
601
|
hasClear
|
|
536
602
|
/>,
|
|
537
603
|
);
|
|
538
|
-
// The
|
|
539
|
-
// theme can restyle just this glyph (color, size, hover) via
|
|
540
|
-
// a button-level target could not reach the icon's own
|
|
604
|
+
// The canonical target lands on the icon element itself (not the button),
|
|
605
|
+
// so a theme can restyle just this glyph (color, size, hover) via
|
|
606
|
+
// defineTheme — a button-level target could not reach the icon's own
|
|
607
|
+
// color/size. The original per-component name rides along for a
|
|
608
|
+
// deprecation window.
|
|
541
609
|
const icon = iconIn(getButton('Clear Range'));
|
|
610
|
+
expect(icon).toHaveClass('astryx-input-clear-icon');
|
|
542
611
|
expect(icon).toHaveClass('astryx-date-range-input-clear-icon');
|
|
543
612
|
expect(icon).toHaveClass('astryx-icon');
|
|
544
613
|
});
|
|
@@ -552,11 +621,12 @@ describe('DateRangeInput icon theme targets', () => {
|
|
|
552
621
|
expect(icon).toHaveAttribute('data-state', 'collapsed');
|
|
553
622
|
});
|
|
554
623
|
|
|
555
|
-
it('
|
|
556
|
-
//
|
|
557
|
-
//
|
|
558
|
-
//
|
|
559
|
-
//
|
|
624
|
+
it('routes the clear glyph through the shared clear button (default look unchanged)', () => {
|
|
625
|
+
// Default-look guard for the clear affordance. It now composes the shared
|
|
626
|
+
// InputClearButton (a ghost Button with a secondary/sm glyph), so aside
|
|
627
|
+
// from its target classes the glyph matches a standalone `secondary`/`sm`
|
|
628
|
+
// close icon — the default clear look is defined once, in InputClearButton.
|
|
629
|
+
// (The calendar-toggle glyph is covered separately.)
|
|
560
630
|
render(
|
|
561
631
|
<DateRangeInput
|
|
562
632
|
label="Range"
|
|
@@ -567,22 +637,24 @@ describe('DateRangeInput icon theme targets', () => {
|
|
|
567
637
|
);
|
|
568
638
|
const clearIcon = iconIn(getButton('Clear Range'));
|
|
569
639
|
|
|
570
|
-
const {container:
|
|
640
|
+
const {container: clearRefContainer} = render(
|
|
571
641
|
<Icon icon="close" size="sm" color="secondary" />,
|
|
572
642
|
);
|
|
573
|
-
const
|
|
643
|
+
const clearRefIcon = clearRefContainer.querySelector(
|
|
644
|
+
'.astryx-icon',
|
|
645
|
+
) as HTMLElement;
|
|
574
646
|
|
|
575
647
|
const styleClasses = (el: HTMLElement) =>
|
|
576
648
|
el.className
|
|
577
649
|
.split(' ')
|
|
578
650
|
.filter(
|
|
579
651
|
c =>
|
|
580
|
-
c !== 'astryx-
|
|
581
|
-
c !== 'astryx-date-range-input-
|
|
652
|
+
c !== 'astryx-input-clear-icon' &&
|
|
653
|
+
c !== 'astryx-date-range-input-clear-icon',
|
|
582
654
|
)
|
|
583
655
|
.sort();
|
|
584
656
|
|
|
585
|
-
expect(styleClasses(clearIcon)).toEqual(styleClasses(
|
|
657
|
+
expect(styleClasses(clearIcon)).toEqual(styleClasses(clearRefIcon));
|
|
586
658
|
});
|
|
587
659
|
|
|
588
660
|
it('exposes the icon targets so a theme reaches icon color, size, and hover', () => {
|
|
@@ -616,3 +688,27 @@ describe('DateRangeInput icon theme targets', () => {
|
|
|
616
688
|
expect(css).toContain('14px');
|
|
617
689
|
});
|
|
618
690
|
});
|
|
691
|
+
|
|
692
|
+
describe('DateRangeInput disabled theme state', () => {
|
|
693
|
+
it('reflects disabled on the root target so themes can gate paint on it', () => {
|
|
694
|
+
const {container} = render(
|
|
695
|
+
<DateRangeInput
|
|
696
|
+
label="Range"
|
|
697
|
+
value={null}
|
|
698
|
+
onChange={() => {}}
|
|
699
|
+
isDisabled
|
|
700
|
+
/>,
|
|
701
|
+
);
|
|
702
|
+
const root = container.querySelector('.astryx-date-range-input');
|
|
703
|
+
expect(root).toHaveAttribute('data-disabled', 'disabled');
|
|
704
|
+
expect(root).toHaveClass('disabled');
|
|
705
|
+
});
|
|
706
|
+
|
|
707
|
+
it('omits data-disabled when enabled, like status does', () => {
|
|
708
|
+
const {container} = render(
|
|
709
|
+
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
710
|
+
);
|
|
711
|
+
const root = container.querySelector('.astryx-date-range-input');
|
|
712
|
+
expect(root).not.toHaveAttribute('data-disabled');
|
|
713
|
+
});
|
|
714
|
+
});
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
} from '../theme/tokens.stylex';
|
|
37
37
|
import {
|
|
38
38
|
Field,
|
|
39
|
+
InputClearButton,
|
|
39
40
|
type InputStatus,
|
|
40
41
|
inputWrapperStyles,
|
|
41
42
|
inputStatusBorderStyles,
|
|
@@ -45,7 +46,13 @@ import {
|
|
|
45
46
|
} from '../Field';
|
|
46
47
|
import {Icon} from '../Icon';
|
|
47
48
|
import {Spinner} from '../Spinner';
|
|
48
|
-
import {
|
|
49
|
+
import {
|
|
50
|
+
Calendar,
|
|
51
|
+
type ISODateString,
|
|
52
|
+
type DateRange,
|
|
53
|
+
type DayOfWeek,
|
|
54
|
+
type DayOfWeekName,
|
|
55
|
+
} from '../Calendar';
|
|
49
56
|
import {usePopover} from '../Popover';
|
|
50
57
|
import {useTooltip} from '../Tooltip';
|
|
51
58
|
import {mergeProps} from '../utils';
|
|
@@ -54,6 +61,8 @@ import type {SizeValue} from '../utils/types';
|
|
|
54
61
|
import {useSize} from '../SizeContext/SizeContext';
|
|
55
62
|
import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
|
|
56
63
|
import {themeProps} from '../utils/themeProps';
|
|
64
|
+
import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
65
|
+
import {stableClassName} from '../naming';
|
|
57
66
|
import {useTranslator} from '../i18n';
|
|
58
67
|
|
|
59
68
|
export type {DateRange} from '../Calendar';
|
|
@@ -110,11 +119,6 @@ const styles = stylex.create({
|
|
|
110
119
|
backgroundColor: 'transparent',
|
|
111
120
|
cursor: 'pointer',
|
|
112
121
|
borderRadius: radiusVars['--radius-element'],
|
|
113
|
-
outline: {
|
|
114
|
-
default: 'none',
|
|
115
|
-
':focus-visible': `${borderVars['--border-width']} solid ${colorVars['--color-accent']}`,
|
|
116
|
-
},
|
|
117
|
-
outlineOffset: 1,
|
|
118
122
|
},
|
|
119
123
|
iconButtonDisabled: {
|
|
120
124
|
cursor: 'not-allowed',
|
|
@@ -152,10 +156,6 @@ const styles = stylex.create({
|
|
|
152
156
|
color: colorVars['--color-text-primary'],
|
|
153
157
|
cursor: 'pointer',
|
|
154
158
|
textAlign: 'start',
|
|
155
|
-
outline: {
|
|
156
|
-
default: 'none',
|
|
157
|
-
':focus-visible': `${borderVars['--border-width']} solid ${colorVars['--color-accent']}`,
|
|
158
|
-
},
|
|
159
159
|
},
|
|
160
160
|
presetButtonActive: {
|
|
161
161
|
backgroundColor: colorVars['--color-accent-muted'],
|
|
@@ -355,6 +355,14 @@ export interface DateRangeInputProps extends Omit<
|
|
|
355
355
|
* @default 2
|
|
356
356
|
*/
|
|
357
357
|
numberOfMonths?: 1 | 2;
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* First day of week in the calendar. Accepts a number
|
|
361
|
+
* (0 = Sunday … 6 = Saturday) or a three-letter day name ('sun'–'sat',
|
|
362
|
+
* case-insensitive).
|
|
363
|
+
* @default 0
|
|
364
|
+
*/
|
|
365
|
+
weekStartsOn?: DayOfWeek | DayOfWeekName;
|
|
358
366
|
}
|
|
359
367
|
|
|
360
368
|
/**
|
|
@@ -396,6 +404,7 @@ export function DateRangeInput({
|
|
|
396
404
|
statusVariant = 'attached',
|
|
397
405
|
labelTooltip,
|
|
398
406
|
numberOfMonths = 2,
|
|
407
|
+
weekStartsOn,
|
|
399
408
|
width,
|
|
400
409
|
xstyle,
|
|
401
410
|
className,
|
|
@@ -548,6 +557,7 @@ export function DateRangeInput({
|
|
|
548
557
|
themeProps('date-range-input', {
|
|
549
558
|
size,
|
|
550
559
|
status: status?.type ?? null,
|
|
560
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
551
561
|
}),
|
|
552
562
|
stylex.props(
|
|
553
563
|
inputWrapperStyles.base,
|
|
@@ -574,6 +584,7 @@ export function DateRangeInput({
|
|
|
574
584
|
}
|
|
575
585
|
tabIndex={-1}
|
|
576
586
|
{...stylex.props(
|
|
587
|
+
focusOutlineStyles.focusVisible,
|
|
577
588
|
styles.iconButton,
|
|
578
589
|
isEffectivelyDisabled && styles.iconButtonDisabled,
|
|
579
590
|
)}>
|
|
@@ -612,18 +623,11 @@ export function DateRangeInput({
|
|
|
612
623
|
{displayValue || placeholder}
|
|
613
624
|
</button>
|
|
614
625
|
{hasClear && value !== null && !isEffectivelyDisabled && (
|
|
615
|
-
<
|
|
616
|
-
|
|
626
|
+
<InputClearButton
|
|
627
|
+
label={t('@astryx.dateInput.clear', {label})}
|
|
617
628
|
onClick={handleClear}
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
<Icon
|
|
621
|
-
icon="close"
|
|
622
|
-
size="sm"
|
|
623
|
-
color="secondary"
|
|
624
|
-
{...themeProps('date-range-input-clear-icon')}
|
|
625
|
-
/>
|
|
626
|
-
</button>
|
|
629
|
+
iconClassName={stableClassName('date-range-input-clear-icon')}
|
|
630
|
+
/>
|
|
627
631
|
)}
|
|
628
632
|
{isBusy && <Spinner size="sm" />}
|
|
629
633
|
{statusIcon}
|
|
@@ -650,6 +654,7 @@ export function DateRangeInput({
|
|
|
650
654
|
aria-current={isActive ? 'true' : undefined}
|
|
651
655
|
onClick={() => handlePresetClick(preset)}
|
|
652
656
|
{...stylex.props(
|
|
657
|
+
focusOutlineStyles.focusVisible,
|
|
653
658
|
styles.presetButton,
|
|
654
659
|
isActive && styles.presetButtonActive,
|
|
655
660
|
)}>
|
|
@@ -667,6 +672,7 @@ export function DateRangeInput({
|
|
|
667
672
|
max={max}
|
|
668
673
|
dateConstraints={dateConstraints}
|
|
669
674
|
numberOfMonths={numberOfMonths}
|
|
675
|
+
weekStartsOn={weekStartsOn}
|
|
670
676
|
/>
|
|
671
677
|
</div>,
|
|
672
678
|
{placement: 'below', alignment: 'start'},
|
|
@@ -173,6 +173,13 @@ export const docs = {
|
|
|
173
173
|
description: 'Number of months displayed simultaneously in the calendar.',
|
|
174
174
|
default: '1',
|
|
175
175
|
},
|
|
176
|
+
{
|
|
177
|
+
name: 'weekStartsOn',
|
|
178
|
+
type: "0 | 1 | 2 | 3 | 4 | 5 | 6 | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'",
|
|
179
|
+
description:
|
|
180
|
+
'First day of week in the calendar. A number (0 = Sunday to 6 = Saturday) or a three-letter day name.',
|
|
181
|
+
default: '0',
|
|
182
|
+
},
|
|
176
183
|
{
|
|
177
184
|
name: 'width',
|
|
178
185
|
type: 'SizeValue',
|
|
@@ -188,7 +195,7 @@ export const docs = {
|
|
|
188
195
|
],
|
|
189
196
|
theming: {
|
|
190
197
|
targets: [
|
|
191
|
-
{className: 'astryx-date-time-input', visualProps: ['size', 'status']},
|
|
198
|
+
{className: 'astryx-date-time-input', visualProps: ['size', 'status'], states: ['disabled']},
|
|
192
199
|
{
|
|
193
200
|
className: 'astryx-date-time-input-date-segment',
|
|
194
201
|
visualProps: ['size', 'status'],
|
|
@@ -477,6 +484,12 @@ export const docsZh = {
|
|
|
477
484
|
description: '日历中同时显示的月份数量。',
|
|
478
485
|
default: '1',
|
|
479
486
|
},
|
|
487
|
+
{
|
|
488
|
+
name: 'weekStartsOn',
|
|
489
|
+
type: "0 | 1 | 2 | 3 | 4 | 5 | 6 | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'",
|
|
490
|
+
description: '日历中每周的起始日。可为数字(0=周日……6=周六)或三字母星期缩写。',
|
|
491
|
+
default: '0',
|
|
492
|
+
},
|
|
480
493
|
{
|
|
481
494
|
name: 'xstyle',
|
|
482
495
|
type: 'StyleXStyles',
|
|
@@ -486,7 +499,7 @@ export const docsZh = {
|
|
|
486
499
|
],
|
|
487
500
|
theming: {
|
|
488
501
|
targets: [
|
|
489
|
-
{className: 'astryx-date-time-input', visualProps: ['size', 'status']},
|
|
502
|
+
{className: 'astryx-date-time-input', visualProps: ['size', 'status'], states: ['disabled']},
|
|
490
503
|
{
|
|
491
504
|
className: 'astryx-date-time-input-date-segment',
|
|
492
505
|
visualProps: ['size', 'status'],
|
|
@@ -577,6 +590,7 @@ export const docsDense = {
|
|
|
577
590
|
status: 'error/warning/success status w/ message',
|
|
578
591
|
labelTooltip: 'tooltip text via info icon at label end',
|
|
579
592
|
numberOfMonths: 'months shown simultaneously in calendar',
|
|
593
|
+
weekStartsOn: 'first day of week in calendar (0=Sunday, or name e.g. "mon")',
|
|
580
594
|
xstyle: 'StyleX styles for layout; must be stylex.create() value',
|
|
581
595
|
},
|
|
582
596
|
};
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* SYNC: When DateTimeInput.tsx changes, update tests to match new behavior
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
12
|
+
import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
|
|
13
13
|
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
15
|
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
@@ -17,6 +17,16 @@ import {DateTimeInput} from './DateTimeInput';
|
|
|
17
17
|
import type {ISODateTimeString} from './DateTimeInput';
|
|
18
18
|
import {defineTheme} from '../theme/defineTheme';
|
|
19
19
|
import {generateThemeCSS} from '../theme/generateThemeRules';
|
|
20
|
+
import {InternationalizationProvider} from '../i18n';
|
|
21
|
+
import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
22
|
+
|
|
23
|
+
function politeRegion(): HTMLElement | null {
|
|
24
|
+
return document.querySelector('[data-astryx-live-region="polite"]');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
__resetLiveRegionsForTest();
|
|
29
|
+
});
|
|
20
30
|
|
|
21
31
|
function generateThemeTestCSS(theme: Parameters<typeof generateThemeCSS>[0]) {
|
|
22
32
|
const {prose, component} = generateThemeCSS(theme);
|
|
@@ -626,6 +636,35 @@ describe('DateTimeInput', () => {
|
|
|
626
636
|
|
|
627
637
|
expect(screen.getByText('Invalid time')).toBeInTheDocument();
|
|
628
638
|
});
|
|
639
|
+
|
|
640
|
+
it('resolves the invalid date and time announcements from the i18n catalog', () => {
|
|
641
|
+
render(
|
|
642
|
+
<InternationalizationProvider
|
|
643
|
+
locale="en"
|
|
644
|
+
overrides={{
|
|
645
|
+
en: {
|
|
646
|
+
'@astryx.dateInput.invalidDate': 'Ungültiges Datum',
|
|
647
|
+
'@astryx.timeInput.invalidTime': 'Ungültige Zeit',
|
|
648
|
+
},
|
|
649
|
+
}}>
|
|
650
|
+
<DateTimeInput
|
|
651
|
+
label="Meeting"
|
|
652
|
+
value={'2026-03-15T10:00' as ISODateTimeString}
|
|
653
|
+
onChange={() => {}}
|
|
654
|
+
/>
|
|
655
|
+
</InternationalizationProvider>,
|
|
656
|
+
);
|
|
657
|
+
|
|
658
|
+
fireEvent.change(screen.getByRole('combobox'), {
|
|
659
|
+
target: {value: '13/45/2024'},
|
|
660
|
+
});
|
|
661
|
+
expect(screen.getByText('Ungültiges Datum')).toBeInTheDocument();
|
|
662
|
+
|
|
663
|
+
fireEvent.change(screen.getByLabelText('Meeting time'), {
|
|
664
|
+
target: {value: '99:99 zz'},
|
|
665
|
+
});
|
|
666
|
+
expect(screen.getByText('Ungültige Zeit')).toBeInTheDocument();
|
|
667
|
+
});
|
|
629
668
|
});
|
|
630
669
|
describe('disabledMessage', () => {
|
|
631
670
|
// jsdom does not implement the Popover API used by the tooltip, so mock
|
|
@@ -819,6 +858,101 @@ describe('DateTimeInput', () => {
|
|
|
819
858
|
expect(onChange).toHaveBeenCalledTimes(1);
|
|
820
859
|
expect(onChange.mock.calls[0][0]).toContain('14:31');
|
|
821
860
|
});
|
|
861
|
+
|
|
862
|
+
// Arrow-key stepping mutates a plain textbox programmatically, and screen
|
|
863
|
+
// readers do not announce programmatic textbox changes — the new value
|
|
864
|
+
// must be announced through the polite live region (WCAG 4.1.2).
|
|
865
|
+
it('politely announces the new time after ArrowUp stepping', async () => {
|
|
866
|
+
render(
|
|
867
|
+
<DateTimeInput
|
|
868
|
+
label="Meeting"
|
|
869
|
+
value={'2026-03-15T14:30' as ISODateTimeString}
|
|
870
|
+
onChange={() => {}}
|
|
871
|
+
/>,
|
|
872
|
+
);
|
|
873
|
+
|
|
874
|
+
fireEvent.keyDown(screen.getByLabelText('Meeting time'), {
|
|
875
|
+
key: 'ArrowUp',
|
|
876
|
+
});
|
|
877
|
+
|
|
878
|
+
await waitFor(() => {
|
|
879
|
+
expect(politeRegion()).toHaveTextContent('2:31 PM');
|
|
880
|
+
});
|
|
881
|
+
});
|
|
882
|
+
|
|
883
|
+
it('politely announces the new time after ArrowDown stepping', async () => {
|
|
884
|
+
render(
|
|
885
|
+
<DateTimeInput
|
|
886
|
+
label="Meeting"
|
|
887
|
+
value={'2026-03-15T14:30' as ISODateTimeString}
|
|
888
|
+
onChange={() => {}}
|
|
889
|
+
/>,
|
|
890
|
+
);
|
|
891
|
+
|
|
892
|
+
fireEvent.keyDown(screen.getByLabelText('Meeting time'), {
|
|
893
|
+
key: 'ArrowDown',
|
|
894
|
+
});
|
|
895
|
+
|
|
896
|
+
await waitFor(() => {
|
|
897
|
+
expect(politeRegion()).toHaveTextContent('2:29 PM');
|
|
898
|
+
});
|
|
899
|
+
});
|
|
900
|
+
});
|
|
901
|
+
|
|
902
|
+
describe('weekStartsOn', () => {
|
|
903
|
+
// The calendar popover renders in the top layer; jsdom keeps the content in
|
|
904
|
+
// the DOM but role queries skip it, so read the columnheaders directly.
|
|
905
|
+
const openAndReadWeekdays = (container: HTMLElement): (string | null)[] => {
|
|
906
|
+
fireEvent.keyDown(screen.getAllByRole('combobox')[0], {key: 'ArrowDown'});
|
|
907
|
+
return Array.from(container.querySelectorAll('[role="columnheader"]'))
|
|
908
|
+
.slice(0, 7)
|
|
909
|
+
.map(h => h.textContent);
|
|
910
|
+
};
|
|
911
|
+
|
|
912
|
+
it('defaults to a Sunday-first week', () => {
|
|
913
|
+
const {container} = render(
|
|
914
|
+
<DateTimeInput label="When" onChange={() => {}} />,
|
|
915
|
+
);
|
|
916
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
917
|
+
'Su',
|
|
918
|
+
'Mo',
|
|
919
|
+
'Tu',
|
|
920
|
+
'We',
|
|
921
|
+
'Th',
|
|
922
|
+
'Fr',
|
|
923
|
+
'Sa',
|
|
924
|
+
]);
|
|
925
|
+
});
|
|
926
|
+
|
|
927
|
+
it('forwards a numeric weekStartsOn to the calendar', () => {
|
|
928
|
+
const {container} = render(
|
|
929
|
+
<DateTimeInput label="When" onChange={() => {}} weekStartsOn={1} />,
|
|
930
|
+
);
|
|
931
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
932
|
+
'Mo',
|
|
933
|
+
'Tu',
|
|
934
|
+
'We',
|
|
935
|
+
'Th',
|
|
936
|
+
'Fr',
|
|
937
|
+
'Sa',
|
|
938
|
+
'Su',
|
|
939
|
+
]);
|
|
940
|
+
});
|
|
941
|
+
|
|
942
|
+
it('accepts a three-letter day name', () => {
|
|
943
|
+
const {container} = render(
|
|
944
|
+
<DateTimeInput label="When" onChange={() => {}} weekStartsOn="mon" />,
|
|
945
|
+
);
|
|
946
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
947
|
+
'Mo',
|
|
948
|
+
'Tu',
|
|
949
|
+
'We',
|
|
950
|
+
'Th',
|
|
951
|
+
'Fr',
|
|
952
|
+
'Sa',
|
|
953
|
+
'Su',
|
|
954
|
+
]);
|
|
955
|
+
});
|
|
822
956
|
});
|
|
823
957
|
// ===========================================================================
|
|
824
958
|
// Segment theme targets (#4075)
|
|
@@ -931,3 +1065,22 @@ describe('DateTimeInput', () => {
|
|
|
931
1065
|
});
|
|
932
1066
|
});
|
|
933
1067
|
});
|
|
1068
|
+
|
|
1069
|
+
describe('DateTimeInput disabled theme state', () => {
|
|
1070
|
+
it('reflects disabled on the root target so themes can gate paint on it', () => {
|
|
1071
|
+
const {container} = render(
|
|
1072
|
+
<DateTimeInput label="Meeting" onChange={() => {}} isDisabled />,
|
|
1073
|
+
);
|
|
1074
|
+
const root = container.querySelector('.astryx-date-time-input');
|
|
1075
|
+
expect(root).toHaveAttribute('data-disabled', 'disabled');
|
|
1076
|
+
expect(root).toHaveClass('disabled');
|
|
1077
|
+
});
|
|
1078
|
+
|
|
1079
|
+
it('omits data-disabled when enabled, like status does', () => {
|
|
1080
|
+
const {container} = render(
|
|
1081
|
+
<DateTimeInput label="Meeting" onChange={() => {}} />,
|
|
1082
|
+
);
|
|
1083
|
+
const root = container.querySelector('.astryx-date-time-input');
|
|
1084
|
+
expect(root).not.toHaveAttribute('data-disabled');
|
|
1085
|
+
});
|
|
1086
|
+
});
|