@astryxdesign/core 0.3.0 → 0.4.0
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.map +1 -1
- package/dist/Banner/Banner.js +15 -14
- 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 +11 -15
- 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 +35 -33
- 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 +24 -23
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +11 -16
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +22 -17
- 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/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/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 +167 -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 +56 -53
- 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.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +78 -75
- 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/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 +96 -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 +2 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +164 -94
- 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/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.js +11 -10
- 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/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 +7 -15
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- 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 +74 -85
- 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/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 +16 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +8 -0
- 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 +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.d.ts +107 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +130 -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 +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- 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 +12 -0
- package/locales/pseudo.json +9 -0
- package/package.json +7 -2
- 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.tsx +9 -6
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.tsx +21 -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 +115 -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 +64 -0
- package/src/ComplexSelector/ComplexSelector.tsx +46 -29
- 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 +93 -11
- package/src/DateInput/DateInput.tsx +41 -19
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +24 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +75 -0
- package/src/DateTimeInput/DateTimeInput.tsx +35 -8
- 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/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/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 +45 -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 +186 -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 +43 -38
- 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 +9 -1
- package/src/MultiSelector/MultiSelector.test.tsx +255 -16
- package/src/MultiSelector/MultiSelector.tsx +103 -99
- 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.tsx +6 -7
- 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 +124 -22
- 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 +7 -4
- package/src/Selector/Selector.test.tsx +935 -25
- package/src/Selector/Selector.tsx +189 -106
- 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/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 +8 -8
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -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 +30 -3
- package/src/TimeInput/TimeInput.tsx +9 -26
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- 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.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 +206 -7
- 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/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 +24 -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 +61 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +13 -0
- package/src/utils/focusOutline.stylex.ts +163 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +1 -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
|
@@ -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,7 @@ 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 {stableClassName} from '../naming';
|
|
57
65
|
import {useTranslator} from '../i18n';
|
|
58
66
|
|
|
59
67
|
export type {DateRange} from '../Calendar';
|
|
@@ -355,6 +363,14 @@ export interface DateRangeInputProps extends Omit<
|
|
|
355
363
|
* @default 2
|
|
356
364
|
*/
|
|
357
365
|
numberOfMonths?: 1 | 2;
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* First day of week in the calendar. Accepts a number
|
|
369
|
+
* (0 = Sunday … 6 = Saturday) or a three-letter day name ('sun'–'sat',
|
|
370
|
+
* case-insensitive).
|
|
371
|
+
* @default 0
|
|
372
|
+
*/
|
|
373
|
+
weekStartsOn?: DayOfWeek | DayOfWeekName;
|
|
358
374
|
}
|
|
359
375
|
|
|
360
376
|
/**
|
|
@@ -396,6 +412,7 @@ export function DateRangeInput({
|
|
|
396
412
|
statusVariant = 'attached',
|
|
397
413
|
labelTooltip,
|
|
398
414
|
numberOfMonths = 2,
|
|
415
|
+
weekStartsOn,
|
|
399
416
|
width,
|
|
400
417
|
xstyle,
|
|
401
418
|
className,
|
|
@@ -548,6 +565,7 @@ export function DateRangeInput({
|
|
|
548
565
|
themeProps('date-range-input', {
|
|
549
566
|
size,
|
|
550
567
|
status: status?.type ?? null,
|
|
568
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
551
569
|
}),
|
|
552
570
|
stylex.props(
|
|
553
571
|
inputWrapperStyles.base,
|
|
@@ -612,18 +630,11 @@ export function DateRangeInput({
|
|
|
612
630
|
{displayValue || placeholder}
|
|
613
631
|
</button>
|
|
614
632
|
{hasClear && value !== null && !isEffectivelyDisabled && (
|
|
615
|
-
<
|
|
616
|
-
|
|
633
|
+
<InputClearButton
|
|
634
|
+
label={t('@astryx.dateInput.clear', {label})}
|
|
617
635
|
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>
|
|
636
|
+
iconClassName={stableClassName('date-range-input-clear-icon')}
|
|
637
|
+
/>
|
|
627
638
|
)}
|
|
628
639
|
{isBusy && <Spinner size="sm" />}
|
|
629
640
|
{statusIcon}
|
|
@@ -667,6 +678,7 @@ export function DateRangeInput({
|
|
|
667
678
|
max={max}
|
|
668
679
|
dateConstraints={dateConstraints}
|
|
669
680
|
numberOfMonths={numberOfMonths}
|
|
681
|
+
weekStartsOn={weekStartsOn}
|
|
670
682
|
/>
|
|
671
683
|
</div>,
|
|
672
684
|
{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
|
};
|
|
@@ -820,6 +820,62 @@ describe('DateTimeInput', () => {
|
|
|
820
820
|
expect(onChange.mock.calls[0][0]).toContain('14:31');
|
|
821
821
|
});
|
|
822
822
|
});
|
|
823
|
+
|
|
824
|
+
describe('weekStartsOn', () => {
|
|
825
|
+
// The calendar popover renders in the top layer; jsdom keeps the content in
|
|
826
|
+
// the DOM but role queries skip it, so read the columnheaders directly.
|
|
827
|
+
const openAndReadWeekdays = (container: HTMLElement): (string | null)[] => {
|
|
828
|
+
fireEvent.keyDown(screen.getAllByRole('combobox')[0], {key: 'ArrowDown'});
|
|
829
|
+
return Array.from(container.querySelectorAll('[role="columnheader"]'))
|
|
830
|
+
.slice(0, 7)
|
|
831
|
+
.map(h => h.textContent);
|
|
832
|
+
};
|
|
833
|
+
|
|
834
|
+
it('defaults to a Sunday-first week', () => {
|
|
835
|
+
const {container} = render(
|
|
836
|
+
<DateTimeInput label="When" onChange={() => {}} />,
|
|
837
|
+
);
|
|
838
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
839
|
+
'Su',
|
|
840
|
+
'Mo',
|
|
841
|
+
'Tu',
|
|
842
|
+
'We',
|
|
843
|
+
'Th',
|
|
844
|
+
'Fr',
|
|
845
|
+
'Sa',
|
|
846
|
+
]);
|
|
847
|
+
});
|
|
848
|
+
|
|
849
|
+
it('forwards a numeric weekStartsOn to the calendar', () => {
|
|
850
|
+
const {container} = render(
|
|
851
|
+
<DateTimeInput label="When" onChange={() => {}} weekStartsOn={1} />,
|
|
852
|
+
);
|
|
853
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
854
|
+
'Mo',
|
|
855
|
+
'Tu',
|
|
856
|
+
'We',
|
|
857
|
+
'Th',
|
|
858
|
+
'Fr',
|
|
859
|
+
'Sa',
|
|
860
|
+
'Su',
|
|
861
|
+
]);
|
|
862
|
+
});
|
|
863
|
+
|
|
864
|
+
it('accepts a three-letter day name', () => {
|
|
865
|
+
const {container} = render(
|
|
866
|
+
<DateTimeInput label="When" onChange={() => {}} weekStartsOn="mon" />,
|
|
867
|
+
);
|
|
868
|
+
expect(openAndReadWeekdays(container)).toEqual([
|
|
869
|
+
'Mo',
|
|
870
|
+
'Tu',
|
|
871
|
+
'We',
|
|
872
|
+
'Th',
|
|
873
|
+
'Fr',
|
|
874
|
+
'Sa',
|
|
875
|
+
'Su',
|
|
876
|
+
]);
|
|
877
|
+
});
|
|
878
|
+
});
|
|
823
879
|
// ===========================================================================
|
|
824
880
|
// Segment theme targets (#4075)
|
|
825
881
|
// ===========================================================================
|
|
@@ -931,3 +987,22 @@ describe('DateTimeInput', () => {
|
|
|
931
987
|
});
|
|
932
988
|
});
|
|
933
989
|
});
|
|
990
|
+
|
|
991
|
+
describe('DateTimeInput disabled theme state', () => {
|
|
992
|
+
it('reflects disabled on the root target so themes can gate paint on it', () => {
|
|
993
|
+
const {container} = render(
|
|
994
|
+
<DateTimeInput label="Meeting" onChange={() => {}} isDisabled />,
|
|
995
|
+
);
|
|
996
|
+
const root = container.querySelector('.astryx-date-time-input');
|
|
997
|
+
expect(root).toHaveAttribute('data-disabled', 'disabled');
|
|
998
|
+
expect(root).toHaveClass('disabled');
|
|
999
|
+
});
|
|
1000
|
+
|
|
1001
|
+
it('omits data-disabled when enabled, like status does', () => {
|
|
1002
|
+
const {container} = render(
|
|
1003
|
+
<DateTimeInput label="Meeting" onChange={() => {}} />,
|
|
1004
|
+
);
|
|
1005
|
+
const root = container.querySelector('.astryx-date-time-input');
|
|
1006
|
+
expect(root).not.toHaveAttribute('data-disabled');
|
|
1007
|
+
});
|
|
1008
|
+
});
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
} from '../theme/tokens.stylex';
|
|
39
39
|
import {
|
|
40
40
|
Field,
|
|
41
|
+
InputClearButton,
|
|
41
42
|
type InputStatus,
|
|
42
43
|
inputWrapperStyles,
|
|
43
44
|
inputStatusBorderStyles,
|
|
@@ -47,7 +48,13 @@ import {
|
|
|
47
48
|
import {Icon} from '../Icon';
|
|
48
49
|
import {VisuallyHidden} from '../VisuallyHidden';
|
|
49
50
|
import {Spinner} from '../Spinner';
|
|
50
|
-
import {
|
|
51
|
+
import {
|
|
52
|
+
Calendar,
|
|
53
|
+
type ISODateString,
|
|
54
|
+
type CalendarHandle,
|
|
55
|
+
type DayOfWeek,
|
|
56
|
+
type DayOfWeekName,
|
|
57
|
+
} from '../Calendar';
|
|
51
58
|
import {useCalendarConstraints} from '../Calendar/hooks';
|
|
52
59
|
import {usePopover} from '../Popover';
|
|
53
60
|
import {useTooltip} from '../Tooltip';
|
|
@@ -64,6 +71,7 @@ import {
|
|
|
64
71
|
adjustTime,
|
|
65
72
|
mergeProps,
|
|
66
73
|
mergeRefs,
|
|
74
|
+
isFocusDetached,
|
|
67
75
|
} from '../utils';
|
|
68
76
|
import {
|
|
69
77
|
plainDateFromISO,
|
|
@@ -348,6 +356,14 @@ export interface DateTimeInputProps extends Omit<
|
|
|
348
356
|
* @default 1
|
|
349
357
|
*/
|
|
350
358
|
numberOfMonths?: 1 | 2;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* First day of week in the calendar. Accepts a number
|
|
362
|
+
* (0 = Sunday … 6 = Saturday) or a three-letter day name ('sun'–'sat',
|
|
363
|
+
* case-insensitive).
|
|
364
|
+
* @default 0
|
|
365
|
+
*/
|
|
366
|
+
weekStartsOn?: DayOfWeek | DayOfWeekName;
|
|
351
367
|
}
|
|
352
368
|
|
|
353
369
|
function splitDateTime(dt: ISODateTimeString | undefined): {
|
|
@@ -425,6 +441,7 @@ export function DateTimeInput({
|
|
|
425
441
|
status,
|
|
426
442
|
labelTooltip,
|
|
427
443
|
numberOfMonths = 1,
|
|
444
|
+
weekStartsOn,
|
|
428
445
|
width,
|
|
429
446
|
xstyle,
|
|
430
447
|
className,
|
|
@@ -602,7 +619,18 @@ export function DateTimeInput({
|
|
|
602
619
|
const popover = usePopover({
|
|
603
620
|
dialogLabel: t('@astryx.dateTimeInput.dialogLabel'),
|
|
604
621
|
closeButtonLabel: t('@astryx.dateInput.closeCalendar'),
|
|
605
|
-
|
|
622
|
+
// Return focus to the date input when the calendar closes — but only when
|
|
623
|
+
// the dismiss left focus detached (Escape, or a click on non-focusable
|
|
624
|
+
// empty space), which the focus trap can't restore on its own. A native
|
|
625
|
+
// popover="auto" light-dismiss fires synchronously with the pointer event
|
|
626
|
+
// that moved focus, so if the user clicked another control — the time
|
|
627
|
+
// input, the clear button, another field, anywhere — focus has already
|
|
628
|
+
// landed there; reclaiming it would fight their click.
|
|
629
|
+
onHide: () => {
|
|
630
|
+
if (isFocusDetached()) {
|
|
631
|
+
dateInputRef.current?.focus();
|
|
632
|
+
}
|
|
633
|
+
},
|
|
606
634
|
});
|
|
607
635
|
|
|
608
636
|
const handleCalendarToggle = useCallback(() => {
|
|
@@ -877,6 +905,7 @@ export function DateTimeInput({
|
|
|
877
905
|
themeProps('date-time-input', {
|
|
878
906
|
size,
|
|
879
907
|
status: status?.type ?? null,
|
|
908
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
880
909
|
}),
|
|
881
910
|
stylex.props(styles.row, xstyle),
|
|
882
911
|
className,
|
|
@@ -962,13 +991,10 @@ export function DateTimeInput({
|
|
|
962
991
|
{!isDateInputValid ? 'Invalid date' : ''}
|
|
963
992
|
</VisuallyHidden>
|
|
964
993
|
{hasClear && value !== undefined && !isEffectivelyDisabled && (
|
|
965
|
-
<
|
|
966
|
-
|
|
994
|
+
<InputClearButton
|
|
995
|
+
label={t('@astryx.dateInput.clear', {label})}
|
|
967
996
|
onClick={handleClear}
|
|
968
|
-
|
|
969
|
-
{...stylex.props(styles.iconButton)}>
|
|
970
|
-
<Icon icon="close" size="sm" color="secondary" />
|
|
971
|
-
</button>
|
|
997
|
+
/>
|
|
972
998
|
)}
|
|
973
999
|
{isBusy && <Spinner size="sm" />}
|
|
974
1000
|
{statusIcon}
|
|
@@ -1050,6 +1076,7 @@ export function DateTimeInput({
|
|
|
1050
1076
|
max={calendarMax}
|
|
1051
1077
|
dateConstraints={dateConstraints}
|
|
1052
1078
|
numberOfMonths={numberOfMonths}
|
|
1079
|
+
weekStartsOn={weekStartsOn}
|
|
1053
1080
|
/>,
|
|
1054
1081
|
{placement: 'below', alignment: 'start'},
|
|
1055
1082
|
)}
|
package/src/Dialog/Dialog.tsx
CHANGED
|
@@ -50,6 +50,7 @@ import {devWarn} from '../utils/devWarning';
|
|
|
50
50
|
import {DialogContext} from './DialogContext';
|
|
51
51
|
import {themeProps} from '../utils/themeProps';
|
|
52
52
|
import type {DialogVariantMap} from './index';
|
|
53
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
53
54
|
|
|
54
55
|
/**
|
|
55
56
|
* Calculate a directional translate offset for dialog entry animation.
|
|
@@ -137,14 +138,6 @@ const styles = stylex.create({
|
|
|
137
138
|
animationDuration: durationVars['--duration-medium-max'],
|
|
138
139
|
animationTimingFunction: easeVars['--ease-standard'],
|
|
139
140
|
animationFillMode: 'backwards' as const,
|
|
140
|
-
outline: {
|
|
141
|
-
default: null,
|
|
142
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
143
|
-
},
|
|
144
|
-
outlineOffset: {
|
|
145
|
-
default: '0',
|
|
146
|
-
':focus-visible': '2px',
|
|
147
|
-
},
|
|
148
141
|
},
|
|
149
142
|
// Applied via isOpen prop — avoids :where([open]) attribute selectors
|
|
150
143
|
// which have zero specificity and can lose to default styles depending
|
|
@@ -640,7 +633,7 @@ export function Dialog({
|
|
|
640
633
|
{...safeProps}
|
|
641
634
|
{...mergeProps(
|
|
642
635
|
themeProps('dialog', {variant}),
|
|
643
|
-
|
|
636
|
+
focusOutlineProps.focusVisible(
|
|
644
637
|
styles.dialog,
|
|
645
638
|
isOpen && styles.open,
|
|
646
639
|
styles.backdrop,
|
|
@@ -24,17 +24,12 @@ export const docs = {
|
|
|
24
24
|
theming: {
|
|
25
25
|
targets: [
|
|
26
26
|
{className: 'astryx-dropdown-menu'},
|
|
27
|
-
{className: 'astryx-dropdown-menu-item', visualProps: ['size']},
|
|
27
|
+
{className: 'astryx-dropdown-menu-item', visualProps: ['size', 'variant']},
|
|
28
28
|
{
|
|
29
29
|
className: 'astryx-dropdown-menu-radio',
|
|
30
30
|
visualProps: ['size'],
|
|
31
31
|
states: ['checked', 'disabled'],
|
|
32
32
|
},
|
|
33
|
-
{
|
|
34
|
-
className: 'astryx-dropdown-menu-radio-dot',
|
|
35
|
-
visualProps: ['size'],
|
|
36
|
-
states: ['checked', 'disabled'],
|
|
37
|
-
},
|
|
38
33
|
{className: 'astryx-dropdown-menu-section-heading'},
|
|
39
34
|
{className: 'astryx-dropdown-menu-divider'},
|
|
40
35
|
{className: 'astryx-dropdown-menu-indicator-icon'},
|
|
@@ -59,7 +54,7 @@ export const docs = {
|
|
|
59
54
|
{
|
|
60
55
|
name: 'items',
|
|
61
56
|
type: 'DropdownMenuOption[]',
|
|
62
|
-
description: 'Array of menu entries. Each entry is one of: an action item `{label, onClick?, icon?, isDisabled?}
|
|
57
|
+
description: 'Array of menu entries. Each entry is one of: an action item `{label, onClick?, icon?, description?, endContent?, isDisabled?, variant?, hasCloseOnSelect?, id?}` (variant `"destructive"` renders it in the error color; `endContent` holds trailing content such as a keyboard-shortcut hint; `id` is the row\'s stable React key, needed only when the array reorders or filters), a divider `{type: "divider"}`, or a section `{type: "section", title?, id?, items: [...action items]}`.',
|
|
63
58
|
required: true,
|
|
64
59
|
},
|
|
65
60
|
{
|
|
@@ -101,8 +96,9 @@ export const docs = {
|
|
|
101
96
|
default: 'true',
|
|
102
97
|
}, {
|
|
103
98
|
name: 'children',
|
|
104
|
-
type: '
|
|
105
|
-
description:
|
|
99
|
+
type: 'ReactNode',
|
|
100
|
+
description:
|
|
101
|
+
'Compound-mode menu content: DropdownMenuItem, DropdownMenuDivider, DropdownMenuSubMenu, and the selectable items. Mutually exclusive with `items`.',
|
|
106
102
|
},
|
|
107
103
|
],
|
|
108
104
|
components: [
|