@astryxdesign/core 0.1.6 → 0.1.7-canary.04cd8f7
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 +68 -0
- package/README.md +25 -14
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +4 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +3 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +4 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +8 -6
- package/dist/Breadcrumbs/Breadcrumbs.d.ts +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.js +4 -1
- package/dist/Button/Button.d.ts +10 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +49 -6
- package/dist/ButtonGroup/ButtonGroup.d.ts +20 -5
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +27 -11
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +29 -7
- package/dist/Carousel/Carousel.d.ts +1 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -5
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +4 -1
- package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
- package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
- package/dist/Chat/ChatComposerDrawer.js +9 -2
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +6 -2
- package/dist/Chat/ChatLayout.d.ts +1 -11
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +6 -4
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +4 -2
- package/dist/Chat/ChatMessage.d.ts +1 -1
- package/dist/Chat/ChatMessage.d.ts.map +1 -1
- package/dist/Chat/ChatMessage.js +8 -2
- package/dist/Chat/ChatMessageBubble.d.ts +1 -1
- package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
- package/dist/Chat/ChatMessageBubble.js +3 -1
- package/dist/Chat/ChatMessageList.d.ts +1 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +3 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +13 -8
- package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
- package/dist/Chat/ChatPastedTextToken.js +3 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +3 -1
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.d.ts +12 -1
- package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.js +43 -6
- package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.js +4 -2
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +4 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +4 -2
- package/dist/CheckboxList/CheckboxList.d.ts +1 -1
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +3 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +3 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +10 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +71 -53
- package/dist/Collapsible/Collapsible.d.ts +11 -1
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +36 -4
- package/dist/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +8 -3
- package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +4 -1
- package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteList.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteList.js +4 -1
- package/dist/ContextMenu/ContextMenu.d.ts +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +8 -4
- package/dist/ContextMenu/index.d.ts +3 -0
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +7 -1
- package/dist/DateInput/DateInput.d.ts +1 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +10 -5
- package/dist/DateRangeInput/DateRangeInput.d.ts +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +11 -6
- package/dist/DateTimeInput/DateTimeInput.d.ts +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +15 -7
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +15 -12
- package/dist/Dialog/DialogHeader.d.ts +1 -1
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +7 -3
- package/dist/DropdownMenu/DropdownMenu.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +19 -9
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +89 -0
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +170 -0
- package/dist/DropdownMenu/DropdownMenuContext.d.ts +17 -1
- package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContext.js +18 -0
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +69 -0
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +70 -0
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +69 -0
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +178 -0
- package/dist/DropdownMenu/index.d.ts +5 -1
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +10 -1
- package/dist/DropdownMenu/menuItemRoles.d.ts +13 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -0
- package/dist/DropdownMenu/menuItemRoles.js +15 -0
- package/dist/EmptyState/EmptyState.d.ts +4 -1
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +11 -1
- package/dist/Icon/Icon.d.ts +17 -12
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +28 -20
- package/dist/Kbd/Kbd.js +1 -1
- package/dist/Layer/useLayer.d.ts +10 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +23 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +6 -4
- package/dist/Link/Link.d.ts +5 -1
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +32 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +10 -8
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +4 -2
- package/dist/MobileNav/MobileNavToggle.d.ts +1 -1
- package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
- package/dist/MobileNav/MobileNavToggle.js +4 -1
- package/dist/MoreMenu/MoreMenu.d.ts +1 -1
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +4 -1
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +13 -6
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +5 -1
- package/dist/Outline/Outline.d.ts +1 -1
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +4 -1
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +38 -11
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +4 -1
- package/dist/PowerSearch/PowerSearch.d.ts +1 -1
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +22 -12
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +26 -20
- package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchToken.js +7 -3
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +34 -21
- package/dist/PowerSearch/formatFilterValue.d.ts +2 -1
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +19 -9
- package/dist/PowerSearch/index.d.ts +2 -1
- package/dist/PowerSearch/index.d.ts.map +1 -1
- package/dist/PowerSearch/index.js +1 -0
- package/dist/PowerSearch/resolveOperatorLabel.d.ts +23 -0
- package/dist/PowerSearch/resolveOperatorLabel.d.ts.map +1 -0
- package/dist/PowerSearch/resolveOperatorLabel.js +28 -0
- package/dist/PowerSearch/types.d.ts +28 -2
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchConfig.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchConfig.js +27 -27
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.js +15 -8
- package/dist/Resizable/ResizeHandle.d.ts +1 -1
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +4 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +52 -14
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -2
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +3 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +5 -3
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +7 -1
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +4 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +2 -2
- package/dist/TabList/TabList.d.ts +1 -1
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +6 -1
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +29 -16
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +5 -3
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +56 -19
- 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 +12 -5
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +6 -3
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +8 -6
- package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +1 -1
- package/dist/Table/plugins/rowIndex/useTableRowIndex.js +1 -1
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +5 -2
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +6 -4
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -2
- package/dist/Table/plugins/tree/index.d.ts +5 -0
- package/dist/Table/plugins/tree/index.d.ts.map +1 -0
- package/dist/Table/plugins/tree/index.js +4 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +38 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -0
- package/dist/Table/plugins/tree/useTableTreeData.js +358 -0
- package/dist/Table/plugins/tree/useTableTreeState.d.ts +51 -0
- package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -0
- package/dist/Table/plugins/tree/useTableTreeState.js +175 -0
- package/dist/Table/types.d.ts +17 -10
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +6 -3
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +5 -1
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +8 -2
- package/dist/TimeInput/TimeInput.d.ts +1 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +7 -2
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +18 -3
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +3 -1
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +3 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +8 -2
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +3 -1
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +8 -1
- package/dist/TopNav/TopNav.d.ts +2 -1
- package/dist/TopNav/TopNav.d.ts.map +1 -1
- package/dist/TopNav/TopNav.js +4 -1
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +5 -3
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +5 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +7 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +8 -4
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +3 -1
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +1 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +1 -0
- package/dist/astryx.css +38 -4
- package/dist/astryx.umd.js +62 -60
- package/dist/astryx.umd.js.map +4 -4
- package/dist/authoring/doc.d.ts +145 -0
- package/dist/authoring/doc.d.ts.map +1 -0
- package/dist/authoring/doc.js +100 -0
- package/dist/authoring/index.d.ts +29 -0
- package/dist/authoring/index.d.ts.map +1 -0
- package/dist/authoring/index.js +28 -0
- package/dist/authoring/integration.d.ts +35 -0
- package/dist/authoring/integration.d.ts.map +1 -0
- package/dist/authoring/integration.js +30 -0
- package/dist/authoring/template.d.ts +66 -0
- package/dist/authoring/template.d.ts.map +1 -0
- package/dist/authoring/template.js +55 -0
- package/dist/config.d.ts +80 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +40 -0
- package/dist/docs-types.d.ts +13 -4
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.d.ts +12 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -0
- package/dist/i18n/InternationalizationContext.js +29 -0
- package/dist/i18n/InternationalizationProvider.d.ts +61 -0
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -0
- package/dist/i18n/InternationalizationProvider.js +44 -0
- package/dist/i18n/index.d.ts +24 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +21 -0
- package/dist/i18n/resolve.d.ts +22 -0
- package/dist/i18n/resolve.d.ts.map +1 -0
- package/dist/i18n/resolve.js +141 -0
- package/dist/i18n/translator.d.ts +25 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/i18n/translator.js +1 -0
- package/dist/i18n/types.d.ts +47 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +1 -0
- package/dist/i18n/useTranslator.d.ts +15 -0
- package/dist/i18n/useTranslator.d.ts.map +1 -0
- package/dist/i18n/useTranslator.js +39 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/theme/Theme.js +1 -1
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.js +1 -1
- package/dist/theme/hct.d.ts +0 -1
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +0 -3
- package/dist/utils/color.d.ts +13 -1
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/color.js +23 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/locales/en.json +754 -0
- package/locales/pseudo.json +566 -0
- package/package.json +23 -2
- package/src/AlertDialog/AlertDialog.doc.mjs +5 -0
- package/src/AlertDialog/AlertDialog.tsx +4 -1
- package/src/AppShell/AppShell.doc.mjs +8 -2
- package/src/AppShell/AppShell.tsx +3 -1
- package/src/AvatarGroup/AvatarGroup.tsx +4 -1
- package/src/Banner/Banner.tsx +10 -5
- package/src/Breadcrumbs/Breadcrumbs.tsx +4 -1
- package/src/Button/Button.doc.mjs +8 -0
- package/src/Button/Button.test.tsx +27 -0
- package/src/Button/Button.tsx +51 -5
- package/src/ButtonGroup/ButtonGroup.test.tsx +386 -2
- package/src/ButtonGroup/ButtonGroup.tsx +27 -11
- package/src/Calendar/Calendar.test.tsx +103 -2
- package/src/Calendar/Calendar.tsx +29 -6
- package/src/Card/Card.doc.mjs +3 -3
- package/src/Carousel/Carousel.tsx +10 -7
- package/src/Chat/ChatComposer.tsx +5 -1
- package/src/Chat/ChatComposerDrawer.tsx +9 -2
- package/src/Chat/ChatComposerInput.tsx +10 -4
- package/src/Chat/ChatLayout.test.tsx +127 -2
- package/src/Chat/ChatLayout.tsx +5 -12
- package/src/Chat/ChatLayoutScrollButton.tsx +4 -2
- package/src/Chat/ChatMessage.tsx +5 -1
- package/src/Chat/ChatMessageBubble.tsx +2 -0
- package/src/Chat/ChatMessageList.doc.mjs +1 -1
- package/src/Chat/ChatMessageList.tsx +2 -0
- package/src/Chat/ChatMessageMetadata.tsx +15 -9
- package/src/Chat/ChatPastedTextToken.tsx +3 -1
- package/src/Chat/ChatSendButton.tsx +3 -1
- package/src/Chat/ChatToolCalls.doc.mjs +1 -1
- package/src/Chat/index.ts +1 -0
- package/src/Chat/useChatStreamScroll.test.tsx +168 -0
- package/src/Chat/useChatStreamScroll.ts +67 -11
- package/src/Chat/useSpeechRecognition.ts +11 -2
- package/src/Chat/useTriggerMenu.tsx +4 -2
- package/src/CheckboxInput/CheckboxInput.doc.mjs +1 -1
- package/src/CheckboxInput/CheckboxInput.test.tsx +16 -0
- package/src/CheckboxInput/CheckboxInput.tsx +4 -2
- package/src/CheckboxList/CheckboxList.doc.mjs +6 -1
- package/src/CheckboxList/CheckboxList.tsx +2 -0
- package/src/CheckboxList/CheckboxListItem.tsx +7 -1
- package/src/Citation/Citation.tsx +4 -2
- package/src/ClickableCard/ClickableCard.doc.mjs +1 -1
- package/src/CodeBlock/CodeBlock.tsx +91 -40
- package/src/Collapsible/Collapsible.doc.mjs +7 -0
- package/src/Collapsible/Collapsible.test.tsx +80 -0
- package/src/Collapsible/Collapsible.tsx +58 -5
- package/src/CommandPalette/CommandPalette.tsx +10 -3
- package/src/CommandPalette/CommandPaletteInput.test.tsx +1 -1
- package/src/CommandPalette/CommandPaletteInput.tsx +5 -1
- package/src/CommandPalette/CommandPaletteList.tsx +4 -1
- package/src/ContextMenu/ContextMenu.test.tsx +75 -1
- package/src/ContextMenu/ContextMenu.tsx +14 -6
- package/src/ContextMenu/index.ts +15 -0
- package/src/DateInput/DateInput.doc.mjs +2 -2
- package/src/DateInput/DateInput.test.tsx +17 -5
- package/src/DateInput/DateInput.tsx +13 -5
- package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
- package/src/DateRangeInput/DateRangeInput.tsx +14 -6
- package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -2
- package/src/DateTimeInput/DateTimeInput.tsx +17 -7
- package/src/Dialog/Dialog.tsx +11 -15
- package/src/Dialog/DialogHeader.tsx +7 -3
- package/src/DropdownMenu/DropdownMenu.doc.mjs +23 -0
- package/src/DropdownMenu/DropdownMenu.tsx +23 -14
- package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +95 -0
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +237 -0
- package/src/DropdownMenu/DropdownMenuContext.tsx +29 -1
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +7 -1
- package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +80 -0
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +119 -0
- package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +80 -0
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +232 -0
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +163 -0
- package/src/DropdownMenu/index.ts +23 -3
- package/src/DropdownMenu/menuItemRoles.ts +22 -0
- package/src/EmptyState/EmptyState.doc.mjs +3 -3
- package/src/EmptyState/EmptyState.tsx +4 -1
- package/src/Field/Field.doc.mjs +3 -3
- package/src/Field/FieldLabel.doc.mjs +1 -1
- package/src/FileInput/FileInput.test.tsx +40 -1
- package/src/FileInput/FileInput.tsx +12 -1
- package/src/Grid/Grid.doc.mjs +5 -5
- package/src/Icon/Icon.test.tsx +46 -0
- package/src/Icon/Icon.tsx +37 -24
- package/src/InputGroup/InputGroup.doc.mjs +1 -1
- package/src/Kbd/Kbd.test.tsx +26 -0
- package/src/Kbd/Kbd.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +8 -5
- package/src/Layer/useLayer.test.tsx +136 -1
- package/src/Layer/useLayer.tsx +34 -2
- package/src/Lightbox/Lightbox.doc.mjs +7 -2
- package/src/Lightbox/Lightbox.tsx +6 -4
- package/src/Link/Link.test.tsx +74 -2
- package/src/Link/Link.tsx +48 -1
- package/src/Markdown/Markdown.tsx +12 -4
- package/src/MobileNav/MobileNav.tsx +4 -2
- package/src/MobileNav/MobileNavToggle.tsx +5 -3
- package/src/MoreMenu/MoreMenu.tsx +4 -1
- package/src/MultiSelector/MultiSelector.tsx +14 -5
- package/src/NumberInput/NumberInput.doc.mjs +2 -2
- package/src/NumberInput/NumberInput.tsx +3 -1
- package/src/Outline/Outline.tsx +4 -1
- package/src/OverflowList/OverflowList.doc.mjs +2 -2
- package/src/Pagination/Pagination.tsx +35 -12
- package/src/Popover/usePopover.tsx +6 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +9 -4
- package/src/PowerSearch/PowerSearch.tsx +22 -10
- package/src/PowerSearch/PowerSearchEditPopover.tsx +27 -20
- package/src/PowerSearch/PowerSearchToken.tsx +17 -6
- package/src/PowerSearch/PowerSearchValueEditor.tsx +34 -21
- package/src/PowerSearch/formatFilterValue.test.ts +282 -0
- package/src/PowerSearch/formatFilterValue.ts +21 -8
- package/src/PowerSearch/index.ts +5 -0
- package/src/PowerSearch/resolveOperatorLabel.ts +34 -0
- package/src/PowerSearch/types.ts +33 -9
- package/src/PowerSearch/usePowerSearchConfig.ts +59 -27
- package/src/PowerSearch/usePowerSearchSource.ts +17 -8
- package/src/RadioList/RadioList.doc.mjs +1 -1
- package/src/Resizable/ResizeHandle.tsx +4 -1
- package/src/Section/Section.doc.mjs +4 -4
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.doc.mjs +6 -3
- package/src/Selector/Selector.test.tsx +114 -6
- package/src/Selector/Selector.tsx +68 -17
- package/src/Selector/SelectorOption.doc.mjs +1 -1
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavCollapseButton.tsx +3 -1
- package/src/SideNav/SideNavHeading.tsx +5 -3
- package/src/SideNav/SideNavItem.doc.mjs +2 -2
- package/src/SideNav/SideNavItem.tsx +3 -1
- package/src/Slider/Slider.doc.mjs +2 -2
- package/src/Stack/Stack.doc.mjs +10 -10
- package/src/Switch/Switch.doc.mjs +3 -3
- package/src/Switch/Switch.test.tsx +16 -0
- package/src/Switch/Switch.tsx +4 -2
- package/src/TabList/Tab.tsx +5 -1
- package/src/TabList/TabList.doc.mjs +3 -3
- package/src/TabList/TabList.test.tsx +66 -0
- package/src/TabList/TabList.tsx +12 -1
- package/src/TabList/TabMenu.tsx +4 -1
- package/src/Table/BaseTable.tsx +36 -19
- package/src/Table/Table.doc.mjs +2 -0
- package/src/Table/Table.test.tsx +132 -1
- package/src/Table/Table.tsx +6 -4
- package/src/Table/index.ts +7 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -1
- package/src/Table/plugins/filtering/useTableFiltering.tsx +31 -30
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +7 -5
- package/src/Table/plugins/pagination/useTablePagination.tsx +4 -1
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -8
- package/src/Table/plugins/rowIndex/useTableRowIndex.tsx +1 -1
- package/src/Table/plugins/selection/useTableSelection.tsx +6 -7
- package/src/Table/plugins/sortable/useTableSortable.tsx +8 -5
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +4 -4
- package/src/Table/plugins/tree/index.ts +12 -0
- package/src/Table/plugins/tree/useTableTreeData-perf.test.tsx +163 -0
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +594 -0
- package/src/Table/plugins/tree/useTableTreeData.tsx +495 -0
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +636 -0
- package/src/Table/plugins/tree/useTableTreeState.tsx +253 -0
- package/src/Table/types.ts +18 -12
- package/src/Table/useBaseTablePlugins.ts +6 -2
- package/src/Table/useTableFiltering.doc.mjs +2 -2
- package/src/Table/useTableGroupedRows.doc.mjs +3 -3
- package/src/Table/useTableSortable.doc.mjs +11 -11
- package/src/Table/useTableTreeData.doc.mjs +75 -0
- package/src/Table/useTableTreeState.doc.mjs +98 -0
- package/src/Text/Text.doc.mjs +2 -2
- package/src/TextArea/TextArea.doc.mjs +1 -1
- package/src/TextInput/TextInput.doc.mjs +1 -1
- package/src/TextInput/TextInput.tsx +3 -1
- package/src/Thumbnail/Thumbnail.tsx +4 -2
- package/src/TimeInput/TimeInput.doc.mjs +2 -2
- package/src/TimeInput/TimeInput.tsx +6 -2
- package/src/Timestamp/Timestamp.doc.mjs +4 -4
- package/src/Timestamp/Timestamp.test.tsx +120 -7
- package/src/Timestamp/Timestamp.tsx +21 -1
- package/src/Toast/Toast.tsx +3 -1
- package/src/Toast/ToastViewport.tsx +3 -1
- package/src/Token/Token.tsx +4 -2
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.tsx +4 -4
- package/src/Toolbar/Toolbar.doc.mjs +1 -1
- package/src/Toolbar/Toolbar.tsx +10 -3
- package/src/TopNav/TopNav.doc.mjs +1 -0
- package/src/TopNav/TopNav.test.tsx +30 -0
- package/src/TopNav/TopNav.tsx +6 -4
- package/src/TopNav/TopNavHeading.tsx +5 -3
- package/src/TreeList/TreeList.tsx +5 -1
- package/src/TreeList/TreeListItem.tsx +6 -1
- package/src/Typeahead/BaseTypeahead.tsx +11 -4
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.tsx +3 -1
- package/src/VisuallyHidden/VisuallyHidden.tsx +1 -0
- package/src/authoring/doc.ts +166 -0
- package/src/authoring/index.test.ts +52 -0
- package/src/authoring/index.ts +50 -0
- package/src/authoring/integration.ts +42 -0
- package/src/authoring/template.ts +74 -0
- package/src/config.test.ts +16 -0
- package/src/config.ts +92 -0
- package/src/docPropLiterals.test.ts +938 -0
- package/src/docs-types.ts +15 -10
- package/src/i18n/InternationalizationContext.ts +39 -0
- package/src/i18n/InternationalizationProvider.doc.mjs +72 -0
- package/src/i18n/InternationalizationProvider.tsx +82 -0
- package/src/i18n/__tests__/e2e-pagination.test.tsx +172 -0
- package/src/i18n/__tests__/e2e-powersearch.test.tsx +130 -0
- package/src/i18n/__tests__/resolve.test.ts +284 -0
- package/src/i18n/index.ts +32 -0
- package/src/i18n/resolve.ts +165 -0
- package/src/i18n/translator.ts +31 -0
- package/src/i18n/types.ts +53 -0
- package/src/i18n/useTranslator.doc.mjs +46 -0
- package/src/i18n/useTranslator.ts +50 -0
- package/src/index.ts +3 -0
- package/src/theme/Theme.doc.mjs +4 -4
- package/src/theme/Theme.tsx +1 -1
- package/src/theme/defineTheme.ts +1 -1
- package/src/theme/hct.ts +0 -4
- package/src/utils/color.test.ts +101 -1
- package/src/utils/color.ts +23 -1
- package/src/utils/index.ts +8 -1
- package/dist/NavItem/index.d.ts +0 -9
- package/dist/NavItem/index.d.ts.map +0 -1
- package/dist/NavItem/index.js +0 -10
- package/src/NavItem/index.ts +0 -11
|
@@ -45,6 +45,7 @@ import type {SyntaxToken, TokenLine} from './tokenizer';
|
|
|
45
45
|
import {ensureHighlightStyles} from './highlightStyles';
|
|
46
46
|
import {applyHighlightRangesChunked} from './highlightRanges';
|
|
47
47
|
import {themeProps} from '../utils/themeProps';
|
|
48
|
+
import {useTranslator} from '../i18n';
|
|
48
49
|
import {SyntaxTheme, type SyntaxThemeDefinition} from '../theme/syntax';
|
|
49
50
|
|
|
50
51
|
// ---------------------------------------------------------------------------
|
|
@@ -78,6 +79,13 @@ const dynamicStyles = stylex.create({
|
|
|
78
79
|
minWidth: value === 'fit-content' ? 'min(100%, 400px)' : null,
|
|
79
80
|
maxWidth: value === 'fit-content' ? '100%' : null,
|
|
80
81
|
}),
|
|
82
|
+
// Width of the line-number column, sized to the widest number. `ch` is the
|
|
83
|
+
// advance of "0" in the (monospace) code font, so N digits => N ch. Set on
|
|
84
|
+
// <code>; `--_codeblock-gutter-width` is unregistered so it inherits (with its var()
|
|
85
|
+
// substituted) down to the line divs that read it for their grid track.
|
|
86
|
+
gutterWidth: (digits: number) => ({
|
|
87
|
+
'--_codeblock-gutter-width': `${digits}ch`,
|
|
88
|
+
}),
|
|
81
89
|
});
|
|
82
90
|
|
|
83
91
|
const styles = stylex.create({
|
|
@@ -188,22 +196,6 @@ const styles = stylex.create({
|
|
|
188
196
|
':focus-visible': '2px',
|
|
189
197
|
},
|
|
190
198
|
},
|
|
191
|
-
gutter: {
|
|
192
|
-
flexShrink: 0,
|
|
193
|
-
paddingBlock: spacingVars['--spacing-3'],
|
|
194
|
-
paddingInlineStart: spacingVars['--spacing-4'],
|
|
195
|
-
paddingInlineEnd: spacingVars['--spacing-3'],
|
|
196
|
-
textAlign: 'end',
|
|
197
|
-
userSelect: 'none',
|
|
198
|
-
color: 'var(--color-syntax-punctuation)',
|
|
199
|
-
borderRightWidth: borderVars['--border-width'],
|
|
200
|
-
borderRightStyle: 'solid',
|
|
201
|
-
borderRightColor: colorVars['--color-border'],
|
|
202
|
-
},
|
|
203
|
-
gutterLine: {
|
|
204
|
-
fontFamily: typographyVars['--font-family-code'],
|
|
205
|
-
lineHeight: typeScaleVars['--text-code-leading'],
|
|
206
|
-
},
|
|
207
199
|
code: {
|
|
208
200
|
display: 'block',
|
|
209
201
|
flex: 1,
|
|
@@ -222,9 +214,53 @@ const styles = stylex.create({
|
|
|
222
214
|
wordBreak: 'break-all',
|
|
223
215
|
overflowWrap: 'break-word',
|
|
224
216
|
},
|
|
217
|
+
// With line numbers on, the <code> element hosts the full-height divider
|
|
218
|
+
// between the number gutter and the code. It spans the code's block padding
|
|
219
|
+
// too (inset-block: 0), so the rule reaches the top and bottom edges the way
|
|
220
|
+
// the old separate gutter column did. The numbers themselves are drawn per
|
|
221
|
+
// line (see `lineNumbered`) — a separate column can't track wrap height.
|
|
222
|
+
codeNumbered: {
|
|
223
|
+
position: 'relative',
|
|
224
|
+
'::after': {
|
|
225
|
+
content: '""',
|
|
226
|
+
position: 'absolute',
|
|
227
|
+
insetBlock: 0,
|
|
228
|
+
insetInlineStart: `calc(${spacingVars['--spacing-4']} + var(--_codeblock-gutter-width) + ${spacingVars['--spacing-3']})`,
|
|
229
|
+
width: 0,
|
|
230
|
+
borderInlineStartWidth: borderVars['--border-width'],
|
|
231
|
+
borderInlineStartStyle: 'solid',
|
|
232
|
+
borderInlineStartColor: colorVars['--color-border'],
|
|
233
|
+
pointerEvents: 'none',
|
|
234
|
+
},
|
|
235
|
+
},
|
|
225
236
|
line: {
|
|
226
237
|
lineHeight: typeScaleVars['--text-code-leading'],
|
|
227
238
|
},
|
|
239
|
+
// Per-line number gutter: a two-column grid ([number] [code]). The number is
|
|
240
|
+
// a ::before generated from the data-line attribute. Because the number and
|
|
241
|
+
// its code occupy one grid row, the row grows to fit wrapped code while the
|
|
242
|
+
// number stays pinned to the row's first visual line (alignSelf: start) —
|
|
243
|
+
// this is what keeps numbers aligned when isWrapped wraps a line.
|
|
244
|
+
lineNumbered: {
|
|
245
|
+
display: 'grid',
|
|
246
|
+
gridTemplateColumns: 'var(--_codeblock-gutter-width) 1fr',
|
|
247
|
+
columnGap: `calc(${spacingVars['--spacing-3']} + ${borderVars['--border-width']} + ${spacingVars['--spacing-4']})`,
|
|
248
|
+
'::before': {
|
|
249
|
+
content: 'attr(data-line)',
|
|
250
|
+
gridColumn: '1',
|
|
251
|
+
alignSelf: 'start',
|
|
252
|
+
textAlign: 'end',
|
|
253
|
+
color: 'var(--color-syntax-punctuation)',
|
|
254
|
+
userSelect: 'none',
|
|
255
|
+
fontFamily: typographyVars['--font-family-code'],
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
// In span mode the tokens are wrapped in this element so they form a single
|
|
259
|
+
// grid item in column 2 (otherwise each token span would flow into its own
|
|
260
|
+
// grid cell). minWidth:0 lets it shrink so long lines wrap within the track.
|
|
261
|
+
lineContent: {
|
|
262
|
+
minWidth: 0,
|
|
263
|
+
},
|
|
228
264
|
lineChunk: {
|
|
229
265
|
contentVisibility: 'auto',
|
|
230
266
|
},
|
|
@@ -239,12 +275,6 @@ const styles = stylex.create({
|
|
|
239
275
|
sizeMd: {
|
|
240
276
|
fontSize: typeScaleVars['--text-code-size'],
|
|
241
277
|
},
|
|
242
|
-
gutterSm: {
|
|
243
|
-
fontSize: typeScaleVars['--text-supporting-size'],
|
|
244
|
-
},
|
|
245
|
-
gutterMd: {
|
|
246
|
-
fontSize: typeScaleVars['--text-code-size'],
|
|
247
|
-
},
|
|
248
278
|
copyButton: {
|
|
249
279
|
display: 'inline-flex',
|
|
250
280
|
alignItems: 'center',
|
|
@@ -285,11 +315,13 @@ const CodeChunk = React.memo(function CodeChunk({
|
|
|
285
315
|
startIndex,
|
|
286
316
|
highlightSet,
|
|
287
317
|
renderLineContent,
|
|
318
|
+
lineNumbers,
|
|
288
319
|
}: {
|
|
289
320
|
lines: string[];
|
|
290
321
|
startIndex: number;
|
|
291
322
|
highlightSet: Set<number> | null;
|
|
292
323
|
renderLineContent: (line: string, lineIndex: number) => React.ReactNode;
|
|
324
|
+
lineNumbers: boolean;
|
|
293
325
|
}) {
|
|
294
326
|
return (
|
|
295
327
|
<>
|
|
@@ -301,6 +333,7 @@ const CodeChunk = React.memo(function CodeChunk({
|
|
|
301
333
|
data-line={i + 1}
|
|
302
334
|
{...stylex.props(
|
|
303
335
|
styles.line,
|
|
336
|
+
lineNumbers && styles.lineNumbered,
|
|
304
337
|
(highlightSet?.has(i + 1) ?? false) && styles.lineHighlighted,
|
|
305
338
|
)}>
|
|
306
339
|
{renderLineContent(line, i)}
|
|
@@ -315,6 +348,7 @@ function renderLines(
|
|
|
315
348
|
lines: string[],
|
|
316
349
|
highlightSet: Set<number> | null,
|
|
317
350
|
renderLineContent: (line: string, lineIndex: number) => React.ReactNode,
|
|
351
|
+
lineNumbers: boolean,
|
|
318
352
|
chunkSize: number = LINE_CHUNK_SIZE,
|
|
319
353
|
): React.ReactNode {
|
|
320
354
|
chunkSize = Math.max(1, Math.floor(chunkSize));
|
|
@@ -326,6 +360,7 @@ function renderLines(
|
|
|
326
360
|
startIndex={0}
|
|
327
361
|
highlightSet={highlightSet}
|
|
328
362
|
renderLineContent={renderLineContent}
|
|
363
|
+
lineNumbers={lineNumbers}
|
|
329
364
|
/>
|
|
330
365
|
);
|
|
331
366
|
}
|
|
@@ -347,6 +382,7 @@ function renderLines(
|
|
|
347
382
|
startIndex={start}
|
|
348
383
|
highlightSet={highlightSet}
|
|
349
384
|
renderLineContent={renderLineContent}
|
|
385
|
+
lineNumbers={lineNumbers}
|
|
350
386
|
/>
|
|
351
387
|
</div>,
|
|
352
388
|
);
|
|
@@ -542,12 +578,16 @@ function SpanCodeContent({
|
|
|
542
578
|
highlightSet,
|
|
543
579
|
isWrapped,
|
|
544
580
|
sizeStyle,
|
|
581
|
+
hasLineNumbers,
|
|
582
|
+
maxDigits,
|
|
545
583
|
}: {
|
|
546
584
|
lines: string[];
|
|
547
585
|
tokenLines: TokenLine[];
|
|
548
586
|
highlightSet: Set<number> | null;
|
|
549
587
|
isWrapped: boolean;
|
|
550
588
|
sizeStyle: stylex.StyleXStyles;
|
|
589
|
+
hasLineNumbers: boolean;
|
|
590
|
+
maxDigits: number;
|
|
551
591
|
}) {
|
|
552
592
|
useInsertionEffect(() => {
|
|
553
593
|
ensureHighlightStyles();
|
|
@@ -556,7 +596,13 @@ function SpanCodeContent({
|
|
|
556
596
|
const renderLineContent = useCallback(
|
|
557
597
|
(line: string, lineIndex: number): React.ReactNode => {
|
|
558
598
|
const tokens = tokenLines[lineIndex] ?? [];
|
|
559
|
-
|
|
599
|
+
// Wrap tokens in a single element so they occupy one grid cell when line
|
|
600
|
+
// numbers are on (see `lineNumbered`); an inline span is a no-op when off.
|
|
601
|
+
return (
|
|
602
|
+
<span {...stylex.props(styles.lineContent)}>
|
|
603
|
+
{buildSpanLine(line, tokens)}
|
|
604
|
+
</span>
|
|
605
|
+
);
|
|
560
606
|
},
|
|
561
607
|
[tokenLines],
|
|
562
608
|
);
|
|
@@ -567,8 +613,10 @@ function SpanCodeContent({
|
|
|
567
613
|
styles.code,
|
|
568
614
|
sizeStyle,
|
|
569
615
|
isWrapped && styles.codeWrapped,
|
|
616
|
+
hasLineNumbers && styles.codeNumbered,
|
|
617
|
+
hasLineNumbers && dynamicStyles.gutterWidth(maxDigits),
|
|
570
618
|
)}>
|
|
571
|
-
{renderLines(lines, highlightSet, renderLineContent)}
|
|
619
|
+
{renderLines(lines, highlightSet, renderLineContent, hasLineNumbers)}
|
|
572
620
|
</code>
|
|
573
621
|
);
|
|
574
622
|
}
|
|
@@ -583,12 +631,16 @@ function RangeCodeContent({
|
|
|
583
631
|
highlightSet,
|
|
584
632
|
isWrapped,
|
|
585
633
|
sizeStyle,
|
|
634
|
+
hasLineNumbers,
|
|
635
|
+
maxDigits,
|
|
586
636
|
}: {
|
|
587
637
|
lines: string[];
|
|
588
638
|
tokenLines: TokenLine[];
|
|
589
639
|
highlightSet: Set<number> | null;
|
|
590
640
|
isWrapped: boolean;
|
|
591
641
|
sizeStyle: stylex.StyleXStyles;
|
|
642
|
+
hasLineNumbers: boolean;
|
|
643
|
+
maxDigits: number;
|
|
592
644
|
}) {
|
|
593
645
|
const codeRef = useRef<HTMLElement>(null);
|
|
594
646
|
|
|
@@ -606,6 +658,9 @@ function RangeCodeContent({
|
|
|
606
658
|
return applyHighlightRangesChunked(codeEl, tokenLines);
|
|
607
659
|
}, [tokenLines]);
|
|
608
660
|
|
|
661
|
+
// Range mode keeps the line's text as a bare text node (its firstChild) so
|
|
662
|
+
// applyHighlightRangesChunked can map token offsets onto it \u2014 no wrapper. The
|
|
663
|
+
// number ::before is a pseudo-element, so it never becomes a child node here.
|
|
609
664
|
const renderLineContent = useCallback(
|
|
610
665
|
(line: string): React.ReactNode => line || '\u200b',
|
|
611
666
|
[],
|
|
@@ -618,8 +673,10 @@ function RangeCodeContent({
|
|
|
618
673
|
styles.code,
|
|
619
674
|
sizeStyle,
|
|
620
675
|
isWrapped && styles.codeWrapped,
|
|
676
|
+
hasLineNumbers && styles.codeNumbered,
|
|
677
|
+
hasLineNumbers && dynamicStyles.gutterWidth(maxDigits),
|
|
621
678
|
)}>
|
|
622
|
-
{renderLines(lines, highlightSet, renderLineContent)}
|
|
679
|
+
{renderLines(lines, highlightSet, renderLineContent, hasLineNumbers)}
|
|
623
680
|
</code>
|
|
624
681
|
);
|
|
625
682
|
}
|
|
@@ -662,6 +719,7 @@ export function CodeBlock({
|
|
|
662
719
|
ref,
|
|
663
720
|
...props
|
|
664
721
|
}: CodeBlockProps) {
|
|
722
|
+
const t = useTranslator();
|
|
665
723
|
const [copied, setCopied] = useState(false);
|
|
666
724
|
const copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
667
725
|
const announce = useAnnounce();
|
|
@@ -718,7 +776,8 @@ export function CodeBlock({
|
|
|
718
776
|
}, [code, onCopy, announce]);
|
|
719
777
|
|
|
720
778
|
const sizeStyle = size === 'sm' ? styles.sizeSm : styles.sizeMd;
|
|
721
|
-
|
|
779
|
+
// Digits in the largest line number — sizes the gutter column width.
|
|
780
|
+
const maxLineDigits = String(lines.length).length;
|
|
722
781
|
const languageLabel =
|
|
723
782
|
hasLanguageLabel && language !== 'plaintext' ? language : null;
|
|
724
783
|
const showHeader = title != null || languageLabel != null;
|
|
@@ -748,7 +807,7 @@ export function CodeBlock({
|
|
|
748
807
|
e.stopPropagation();
|
|
749
808
|
void handleCopy();
|
|
750
809
|
}}
|
|
751
|
-
aria-label={copied ? '
|
|
810
|
+
aria-label={copied ? t('@astryx.codeBlock.copied') : t('@astryx.codeBlock.copyCode')}
|
|
752
811
|
{...stylex.props(
|
|
753
812
|
styles.copyButton,
|
|
754
813
|
!showHeader && styles.copyButtonAbsolute,
|
|
@@ -811,7 +870,7 @@ export function CodeBlock({
|
|
|
811
870
|
// create duplicate same-named landmarks (axe: landmark-unique).
|
|
812
871
|
tabIndex={0}
|
|
813
872
|
role="group"
|
|
814
|
-
aria-label={languageLabel ?? '
|
|
873
|
+
aria-label={languageLabel ?? t('@astryx.codeBlock.code')}
|
|
815
874
|
{...mergeProps(stylex.props(styles.scrollContainer), {
|
|
816
875
|
style: scrollStyle,
|
|
817
876
|
})}>
|
|
@@ -820,18 +879,6 @@ export function CodeBlock({
|
|
|
820
879
|
styles.codeWrapper,
|
|
821
880
|
showHeader && !hasLineNumbers && styles.codeWrapperCompact,
|
|
822
881
|
)}>
|
|
823
|
-
{hasLineNumbers && (
|
|
824
|
-
<div
|
|
825
|
-
{...stylex.props(styles.gutter, gutterSizeStyle)}
|
|
826
|
-
aria-hidden="true">
|
|
827
|
-
{lines.map((_, i) => (
|
|
828
|
-
// eslint-disable-next-line @eslint-react/no-array-index-key -- gutter line numbers are positional by definition
|
|
829
|
-
<div key={i} {...stylex.props(styles.gutterLine)}>
|
|
830
|
-
{i + 1}
|
|
831
|
-
</div>
|
|
832
|
-
))}
|
|
833
|
-
</div>
|
|
834
|
-
)}
|
|
835
882
|
{useSpans ? (
|
|
836
883
|
<SpanCodeContent
|
|
837
884
|
lines={lines}
|
|
@@ -839,6 +886,8 @@ export function CodeBlock({
|
|
|
839
886
|
highlightSet={highlightSet}
|
|
840
887
|
isWrapped={isWrapped}
|
|
841
888
|
sizeStyle={sizeStyle}
|
|
889
|
+
hasLineNumbers={hasLineNumbers}
|
|
890
|
+
maxDigits={maxLineDigits}
|
|
842
891
|
/>
|
|
843
892
|
) : (
|
|
844
893
|
<RangeCodeContent
|
|
@@ -847,6 +896,8 @@ export function CodeBlock({
|
|
|
847
896
|
highlightSet={highlightSet}
|
|
848
897
|
isWrapped={isWrapped}
|
|
849
898
|
sizeStyle={sizeStyle}
|
|
899
|
+
hasLineNumbers={hasLineNumbers}
|
|
900
|
+
maxDigits={maxLineDigits}
|
|
850
901
|
/>
|
|
851
902
|
)}
|
|
852
903
|
</div>
|
|
@@ -17,6 +17,7 @@ export const docs = {
|
|
|
17
17
|
theming: {
|
|
18
18
|
targets: [
|
|
19
19
|
{className: 'astryx-collapsible', visualProps: ['density']},
|
|
20
|
+
{className: 'astryx-collapsible-content', visualProps: ['density']},
|
|
20
21
|
{className: 'astryx-collapsible-group', visualProps: ['density']},
|
|
21
22
|
],
|
|
22
23
|
},
|
|
@@ -53,6 +54,12 @@ export const docs = {
|
|
|
53
54
|
type: 'boolean',
|
|
54
55
|
description: 'Controlled open state.',
|
|
55
56
|
},
|
|
57
|
+
{
|
|
58
|
+
name: 'isDisabled',
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
description: "Disable the item so its trigger can't be toggled (dimmed, aria-disabled, and out of the tab order). Doesn't collapse an already-open item.",
|
|
61
|
+
default: 'false',
|
|
62
|
+
},
|
|
56
63
|
{
|
|
57
64
|
name: 'onOpenChange',
|
|
58
65
|
type: '(isOpen: boolean) => void',
|
|
@@ -72,6 +72,12 @@ describe('Collapsible', () => {
|
|
|
72
72
|
expect(screen.getByTestId('root')).toHaveClass('astryx-collapsible');
|
|
73
73
|
});
|
|
74
74
|
|
|
75
|
+
it('renders the stable astryx-collapsible-content class on the content area', () => {
|
|
76
|
+
render(<Collapsible trigger="T">c</Collapsible>);
|
|
77
|
+
const content = contentFor(screen.getByRole('button'));
|
|
78
|
+
expect(content).toHaveClass('astryx-collapsible-content');
|
|
79
|
+
});
|
|
80
|
+
|
|
75
81
|
it('renders a ReactNode trigger, not just a string', () => {
|
|
76
82
|
render(
|
|
77
83
|
<Collapsible trigger={<span data-testid="rich">Rich</span>}>
|
|
@@ -240,6 +246,80 @@ describe('Collapsible', () => {
|
|
|
240
246
|
});
|
|
241
247
|
});
|
|
242
248
|
|
|
249
|
+
describe('disabled state', () => {
|
|
250
|
+
it('marks the trigger aria-disabled and drops it from the tab order', () => {
|
|
251
|
+
render(
|
|
252
|
+
<Collapsible trigger="T" isDisabled>
|
|
253
|
+
Body
|
|
254
|
+
</Collapsible>,
|
|
255
|
+
);
|
|
256
|
+
const button = screen.getByRole('button');
|
|
257
|
+
expect(button).toHaveAttribute('aria-disabled', 'true');
|
|
258
|
+
expect(button).toHaveAttribute('tabindex', '-1');
|
|
259
|
+
// Never the native disabled attribute — it stays focusable/perceivable.
|
|
260
|
+
expect(button).not.toBeDisabled();
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('is enabled by default (no aria-disabled, stays in tab order)', () => {
|
|
264
|
+
render(<Collapsible trigger="T">Body</Collapsible>);
|
|
265
|
+
const button = screen.getByRole('button');
|
|
266
|
+
expect(button).not.toHaveAttribute('aria-disabled');
|
|
267
|
+
expect(button).not.toHaveAttribute('tabindex', '-1');
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it('does not toggle when the trigger is clicked while disabled', async () => {
|
|
271
|
+
const user = userEvent.setup();
|
|
272
|
+
render(
|
|
273
|
+
<Collapsible trigger="T" isDisabled defaultIsOpen>
|
|
274
|
+
Body
|
|
275
|
+
</Collapsible>,
|
|
276
|
+
);
|
|
277
|
+
const button = screen.getByRole('button');
|
|
278
|
+
expect(button).toHaveAttribute('aria-expanded', 'true');
|
|
279
|
+
await user.click(button);
|
|
280
|
+
expect(button).toHaveAttribute('aria-expanded', 'true');
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it('does not fire onOpenChange while disabled', async () => {
|
|
284
|
+
const user = userEvent.setup();
|
|
285
|
+
const onOpenChange = vi.fn();
|
|
286
|
+
render(
|
|
287
|
+
<Collapsible trigger="T" isDisabled onOpenChange={onOpenChange}>
|
|
288
|
+
Body
|
|
289
|
+
</Collapsible>,
|
|
290
|
+
);
|
|
291
|
+
await user.click(screen.getByRole('button'));
|
|
292
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it('does not collapse an already-open item — content stays visible', () => {
|
|
296
|
+
render(
|
|
297
|
+
<Collapsible trigger="T" isDisabled defaultIsOpen>
|
|
298
|
+
Body
|
|
299
|
+
</Collapsible>,
|
|
300
|
+
);
|
|
301
|
+
const content = contentFor(screen.getByRole('button'));
|
|
302
|
+
expect(content).not.toHaveStyle({display: 'none'});
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it('does not toggle its group item when disabled', async () => {
|
|
306
|
+
const user = userEvent.setup();
|
|
307
|
+
render(
|
|
308
|
+
<CollapsibleGroup type="single">
|
|
309
|
+
<Collapsible trigger="A" value="a" isDisabled>
|
|
310
|
+
Body A
|
|
311
|
+
</Collapsible>
|
|
312
|
+
<Collapsible trigger="B" value="b">
|
|
313
|
+
Body B
|
|
314
|
+
</Collapsible>
|
|
315
|
+
</CollapsibleGroup>,
|
|
316
|
+
);
|
|
317
|
+
const triggerA = screen.getByRole('button', {name: /A/});
|
|
318
|
+
await user.click(triggerA);
|
|
319
|
+
expect(triggerA).toHaveAttribute('aria-expanded', 'false');
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
|
|
243
323
|
describe('prop forwarding', () => {
|
|
244
324
|
it('forwards a ref to the root element', () => {
|
|
245
325
|
const ref = vi.fn();
|
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
durationVars,
|
|
40
40
|
easeVars,
|
|
41
41
|
} from '../theme/tokens.stylex';
|
|
42
|
+
|
|
42
43
|
import {useCollapsible} from './useCollapsible';
|
|
43
44
|
import {CollapsibleGroupPresentationContext} from './CollapsibleGroupContext';
|
|
44
45
|
import {getIcon} from '../Icon/globalIconRegistry';
|
|
@@ -81,6 +82,13 @@ const styles = stylex.create({
|
|
|
81
82
|
textBoxEdge: 'cap alphabetic',
|
|
82
83
|
textBoxTrim: 'trim-both',
|
|
83
84
|
},
|
|
85
|
+
// Disabled trigger — non-interactive, dimmed. Native `disabled` on the
|
|
86
|
+
// button blocks click + keyboard activation; these styles restore the
|
|
87
|
+
// visual affordance that `all: unset` wipes.
|
|
88
|
+
triggerDisabled: {
|
|
89
|
+
cursor: 'not-allowed',
|
|
90
|
+
opacity: 0.5,
|
|
91
|
+
},
|
|
84
92
|
// Chevron indicator
|
|
85
93
|
chevron: {
|
|
86
94
|
display: 'inline-flex',
|
|
@@ -102,8 +110,17 @@ const styles = stylex.create({
|
|
|
102
110
|
contentHidden: {
|
|
103
111
|
display: 'none',
|
|
104
112
|
},
|
|
113
|
+
// Anchors body typography so revealed text renders at the system's body
|
|
114
|
+
// scale (family/size/weight/leading) instead of inheriting from wherever
|
|
115
|
+
// the Collapsible is placed. External themes override via the
|
|
116
|
+
// `astryx-collapsible-content` target.
|
|
105
117
|
content: {
|
|
106
118
|
paddingBlockStart: spacingVars['--spacing-1'],
|
|
119
|
+
fontFamily: typographyVars['--font-family-body'],
|
|
120
|
+
fontSize: typeScaleVars['--text-body-size'],
|
|
121
|
+
fontWeight: typeScaleVars['--text-body-weight'],
|
|
122
|
+
lineHeight: typeScaleVars['--text-body-leading'],
|
|
123
|
+
color: colorVars['--color-text-primary'],
|
|
107
124
|
},
|
|
108
125
|
// Group divider chrome — a hairline above every item except the first.
|
|
109
126
|
// The group's wrapper (or 'all' mode) owns the outer edges.
|
|
@@ -166,6 +183,17 @@ export interface CollapsibleProps extends BaseProps {
|
|
|
166
183
|
*/
|
|
167
184
|
isOpen?: boolean;
|
|
168
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Whether the collapsible is disabled. A disabled item can't be toggled —
|
|
188
|
+
* its trigger is non-interactive and dimmed. Following the system-wide
|
|
189
|
+
* disabled convention, the trigger uses `aria-disabled` (not the native
|
|
190
|
+
* `disabled` attribute) and drops out of the tab order, staying perceivable
|
|
191
|
+
* to assistive tech. The content stays in whatever open state it was;
|
|
192
|
+
* disabling doesn't collapse an already-open item.
|
|
193
|
+
* @default false
|
|
194
|
+
*/
|
|
195
|
+
isDisabled?: boolean;
|
|
196
|
+
|
|
169
197
|
/**
|
|
170
198
|
* Callback when the open state changes.
|
|
171
199
|
*/
|
|
@@ -225,6 +253,7 @@ export function Collapsible({
|
|
|
225
253
|
children,
|
|
226
254
|
defaultIsOpen,
|
|
227
255
|
isOpen: controlledIsOpen,
|
|
256
|
+
isDisabled = false,
|
|
228
257
|
onOpenChange,
|
|
229
258
|
value,
|
|
230
259
|
ref,
|
|
@@ -244,6 +273,17 @@ export function Collapsible({
|
|
|
244
273
|
value,
|
|
245
274
|
});
|
|
246
275
|
|
|
276
|
+
// Activation is blocked by this guard rather than the native `disabled`
|
|
277
|
+
// attribute, so the trigger keeps `aria-disabled` semantics and stays
|
|
278
|
+
// discoverable. A native `disabled` button would silently swallow events
|
|
279
|
+
// (e.g. a wrapping tooltip's hover) — the system-wide disabled convention.
|
|
280
|
+
const handleToggle = () => {
|
|
281
|
+
if (isDisabled) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
toggle();
|
|
285
|
+
};
|
|
286
|
+
|
|
247
287
|
const presentation = use(CollapsibleGroupPresentationContext);
|
|
248
288
|
const isDivided = presentation?.hasDividers ?? false;
|
|
249
289
|
const density = presentation?.density ?? null;
|
|
@@ -268,12 +308,20 @@ export function Collapsible({
|
|
|
268
308
|
{...props}>
|
|
269
309
|
<button
|
|
270
310
|
type="button"
|
|
271
|
-
onClick={
|
|
311
|
+
onClick={handleToggle}
|
|
312
|
+
aria-disabled={isDisabled || undefined}
|
|
272
313
|
aria-expanded={isOpen}
|
|
273
314
|
aria-controls={contentId}
|
|
315
|
+
// A disabled trigger drops out of the tab order so it isn't a silently
|
|
316
|
+
// dead tab stop; activation stays blocked by the handleToggle guard,
|
|
317
|
+
// and aria-disabled keeps the state perceivable to assistive tech —
|
|
318
|
+
// the system-wide disabled convention (never native `disabled`, which
|
|
319
|
+
// would swallow events like a wrapping tooltip's hover).
|
|
320
|
+
tabIndex={isDisabled ? -1 : undefined}
|
|
274
321
|
{...stylex.props(
|
|
275
322
|
styles.trigger,
|
|
276
323
|
density != null && triggerDensity[density],
|
|
324
|
+
isDisabled && styles.triggerDisabled,
|
|
277
325
|
)}>
|
|
278
326
|
<span {...stylex.props(styles.triggerLabel)}>{trigger}</span>
|
|
279
327
|
<span
|
|
@@ -286,10 +334,15 @@ export function Collapsible({
|
|
|
286
334
|
</button>
|
|
287
335
|
<div
|
|
288
336
|
id={contentId}
|
|
289
|
-
{...
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
337
|
+
{...mergeProps(
|
|
338
|
+
themeProps('collapsible-content', {
|
|
339
|
+
density: density ?? undefined,
|
|
340
|
+
}),
|
|
341
|
+
stylex.props(
|
|
342
|
+
styles.content,
|
|
343
|
+
density != null && contentDensity[density],
|
|
344
|
+
!isOpen && styles.contentHidden,
|
|
345
|
+
),
|
|
293
346
|
)}>
|
|
294
347
|
{presentation != null ? (
|
|
295
348
|
<CollapsibleGroupPresentationContext value={null}>
|
|
@@ -36,6 +36,7 @@ import {CommandPaletteInput} from './CommandPaletteInput';
|
|
|
36
36
|
import {CommandPaletteFooter} from './CommandPaletteFooter';
|
|
37
37
|
import {CommandPaletteEmpty} from './CommandPaletteEmpty';
|
|
38
38
|
import type {BaseProps} from '../BaseProps';
|
|
39
|
+
import {useTranslator} from '../i18n';
|
|
39
40
|
|
|
40
41
|
export interface CommandPaletteProps<
|
|
41
42
|
T extends SearchableItem = SearchableItem,
|
|
@@ -260,14 +261,20 @@ export function CommandPalette<T extends SearchableItem = SearchableItem>({
|
|
|
260
261
|
input,
|
|
261
262
|
footer,
|
|
262
263
|
renderItem,
|
|
263
|
-
emptySearchText
|
|
264
|
-
emptyBootstrapText
|
|
264
|
+
emptySearchText: emptySearchTextFromProps,
|
|
265
|
+
emptyBootstrapText: emptyBootstrapTextFromProps,
|
|
265
266
|
value: controlledValue,
|
|
266
267
|
onValueChange,
|
|
267
|
-
label
|
|
268
|
+
label: labelFromProps,
|
|
268
269
|
width = 640,
|
|
269
270
|
maxHeight = 480,
|
|
270
271
|
}: CommandPaletteProps<T>) {
|
|
272
|
+
const t = useTranslator();
|
|
273
|
+
const label = labelFromProps ?? t('@astryx.commandPalette.label');
|
|
274
|
+
const emptySearchText =
|
|
275
|
+
emptySearchTextFromProps ?? t('@astryx.commandPalette.emptySearch');
|
|
276
|
+
const emptyBootstrapText =
|
|
277
|
+
emptyBootstrapTextFromProps ?? t('@astryx.commandPalette.emptyBootstrap');
|
|
271
278
|
const listId = useId();
|
|
272
279
|
// search: the committed query — only advances when async results arrive.
|
|
273
280
|
// optimisticSearch: updates immediately on keystroke, drives input + empty state.
|
|
@@ -17,7 +17,7 @@ import type {CommandPaletteContextValue} from './CommandPaletteContext';
|
|
|
17
17
|
describe('CommandPaletteInput', () => {
|
|
18
18
|
it('renders with default placeholder', () => {
|
|
19
19
|
render(<CommandPaletteInput />);
|
|
20
|
-
expect(screen.getByPlaceholderText('Search
|
|
20
|
+
expect(screen.getByPlaceholderText('Search…')).toBeInTheDocument();
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
it('renders with custom placeholder', () => {
|
|
@@ -27,6 +27,7 @@ import {useCommandPaletteContext} from './CommandPaletteContext';
|
|
|
27
27
|
import {useDialogContext} from '../Dialog/DialogContext';
|
|
28
28
|
import type {BaseProps} from '../BaseProps';
|
|
29
29
|
import {themeProps} from '../utils/themeProps';
|
|
30
|
+
import {useTranslator} from '../i18n';
|
|
30
31
|
|
|
31
32
|
const styles = stylex.create({
|
|
32
33
|
wrapper: {
|
|
@@ -147,7 +148,7 @@ export interface CommandPaletteInputProps extends Omit<
|
|
|
147
148
|
export function CommandPaletteInput({
|
|
148
149
|
value: controlledValue,
|
|
149
150
|
onValueChange,
|
|
150
|
-
placeholder
|
|
151
|
+
placeholder: placeholderFromProps,
|
|
151
152
|
hasAutoFocus = true,
|
|
152
153
|
endContent,
|
|
153
154
|
onChange,
|
|
@@ -156,6 +157,9 @@ export function CommandPaletteInput({
|
|
|
156
157
|
xstyle,
|
|
157
158
|
...props
|
|
158
159
|
}: CommandPaletteInputProps) {
|
|
160
|
+
const t = useTranslator();
|
|
161
|
+
const placeholder =
|
|
162
|
+
placeholderFromProps ?? t('@astryx.commandPalette.input.placeholder');
|
|
159
163
|
const ctx = useCommandPaletteContext();
|
|
160
164
|
const dialogContext = useDialogContext();
|
|
161
165
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
@@ -20,6 +20,7 @@ import {mergeProps} from '../utils';
|
|
|
20
20
|
import {spacingVars} from '../theme/tokens.stylex';
|
|
21
21
|
import {useCommandPaletteContext} from './CommandPaletteContext';
|
|
22
22
|
import {themeProps} from '../utils/themeProps';
|
|
23
|
+
import {useTranslator} from '../i18n';
|
|
23
24
|
|
|
24
25
|
const styles = stylex.create({
|
|
25
26
|
list: {
|
|
@@ -72,13 +73,15 @@ export interface CommandPaletteListProps extends BaseProps<HTMLDivElement> {
|
|
|
72
73
|
*/
|
|
73
74
|
export function CommandPaletteList({
|
|
74
75
|
children,
|
|
75
|
-
label
|
|
76
|
+
label: labelFromProps,
|
|
76
77
|
ref,
|
|
77
78
|
xstyle,
|
|
78
79
|
className,
|
|
79
80
|
style,
|
|
80
81
|
...props
|
|
81
82
|
}: CommandPaletteListProps) {
|
|
83
|
+
const t = useTranslator();
|
|
84
|
+
const label = labelFromProps ?? t('@astryx.commandPalette.list.label');
|
|
82
85
|
const ctx = useCommandPaletteContext();
|
|
83
86
|
|
|
84
87
|
return (
|