@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
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
26
|
import type {ReactNode} from 'react';
|
|
27
|
-
import {useCallback
|
|
27
|
+
import {useCallback} from 'react';
|
|
28
28
|
import * as stylex from '@stylexjs/stylex';
|
|
29
29
|
import {HoverCard} from '../HoverCard';
|
|
30
30
|
import {IconButton} from '../IconButton';
|
|
31
31
|
import {Icon} from '../Icon';
|
|
32
|
-
import {
|
|
32
|
+
import {useClipboard} from '../hooks/useClipboard';
|
|
33
33
|
import {useTranslator} from '../i18n';
|
|
34
34
|
import {themeProps} from '../utils/themeProps';
|
|
35
35
|
import {
|
|
@@ -108,7 +108,9 @@ const COPY_FEEDBACK_MS = 1500;
|
|
|
108
108
|
* The per-row copy affordance: a compact ghost `IconButton` that writes the
|
|
109
109
|
* row's value to the clipboard, flips `copy` → `check` for a moment, and
|
|
110
110
|
* announces the copy to a polite live region (a swapped aria-label alone
|
|
111
|
-
* isn't reliably announced). A clipboard rejection is a silent no-op.
|
|
111
|
+
* isn't reliably announced). A clipboard rejection is a silent no-op. The
|
|
112
|
+
* clipboard write, copied flag, reset timer, and announcement are owned by
|
|
113
|
+
* `useClipboard` — shared with CodeBlock's built-in copy button.
|
|
112
114
|
*
|
|
113
115
|
* Kept as its own component so its state/timer/effect only exist for rows that
|
|
114
116
|
* actually opt into copying — read-only rows render no button and carry none
|
|
@@ -116,36 +118,14 @@ const COPY_FEEDBACK_MS = 1500;
|
|
|
116
118
|
*/
|
|
117
119
|
function CopyButton({value}: {value: string}) {
|
|
118
120
|
const t = useTranslator();
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
const {copy, isCopied: copied} = useClipboard({
|
|
122
|
+
announce: t('@astryx.timestamp.copied'),
|
|
123
|
+
resetAfterMs: COPY_FEEDBACK_MS,
|
|
124
|
+
});
|
|
122
125
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
clearTimeout(resetTimerRef.current);
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
}, []);
|
|
130
|
-
|
|
131
|
-
const handleCopy = useCallback(async () => {
|
|
132
|
-
try {
|
|
133
|
-
await navigator.clipboard.writeText(value);
|
|
134
|
-
setCopied(true);
|
|
135
|
-
announce(t('@astryx.timestamp.copied'));
|
|
136
|
-
// Restart the reset timer on every copy so a rapid re-copy isn't
|
|
137
|
-
// reverted early by the previous click's timer.
|
|
138
|
-
if (resetTimerRef.current != null) {
|
|
139
|
-
clearTimeout(resetTimerRef.current);
|
|
140
|
-
}
|
|
141
|
-
resetTimerRef.current = setTimeout(() => {
|
|
142
|
-
resetTimerRef.current = null;
|
|
143
|
-
setCopied(false);
|
|
144
|
-
}, COPY_FEEDBACK_MS);
|
|
145
|
-
} catch {
|
|
146
|
-
// Clipboard failures leave the copied state unchanged.
|
|
147
|
-
}
|
|
148
|
-
}, [value, announce, t]);
|
|
126
|
+
const handleCopy = useCallback(() => {
|
|
127
|
+
void copy(value);
|
|
128
|
+
}, [copy, value]);
|
|
149
129
|
|
|
150
130
|
return (
|
|
151
131
|
<IconButton
|
|
@@ -163,9 +143,7 @@ function CopyButton({value}: {value: string}) {
|
|
|
163
143
|
? t('@astryx.timestamp.copied')
|
|
164
144
|
: t('@astryx.timestamp.copyValue', {value})
|
|
165
145
|
}
|
|
166
|
-
onClick={
|
|
167
|
-
void handleCopy();
|
|
168
|
-
}}
|
|
146
|
+
onClick={handleCopy}
|
|
169
147
|
{...themeProps('timestamp-copy-button')}
|
|
170
148
|
/>
|
|
171
149
|
);
|
|
@@ -69,6 +69,16 @@ export interface FormatInstantOptions {
|
|
|
69
69
|
* @default false
|
|
70
70
|
*/
|
|
71
71
|
isTimezoneShown?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* How the zone name is spelled when a format carries one. `'short'` is the
|
|
74
|
+
* abbreviation ("PST"); `'long'` spells it out ("Pacific Standard Time").
|
|
75
|
+
* Only `'full'` honours it — it is the one format that always names its zone.
|
|
76
|
+
* The spelled-out form backs a relative timestamp's accessible name, where an
|
|
77
|
+
* abbreviation reads as an unexpanded initialism to a screen reader
|
|
78
|
+
* (WCAG 3.1.4); every visible surface keeps the abbreviation.
|
|
79
|
+
* @default 'short'
|
|
80
|
+
*/
|
|
81
|
+
timeZoneNameStyle?: 'short' | 'long';
|
|
72
82
|
}
|
|
73
83
|
|
|
74
84
|
// =============================================================================
|
|
@@ -155,7 +165,11 @@ function getWallClock(date: Date, timeZone: string | undefined): WallClock {
|
|
|
155
165
|
export function formatInstant(
|
|
156
166
|
date: Date,
|
|
157
167
|
format: InstantFormat,
|
|
158
|
-
{
|
|
168
|
+
{
|
|
169
|
+
timeZone,
|
|
170
|
+
isTimezoneShown = false,
|
|
171
|
+
timeZoneNameStyle = 'short',
|
|
172
|
+
}: FormatInstantOptions = {},
|
|
159
173
|
): string {
|
|
160
174
|
const zone = timeZone === undefined ? {} : {timeZone};
|
|
161
175
|
const zoneName = isTimezoneShown ? {timeZoneName: 'short' as const} : {};
|
|
@@ -164,6 +178,7 @@ export function formatInstant(
|
|
|
164
178
|
case 'full':
|
|
165
179
|
return new Intl.DateTimeFormat(undefined, {
|
|
166
180
|
...FULL_OPTIONS,
|
|
181
|
+
timeZoneName: timeZoneNameStyle,
|
|
167
182
|
...zone,
|
|
168
183
|
}).format(date);
|
|
169
184
|
|
package/src/Token/Token.tsx
CHANGED
|
@@ -36,6 +36,7 @@ import {useInteractiveRole} from '../hooks/useInteractiveRole';
|
|
|
36
36
|
import {TokenLink} from './TokenLink';
|
|
37
37
|
import type {BaseProps} from '../BaseProps';
|
|
38
38
|
import {themeProps} from '../utils/themeProps';
|
|
39
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
39
40
|
import {useTranslator} from '../i18n';
|
|
40
41
|
import type {TokenColorMap} from './index';
|
|
41
42
|
|
|
@@ -146,14 +147,6 @@ const styles = stylex.create({
|
|
|
146
147
|
},
|
|
147
148
|
':active': `linear-gradient(${colorVars['--color-overlay-pressed']}, ${colorVars['--color-overlay-pressed']})`,
|
|
148
149
|
},
|
|
149
|
-
outline: {
|
|
150
|
-
default: null,
|
|
151
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
152
|
-
},
|
|
153
|
-
outlineOffset: {
|
|
154
|
-
default: '0',
|
|
155
|
-
':focus-visible': '2px',
|
|
156
|
-
},
|
|
157
150
|
},
|
|
158
151
|
disabled: {
|
|
159
152
|
cursor: 'not-allowed',
|
|
@@ -180,16 +173,6 @@ const styles = stylex.create({
|
|
|
180
173
|
overflow: 'hidden',
|
|
181
174
|
minWidth: 0,
|
|
182
175
|
},
|
|
183
|
-
focusVisibleOutline: {
|
|
184
|
-
outline: {
|
|
185
|
-
default: null,
|
|
186
|
-
':has(:focus-visible)': `2px solid ${colorVars['--color-accent']}`,
|
|
187
|
-
},
|
|
188
|
-
outlineOffset: {
|
|
189
|
-
default: '0',
|
|
190
|
-
':has(:focus-visible)': '2px',
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
176
|
removeButton: {
|
|
194
177
|
all: 'unset',
|
|
195
178
|
display: 'inline-flex',
|
|
@@ -203,10 +186,6 @@ const styles = stylex.create({
|
|
|
203
186
|
width: '16px',
|
|
204
187
|
height: '16px',
|
|
205
188
|
color: 'inherit',
|
|
206
|
-
outline: {
|
|
207
|
-
default: null,
|
|
208
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
209
|
-
},
|
|
210
189
|
'::after': {
|
|
211
190
|
content: '""',
|
|
212
191
|
position: 'absolute',
|
|
@@ -337,7 +316,7 @@ export function Token({
|
|
|
337
316
|
onRemove(e);
|
|
338
317
|
}}
|
|
339
318
|
disabled={isDisabled}
|
|
340
|
-
{...
|
|
319
|
+
{...focusOutlineProps.focusVisible(styles.removeButton)}>
|
|
341
320
|
<Icon icon="close" size="xsm" color="inherit" />
|
|
342
321
|
</button>
|
|
343
322
|
);
|
|
@@ -370,7 +349,7 @@ export function Token({
|
|
|
370
349
|
{...sharedProps}
|
|
371
350
|
{...mergeProps(
|
|
372
351
|
themeProps('token', {color, size}),
|
|
373
|
-
|
|
352
|
+
focusOutlineProps.focusVisible(
|
|
374
353
|
styles.base,
|
|
375
354
|
sizeStyles[size],
|
|
376
355
|
colorStyles[color],
|
|
@@ -415,12 +394,11 @@ export function Token({
|
|
|
415
394
|
{...sharedProps}
|
|
416
395
|
{...mergeProps(
|
|
417
396
|
themeProps('token', {color, size}),
|
|
418
|
-
|
|
397
|
+
focusOutlineProps.focusWithin(
|
|
419
398
|
styles.base,
|
|
420
399
|
sizeStyles[size],
|
|
421
400
|
colorStyles[color],
|
|
422
401
|
styles.interactive,
|
|
423
|
-
styles.focusVisibleOutline,
|
|
424
402
|
isDisabled && styles.disabled,
|
|
425
403
|
xstyle,
|
|
426
404
|
),
|
|
@@ -447,12 +425,11 @@ export function Token({
|
|
|
447
425
|
{...sharedProps}
|
|
448
426
|
{...mergeProps(
|
|
449
427
|
themeProps('token', {color, size}),
|
|
450
|
-
|
|
428
|
+
focusOutlineProps.focusWithin(
|
|
451
429
|
styles.base,
|
|
452
430
|
sizeStyles[size],
|
|
453
431
|
colorStyles[color],
|
|
454
432
|
styles.interactive,
|
|
455
|
-
styles.focusVisibleOutline,
|
|
456
433
|
isDisabled && styles.disabled,
|
|
457
434
|
xstyle,
|
|
458
435
|
),
|
|
@@ -210,7 +210,7 @@ export const docs = {
|
|
|
210
210
|
],
|
|
211
211
|
theming: {
|
|
212
212
|
targets: [
|
|
213
|
-
{className: 'astryx-tokenizer', visualProps: ['size', 'status']},
|
|
213
|
+
{className: 'astryx-tokenizer', visualProps: ['size', 'status'], states: ['disabled']},
|
|
214
214
|
],
|
|
215
215
|
},
|
|
216
216
|
usage: {
|
|
@@ -424,7 +424,7 @@ export const docsZh = {
|
|
|
424
424
|
],
|
|
425
425
|
theming: {
|
|
426
426
|
targets: [
|
|
427
|
-
{className: 'astryx-tokenizer', visualProps: ['size', 'status']},
|
|
427
|
+
{className: 'astryx-tokenizer', visualProps: ['size', 'status'], states: ['disabled']},
|
|
428
428
|
],
|
|
429
429
|
},
|
|
430
430
|
usage: {
|
|
@@ -1137,11 +1137,16 @@ describe('Tokenizer', () => {
|
|
|
1137
1137
|
});
|
|
1138
1138
|
});
|
|
1139
1139
|
|
|
1140
|
-
|
|
1141
1140
|
describe('Tokenizer statusVariant forwarding', () => {
|
|
1142
1141
|
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
1143
1142
|
const {container} = render(
|
|
1144
|
-
<Tokenizer
|
|
1143
|
+
<Tokenizer
|
|
1144
|
+
label="Members"
|
|
1145
|
+
searchSource={userSource}
|
|
1146
|
+
value={[]}
|
|
1147
|
+
onChange={() => {}}
|
|
1148
|
+
status={{type: 'error', message: 'Required'}}
|
|
1149
|
+
/>,
|
|
1145
1150
|
);
|
|
1146
1151
|
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
1147
1152
|
'data-variant',
|
|
@@ -1151,7 +1156,14 @@ describe('Tokenizer statusVariant forwarding', () => {
|
|
|
1151
1156
|
|
|
1152
1157
|
it('forwards statusVariant="detached" to the underlying Field status', () => {
|
|
1153
1158
|
const {container} = render(
|
|
1154
|
-
<Tokenizer
|
|
1159
|
+
<Tokenizer
|
|
1160
|
+
label="Members"
|
|
1161
|
+
searchSource={userSource}
|
|
1162
|
+
value={[]}
|
|
1163
|
+
onChange={() => {}}
|
|
1164
|
+
status={{type: 'error', message: 'Required'}}
|
|
1165
|
+
statusVariant="detached"
|
|
1166
|
+
/>,
|
|
1155
1167
|
);
|
|
1156
1168
|
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
1157
1169
|
'data-variant',
|
|
@@ -1159,3 +1171,33 @@ describe('Tokenizer statusVariant forwarding', () => {
|
|
|
1159
1171
|
);
|
|
1160
1172
|
});
|
|
1161
1173
|
});
|
|
1174
|
+
|
|
1175
|
+
describe('Tokenizer disabled theme state', () => {
|
|
1176
|
+
it('reflects disabled on the root target so themes can gate paint on it', () => {
|
|
1177
|
+
const {container} = render(
|
|
1178
|
+
<Tokenizer
|
|
1179
|
+
label="Members"
|
|
1180
|
+
searchSource={userSource}
|
|
1181
|
+
value={[]}
|
|
1182
|
+
onChange={() => {}}
|
|
1183
|
+
isDisabled
|
|
1184
|
+
/>,
|
|
1185
|
+
);
|
|
1186
|
+
const root = container.querySelector('.astryx-tokenizer');
|
|
1187
|
+
expect(root).toHaveAttribute('data-disabled', 'disabled');
|
|
1188
|
+
expect(root).toHaveClass('disabled');
|
|
1189
|
+
});
|
|
1190
|
+
|
|
1191
|
+
it('omits data-disabled when enabled, like status does', () => {
|
|
1192
|
+
const {container} = render(
|
|
1193
|
+
<Tokenizer
|
|
1194
|
+
label="Members"
|
|
1195
|
+
searchSource={userSource}
|
|
1196
|
+
value={[]}
|
|
1197
|
+
onChange={() => {}}
|
|
1198
|
+
/>,
|
|
1199
|
+
);
|
|
1200
|
+
const root = container.querySelector('.astryx-tokenizer');
|
|
1201
|
+
expect(root).not.toHaveAttribute('data-disabled');
|
|
1202
|
+
});
|
|
1203
|
+
});
|
|
@@ -730,7 +730,11 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
730
730
|
onBlurCapture={handleBlurCapture}
|
|
731
731
|
data-testid={testId}
|
|
732
732
|
{...mergeProps(
|
|
733
|
-
themeProps('tokenizer', {
|
|
733
|
+
themeProps('tokenizer', {
|
|
734
|
+
size,
|
|
735
|
+
status: status?.type,
|
|
736
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
737
|
+
}),
|
|
734
738
|
stylex.props(
|
|
735
739
|
inputWrapperStyles.base,
|
|
736
740
|
styles.wrapper,
|
|
@@ -828,7 +832,11 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
828
832
|
ref={placeholderRef}
|
|
829
833
|
onClick={handleWrapperClick}
|
|
830
834
|
{...mergeProps(
|
|
831
|
-
themeProps('tokenizer', {
|
|
835
|
+
themeProps('tokenizer', {
|
|
836
|
+
size,
|
|
837
|
+
status: status?.type,
|
|
838
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
839
|
+
}),
|
|
832
840
|
stylex.props(
|
|
833
841
|
inputWrapperStyles.base,
|
|
834
842
|
styles.wrapper,
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
import {
|
|
16
16
|
useCallback,
|
|
17
17
|
useEffect,
|
|
18
|
-
useMemo,
|
|
19
18
|
useRef,
|
|
20
19
|
type ReactNode,
|
|
21
20
|
type RefCallback,
|
|
@@ -57,18 +56,6 @@ const styles = stylex.create({
|
|
|
57
56
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
58
57
|
},
|
|
59
58
|
// Position-based margin styles
|
|
60
|
-
marginBlock: {
|
|
61
|
-
marginBlockStart: spacingVars['--spacing-1'],
|
|
62
|
-
marginBlockEnd: spacingVars['--spacing-1'],
|
|
63
|
-
marginInlineStart: 0,
|
|
64
|
-
marginInlineEnd: 0,
|
|
65
|
-
},
|
|
66
|
-
marginInline: {
|
|
67
|
-
marginBlockStart: 0,
|
|
68
|
-
marginBlockEnd: 0,
|
|
69
|
-
marginInlineStart: spacingVars['--spacing-1'],
|
|
70
|
-
marginInlineEnd: spacingVars['--spacing-1'],
|
|
71
|
-
},
|
|
72
59
|
// Content wrapper for padding
|
|
73
60
|
content: {
|
|
74
61
|
paddingBlockStart: spacingVars['--spacing-1'],
|
|
@@ -261,22 +248,13 @@ export function useTooltip(options: TooltipOptions = {}): TooltipReturn {
|
|
|
261
248
|
onHide,
|
|
262
249
|
} = options;
|
|
263
250
|
|
|
264
|
-
// Select margin style based on placement axis
|
|
265
|
-
const marginStyle =
|
|
266
|
-
placement === 'above' || placement === 'below'
|
|
267
|
-
? styles.marginBlock
|
|
268
|
-
: styles.marginInline;
|
|
269
|
-
|
|
270
251
|
const layer = useLayer({
|
|
271
252
|
mode: 'context',
|
|
272
253
|
onShow,
|
|
273
254
|
onHide,
|
|
274
255
|
});
|
|
275
256
|
|
|
276
|
-
const popoverXstyle =
|
|
277
|
-
() => [styles.container, marginStyle],
|
|
278
|
-
[marginStyle],
|
|
279
|
-
);
|
|
257
|
+
const popoverXstyle = styles.container;
|
|
280
258
|
|
|
281
259
|
const showTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
282
260
|
const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
@@ -498,6 +476,7 @@ export function useTooltip(options: TooltipOptions = {}): TooltipReturn {
|
|
|
498
476
|
const renderProps = {
|
|
499
477
|
placement: renderPlacement,
|
|
500
478
|
alignment: props?.alignment ?? alignment,
|
|
479
|
+
offset: spacingVars['--spacing-1'],
|
|
501
480
|
role: 'tooltip',
|
|
502
481
|
xstyle: [popoverXstyle, layerAnimations[renderPlacement]],
|
|
503
482
|
className: themeProps('tooltip').className,
|
package/src/TopNav/TopNav.tsx
CHANGED
|
@@ -243,9 +243,7 @@ export function TopNav({
|
|
|
243
243
|
</div>
|
|
244
244
|
)}
|
|
245
245
|
{hasCollapsibleContent && mobileContent && (
|
|
246
|
-
<
|
|
247
|
-
<Divider />
|
|
248
|
-
</div>
|
|
246
|
+
<Divider xstyle={styles.drawerDivider} />
|
|
249
247
|
)}
|
|
250
248
|
{mobileContent && (
|
|
251
249
|
<div {...stylex.props(styles.drawerExtraContent)}>
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
} from '../theme/tokens.stylex';
|
|
32
32
|
import {usePopover} from '../Popover/usePopover';
|
|
33
33
|
import {Link} from '../Link';
|
|
34
|
-
import {
|
|
34
|
+
import {Icon} from '../Icon';
|
|
35
35
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
36
36
|
import type {LinkComponentType} from '../Link/types';
|
|
37
37
|
import {mergeProps, mergeRefs} from '../utils';
|
|
@@ -149,6 +149,16 @@ const styles = stylex.create({
|
|
|
149
149
|
minHeight: spacingVars['--spacing-7'],
|
|
150
150
|
color: colorVars['--color-icon-secondary'],
|
|
151
151
|
},
|
|
152
|
+
// The registry chevron is a 1em SVG, so it has always rendered at the
|
|
153
|
+
// heading's inherited font size. Icon's size box would repin it to a fixed
|
|
154
|
+
// rem (the nearest, sm, is 1rem = 16px vs the 14px base here), so hold the
|
|
155
|
+
// glyph on the inherited em — the 28px chevron box above is unchanged, and
|
|
156
|
+
// the glyph keeps tracking the surrounding text.
|
|
157
|
+
chevronGlyph: {
|
|
158
|
+
width: '1em',
|
|
159
|
+
height: '1em',
|
|
160
|
+
fontSize: 'inherit',
|
|
161
|
+
},
|
|
152
162
|
headerEndContent: {
|
|
153
163
|
flexShrink: 0,
|
|
154
164
|
display: 'flex',
|
|
@@ -182,14 +192,9 @@ const styles = stylex.create({
|
|
|
182
192
|
marginInline: spacingVars['--spacing-1'],
|
|
183
193
|
cursor: 'pointer',
|
|
184
194
|
},
|
|
195
|
+
// Composes over `chevron` — the flipped popover copy differs only by the
|
|
196
|
+
// rotation, so it carries just that.
|
|
185
197
|
popoverChevron: {
|
|
186
|
-
flexShrink: 0,
|
|
187
|
-
display: 'flex',
|
|
188
|
-
alignItems: 'center',
|
|
189
|
-
justifyContent: 'center',
|
|
190
|
-
minWidth: spacingVars['--spacing-7'],
|
|
191
|
-
minHeight: spacingVars['--spacing-7'],
|
|
192
|
-
color: colorVars['--color-icon-secondary'],
|
|
193
198
|
transform: 'rotate(180deg)',
|
|
194
199
|
},
|
|
195
200
|
popover: {
|
|
@@ -313,7 +318,6 @@ export function TopNavHeading({
|
|
|
313
318
|
...props
|
|
314
319
|
}: TopNavHeadingProps) {
|
|
315
320
|
const t = useTranslator();
|
|
316
|
-
const chevronDownIcon = useIcon('chevronDown');
|
|
317
321
|
const LinkComponent = useLinkComponent(as);
|
|
318
322
|
// When the logo is wrapped in a link it needs its own accessible name (the
|
|
319
323
|
// logo image itself is decorative). Prefer an explicit logoLabel, fall back
|
|
@@ -404,7 +408,12 @@ export function TopNavHeading({
|
|
|
404
408
|
);
|
|
405
409
|
|
|
406
410
|
const chevronElement = showChevron && (
|
|
407
|
-
<
|
|
411
|
+
<Icon
|
|
412
|
+
icon="chevronDown"
|
|
413
|
+
size="sm"
|
|
414
|
+
color="secondary"
|
|
415
|
+
xstyle={[styles.chevron, styles.chevronGlyph]}
|
|
416
|
+
/>
|
|
408
417
|
);
|
|
409
418
|
|
|
410
419
|
const headerEndContentElement = headerEndContent && (
|
|
@@ -420,7 +429,12 @@ export function TopNavHeading({
|
|
|
420
429
|
onClick={triggerProps.onClick}>
|
|
421
430
|
{logo && <span {...stylex.props(styles.logo)}>{logo}</span>}
|
|
422
431
|
{renderTextContent(
|
|
423
|
-
<
|
|
432
|
+
<Icon
|
|
433
|
+
icon="chevronDown"
|
|
434
|
+
size="sm"
|
|
435
|
+
color="secondary"
|
|
436
|
+
xstyle={[styles.chevron, styles.chevronGlyph, styles.popoverChevron]}
|
|
437
|
+
/>,
|
|
424
438
|
)}
|
|
425
439
|
</button>
|
|
426
440
|
);
|
|
@@ -488,6 +502,8 @@ export function TopNavHeading({
|
|
|
488
502
|
)}>
|
|
489
503
|
{logo && <span {...stylex.props(styles.logo)}>{logo}</span>}
|
|
490
504
|
{renderTextContent(
|
|
505
|
+
// Stays a <button>: this box is the popover trigger, so it carries
|
|
506
|
+
// the accessible name and handlers — only the glyph moves to Icon.
|
|
491
507
|
<button
|
|
492
508
|
type="button"
|
|
493
509
|
aria-label={t('@astryx.topNav.heading.openMenu')}
|
|
@@ -497,7 +513,12 @@ export function TopNavHeading({
|
|
|
497
513
|
}}
|
|
498
514
|
{...popover.triggerProps}
|
|
499
515
|
{...stylex.props(styles.chevron, styles.interactive)}>
|
|
500
|
-
|
|
516
|
+
<Icon
|
|
517
|
+
icon="chevronDown"
|
|
518
|
+
size="sm"
|
|
519
|
+
color="inherit"
|
|
520
|
+
xstyle={styles.chevronGlyph}
|
|
521
|
+
/>
|
|
501
522
|
</button>,
|
|
502
523
|
)}
|
|
503
524
|
{headerEndContentElement}
|
|
@@ -557,6 +578,9 @@ export function TopNavHeading({
|
|
|
557
578
|
))}
|
|
558
579
|
{renderTextContent(
|
|
559
580
|
showChevron ? (
|
|
581
|
+
// Stays a <button>: this box is the popover trigger, so it
|
|
582
|
+
// carries the accessible name and handlers — only the glyph
|
|
583
|
+
// moves to Icon.
|
|
560
584
|
<button
|
|
561
585
|
type="button"
|
|
562
586
|
aria-label={t('@astryx.topNav.heading.openMenu')}
|
|
@@ -566,7 +590,12 @@ export function TopNavHeading({
|
|
|
566
590
|
}}
|
|
567
591
|
{...popover.triggerProps}
|
|
568
592
|
{...stylex.props(styles.chevron, styles.interactive)}>
|
|
569
|
-
|
|
593
|
+
<Icon
|
|
594
|
+
icon="chevronDown"
|
|
595
|
+
size="sm"
|
|
596
|
+
color="inherit"
|
|
597
|
+
xstyle={styles.chevronGlyph}
|
|
598
|
+
/>
|
|
570
599
|
</button>
|
|
571
600
|
) : undefined,
|
|
572
601
|
)}
|
|
@@ -35,6 +35,7 @@ import {navItemStyles, type NavItemSize} from '../NavItem/navItemStyles.stylex';
|
|
|
35
35
|
import {mergeProps} from '../utils';
|
|
36
36
|
import {useAppShellMobile} from '../AppShell/AppShellMobileContext';
|
|
37
37
|
import {themeProps} from '../utils/themeProps';
|
|
38
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
38
39
|
|
|
39
40
|
/**
|
|
40
41
|
* NavItem styles with hover/selected states
|
|
@@ -63,14 +64,6 @@ const styles = stylex.create({
|
|
|
63
64
|
},
|
|
64
65
|
':active': colorVars['--color-overlay-pressed'],
|
|
65
66
|
},
|
|
66
|
-
outline: {
|
|
67
|
-
default: null,
|
|
68
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
69
|
-
},
|
|
70
|
-
outlineOffset: {
|
|
71
|
-
default: '0',
|
|
72
|
-
':focus-visible': '2px',
|
|
73
|
-
},
|
|
74
67
|
},
|
|
75
68
|
selected: {
|
|
76
69
|
color: colorVars['--color-text-primary'],
|
|
@@ -87,16 +80,6 @@ const styles = stylex.create({
|
|
|
87
80
|
paddingInline: spacingVars['--spacing-2'],
|
|
88
81
|
},
|
|
89
82
|
// Drawer mode — focus outline (base item + selected come from navItemStyles)
|
|
90
|
-
drawerFocus: {
|
|
91
|
-
outline: {
|
|
92
|
-
default: null,
|
|
93
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
94
|
-
},
|
|
95
|
-
outlineOffset: {
|
|
96
|
-
default: '0',
|
|
97
|
-
':focus-visible': '2px',
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
83
|
});
|
|
101
84
|
|
|
102
85
|
export interface TopNavItemProps extends BaseProps<HTMLAnchorElement> {
|
|
@@ -246,10 +229,9 @@ export function TopNavItem({
|
|
|
246
229
|
mode: 'drawer',
|
|
247
230
|
selected: isSelected ? 'selected' : null,
|
|
248
231
|
}),
|
|
249
|
-
|
|
232
|
+
focusOutlineProps.focusVisible(
|
|
250
233
|
navItemStyles.item,
|
|
251
234
|
navItemStyles[size],
|
|
252
|
-
styles.drawerFocus,
|
|
253
235
|
isSelected && navItemStyles.selected,
|
|
254
236
|
isDisabled && navItemStyles.disabled,
|
|
255
237
|
xstyle,
|
|
@@ -283,7 +265,7 @@ export function TopNavItem({
|
|
|
283
265
|
themeProps('top-nav-item', {
|
|
284
266
|
selected: isSelected ? 'selected' : null,
|
|
285
267
|
}),
|
|
286
|
-
|
|
268
|
+
focusOutlineProps.focusVisible(
|
|
287
269
|
styles.base,
|
|
288
270
|
isSelected && styles.selected,
|
|
289
271
|
isDisabled && navItemStyles.disabled,
|
|
@@ -7,6 +7,11 @@ export const docs = {
|
|
|
7
7
|
subComponentOf: 'TopNav',
|
|
8
8
|
displayName: 'Top Nav Mega Menu',
|
|
9
9
|
description: 'Navigation item that displays a full-width mega menu panel on hover. Uses a slots API with items and featured props. TopNavMegaMenuItem renders itself in both desktop and mobile drawer modes. Supports inline collapsible drawer via render mode context.',
|
|
10
|
+
// The panel anchors to the nearest <nav>; wrap the preview in a TopNav so
|
|
11
|
+
// it opens below the bar instead of pinning to the viewport corner (#4905).
|
|
12
|
+
playground: {
|
|
13
|
+
wrapper: {component: 'TopNav'},
|
|
14
|
+
},
|
|
10
15
|
props: [
|
|
11
16
|
{
|
|
12
17
|
name: 'label',
|