@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
|
@@ -20,7 +20,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
20
20
|
import { plainDateFromISO, plainDateToday, plainDateFormat, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR } from "../utils/plainDate.js";
|
|
21
21
|
import "../theme/tokens.stylex.js";
|
|
22
22
|
import { colorVars, sizeVars, radiusVars, spacingVars, typographyVars, typeScaleVars, borderVars } from "../theme/tokens.stylex.js";
|
|
23
|
-
import { Field, inputWrapperStyles, inputStatusBorderStyles, inputStatusHoverShadowStyles, inputStatusFocusWithinStyles } from "../Field/index.js";
|
|
23
|
+
import { Field, InputClearButton, inputWrapperStyles, inputStatusBorderStyles, inputStatusHoverShadowStyles, inputStatusFocusWithinStyles } from "../Field/index.js";
|
|
24
24
|
import { Icon } from "../Icon/index.js";
|
|
25
25
|
import { Spinner } from "../Spinner/index.js";
|
|
26
26
|
import { Calendar } from "../Calendar/index.js";
|
|
@@ -30,8 +30,51 @@ import { mergeProps } from "../utils/index.js";
|
|
|
30
30
|
import { useSize } from "../SizeContext/SizeContext.js";
|
|
31
31
|
import { useInputStatusIcon } from "../hooks/useInputStatusIcon.js";
|
|
32
32
|
import { themeProps } from "../utils/themeProps.js";
|
|
33
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
34
|
+
import { stableClassName } from "../naming.js";
|
|
33
35
|
import { useTranslator } from "../i18n/index.js";
|
|
34
36
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
37
|
+
const styles = {
|
|
38
|
+
iconButton: {
|
|
39
|
+
k1xSpc: "x78zum5",
|
|
40
|
+
kGNEyG: "x6s0dn4",
|
|
41
|
+
kjj79g: "xl56j7k",
|
|
42
|
+
kmVPX3: "x1717udv",
|
|
43
|
+
kogj98: "x1ghz6dp",
|
|
44
|
+
kMzoRj: "xc342km",
|
|
45
|
+
ksu8eU: "xng3xce",
|
|
46
|
+
kWkggS: "xjbqb8w",
|
|
47
|
+
kkrTdU: "x1ypdohk",
|
|
48
|
+
kaIpWk: "xh6dtrn",
|
|
49
|
+
$$css: true
|
|
50
|
+
},
|
|
51
|
+
iconButtonDisabled: {
|
|
52
|
+
kkrTdU: "x1h6gzvc",
|
|
53
|
+
$$css: true
|
|
54
|
+
},
|
|
55
|
+
presetButton: {
|
|
56
|
+
k1xSpc: "x1lliihq",
|
|
57
|
+
kzqmXN: "xh8yej3",
|
|
58
|
+
kmVPX3: "xtozwh",
|
|
59
|
+
kogj98: "x1ghz6dp",
|
|
60
|
+
kMzoRj: "xc342km",
|
|
61
|
+
ksu8eU: "xng3xce",
|
|
62
|
+
kaIpWk: "xh6dtrn",
|
|
63
|
+
kWkggS: "xjbqb8w xe9uy6x",
|
|
64
|
+
kMv6JI: "x9ynric",
|
|
65
|
+
kGuDYH: "xcr08ib",
|
|
66
|
+
kLWn49: "x1kq96og",
|
|
67
|
+
kMwMTN: "x1tgivj0",
|
|
68
|
+
kkrTdU: "x1ypdohk",
|
|
69
|
+
k9WMMc: "x1yc453h",
|
|
70
|
+
$$css: true
|
|
71
|
+
},
|
|
72
|
+
presetButtonActive: {
|
|
73
|
+
kWkggS: "xgcxg3y",
|
|
74
|
+
kMwMTN: "xqwr325",
|
|
75
|
+
$$css: true
|
|
76
|
+
}
|
|
77
|
+
};
|
|
35
78
|
const sizeStyles = {
|
|
36
79
|
sm: {
|
|
37
80
|
kZKoxP: "x6k0iem",
|
|
@@ -108,6 +151,7 @@ export function DateRangeInput({
|
|
|
108
151
|
statusVariant = 'attached',
|
|
109
152
|
labelTooltip,
|
|
110
153
|
numberOfMonths = 2,
|
|
154
|
+
weekStartsOn,
|
|
111
155
|
width,
|
|
112
156
|
xstyle,
|
|
113
157
|
className,
|
|
@@ -218,7 +262,8 @@ export function DateRangeInput({
|
|
|
218
262
|
...rest,
|
|
219
263
|
...mergeProps(themeProps('date-range-input', {
|
|
220
264
|
size,
|
|
221
|
-
status: status?.type ?? null
|
|
265
|
+
status: status?.type ?? null,
|
|
266
|
+
disabled: isDisabled ? 'disabled' : null
|
|
222
267
|
}), stylex.props(inputWrapperStyles.base, sizeStyles[size], isEffectivelyDisabled && inputWrapperStyles.disabled, status && inputStatusBorderStyles[status.type], status && !isEffectivelyDisabled && inputStatusHoverShadowStyles[status.type], status && inputStatusFocusWithinStyles[status.type], xstyle), className, style),
|
|
223
268
|
children: [/*#__PURE__*/_jsx("button", {
|
|
224
269
|
type: "button",
|
|
@@ -226,14 +271,7 @@ export function DateRangeInput({
|
|
|
226
271
|
disabled: isEffectivelyDisabled,
|
|
227
272
|
"aria-label": popover.isOpen ? t('@astryx.dateInput.toggleCalendarClose') : t('@astryx.dateInput.openCalendar'),
|
|
228
273
|
tabIndex: -1,
|
|
229
|
-
...
|
|
230
|
-
0: {
|
|
231
|
-
className: "x78zum5 x6s0dn4 xl56j7k x1717udv x1ghz6dp xc342km xng3xce xjbqb8w x1ypdohk xh6dtrn x1a2a7pz x1p25gnr x1y3gkto"
|
|
232
|
-
},
|
|
233
|
-
1: {
|
|
234
|
-
className: "x78zum5 x6s0dn4 xl56j7k x1717udv x1ghz6dp xc342km xng3xce xjbqb8w xh6dtrn x1a2a7pz x1p25gnr x1y3gkto x1h6gzvc"
|
|
235
|
-
}
|
|
236
|
-
}[!!isEffectivelyDisabled << 0],
|
|
274
|
+
...stylex.props(focusOutlineStyles.focusVisible, styles.iconButton, isEffectivelyDisabled && styles.iconButtonDisabled),
|
|
237
275
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
238
276
|
icon: "calendar",
|
|
239
277
|
size: "sm",
|
|
@@ -276,21 +314,12 @@ export function DateRangeInput({
|
|
|
276
314
|
}
|
|
277
315
|
}[!!!displayValue << 1 | !!isEffectivelyDisabled << 0],
|
|
278
316
|
children: displayValue || placeholder
|
|
279
|
-
}), hasClear && value !== null && !isEffectivelyDisabled && /*#__PURE__*/_jsx(
|
|
280
|
-
|
|
281
|
-
onClick: handleClear,
|
|
282
|
-
"aria-label": t('@astryx.dateInput.clear', {
|
|
317
|
+
}), hasClear && value !== null && !isEffectivelyDisabled && /*#__PURE__*/_jsx(InputClearButton, {
|
|
318
|
+
label: t('@astryx.dateInput.clear', {
|
|
283
319
|
label
|
|
284
320
|
}),
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
},
|
|
288
|
-
children: /*#__PURE__*/_jsx(Icon, {
|
|
289
|
-
icon: "close",
|
|
290
|
-
size: "sm",
|
|
291
|
-
color: "secondary",
|
|
292
|
-
...themeProps('date-range-input-clear-icon')
|
|
293
|
-
})
|
|
321
|
+
onClick: handleClear,
|
|
322
|
+
iconClassName: stableClassName('date-range-input-clear-icon')
|
|
294
323
|
}), isBusy && /*#__PURE__*/_jsx(Spinner, {
|
|
295
324
|
size: "sm"
|
|
296
325
|
}), statusIcon]
|
|
@@ -317,14 +346,7 @@ export function DateRangeInput({
|
|
|
317
346
|
,
|
|
318
347
|
"aria-current": isActive ? 'true' : undefined,
|
|
319
348
|
onClick: () => handlePresetClick(preset),
|
|
320
|
-
...
|
|
321
|
-
0: {
|
|
322
|
-
className: "x1lliihq xh8yej3 xtozwh x1ghz6dp xc342km xng3xce xh6dtrn xjbqb8w xe9uy6x x9ynric xcr08ib x1kq96og x1tgivj0 x1ypdohk x1yc453h x1a2a7pz x1p25gnr"
|
|
323
|
-
},
|
|
324
|
-
1: {
|
|
325
|
-
className: "x1lliihq xh8yej3 xtozwh x1ghz6dp xc342km xng3xce xh6dtrn x9ynric xcr08ib x1kq96og x1ypdohk x1yc453h x1a2a7pz x1p25gnr xgcxg3y xqwr325"
|
|
326
|
-
}
|
|
327
|
-
}[!!isActive << 0],
|
|
349
|
+
...stylex.props(focusOutlineStyles.focusVisible, styles.presetButton, isActive && styles.presetButtonActive),
|
|
328
350
|
children: preset.label
|
|
329
351
|
}, preset.label);
|
|
330
352
|
})
|
|
@@ -335,7 +357,8 @@ export function DateRangeInput({
|
|
|
335
357
|
min: min,
|
|
336
358
|
max: max,
|
|
337
359
|
dateConstraints: dateConstraints,
|
|
338
|
-
numberOfMonths: numberOfMonths
|
|
360
|
+
numberOfMonths: numberOfMonths,
|
|
361
|
+
weekStartsOn: weekStartsOn
|
|
339
362
|
})]
|
|
340
363
|
}), {
|
|
341
364
|
placement: 'below',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type InputStatus } from '../Field';
|
|
2
|
+
import { type DayOfWeek, type DayOfWeekName } from '../Calendar';
|
|
2
3
|
import type { BaseProps } from '../BaseProps';
|
|
3
4
|
import type { SizeValue } from '../utils/types';
|
|
4
5
|
export type ISODateTimeString = string & {
|
|
@@ -156,6 +157,13 @@ export interface DateTimeInputProps extends Omit<BaseProps, 'onChange' | 'defaul
|
|
|
156
157
|
* @default 1
|
|
157
158
|
*/
|
|
158
159
|
numberOfMonths?: 1 | 2;
|
|
160
|
+
/**
|
|
161
|
+
* First day of week in the calendar. Accepts a number
|
|
162
|
+
* (0 = Sunday … 6 = Saturday) or a three-letter day name ('sun'–'sat',
|
|
163
|
+
* case-insensitive).
|
|
164
|
+
* @default 0
|
|
165
|
+
*/
|
|
166
|
+
weekStartsOn?: DayOfWeek | DayOfWeekName;
|
|
159
167
|
}
|
|
160
168
|
/**
|
|
161
169
|
* A combined date and time picker with side-by-side date input and
|
|
@@ -171,7 +179,7 @@ export interface DateTimeInputProps extends Omit<BaseProps, 'onChange' | 'defaul
|
|
|
171
179
|
* />
|
|
172
180
|
* ```
|
|
173
181
|
*/
|
|
174
|
-
export declare function DateTimeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement, hasClear, placeholder: placeholderFromProps, timePlaceholder: timePlaceholderFromProps, timeLabel, size: sizeProp, status, labelTooltip, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateTimeInputProps): import("react").JSX.Element;
|
|
182
|
+
export declare function DateTimeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement, hasClear, placeholder: placeholderFromProps, timePlaceholder: timePlaceholderFromProps, timeLabel, size: sizeProp, status, labelTooltip, numberOfMonths, weekStartsOn, width, xstyle, className, style, ref, ...rest }: DateTimeInputProps): import("react").JSX.Element;
|
|
175
183
|
export declare namespace DateTimeInput {
|
|
176
184
|
var displayName: string;
|
|
177
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"AAsCA,OAAO,
|
|
1
|
+
{"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"AAsCA,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AA0BrB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAO9C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9D,YAAY,EACV,WAAW,IAAI,mBAAmB,EAClC,eAAe,IAAI,uBAAuB,GAC3C,MAAM,UAAU,CAAC;AA4ElB,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAC9C,SAAS,EACT,UAAU,GAAG,cAAc,CAC5B;IACC,8CAA8C;IAC9C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,uBAAuB,CAAC;IAErC;;;;OAIG;IACH,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAE3C;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAEzB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CAC1C;AAqCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,UAAkB,EAClB,UAAkB,EAClB,aAAiB,EACjB,QAAgB,EAChB,WAAW,EAAE,oBAAoB,EACjC,eAAe,EAAE,wBAAwB,EACzC,SAAS,EACT,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,YAAY,EACZ,cAAkB,EAClB,YAAY,EACZ,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,kBAAkB,+BA8oBpB;yBA/qBe,aAAa"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file DateTimeInput.tsx
|
|
7
|
-
* @input Uses React, Field, Calendar, usePopover, time parsing utilities
|
|
7
|
+
* @input Uses React, Field, Calendar, usePopover, useAnnounce, time parsing utilities
|
|
8
8
|
* @output Exports DateTimeInput component, DateTimeInputProps
|
|
9
9
|
* @position Core implementation; consumed by index.ts, tested by DateTimeInput.test.tsx
|
|
10
10
|
*
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
import { useId, useState, useCallback, useRef, useMemo, useOptimistic, useTransition } from 'react';
|
|
19
19
|
import * as stylex from '@stylexjs/stylex';
|
|
20
20
|
import "../theme/tokens.stylex.js";
|
|
21
|
-
import { colorVars, sizeVars, radiusVars, spacingVars, typographyVars, typeScaleVars
|
|
22
|
-
import { Field, inputWrapperStyles, inputStatusBorderStyles, inputStatusHoverShadowStyles, inputStatusFocusWithinStyles } from "../Field/index.js";
|
|
21
|
+
import { colorVars, sizeVars, radiusVars, spacingVars, typographyVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
22
|
+
import { Field, InputClearButton, inputWrapperStyles, inputStatusBorderStyles, inputStatusHoverShadowStyles, inputStatusFocusWithinStyles } from "../Field/index.js";
|
|
23
23
|
import { Icon } from "../Icon/index.js";
|
|
24
24
|
import { VisuallyHidden } from "../VisuallyHidden/index.js";
|
|
25
25
|
import { Spinner } from "../Spinner/index.js";
|
|
@@ -29,10 +29,12 @@ import { usePopover } from "../Popover/index.js";
|
|
|
29
29
|
import { useTooltip } from "../Tooltip/index.js";
|
|
30
30
|
import { useInputContainer } from "../hooks/useInputContainer.js";
|
|
31
31
|
import { useInputStatusIcon } from "../hooks/useInputStatusIcon.js";
|
|
32
|
-
import { parseDateInput, parseTimeInput, formatDisplayTime12h, formatDisplayTime24h, formatISOTime, isTimeInRange, adjustTime, mergeProps, mergeRefs } from "../utils/index.js";
|
|
32
|
+
import { parseDateInput, parseTimeInput, formatDisplayTime12h, formatDisplayTime24h, formatISOTime, isTimeInRange, adjustTime, mergeProps, mergeRefs, isFocusDetached } from "../utils/index.js";
|
|
33
33
|
import { plainDateFromISO, plainDateToISO, plainDateFormat, DATE_FORMAT_LONG } from "../utils/plainDate.js";
|
|
34
|
+
import { useAnnounce } from "../hooks/useAnnounce.js";
|
|
34
35
|
import { useSize } from "../SizeContext/SizeContext.js";
|
|
35
36
|
import { themeProps } from "../utils/themeProps.js";
|
|
37
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
36
38
|
import { useTranslator } from "../i18n/index.js";
|
|
37
39
|
|
|
38
40
|
/** Supported minute increments for arrow-key stepping of the time field. */
|
|
@@ -43,6 +45,23 @@ const styles = {
|
|
|
43
45
|
kOIVth: "x1txdalj",
|
|
44
46
|
$$css: true
|
|
45
47
|
},
|
|
48
|
+
iconButton: {
|
|
49
|
+
k1xSpc: "x78zum5",
|
|
50
|
+
kGNEyG: "x6s0dn4",
|
|
51
|
+
kjj79g: "xl56j7k",
|
|
52
|
+
kmVPX3: "x1717udv",
|
|
53
|
+
kogj98: "x1ghz6dp",
|
|
54
|
+
kMzoRj: "xc342km",
|
|
55
|
+
ksu8eU: "xng3xce",
|
|
56
|
+
kWkggS: "xjbqb8w",
|
|
57
|
+
kkrTdU: "x1ypdohk",
|
|
58
|
+
kaIpWk: "xh6dtrn",
|
|
59
|
+
$$css: true
|
|
60
|
+
},
|
|
61
|
+
iconButtonDisabled: {
|
|
62
|
+
kkrTdU: "x1h6gzvc",
|
|
63
|
+
$$css: true
|
|
64
|
+
},
|
|
46
65
|
dateWrapper: {
|
|
47
66
|
kUk6DE: "x98rzlu",
|
|
48
67
|
kCS8Yb: "x1r8uery",
|
|
@@ -142,6 +161,7 @@ export function DateTimeInput({
|
|
|
142
161
|
status,
|
|
143
162
|
labelTooltip,
|
|
144
163
|
numberOfMonths = 1,
|
|
164
|
+
weekStartsOn,
|
|
145
165
|
width,
|
|
146
166
|
xstyle,
|
|
147
167
|
className,
|
|
@@ -150,6 +170,10 @@ export function DateTimeInput({
|
|
|
150
170
|
...rest
|
|
151
171
|
}) {
|
|
152
172
|
const t = useTranslator();
|
|
173
|
+
// Speaks arrow-key stepping results through the persistent live regions:
|
|
174
|
+
// stepping programmatically rewrites a plain textbox's value, which screen
|
|
175
|
+
// readers do not announce on their own (WCAG 4.1.2).
|
|
176
|
+
const announce = useAnnounce();
|
|
153
177
|
const placeholder = placeholderFromProps ?? t('@astryx.dateTimeInput.placeholder');
|
|
154
178
|
const timePlaceholder = timePlaceholderFromProps ?? t('@astryx.dateTimeInput.timePlaceholder');
|
|
155
179
|
const size = useSize(sizeProp, 'md');
|
|
@@ -286,7 +310,18 @@ export function DateTimeInput({
|
|
|
286
310
|
const popover = usePopover({
|
|
287
311
|
dialogLabel: t('@astryx.dateTimeInput.dialogLabel'),
|
|
288
312
|
closeButtonLabel: t('@astryx.dateInput.closeCalendar'),
|
|
289
|
-
|
|
313
|
+
// Return focus to the date input when the calendar closes — but only when
|
|
314
|
+
// the dismiss left focus detached (Escape, or a click on non-focusable
|
|
315
|
+
// empty space), which the focus trap can't restore on its own. A native
|
|
316
|
+
// popover="auto" light-dismiss fires synchronously with the pointer event
|
|
317
|
+
// that moved focus, so if the user clicked another control — the time
|
|
318
|
+
// input, the clear button, another field, anywhere — focus has already
|
|
319
|
+
// landed there; reclaiming it would fight their click.
|
|
320
|
+
onHide: () => {
|
|
321
|
+
if (isFocusDetached()) {
|
|
322
|
+
dateInputRef.current?.focus();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
290
325
|
});
|
|
291
326
|
const handleCalendarToggle = useCallback(() => {
|
|
292
327
|
if (!isEffectivelyDisabled) {
|
|
@@ -453,10 +488,13 @@ export function DateTimeInput({
|
|
|
453
488
|
const combined = combineDateTime(valueParts.date, newTime);
|
|
454
489
|
if (combined) {
|
|
455
490
|
fireChange(combined);
|
|
491
|
+
// Screen readers do not announce the programmatic value rewrite,
|
|
492
|
+
// so speak the new time explicitly (WCAG 4.1.2).
|
|
493
|
+
announce(formatDisplayTime(newTime, hasSeconds));
|
|
456
494
|
}
|
|
457
495
|
}
|
|
458
496
|
}
|
|
459
|
-
}, [valueParts, hasSeconds, timeIncrement, timeMin, timeMax, fireChange]);
|
|
497
|
+
}, [valueParts, hasSeconds, timeIncrement, timeMin, timeMax, fireChange, announce, formatDisplayTime]);
|
|
460
498
|
|
|
461
499
|
// --- Clear ---
|
|
462
500
|
const handleClear = useCallback(() => {
|
|
@@ -495,7 +533,8 @@ export function DateTimeInput({
|
|
|
495
533
|
...rest,
|
|
496
534
|
...mergeProps(themeProps('date-time-input', {
|
|
497
535
|
size,
|
|
498
|
-
status: status?.type ?? null
|
|
536
|
+
status: status?.type ?? null,
|
|
537
|
+
disabled: isDisabled ? 'disabled' : null
|
|
499
538
|
}), stylex.props(styles.row, xstyle), className, style),
|
|
500
539
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
501
540
|
ref: popover.triggerRef,
|
|
@@ -508,14 +547,7 @@ export function DateTimeInput({
|
|
|
508
547
|
onClick: handleCalendarToggle,
|
|
509
548
|
disabled: isEffectivelyDisabled,
|
|
510
549
|
"aria-label": popover.isOpen ? t('@astryx.dateInput.toggleCalendarClose') : t('@astryx.dateInput.openCalendar'),
|
|
511
|
-
...
|
|
512
|
-
0: {
|
|
513
|
-
className: "x78zum5 x6s0dn4 xl56j7k x1717udv x1ghz6dp xc342km xng3xce xjbqb8w x1ypdohk xh6dtrn x1a2a7pz x1p25gnr x1y3gkto"
|
|
514
|
-
},
|
|
515
|
-
1: {
|
|
516
|
-
className: "x78zum5 x6s0dn4 xl56j7k x1717udv x1ghz6dp xc342km xng3xce xjbqb8w xh6dtrn x1a2a7pz x1p25gnr x1y3gkto x1h6gzvc"
|
|
517
|
-
}
|
|
518
|
-
}[!!isEffectivelyDisabled << 0],
|
|
550
|
+
...stylex.props(focusOutlineStyles.focusVisible, styles.iconButton, isEffectivelyDisabled && styles.iconButtonDisabled),
|
|
519
551
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
520
552
|
icon: "calendar",
|
|
521
553
|
size: "sm",
|
|
@@ -567,21 +599,12 @@ export function DateTimeInput({
|
|
|
567
599
|
as: "div",
|
|
568
600
|
role: "alert",
|
|
569
601
|
"aria-live": "assertive",
|
|
570
|
-
children: !isDateInputValid ? '
|
|
571
|
-
}), hasClear && value !== undefined && !isEffectivelyDisabled && /*#__PURE__*/_jsx(
|
|
572
|
-
|
|
573
|
-
onClick: handleClear,
|
|
574
|
-
"aria-label": t('@astryx.dateInput.clear', {
|
|
602
|
+
children: !isDateInputValid ? t('@astryx.dateInput.invalidDate') : ''
|
|
603
|
+
}), hasClear && value !== undefined && !isEffectivelyDisabled && /*#__PURE__*/_jsx(InputClearButton, {
|
|
604
|
+
label: t('@astryx.dateInput.clear', {
|
|
575
605
|
label
|
|
576
606
|
}),
|
|
577
|
-
|
|
578
|
-
className: "x78zum5 x6s0dn4 xl56j7k x1717udv x1ghz6dp xc342km xng3xce xjbqb8w x1ypdohk xh6dtrn x1a2a7pz x1p25gnr x1y3gkto"
|
|
579
|
-
},
|
|
580
|
-
children: /*#__PURE__*/_jsx(Icon, {
|
|
581
|
-
icon: "close",
|
|
582
|
-
size: "sm",
|
|
583
|
-
color: "secondary"
|
|
584
|
-
})
|
|
607
|
+
onClick: handleClear
|
|
585
608
|
}), isBusy && /*#__PURE__*/_jsx(Spinner, {
|
|
586
609
|
size: "sm"
|
|
587
610
|
}), statusIcon]
|
|
@@ -644,7 +667,7 @@ export function DateTimeInput({
|
|
|
644
667
|
as: "div",
|
|
645
668
|
role: "alert",
|
|
646
669
|
"aria-live": "assertive",
|
|
647
|
-
children: !isTimeInputValid ? '
|
|
670
|
+
children: !isTimeInputValid ? t('@astryx.timeInput.invalidTime') : ''
|
|
648
671
|
})]
|
|
649
672
|
})]
|
|
650
673
|
}), popover.render(/*#__PURE__*/_jsx(Calendar, {
|
|
@@ -655,7 +678,8 @@ export function DateTimeInput({
|
|
|
655
678
|
min: calendarMin,
|
|
656
679
|
max: calendarMax,
|
|
657
680
|
dateConstraints: dateConstraints,
|
|
658
|
-
numberOfMonths: numberOfMonths
|
|
681
|
+
numberOfMonths: numberOfMonths,
|
|
682
|
+
weekStartsOn: weekStartsOn
|
|
659
683
|
}), {
|
|
660
684
|
placement: 'below',
|
|
661
685
|
alignment: 'start'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAoB5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAoB5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAsB9C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,4EAA4E;AAC5E,UAAU,mBAAmB;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAuHD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc;;;;;EAUpE;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,QAAgB,EAChB,YAAY,EACZ,KAAW,EACX,SAAkB,EAClB,QAAQ,EACR,OAAoB,EACpB,OAAgB,EAChB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,sCA2Sb;yBA3Te,MAAM"}
|
package/dist/Dialog/Dialog.js
CHANGED
|
@@ -27,12 +27,14 @@ import { mergeProps, mergeRefs } from "../utils/index.js";
|
|
|
27
27
|
import { devWarn } from "../utils/devWarning.js";
|
|
28
28
|
import { DialogContext } from "./DialogContext.js";
|
|
29
29
|
import { themeProps } from "../utils/themeProps.js";
|
|
30
|
-
import {
|
|
30
|
+
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
31
|
+
|
|
31
32
|
/**
|
|
32
33
|
* Calculate a directional translate offset for dialog entry animation.
|
|
33
34
|
* Returns a normalized vector from the trigger element toward the viewport
|
|
34
35
|
* center, scaled to the given distance.
|
|
35
36
|
*/
|
|
37
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
36
38
|
function getDialogDirection(triggerEl, distance = 16) {
|
|
37
39
|
const rect = triggerEl.getBoundingClientRect();
|
|
38
40
|
const dx = rect.left + rect.width / 2 - window.innerWidth / 2;
|
|
@@ -91,8 +93,6 @@ const styles = {
|
|
|
91
93
|
k44tkh: "xqgcaz",
|
|
92
94
|
kyAemX: "x128ha8g",
|
|
93
95
|
kWV6AL: "xskzprw",
|
|
94
|
-
kI3sdo: "x17nn4n9",
|
|
95
|
-
kInvED: "x1wfwxd8 x7s97pk",
|
|
96
96
|
$$css: true
|
|
97
97
|
},
|
|
98
98
|
open: {
|
|
@@ -447,7 +447,7 @@ export function Dialog({
|
|
|
447
447
|
...safeProps,
|
|
448
448
|
...mergeProps(themeProps('dialog', {
|
|
449
449
|
variant
|
|
450
|
-
}),
|
|
450
|
+
}), focusOutlineProps.focusVisible(styles.dialog, isOpen && styles.open, styles.backdrop, !isFullscreen && dynamicStyles.sizing(width, maxHeight), hasPosition && (() => {
|
|
451
451
|
const o = resolveDialogPositionOffsets(position);
|
|
452
452
|
return dynamicStyles.position(o.top, o.insetInlineStart, o.insetInlineEnd, o.bottom);
|
|
453
453
|
})(), isFullscreen && styles.fullscreen, xstyle), className, style),
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Both modes use useListFocus for DOM-based keyboard navigation.
|
|
12
12
|
*
|
|
13
|
+
* Initial focus on open follows the input modality: a keyboard open
|
|
14
|
+
* (Enter / Space / ArrowDown on the trigger) focuses the first enabled item
|
|
15
|
+
* (APG menu-button); a pointer open focuses the menu container itself so no
|
|
16
|
+
* item reads as pre-selected, and the first ArrowDown then moves to item 1.
|
|
17
|
+
*
|
|
13
18
|
* SYNC: When modified, update these files to stay in sync:
|
|
14
19
|
* - /packages/core/src/DropdownMenu/DropdownMenu.doc.mjs
|
|
15
20
|
* - /packages/core/src/DropdownMenu/DropdownMenu.test.tsx
|
|
@@ -19,14 +24,28 @@
|
|
|
19
24
|
*/
|
|
20
25
|
import React, { type ReactNode } from 'react';
|
|
21
26
|
import { type ButtonProps } from '../Button';
|
|
22
|
-
import type {
|
|
27
|
+
import type { DropdownMenuItemProps } from './DropdownMenuItem';
|
|
23
28
|
import type { LayerAlignment, LayerPlacement } from '../Layer/useLayer';
|
|
24
29
|
import type { BaseProps } from '../BaseProps';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Data-mode shape for one menu row.
|
|
32
|
+
*
|
|
33
|
+
* The item fields are sourced from `DropdownMenuItemProps` — data mode renders
|
|
34
|
+
* through `DropdownMenuItem`, so the two APIs describe the same thing and must
|
|
35
|
+
* not drift. Only the fields listed here are part of the data API; add a key to
|
|
36
|
+
* the `Pick` to expose more of the item's props to `items`.
|
|
37
|
+
*/
|
|
38
|
+
export interface DropdownMenuItemData extends Pick<DropdownMenuItemProps, 'icon' | 'onClick' | 'isDisabled' | 'variant' | 'description' | 'endContent' | 'hasCloseOnSelect'> {
|
|
39
|
+
/**
|
|
40
|
+
* Stable identity for the row, used as its React key (as on
|
|
41
|
+
* `TreeListItemData`). Omit it and the row is keyed by position, which is
|
|
42
|
+
* correct for a fixed menu; set it when `items` can reorder, filter, or grow,
|
|
43
|
+
* so a row keeps its DOM node — and therefore keyboard focus — as the array
|
|
44
|
+
* changes around it.
|
|
45
|
+
*/
|
|
46
|
+
id?: string;
|
|
47
|
+
/** Primary label content. */
|
|
48
|
+
label: ReactNode;
|
|
30
49
|
/**
|
|
31
50
|
* Nested submenu entries. When present, this row becomes a submenu (a
|
|
32
51
|
* flyout revealing `items`) instead of a leaf action — no separate item
|
|
@@ -34,15 +53,21 @@ export interface DropdownMenuItemData {
|
|
|
34
53
|
*/
|
|
35
54
|
items?: DropdownMenuOption[];
|
|
36
55
|
}
|
|
37
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Data-mode shape for a divider row. The compound-mode peer is the
|
|
58
|
+
* `DropdownMenuDivider` component, which both modes render.
|
|
59
|
+
*/
|
|
60
|
+
export interface DropdownMenuDividerData {
|
|
38
61
|
type: 'divider';
|
|
39
62
|
}
|
|
40
63
|
export interface DropdownMenuSection {
|
|
41
64
|
type: 'section';
|
|
65
|
+
/** Stable identity for the group; see {@link DropdownMenuItemData.id}. */
|
|
66
|
+
id?: string;
|
|
42
67
|
title?: string;
|
|
43
68
|
items: DropdownMenuItemData[];
|
|
44
69
|
}
|
|
45
|
-
export type DropdownMenuOption = DropdownMenuItemData |
|
|
70
|
+
export type DropdownMenuOption = DropdownMenuItemData | DropdownMenuDividerData | DropdownMenuSection;
|
|
46
71
|
export type DropdownMenuButtonProps = Omit<ButtonProps, 'onClick'>;
|
|
47
72
|
interface DropdownMenuBaseProps extends BaseProps {
|
|
48
73
|
button?: DropdownMenuButtonProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../src/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../src/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAS,KAAK,WAAW,EAAC,MAAM,WAAW,CAAC;AAInD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAa9D,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAQtE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAiC5C;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,qBAAqB,EACnB,MAAM,GACN,SAAS,GACT,YAAY,GACZ,SAAS,GACT,aAAa,GACb,YAAY,GACZ,kBAAkB,CACrB;IACC;;;;;;OAMG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAC5B,oBAAoB,GAAG,uBAAuB,GAAG,mBAAmB,CAAC;AAMvE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEnE,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,qBAAsB,SAAQ,qBAAqB;IAC3D,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,yBAA0B,SAAQ,qBAAqB;IAC/D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAC3B,qBAAqB,GAAG,yBAAyB,CAAC;AA+BpD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,gBAAgB,EAC5B,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAiB,EACjB,SAAmB,EACnB,SAAmB,EACnB,SAAS,EACT,KAAK,EACL,MAAM,EACN,aAAa,EAAE,MAAM,EACrB,GAAG,KAAK,EACT,EAAE,iBAAiB,qBA2TnB;yBAzUe,YAAY"}
|
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Both modes use useListFocus for DOM-based keyboard navigation.
|
|
16
16
|
*
|
|
17
|
+
* Initial focus on open follows the input modality: a keyboard open
|
|
18
|
+
* (Enter / Space / ArrowDown on the trigger) focuses the first enabled item
|
|
19
|
+
* (APG menu-button); a pointer open focuses the menu container itself so no
|
|
20
|
+
* item reads as pre-selected, and the first ArrowDown then moves to item 1.
|
|
21
|
+
*
|
|
17
22
|
* SYNC: When modified, update these files to stay in sync:
|
|
18
23
|
* - /packages/core/src/DropdownMenu/DropdownMenu.doc.mjs
|
|
19
24
|
* - /packages/core/src/DropdownMenu/DropdownMenu.test.tsx
|
|
@@ -60,16 +65,6 @@ const styles = {
|
|
|
60
65
|
k7Eaqz: "xrzjruh",
|
|
61
66
|
$$css: true
|
|
62
67
|
},
|
|
63
|
-
popoverBlockGap: {
|
|
64
|
-
keoZOQ: "xcsaf9d",
|
|
65
|
-
k1K539: "x14cgwvg",
|
|
66
|
-
$$css: true
|
|
67
|
-
},
|
|
68
|
-
popoverInlineGap: {
|
|
69
|
-
keTefX: "x11g1kdw",
|
|
70
|
-
k71WvV: "xnur1sd",
|
|
71
|
-
$$css: true
|
|
72
|
-
},
|
|
73
68
|
popoverCustomWidth: width => [{
|
|
74
69
|
k7Eaqz: (typeof width === 'number' ? `${width}px` : width) != null ? "xkj4a21" : typeof width === 'number' ? `${width}px` : width,
|
|
75
70
|
$$css: true
|
|
@@ -82,6 +77,20 @@ const styles = {
|
|
|
82
77
|
// Types
|
|
83
78
|
// =============================================================================
|
|
84
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Data-mode shape for one menu row.
|
|
82
|
+
*
|
|
83
|
+
* The item fields are sourced from `DropdownMenuItemProps` — data mode renders
|
|
84
|
+
* through `DropdownMenuItem`, so the two APIs describe the same thing and must
|
|
85
|
+
* not drift. Only the fields listed here are part of the data API; add a key to
|
|
86
|
+
* the `Pick` to expose more of the item's props to `items`.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Data-mode shape for a divider row. The compound-mode peer is the
|
|
91
|
+
* `DropdownMenuDivider` component, which both modes render.
|
|
92
|
+
*/
|
|
93
|
+
|
|
85
94
|
// =============================================================================
|
|
86
95
|
// Props
|
|
87
96
|
// =============================================================================
|
|
@@ -170,6 +179,13 @@ export function DropdownMenu({
|
|
|
170
179
|
// Defer item focus until the layer has committed open, so focus restore
|
|
171
180
|
// captures the trigger instead of the first menu item.
|
|
172
181
|
const shouldFocusOnOpenRef = useRef(false);
|
|
182
|
+
|
|
183
|
+
// How the next open was initiated. Keyboard (and programmatic) opens focus
|
|
184
|
+
// the first enabled item per the APG menu-button pattern; pointer opens
|
|
185
|
+
// focus the menu container instead, so no item is visually highlighted as
|
|
186
|
+
// if pre-selected (#4477). Reset to 'keyboard' after every open so
|
|
187
|
+
// programmatic controlled opens keep the item-focus behavior.
|
|
188
|
+
const openModalityRef = useRef('keyboard');
|
|
173
189
|
const handleLayerShow = useCallback(() => {
|
|
174
190
|
onOpenChange?.(true);
|
|
175
191
|
if (!isControlled) {
|
|
@@ -229,14 +245,26 @@ export function DropdownMenu({
|
|
|
229
245
|
}
|
|
230
246
|
}, [controlledIsOpen, isControlled, popover]);
|
|
231
247
|
|
|
232
|
-
// Move focus into the menu only after the layer has committed open
|
|
248
|
+
// Move focus into the menu only after the layer has committed open,
|
|
249
|
+
// honoring the input modality: keyboard (and programmatic) opens land on
|
|
250
|
+
// the first enabled item per the APG menu-button pattern; pointer opens
|
|
251
|
+
// focus the menu container itself (tabIndex={-1}) so no item is
|
|
252
|
+
// highlighted as if pre-selected (#4477). Container focus keeps arrows,
|
|
253
|
+
// typeahead, Escape and Tab in the menu's onKeyDown, and is also the
|
|
254
|
+
// fallback when no item is focusable (e.g. all disabled), mirroring the
|
|
255
|
+
// submenu flyout fallback.
|
|
233
256
|
useEffect(() => {
|
|
234
257
|
if (!popover.isOpen || !shouldFocusOnOpenRef.current) {
|
|
235
258
|
return;
|
|
236
259
|
}
|
|
237
260
|
shouldFocusOnOpenRef.current = false;
|
|
238
|
-
requestAnimationFrame(() =>
|
|
239
|
-
|
|
261
|
+
requestAnimationFrame(() => {
|
|
262
|
+
if (openModalityRef.current === 'pointer' || !focusFirst()) {
|
|
263
|
+
listRef.current?.focus();
|
|
264
|
+
}
|
|
265
|
+
openModalityRef.current = 'keyboard';
|
|
266
|
+
});
|
|
267
|
+
}, [popover.isOpen, focusFirst, listRef]);
|
|
240
268
|
|
|
241
269
|
// Extend useListFocus with Enter/Space activation + typeahead
|
|
242
270
|
const listKeyDown = useCallback(e => {
|
|
@@ -269,25 +297,34 @@ export function DropdownMenu({
|
|
|
269
297
|
}
|
|
270
298
|
listNavKeyDown(e);
|
|
271
299
|
}, [listNavKeyDown, closeMenu, typeahead, ownsEvent]);
|
|
272
|
-
const openAndFocus = useCallback(() => {
|
|
300
|
+
const openAndFocus = useCallback((modality = 'keyboard') => {
|
|
301
|
+
openModalityRef.current = modality;
|
|
273
302
|
shouldFocusOnOpenRef.current = true;
|
|
274
303
|
popover.show();
|
|
275
304
|
}, [popover]);
|
|
276
|
-
const handleButtonClick = useCallback(
|
|
305
|
+
const handleButtonClick = useCallback(e => {
|
|
277
306
|
// If the menu was just closed by light dismiss (e.g. iOS Safari fires
|
|
278
307
|
// pointerdown → hide before the trigger's click), the click would
|
|
279
|
-
// otherwise immediately re-open it. Short-circuit within the guard
|
|
308
|
+
// otherwise immediately re-open it. Short-circuit within the guard
|
|
309
|
+
// window.
|
|
280
310
|
if (Date.now() - lastHideTimeRef.current < 50) {
|
|
281
311
|
return;
|
|
282
312
|
}
|
|
283
313
|
onClick?.();
|
|
314
|
+
// detail === 0 marks a synthesized click (screen reader / AT
|
|
315
|
+
// activation): treat it as keyboard so those users still land on the
|
|
316
|
+
// first item. Real pointer clicks report detail >= 1.
|
|
317
|
+
const modality = e.detail === 0 ? 'keyboard' : 'pointer';
|
|
284
318
|
if (isControlled) {
|
|
319
|
+
if (!controlledIsOpen) {
|
|
320
|
+
openModalityRef.current = modality;
|
|
321
|
+
}
|
|
285
322
|
onOpenChange?.(!controlledIsOpen);
|
|
286
323
|
} else {
|
|
287
324
|
if (popover.isOpen) {
|
|
288
325
|
popover.hide();
|
|
289
326
|
} else {
|
|
290
|
-
openAndFocus();
|
|
327
|
+
openAndFocus(modality);
|
|
291
328
|
}
|
|
292
329
|
}
|
|
293
330
|
}, [onClick, isControlled, onOpenChange, controlledIsOpen, popover, openAndFocus]);
|
|
@@ -309,8 +346,6 @@ export function DropdownMenu({
|
|
|
309
346
|
color: "inherit"
|
|
310
347
|
}) : undefined);
|
|
311
348
|
const popoverXstyle = menuWidth ? styles.popoverCustomWidth(menuWidth) : styles.popover;
|
|
312
|
-
const popoverGapStyle = placement === 'above' || placement === 'below' ? styles.popoverBlockGap : styles.popoverInlineGap;
|
|
313
|
-
|
|
314
349
|
// Context for compound items
|
|
315
350
|
const contextValue = useMemo(() => ({
|
|
316
351
|
closeMenu,
|
|
@@ -347,6 +382,12 @@ export function DropdownMenu({
|
|
|
347
382
|
ref: listRef,
|
|
348
383
|
id: menuId,
|
|
349
384
|
role: "menu"
|
|
385
|
+
// Focus target for pointer opens (not in the Tab order): holding
|
|
386
|
+
// focus on the container keeps key events (arrows, typeahead,
|
|
387
|
+
// Escape, Tab) inside the menu without highlighting any item.
|
|
388
|
+
// Mirrors the DropdownMenuSubMenu flyout container.
|
|
389
|
+
,
|
|
390
|
+
tabIndex: -1
|
|
350
391
|
// Give the menu an accessible name from its trigger's label, so
|
|
351
392
|
// screen readers announce e.g. "Actions menu" rather than an unnamed
|
|
352
393
|
// menu (menus-13).
|
|
@@ -361,7 +402,8 @@ export function DropdownMenu({
|
|
|
361
402
|
}), {
|
|
362
403
|
placement,
|
|
363
404
|
alignment,
|
|
364
|
-
|
|
405
|
+
offset: spacingVars['--spacing-1'],
|
|
406
|
+
xstyle: [popoverXstyle, layerAnimations[placement]]
|
|
365
407
|
})]
|
|
366
408
|
});
|
|
367
409
|
}
|