@astryxdesign/core 0.1.9 → 0.2.0-canary.0e01213
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 +107 -0
- package/dist/Avatar/Avatar.d.ts +42 -3
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +190 -59
- package/dist/Avatar/AvatarStatusDot.d.ts +6 -4
- package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +7 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +58 -6
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +7 -2
- package/dist/Banner/Banner.js +2 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -4
- package/dist/Breadcrumbs/index.d.ts +1 -0
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +2 -1
- package/dist/Button/Button.d.ts +1 -1
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +6 -4
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +50 -9
- package/dist/Calendar/dayCellUtils.d.ts +4 -4
- package/dist/Calendar/dayCellUtils.js +2 -2
- package/dist/Calendar/styles.d.ts +30 -31
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +30 -31
- package/dist/Card/Card.js +1 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +22 -12
- package/dist/Center/Center.d.ts +20 -3
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +10 -2
- package/dist/Chat/ChatComposerInput.js +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +3 -1
- package/dist/Chat/ChatLayout.d.ts +7 -0
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +16 -5
- package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
- package/dist/Chat/ChatMessageBubble.js +8 -8
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +10 -3
- package/dist/Chat/useTriggerMenu.js +2 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +6 -6
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +19 -4
- package/dist/Citation/Citation.d.ts +22 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +20 -6
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +16 -10
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +3 -1
- package/dist/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +42 -3
- package/dist/CommandPalette/CommandPaletteItem.js +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +23 -5
- package/dist/ContextMenu/index.d.ts +1 -0
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +3 -1
- package/dist/DateInput/DateInput.d.ts +10 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +33 -19
- package/dist/DateRangeInput/DateRangeInput.d.ts +10 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +23 -20
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +23 -18
- package/dist/Divider/Divider.d.ts +2 -2
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +13 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts +6 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +22 -5
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +18 -12
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +42 -64
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +5 -2
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +3 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +10 -3
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +104 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +435 -0
- package/dist/DropdownMenu/index.d.ts +10 -0
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +13 -0
- package/dist/DropdownMenu/menuItemHover.d.ts +24 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -0
- package/dist/DropdownMenu/menuItemHover.js +34 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts +8 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemRoles.js +10 -1
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +27 -10
- package/dist/Field/Field.d.ts +3 -1
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +4 -1
- package/dist/Field/FieldLabel.d.ts +2 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -5
- package/dist/Field/inputStyles.stylex.d.ts +1 -0
- package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
- package/dist/Field/inputStyles.stylex.js +1 -0
- package/dist/FieldStatus/FieldStatus.d.ts +10 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +51 -5
- package/dist/FileInput/FileInput.d.ts +10 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +93 -65
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +3 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +10 -4
- package/dist/Icon/Icon.d.ts +15 -1
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +19 -3
- package/dist/Item/Item.d.ts +16 -3
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +31 -6
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +10 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +34 -15
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +6 -3
- package/dist/List/ListItem.d.ts +11 -1
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +2 -0
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +7 -0
- package/dist/MetadataList/MetadataList.d.ts +1 -1
- package/dist/MetadataList/MetadataList.d.ts.map +1 -1
- package/dist/MetadataList/MetadataList.js +4 -2
- package/dist/MultiSelector/MultiSelector.d.ts +9 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +87 -45
- package/dist/NavMenu/NavHeadingMenuItem.js +1 -1
- package/dist/NumberInput/NumberInput.d.ts +10 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +22 -17
- package/dist/Outline/Outline.js +2 -2
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +11 -3
- package/dist/PowerSearch/PowerSearch.d.ts +9 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +2 -0
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +6 -1
- package/dist/RadioList/RadioList.d.ts +2 -2
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +5 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +49 -19
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +5 -3
- package/dist/Selector/Selector.d.ts +8 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +72 -19
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +5 -5
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +13 -10
- package/dist/SideNav/SideNavItem.d.ts +1 -1
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +12 -10
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +2 -2
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +87 -34
- package/dist/Spinner/Spinner.d.ts +3 -2
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +11 -2
- package/dist/Switch/Switch.d.ts +8 -1
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +171 -91
- package/dist/TabList/Tab.js +2 -2
- package/dist/TabList/TabList.d.ts +2 -11
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +5 -9
- package/dist/TabList/TabListContext.d.ts +0 -5
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +0 -5
- package/dist/TabList/TabMenu.js +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +30 -4
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +15 -11
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +18 -3
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +58 -30
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +3 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +15 -7
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +65 -25
- package/dist/Table/types.d.ts +32 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Text/Text.d.ts +10 -1
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +25 -2
- package/dist/Text/index.d.ts +2 -2
- package/dist/Text/index.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 +119 -52
- package/dist/TextInput/TextInput.d.ts +10 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +20 -17
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +51 -45
- package/dist/TimeInput/TimeInput.d.ts +10 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +17 -17
- package/dist/Timestamp/Timestamp.d.ts +31 -3
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +48 -77
- package/dist/Timestamp/formatInstant.d.ts +41 -0
- package/dist/Timestamp/formatInstant.d.ts.map +1 -0
- package/dist/Timestamp/formatInstant.js +177 -0
- package/dist/Timestamp/index.d.ts +1 -0
- package/dist/Timestamp/index.d.ts.map +1 -1
- package/dist/Timestamp/tooltipEntries.d.ts +56 -0
- package/dist/Timestamp/tooltipEntries.d.ts.map +1 -0
- package/dist/Timestamp/tooltipEntries.js +163 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +61 -9
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +3 -1
- package/dist/Token/Token.d.ts +34 -4
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +85 -45
- package/dist/Token/TokenLink.d.ts +62 -0
- package/dist/Token/TokenLink.d.ts.map +1 -0
- package/dist/Token/TokenLink.js +76 -0
- package/dist/Token/index.d.ts +1 -1
- package/dist/Token/index.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.d.ts +9 -2
- 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 +17 -1
- package/dist/TopNav/TopNavItem.d.ts +3 -1
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +30 -3
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +9 -3
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +1 -0
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +8 -6
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +32 -14
- package/dist/Typeahead/BaseTypeahead.d.ts +9 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +22 -11
- package/dist/Typeahead/Typeahead.d.ts +9 -2
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +11 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +20 -10
- package/dist/astryx.css +115 -35
- package/dist/astryx.umd.js +51 -51
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.pool.stylex.d.ts +281 -0
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.pool.stylex.js +281 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/isRtlElement.d.ts +18 -0
- package/dist/hooks/isRtlElement.d.ts.map +1 -0
- package/dist/hooks/isRtlElement.js +27 -0
- package/dist/hooks/useAnnounce.d.ts +3 -0
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +39 -1
- package/dist/hooks/useContainerReveal.d.ts +83 -0
- package/dist/hooks/useContainerReveal.d.ts.map +1 -0
- package/dist/hooks/useContainerReveal.js +123 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +52 -11
- package/dist/hooks/useGridFocus.d.ts +6 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +12 -9
- package/dist/hooks/useHotkeys.d.ts +9 -0
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +9 -0
- package/dist/hooks/useInputStatusIcon.d.ts +38 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -0
- package/dist/hooks/useInputStatusIcon.js +169 -0
- package/dist/hooks/useKeyboardHint.d.ts +1 -1
- package/dist/hooks/useKeyboardHint.d.ts.map +1 -1
- package/dist/hooks/useKeyboardHint.js +4 -2
- package/dist/hooks/useListFocus.d.ts +39 -1
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +54 -9
- package/dist/i18n/InternationalizationContext.d.ts +1 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +3 -0
- package/dist/i18n/InternationalizationProvider.d.ts +8 -1
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +5 -1
- package/dist/i18n/getLocaleDirection.d.ts +18 -0
- package/dist/i18n/getLocaleDirection.d.ts.map +1 -0
- package/dist/i18n/getLocaleDirection.js +29 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +7 -1
- package/dist/i18n/useDirection.d.ts +2 -0
- package/dist/i18n/useDirection.d.ts.map +1 -0
- package/dist/i18n/useDirection.js +27 -0
- package/dist/theme/defineTheme.d.ts +6 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +13 -0
- package/dist/theme/expandColorScale.d.ts +19 -2
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +38 -10
- package/dist/theme/index.d.ts +3 -3
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/types.d.ts +39 -2
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/plainDate.d.ts +17 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +23 -4
- package/dist/utils/rtlStyles.d.ts +24 -0
- package/dist/utils/rtlStyles.d.ts.map +1 -0
- package/dist/utils/rtlStyles.js +27 -0
- package/locales/en.json +120 -0
- package/locales/pseudo.json +90 -0
- package/package.json +8 -3
- package/src/Avatar/Avatar.doc.mjs +50 -3
- package/src/Avatar/Avatar.test.tsx +218 -0
- package/src/Avatar/Avatar.tsx +285 -79
- package/src/Avatar/AvatarStatusDot.doc.mjs +4 -4
- package/src/Avatar/AvatarStatusDot.tsx +6 -4
- package/src/AvatarGroup/AvatarGroup.doc.mjs +2 -0
- package/src/AvatarGroup/AvatarGroup.test.tsx +162 -2
- package/src/AvatarGroup/AvatarGroup.tsx +58 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +5 -2
- package/src/Banner/Banner.tsx +6 -6
- package/src/Breadcrumbs/BreadcrumbItem.tsx +10 -10
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +52 -1
- package/src/Breadcrumbs/index.ts +4 -0
- package/src/Button/Button.doc.mjs +0 -4
- package/src/Button/Button.test.tsx +16 -0
- package/src/Button/Button.tsx +6 -4
- package/src/Calendar/Calendar.test.tsx +170 -20
- package/src/Calendar/Calendar.tsx +73 -16
- package/src/Calendar/dayCellUtils.test.ts +18 -18
- package/src/Calendar/dayCellUtils.ts +2 -2
- package/src/Calendar/styles.ts +33 -39
- package/src/Card/Card.tsx +1 -1
- package/src/Carousel/Carousel.tsx +25 -6
- package/src/Center/Center.doc.mjs +38 -0
- package/src/Center/Center.test.tsx +75 -0
- package/src/Center/Center.tsx +37 -2
- package/src/Chat/ChatComposer.doc.mjs +2 -2
- package/src/Chat/ChatComposerInput.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.tsx +2 -2
- package/src/Chat/ChatDictationButton.tsx +7 -1
- package/src/Chat/ChatLayout.test.tsx +57 -0
- package/src/Chat/ChatLayout.tsx +26 -5
- package/src/Chat/ChatMessageBubble.tsx +15 -10
- package/src/Chat/ChatSystemMessage.test.tsx +5 -0
- package/src/Chat/ChatToolCalls.tsx +9 -2
- package/src/Chat/useTriggerMenu.tsx +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +6 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +23 -0
- package/src/CheckboxInput/CheckboxInput.tsx +21 -6
- package/src/CheckboxList/CheckboxList.doc.mjs +6 -0
- package/src/CheckboxList/CheckboxList.test.tsx +94 -3
- package/src/CheckboxList/CheckboxListItem.tsx +17 -10
- package/src/Citation/Citation.doc.mjs +4 -3
- package/src/Citation/Citation.test.tsx +97 -0
- package/src/Citation/Citation.tsx +43 -11
- package/src/CodeBlock/CodeBlock.test.tsx +17 -0
- package/src/CodeBlock/CodeBlock.tsx +38 -11
- package/src/Collapsible/Collapsible.doc.mjs +1 -0
- package/src/Collapsible/Collapsible.test.tsx +7 -0
- package/src/Collapsible/Collapsible.tsx +16 -6
- package/src/CommandPalette/CommandPalette.test.tsx +95 -1
- package/src/CommandPalette/CommandPalette.tsx +41 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +59 -2
- package/src/ContextMenu/ContextMenu.tsx +22 -11
- package/src/ContextMenu/index.ts +5 -0
- package/src/DateInput/DateInput.doc.mjs +25 -0
- package/src/DateInput/DateInput.test.tsx +230 -0
- package/src/DateInput/DateInput.tsx +51 -29
- package/src/DateRangeInput/DateRangeInput.doc.mjs +16 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +140 -0
- package/src/DateRangeInput/DateRangeInput.tsx +42 -30
- package/src/DateTimeInput/DateTimeInput.doc.mjs +22 -1
- package/src/DateTimeInput/DateTimeInput.test.tsx +112 -0
- package/src/DateTimeInput/DateTimeInput.tsx +44 -39
- package/src/Divider/Divider.test.tsx +32 -8
- package/src/Divider/Divider.tsx +14 -1
- package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -2
- package/src/DropdownMenu/DropdownMenu.test.tsx +95 -0
- package/src/DropdownMenu/DropdownMenu.tsx +31 -12
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +49 -66
- package/src/DropdownMenu/DropdownMenuItem.tsx +9 -3
- package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +4 -12
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +9 -10
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +19 -4
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +84 -2
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +88 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +680 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +569 -0
- package/src/DropdownMenu/index.ts +16 -0
- package/src/DropdownMenu/menuItemHover.ts +40 -0
- package/src/DropdownMenu/menuItemRoles.ts +9 -0
- package/src/DropdownMenu/renderDropdownItems.tsx +40 -14
- package/src/Field/Field.doc.mjs +4 -0
- package/src/Field/Field.tsx +14 -9
- package/src/Field/FieldLabel.test.tsx +25 -0
- package/src/Field/FieldLabel.tsx +12 -3
- package/src/Field/inputStyles.stylex.ts +2 -0
- package/src/FieldStatus/FieldStatus.doc.mjs +1 -0
- package/src/FieldStatus/FieldStatus.test.tsx +133 -0
- package/src/FieldStatus/FieldStatus.tsx +61 -4
- package/src/FileInput/FileInput.doc.mjs +23 -2
- package/src/FileInput/FileInput.test.tsx +104 -13
- package/src/FileInput/FileInput.tsx +106 -79
- package/src/Heading/Heading.tsx +2 -1
- package/src/HoverCard/useHoverCard.tsx +15 -3
- package/src/Icon/Icon.doc.mjs +13 -0
- package/src/Icon/Icon.test.tsx +89 -0
- package/src/Icon/Icon.tsx +51 -3
- package/src/Item/Item.doc.mjs +5 -0
- package/src/Item/Item.test.tsx +88 -0
- package/src/Item/Item.tsx +57 -11
- package/src/Layer/layerAnimations.stylex.ts +23 -0
- package/src/Lightbox/Lightbox.test.tsx +33 -0
- package/src/Lightbox/Lightbox.tsx +30 -10
- package/src/List/List.test.tsx +17 -29
- package/src/List/List.tsx +6 -1
- package/src/List/ListItem.doc.mjs +12 -0
- package/src/List/ListItem.tsx +13 -0
- package/src/Markdown/Markdown.test.tsx +21 -0
- package/src/Markdown/Markdown.tsx +4 -0
- package/src/MetadataList/MetadataList.test.tsx +24 -0
- package/src/MetadataList/MetadataList.tsx +6 -2
- package/src/MultiSelector/MultiSelector.doc.mjs +20 -0
- package/src/MultiSelector/MultiSelector.test.tsx +436 -0
- package/src/MultiSelector/MultiSelector.tsx +133 -67
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NumberInput/NumberInput.doc.mjs +21 -0
- package/src/NumberInput/NumberInput.test.tsx +71 -0
- package/src/NumberInput/NumberInput.tsx +35 -26
- package/src/Outline/Outline.test.tsx +12 -12
- package/src/Outline/Outline.tsx +2 -2
- package/src/Pagination/Pagination.tsx +11 -3
- package/src/PowerSearch/PowerSearch.doc.mjs +15 -0
- package/src/PowerSearch/PowerSearch.test.tsx +23 -0
- package/src/PowerSearch/PowerSearch.tsx +10 -1
- package/src/ProgressBar/ProgressBar.test.tsx +34 -0
- package/src/ProgressBar/ProgressBar.tsx +16 -1
- package/src/RadioList/RadioList.doc.mjs +6 -0
- package/src/RadioList/RadioList.test.tsx +26 -4
- package/src/RadioList/RadioList.tsx +2 -2
- package/src/RadioList/RadioListItem.tsx +12 -5
- package/src/Resizable/ResizeHandle.test.tsx +94 -0
- package/src/Resizable/ResizeHandle.tsx +70 -20
- package/src/SegmentedControl/SegmentedControl.test.tsx +28 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +22 -2
- package/src/Selector/Selector.doc.mjs +15 -0
- package/src/Selector/Selector.test.tsx +400 -0
- package/src/Selector/Selector.tsx +95 -23
- package/src/SideNav/SideNav.tsx +1 -8
- package/src/SideNav/SideNavCollapseButton.tsx +9 -7
- package/src/SideNav/SideNavItem.tsx +5 -3
- package/src/Skeleton/Skeleton.test.tsx +16 -0
- package/src/Skeleton/Skeleton.tsx +13 -1
- package/src/Slider/Slider.doc.mjs +6 -0
- package/src/Slider/Slider.test.tsx +240 -12
- package/src/Slider/Slider.tsx +96 -23
- package/src/Spinner/Spinner.test.tsx +10 -8
- package/src/Spinner/Spinner.tsx +15 -5
- package/src/Switch/Switch.doc.mjs +142 -42
- package/src/Switch/Switch.test.tsx +111 -0
- package/src/Switch/Switch.tsx +149 -32
- package/src/TabList/Tab.tsx +2 -2
- package/src/TabList/TabList.doc.mjs +0 -6
- package/src/TabList/TabList.test.tsx +3 -15
- package/src/TabList/TabList.tsx +6 -17
- package/src/TabList/TabListContext.ts +0 -6
- package/src/TabList/TabMenu.tsx +2 -2
- package/src/Table/BaseTable.tsx +34 -2
- package/src/Table/Table.doc.mjs +11 -0
- package/src/Table/Table.test.tsx +85 -0
- package/src/Table/TableCell.tsx +3 -3
- package/src/Table/TableHeaderCell.tsx +3 -3
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +9 -6
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +19 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +48 -21
- package/src/Table/plugins/selection/useTableSelection.test.tsx +61 -3
- package/src/Table/plugins/selection/useTableSelection.tsx +3 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +38 -9
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +161 -2
- package/src/Table/plugins/tree/useTableTreeData.tsx +71 -14
- package/src/Table/types.ts +33 -0
- package/src/Table/useTableRowExpansion.doc.mjs +55 -2
- package/src/Table/useTableRowStatus.doc.mjs +1 -1
- package/src/Table/useTableTreeData.doc.mjs +9 -0
- package/src/Text/Heading.doc.mjs +3 -3
- package/src/Text/Text.doc.mjs +1 -1
- package/src/Text/Text.test.tsx +42 -0
- package/src/Text/Text.tsx +25 -1
- package/src/Text/index.ts +2 -6
- package/src/TextArea/TextArea.doc.mjs +23 -2
- package/src/TextArea/TextArea.test.tsx +132 -4
- package/src/TextArea/TextArea.tsx +161 -67
- package/src/TextInput/TextInput.doc.mjs +21 -0
- package/src/TextInput/TextInput.test.tsx +150 -0
- package/src/TextInput/TextInput.tsx +28 -25
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
- package/src/Thumbnail/Thumbnail.test.tsx +24 -1
- package/src/Thumbnail/Thumbnail.tsx +28 -35
- package/src/TimeInput/TimeInput.doc.mjs +21 -0
- package/src/TimeInput/TimeInput.test.tsx +23 -0
- package/src/TimeInput/TimeInput.tsx +24 -25
- package/src/Timestamp/Timestamp.doc.mjs +32 -6
- package/src/Timestamp/Timestamp.test.tsx +371 -0
- package/src/Timestamp/Timestamp.tsx +96 -93
- package/src/Timestamp/formatInstant.ts +218 -0
- package/src/Timestamp/index.ts +4 -0
- package/src/Timestamp/tooltipEntries.test.ts +552 -0
- package/src/Timestamp/tooltipEntries.ts +210 -0
- package/src/Toast/ToastViewport.test.tsx +218 -8
- package/src/Toast/ToastViewport.tsx +71 -12
- package/src/ToggleButton/ToggleButton.test.tsx +24 -0
- package/src/ToggleButton/ToggleButton.tsx +19 -1
- package/src/Token/Token.test.tsx +166 -15
- package/src/Token/Token.tsx +104 -47
- package/src/Token/TokenLink.tsx +107 -0
- package/src/Token/index.ts +1 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +23 -1
- package/src/Tokenizer/Tokenizer.test.tsx +23 -0
- package/src/Tokenizer/Tokenizer.tsx +14 -2
- package/src/Tooltip/Tooltip.test.tsx +46 -0
- package/src/Tooltip/useTooltip.tsx +20 -0
- package/src/TopNav/TopNav.test.tsx +93 -2
- package/src/TopNav/TopNavItem.doc.mjs +3 -3
- package/src/TopNav/TopNavItem.tsx +35 -6
- package/src/TopNav/TopNavMegaMenu.tsx +26 -2
- package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +1 -1
- package/src/TreeList/TreeList.doc.mjs +6 -0
- package/src/TreeList/TreeList.test.tsx +50 -10
- package/src/TreeList/TreeList.tsx +5 -0
- package/src/TreeList/TreeListBranches.tsx +8 -6
- package/src/TreeList/TreeListItem.tsx +33 -11
- package/src/Typeahead/BaseTypeahead.tsx +42 -15
- package/src/Typeahead/Typeahead.doc.mjs +13 -0
- package/src/Typeahead/Typeahead.test.tsx +112 -0
- package/src/Typeahead/Typeahead.tsx +17 -1
- package/src/Typeahead/TypeaheadItem.tsx +2 -1
- package/src/__tests__/babelPluginAddExtensions.test.ts +190 -0
- package/src/__tests__/forcedColors.ts +60 -0
- package/src/__tests__/inputWidthContract.test.tsx +62 -0
- package/src/doc-mjs.d.ts +19 -0
- package/src/hooks/containerReveal.pool.stylex.ts +464 -0
- package/src/hooks/index.ts +13 -0
- package/src/hooks/isRtlElement.ts +27 -0
- package/src/hooks/useAnnounce.test.tsx +75 -2
- package/src/hooks/useAnnounce.ts +47 -1
- package/src/hooks/useContainerReveal.test.tsx +116 -0
- package/src/hooks/useContainerReveal.ts +180 -0
- package/src/hooks/useFocusTrap.test.tsx +104 -0
- package/src/hooks/useFocusTrap.ts +61 -12
- package/src/hooks/useGridFocus.doc.mjs +3 -3
- package/src/hooks/useGridFocus.test.tsx +41 -0
- package/src/hooks/useGridFocus.ts +21 -10
- package/src/hooks/useHotkeys.ts +9 -0
- package/src/hooks/useInputStatusIcon.test.tsx +221 -0
- package/src/hooks/useInputStatusIcon.tsx +235 -0
- package/src/hooks/useKeyboardHint.test.tsx +22 -0
- package/src/hooks/useKeyboardHint.tsx +6 -2
- package/src/hooks/useListFocus.doc.mjs +25 -3
- package/src/hooks/useListFocus.test.tsx +153 -1
- package/src/hooks/useListFocus.ts +102 -9
- package/src/i18n/InternationalizationContext.ts +4 -0
- package/src/i18n/InternationalizationProvider.tsx +12 -2
- package/src/i18n/__tests__/getLocaleDirection.test.ts +40 -0
- package/src/i18n/__tests__/useDirection.test.tsx +66 -0
- package/src/i18n/getLocaleDirection.ts +29 -0
- package/src/i18n/index.ts +6 -0
- package/src/i18n/useDirection.ts +29 -0
- package/src/reset.css +0 -26
- package/src/reset.test.ts +60 -0
- package/src/theme/defineTheme.ts +6 -0
- package/src/theme/derivedVarRegistry.test.ts +1 -0
- package/src/theme/derivedVarRegistry.ts +6 -0
- package/src/theme/expandColorScale.test.ts +144 -0
- package/src/theme/expandColorScale.ts +53 -15
- package/src/theme/generateThemeRules.test.ts +42 -0
- package/src/theme/index.ts +4 -8
- package/src/theme/types.ts +43 -13
- package/src/utils/index.ts +2 -0
- package/src/utils/plainDate.test.ts +24 -6
- package/src/utils/plainDate.ts +18 -4
- package/src/utils/rtlStyles.ts +27 -0
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts +0 -9
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts.map +0 -1
- package/dist/Thumbnail/thumbnail.markers.stylex.js +0 -14
- package/src/Thumbnail/thumbnail.markers.stylex.ts +0 -12
package/src/Table/Table.doc.mjs
CHANGED
|
@@ -93,6 +93,17 @@ export const docs = {
|
|
|
93
93
|
type: 'Record<string, TablePlugin<T>>',
|
|
94
94
|
description: 'Named plugins that extend table behavior via the transform pipeline. Converted to an ordered array internally.',
|
|
95
95
|
},
|
|
96
|
+
{
|
|
97
|
+
name: 'rowIndexStart',
|
|
98
|
+
type: 'number',
|
|
99
|
+
description: 'ARIA row index (1-based) for the first rendered body row. The row ordinal is an accessibility concern independent of any visible index column, so setting this (or rowCount) makes the table emit aria-rowindex on body rows and aria-rowcount on the table. For a paginated/windowed view, pass the offset of the first visible row (e.g. (page - 1) * pageSize + 1) so aria-rowindex reflects position in the full dataset. Data-driven mode only.',
|
|
100
|
+
default: '1',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'rowCount',
|
|
104
|
+
type: 'number',
|
|
105
|
+
description: 'Total number of body rows across all pages/windows, used for aria-rowcount so assistive tech can announce "row X of Y" against the full dataset. When omitted but rowIndexStart is set (windowed view with an unknown total), aria-rowcount is set to -1 per the ARIA unknown-count convention. Data-driven mode only.',
|
|
106
|
+
},
|
|
96
107
|
{
|
|
97
108
|
name: 'children',
|
|
98
109
|
type: 'ReactNode',
|
package/src/Table/Table.test.tsx
CHANGED
|
@@ -1451,3 +1451,88 @@ describe('emptyState', () => {
|
|
|
1451
1451
|
});
|
|
1452
1452
|
});
|
|
1453
1453
|
});
|
|
1454
|
+
|
|
1455
|
+
describe('ARIA row indexing (#3939)', () => {
|
|
1456
|
+
const bodyRows = (container: HTMLElement): HTMLTableRowElement[] =>
|
|
1457
|
+
Array.from(container.querySelectorAll('tbody tr'));
|
|
1458
|
+
|
|
1459
|
+
it('emits no aria-rowindex/aria-rowcount by default', () => {
|
|
1460
|
+
const {container} = render(<Table data={users} columns={columns} />);
|
|
1461
|
+
expect(screen.getByRole('table')).not.toHaveAttribute('aria-rowcount');
|
|
1462
|
+
for (const row of bodyRows(container)) {
|
|
1463
|
+
expect(row).not.toHaveAttribute('aria-rowindex');
|
|
1464
|
+
}
|
|
1465
|
+
});
|
|
1466
|
+
|
|
1467
|
+
it('numbers rows from 1 when rowCount is provided', () => {
|
|
1468
|
+
const {container} = render(
|
|
1469
|
+
<Table data={users} columns={columns} rowCount={users.length} />,
|
|
1470
|
+
);
|
|
1471
|
+
expect(screen.getByRole('table')).toHaveAttribute(
|
|
1472
|
+
'aria-rowcount',
|
|
1473
|
+
String(users.length),
|
|
1474
|
+
);
|
|
1475
|
+
const indices = bodyRows(container).map(r =>
|
|
1476
|
+
r.getAttribute('aria-rowindex'),
|
|
1477
|
+
);
|
|
1478
|
+
expect(indices).toEqual(['1', '2', '3']);
|
|
1479
|
+
});
|
|
1480
|
+
|
|
1481
|
+
it('offsets aria-rowindex by rowIndexStart for a paginated view', () => {
|
|
1482
|
+
// Page 3 of a 10-per-page dataset: first visible row is dataset row 21.
|
|
1483
|
+
const {container} = render(
|
|
1484
|
+
<Table
|
|
1485
|
+
data={users}
|
|
1486
|
+
columns={columns}
|
|
1487
|
+
rowIndexStart={21}
|
|
1488
|
+
rowCount={100}
|
|
1489
|
+
/>,
|
|
1490
|
+
);
|
|
1491
|
+
expect(screen.getByRole('table')).toHaveAttribute('aria-rowcount', '100');
|
|
1492
|
+
const indices = bodyRows(container).map(r =>
|
|
1493
|
+
r.getAttribute('aria-rowindex'),
|
|
1494
|
+
);
|
|
1495
|
+
expect(indices).toEqual(['21', '22', '23']);
|
|
1496
|
+
});
|
|
1497
|
+
|
|
1498
|
+
it('sets aria-rowcount to -1 (unknown) when only rowIndexStart is given', () => {
|
|
1499
|
+
// Windowed/cursor pagination: offset known, total unknown.
|
|
1500
|
+
const {container} = render(
|
|
1501
|
+
<Table data={users} columns={columns} rowIndexStart={5} />,
|
|
1502
|
+
);
|
|
1503
|
+
expect(screen.getByRole('table')).toHaveAttribute('aria-rowcount', '-1');
|
|
1504
|
+
const indices = bodyRows(container).map(r =>
|
|
1505
|
+
r.getAttribute('aria-rowindex'),
|
|
1506
|
+
);
|
|
1507
|
+
expect(indices).toEqual(['5', '6', '7']);
|
|
1508
|
+
});
|
|
1509
|
+
|
|
1510
|
+
it('does not assign an ARIA row index to the header row', () => {
|
|
1511
|
+
render(<Table data={users} columns={columns} rowCount={users.length} />);
|
|
1512
|
+
const header = screen.getAllByRole('row')[0];
|
|
1513
|
+
expect(header).not.toHaveAttribute('aria-rowindex');
|
|
1514
|
+
});
|
|
1515
|
+
|
|
1516
|
+
it('lets a plugin override the seeded aria-rowindex', () => {
|
|
1517
|
+
const plugin: TablePlugin<User> = {
|
|
1518
|
+
transformBodyRow(props, _item, index) {
|
|
1519
|
+
return {
|
|
1520
|
+
...props,
|
|
1521
|
+
htmlProps: {...props.htmlProps, 'aria-rowindex': 100 + index},
|
|
1522
|
+
};
|
|
1523
|
+
},
|
|
1524
|
+
};
|
|
1525
|
+
const {container} = render(
|
|
1526
|
+
<Table
|
|
1527
|
+
data={users}
|
|
1528
|
+
columns={columns}
|
|
1529
|
+
rowCount={users.length}
|
|
1530
|
+
plugins={{custom: plugin}}
|
|
1531
|
+
/>,
|
|
1532
|
+
);
|
|
1533
|
+
const indices = bodyRows(container).map(r =>
|
|
1534
|
+
r.getAttribute('aria-rowindex'),
|
|
1535
|
+
);
|
|
1536
|
+
expect(indices).toEqual(['100', '101', '102']);
|
|
1537
|
+
});
|
|
1538
|
+
});
|
package/src/Table/TableCell.tsx
CHANGED
|
@@ -161,12 +161,12 @@ const dividerRowStyles = stylex.create({
|
|
|
161
161
|
|
|
162
162
|
const dividerColumnStyles = stylex.create({
|
|
163
163
|
cell: {
|
|
164
|
-
|
|
164
|
+
borderInlineEndWidth: {
|
|
165
165
|
default: borderVars['--border-width'],
|
|
166
166
|
':last-child': '0',
|
|
167
167
|
},
|
|
168
|
-
|
|
169
|
-
|
|
168
|
+
borderInlineEndStyle: 'solid',
|
|
169
|
+
borderInlineEndColor: colorVars['--color-border'],
|
|
170
170
|
},
|
|
171
171
|
});
|
|
172
172
|
|
|
@@ -91,12 +91,12 @@ const headerDividerStyles = stylex.create({
|
|
|
91
91
|
|
|
92
92
|
const dividerColumnStyles = stylex.create({
|
|
93
93
|
cell: {
|
|
94
|
-
|
|
94
|
+
borderInlineEndWidth: {
|
|
95
95
|
default: borderVars['--border-width'],
|
|
96
96
|
':last-child': '0',
|
|
97
97
|
},
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
borderInlineEndStyle: 'solid',
|
|
99
|
+
borderInlineEndColor: colorVars['--color-border'],
|
|
100
100
|
},
|
|
101
101
|
});
|
|
102
102
|
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
fontWeightVars,
|
|
21
21
|
} from '../../../theme/tokens.stylex';
|
|
22
22
|
import {Icon} from '../../../Icon';
|
|
23
|
+
import {rtlStyles} from '../../../utils';
|
|
23
24
|
import type {TablePlugin} from '../../types';
|
|
24
25
|
import {useTranslator} from '../../../i18n';
|
|
25
26
|
|
|
@@ -333,12 +334,14 @@ export function useTableGroupedRows<T extends Record<string, unknown>>(
|
|
|
333
334
|
})
|
|
334
335
|
}
|
|
335
336
|
aria-expanded={!collapsed}>
|
|
336
|
-
<span
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
337
|
+
<span {...stylex.props(rtlStyles.mirror)}>
|
|
338
|
+
<span
|
|
339
|
+
{...stylex.props(
|
|
340
|
+
styles.chevronIcon,
|
|
341
|
+
!collapsed && styles.chevronExpanded,
|
|
342
|
+
)}>
|
|
343
|
+
<Icon icon="chevronRight" size="xsm" />
|
|
344
|
+
</span>
|
|
342
345
|
</span>
|
|
343
346
|
</button>
|
|
344
347
|
{content}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
useTableRowExpansion,
|
|
10
10
|
useTableRowExpansionState,
|
|
11
11
|
} from './useTableRowExpansion';
|
|
12
|
+
import {InternationalizationProvider} from '../../../i18n';
|
|
12
13
|
|
|
13
14
|
// popover mock for context-menu tests
|
|
14
15
|
beforeEach(() => {
|
|
@@ -118,6 +119,24 @@ describe('useTableRowExpansion', () => {
|
|
|
118
119
|
expect(items.length).toBeGreaterThan(0);
|
|
119
120
|
});
|
|
120
121
|
|
|
122
|
+
it('localizes the context-menu action label through the i18n catalog', () => {
|
|
123
|
+
render(
|
|
124
|
+
<InternationalizationProvider
|
|
125
|
+
locale="fr"
|
|
126
|
+
overrides={{
|
|
127
|
+
fr: {'@astryx.tableRowExpansion.expandRow': 'Développer la ligne'},
|
|
128
|
+
}}>
|
|
129
|
+
<Harness />
|
|
130
|
+
</InternationalizationProvider>,
|
|
131
|
+
);
|
|
132
|
+
fireEvent.contextMenu(screen.getByText('Folder A'));
|
|
133
|
+
const items = screen.getAllByRole('menuitem', {
|
|
134
|
+
name: /Développer la ligne/,
|
|
135
|
+
hidden: true,
|
|
136
|
+
});
|
|
137
|
+
expect(items.length).toBeGreaterThan(0);
|
|
138
|
+
});
|
|
139
|
+
|
|
121
140
|
it('does not show chevron for leaf nodes', () => {
|
|
122
141
|
render(<Harness />);
|
|
123
142
|
// Leaf C has no children
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
* @input React, StyleX, Icon, Table types
|
|
8
8
|
* @output Exports useTableRowExpansion hook + config/state types
|
|
9
9
|
* @position Row-expansion plugin; consumed by Table via plugins prop
|
|
10
|
+
* @deprecated Superseded by the tree plugin (useTableTreeData +
|
|
11
|
+
* useTableTreeState). Kept for back-compat; new tree tables should use the
|
|
12
|
+
* tree plugin. See the migration guide on useTableRowExpansion.
|
|
10
13
|
*
|
|
11
14
|
* SYNC: When modified, update these files to stay in sync:
|
|
12
15
|
* - /packages/core/src/Table/index.ts (exports)
|
|
@@ -16,6 +19,7 @@ import {useCallback, useMemo, useRef, type ReactNode} from 'react';
|
|
|
16
19
|
import * as stylex from '@stylexjs/stylex';
|
|
17
20
|
import {spacingVars, colorVars, radiusVars} from '../../../theme/tokens.stylex';
|
|
18
21
|
import {Icon} from '../../../Icon';
|
|
22
|
+
import {rtlStyles} from '../../../utils';
|
|
19
23
|
import {resolveContextActions} from '../../tableContextMenu';
|
|
20
24
|
import {useTranslator} from '../../../i18n';
|
|
21
25
|
import type {
|
|
@@ -105,9 +109,14 @@ export interface UseTableRowExpansionStateResult<
|
|
|
105
109
|
|
|
106
110
|
/**
|
|
107
111
|
* Manages row-expansion state and derives the config for
|
|
108
|
-
* {@link useTableRowExpansion}.
|
|
109
|
-
*
|
|
110
|
-
*
|
|
112
|
+
* {@link useTableRowExpansion}.
|
|
113
|
+
*
|
|
114
|
+
* @deprecated Use `useTableTreeState` (with `useTableTreeData`) instead. The
|
|
115
|
+
* tree plugin covers the same affordances (expand-all header control,
|
|
116
|
+
* whole-row click) with a cycle guard and per-row fine-grained re-render. See
|
|
117
|
+
* the migration guide on `useTableRowExpansion` (`astryx component
|
|
118
|
+
* useTableRowExpansion --detail full`) for the before/after and config
|
|
119
|
+
* mapping.
|
|
111
120
|
*
|
|
112
121
|
* @example
|
|
113
122
|
* ```
|
|
@@ -361,12 +370,14 @@ function ExpansionChevron({
|
|
|
361
370
|
}}
|
|
362
371
|
aria-label={ariaLabel}
|
|
363
372
|
aria-expanded={isExpanded}>
|
|
364
|
-
<span
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
373
|
+
<span {...stylex.props(rtlStyles.mirror)}>
|
|
374
|
+
<span
|
|
375
|
+
{...stylex.props(
|
|
376
|
+
expansionStyles.chevronIcon,
|
|
377
|
+
isExpanded && expansionStyles.chevronExpanded,
|
|
378
|
+
)}>
|
|
379
|
+
<Icon icon="chevronRight" size="xsm" />
|
|
380
|
+
</span>
|
|
370
381
|
</span>
|
|
371
382
|
</button>
|
|
372
383
|
);
|
|
@@ -376,6 +387,16 @@ function ExpansionChevron({
|
|
|
376
387
|
// Hook
|
|
377
388
|
// =============================================================================
|
|
378
389
|
|
|
390
|
+
/**
|
|
391
|
+
* Returns a TablePlugin implementing expandable rows with inherited columns.
|
|
392
|
+
*
|
|
393
|
+
* @deprecated Use `useTableTreeData` (with `useTableTreeState`) instead. The
|
|
394
|
+
* tree plugin covers the same affordances (expand-all header control,
|
|
395
|
+
* whole-row click) with a cycle guard and per-row fine-grained re-render. See
|
|
396
|
+
* the migration guide on this hook's docs (`astryx component
|
|
397
|
+
* useTableRowExpansion --detail full`) for the before/after and config
|
|
398
|
+
* mapping.
|
|
399
|
+
*/
|
|
379
400
|
export function useTableRowExpansion<T extends Record<string, unknown>>(
|
|
380
401
|
config: UseTableRowExpansionConfig<T>,
|
|
381
402
|
): TablePlugin<T> {
|
|
@@ -533,12 +554,14 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
|
|
|
533
554
|
? t('@astryx.tableRowExpansion.collapseAllRows')
|
|
534
555
|
: t('@astryx.tableRowExpansion.expandAllRows')
|
|
535
556
|
}>
|
|
536
|
-
<span
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
557
|
+
<span {...stylex.props(rtlStyles.mirror)}>
|
|
558
|
+
<span
|
|
559
|
+
{...stylex.props(
|
|
560
|
+
expansionStyles.chevronIcon,
|
|
561
|
+
allExpanded && expansionStyles.chevronExpanded,
|
|
562
|
+
)}>
|
|
563
|
+
<Icon icon="chevronRight" size="xsm" />
|
|
564
|
+
</span>
|
|
542
565
|
</span>
|
|
543
566
|
</button>
|
|
544
567
|
),
|
|
@@ -571,13 +594,17 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
|
|
|
571
594
|
{
|
|
572
595
|
id: 'row-expansion-toggle',
|
|
573
596
|
group: 'row-expansion',
|
|
574
|
-
label: isExpanded
|
|
597
|
+
label: isExpanded
|
|
598
|
+
? t('@astryx.tableRowExpansion.collapseRow')
|
|
599
|
+
: t('@astryx.tableRowExpansion.expandRow'),
|
|
575
600
|
icon: (
|
|
576
|
-
<
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
601
|
+
<span {...stylex.props(rtlStyles.mirror)}>
|
|
602
|
+
<Icon
|
|
603
|
+
icon={isExpanded ? 'chevronDown' : 'chevronRight'}
|
|
604
|
+
size="xsm"
|
|
605
|
+
aria-hidden
|
|
606
|
+
/>
|
|
607
|
+
</span>
|
|
581
608
|
),
|
|
582
609
|
onSelect: () => onToggle(key),
|
|
583
610
|
},
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
* @position Test file; validates selection behavior (checkboxes, aria, select-all)
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import {describe, it, expect} from 'vitest';
|
|
10
|
+
import {describe, it, expect, vi} from 'vitest';
|
|
11
11
|
import {useState} from 'react';
|
|
12
|
-
import {render, screen, within} from '@testing-library/react';
|
|
12
|
+
import {act, render, renderHook, screen, within} from '@testing-library/react';
|
|
13
13
|
import userEvent from '@testing-library/user-event';
|
|
14
14
|
import {Table} from '../../Table';
|
|
15
15
|
import {useTableSelection} from './useTableSelection';
|
|
16
|
-
import type {TableColumn} from '../../types';
|
|
16
|
+
import type {BodyRowRenderProps, TableColumn} from '../../types';
|
|
17
17
|
|
|
18
18
|
// =============================================================================
|
|
19
19
|
// Test Data
|
|
@@ -210,4 +210,62 @@ describe('useTableSelection', () => {
|
|
|
210
210
|
const headers = within(headerRow).getAllByRole('columnheader');
|
|
211
211
|
expect(headers).toHaveLength(3);
|
|
212
212
|
});
|
|
213
|
+
|
|
214
|
+
it('unsubscribes detached row refs instead of accumulating listeners', () => {
|
|
215
|
+
const getIsItemSelected = vi.fn(() => false);
|
|
216
|
+
const {result, rerender} = renderHook(() =>
|
|
217
|
+
useTableSelection<SelectableUser>({
|
|
218
|
+
getIsItemSelected,
|
|
219
|
+
onSelectItem: vi.fn(),
|
|
220
|
+
onSelectAll: vi.fn(),
|
|
221
|
+
getIsAllSelected: () => false,
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
const initialProps: BodyRowRenderProps = {
|
|
226
|
+
htmlProps: {},
|
|
227
|
+
xstyle: [],
|
|
228
|
+
children: null,
|
|
229
|
+
};
|
|
230
|
+
const row = document.createElement('tr');
|
|
231
|
+
document.body.append(row);
|
|
232
|
+
|
|
233
|
+
let detach: (() => void) | undefined;
|
|
234
|
+
|
|
235
|
+
// Simulate React replacing the callback ref as this row re-renders.
|
|
236
|
+
// Each detach must unsubscribe the previous ref before the next attaches.
|
|
237
|
+
for (let i = 0; i < 3; i++) {
|
|
238
|
+
act(() => {
|
|
239
|
+
detach?.();
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const transformed = result.current.transformBodyRow?.(
|
|
243
|
+
initialProps,
|
|
244
|
+
selectableUsers[0],
|
|
245
|
+
0,
|
|
246
|
+
);
|
|
247
|
+
expect(transformed?.ref).toBeTypeOf('function');
|
|
248
|
+
|
|
249
|
+
act(() => {
|
|
250
|
+
const cleanup = (
|
|
251
|
+
transformed?.ref as React.RefCallback<HTMLTableRowElement>
|
|
252
|
+
)(row);
|
|
253
|
+
expect(cleanup).toBeTypeOf('function');
|
|
254
|
+
detach = cleanup as () => void;
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
getIsItemSelected.mockClear();
|
|
259
|
+
rerender();
|
|
260
|
+
expect(getIsItemSelected).toHaveBeenCalledTimes(1);
|
|
261
|
+
|
|
262
|
+
act(() => {
|
|
263
|
+
detach?.();
|
|
264
|
+
});
|
|
265
|
+
getIsItemSelected.mockClear();
|
|
266
|
+
rerender();
|
|
267
|
+
expect(getIsItemSelected).not.toHaveBeenCalled();
|
|
268
|
+
|
|
269
|
+
row.remove();
|
|
270
|
+
});
|
|
213
271
|
});
|
|
@@ -205,7 +205,7 @@ const stickyStyles = stylex.create({
|
|
|
205
205
|
},
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
-
// Soft drop shadow over the scrolling region (
|
|
208
|
+
// Soft drop shadow over the scrolling region (a standard sticky-column shadow treatment).
|
|
209
209
|
// border-collapse tables don't paint box-shadow on cells in Chromium, so it's a
|
|
210
210
|
// ::after gradient strip just past the pinned edge (visible thanks to the cell's
|
|
211
211
|
// overflow: visible). Opacity is gated by the scroll-state variable above.
|
|
@@ -213,7 +213,12 @@ const SHADOW_WIDTH = '6px';
|
|
|
213
213
|
// --color-shadow is only ~10% alpha (too faint here); use a slightly stronger soft tint.
|
|
214
214
|
const SHADOW_TINT = 'light-dark(rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0.32))';
|
|
215
215
|
const shadowStyles = stylex.create({
|
|
216
|
-
// start-pinned: shadow falls
|
|
216
|
+
// start-pinned: shadow falls toward inline-end (over scrolled content).
|
|
217
|
+
// insetInlineEnd anchors the strip to the column's inline-end edge; the strip
|
|
218
|
+
// must then be nudged one full width OUTWARD (past that edge) into the
|
|
219
|
+
// scrolled region. Outward is +X under LTR (inline-end = right) but −X under
|
|
220
|
+
// RTL (inline-end = left), and the fade must run from the pinned edge toward
|
|
221
|
+
// content in each direction — hence both transform and gradient flip on dir.
|
|
217
222
|
start: {
|
|
218
223
|
'::after': {
|
|
219
224
|
content: '""',
|
|
@@ -222,14 +227,24 @@ const shadowStyles = stylex.create({
|
|
|
222
227
|
bottom: 0,
|
|
223
228
|
insetInlineEnd: 0,
|
|
224
229
|
width: SHADOW_WIDTH,
|
|
225
|
-
transform:
|
|
230
|
+
transform: {
|
|
231
|
+
default: 'translateX(100%)',
|
|
232
|
+
':is([dir="rtl"] *)': 'translateX(-100%)',
|
|
233
|
+
},
|
|
226
234
|
pointerEvents: 'none',
|
|
227
235
|
transition: 'opacity 150ms ease',
|
|
228
236
|
opacity: `var(${SHADOW_VAR_START}, 0)`,
|
|
229
|
-
backgroundImage:
|
|
237
|
+
backgroundImage: {
|
|
238
|
+
default: `linear-gradient(to right, ${SHADOW_TINT}, transparent)`,
|
|
239
|
+
':is([dir="rtl"] *)': `linear-gradient(to left, ${SHADOW_TINT}, transparent)`,
|
|
240
|
+
},
|
|
230
241
|
},
|
|
231
242
|
},
|
|
232
|
-
// end-pinned: shadow falls
|
|
243
|
+
// end-pinned: shadow falls toward inline-start (over scrolled content).
|
|
244
|
+
// insetInlineStart anchors the strip to the column's inline-start edge; the
|
|
245
|
+
// strip is nudged one full width OUTWARD into content — −X under LTR
|
|
246
|
+
// (inline-start = left) but +X under RTL (inline-start = right) — with the
|
|
247
|
+
// gradient fading from the pinned edge toward content in each direction.
|
|
233
248
|
end: {
|
|
234
249
|
'::after': {
|
|
235
250
|
content: '""',
|
|
@@ -238,11 +253,17 @@ const shadowStyles = stylex.create({
|
|
|
238
253
|
bottom: 0,
|
|
239
254
|
insetInlineStart: 0,
|
|
240
255
|
width: SHADOW_WIDTH,
|
|
241
|
-
transform:
|
|
256
|
+
transform: {
|
|
257
|
+
default: 'translateX(-100%)',
|
|
258
|
+
':is([dir="rtl"] *)': 'translateX(100%)',
|
|
259
|
+
},
|
|
242
260
|
pointerEvents: 'none',
|
|
243
261
|
transition: 'opacity 150ms ease',
|
|
244
262
|
opacity: `var(${SHADOW_VAR_END}, 0)`,
|
|
245
|
-
backgroundImage:
|
|
263
|
+
backgroundImage: {
|
|
264
|
+
default: `linear-gradient(to left, ${SHADOW_TINT}, transparent)`,
|
|
265
|
+
':is([dir="rtl"] *)': `linear-gradient(to right, ${SHADOW_TINT}, transparent)`,
|
|
266
|
+
},
|
|
246
267
|
},
|
|
247
268
|
},
|
|
248
269
|
});
|
|
@@ -289,16 +310,24 @@ export function useTableStickyColumns<T extends Record<string, unknown>>(
|
|
|
289
310
|
const {hasStart: hs, hasEnd: he} = stateRef.current;
|
|
290
311
|
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
291
312
|
const hasOverflow = maxScroll > 1;
|
|
313
|
+
// RTL-safe scroll position. Spec-compliant browsers report a NEGATIVE
|
|
314
|
+
// scrollLeft under RTL (0 at the inline-start edge, decreasing toward the
|
|
315
|
+
// inline-end edge), so a raw `scrollLeft > 1` start test would never fire
|
|
316
|
+
// and the end test would be wrong-signed. Math.abs collapses both
|
|
317
|
+
// conventions to a distance-from-inline-start, matching the repo's own
|
|
318
|
+
// useScrollOverflow (overflowStart/overflowEnd use Math.abs, tolerance 1).
|
|
319
|
+
// No-op under LTR where scrollLeft is already >= 0.
|
|
320
|
+
const pos = Math.abs(el.scrollLeft);
|
|
292
321
|
if (hs) {
|
|
293
322
|
el.style.setProperty(
|
|
294
323
|
SHADOW_VAR_START,
|
|
295
|
-
hasOverflow &&
|
|
324
|
+
hasOverflow && pos > 1 ? '1' : '0',
|
|
296
325
|
);
|
|
297
326
|
}
|
|
298
327
|
if (he) {
|
|
299
328
|
el.style.setProperty(
|
|
300
329
|
SHADOW_VAR_END,
|
|
301
|
-
hasOverflow &&
|
|
330
|
+
hasOverflow && pos < maxScroll - 1 ? '1' : '0',
|
|
302
331
|
);
|
|
303
332
|
}
|
|
304
333
|
};
|