@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4
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/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +18 -20
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +53 -55
- package/dist/AspectRatio/AspectRatio.d.ts +10 -48
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +12 -33
- package/dist/AspectRatio/index.d.ts +1 -1
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +25 -27
- package/dist/Avatar/AvatarStatusDot.js +5 -5
- package/dist/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +25 -32
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.js +19 -19
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +48 -68
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +2 -2
- package/dist/Card/Card.d.ts +2 -4
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +10 -18
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +21 -24
- package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
- package/dist/Carousel/carousel.markers.stylex.js +12 -0
- package/dist/Center/Center.js +3 -3
- package/dist/Chat/ChatComposer.js +23 -23
- package/dist/Chat/ChatComposerDrawer.js +14 -14
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +15 -27
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +11 -13
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +10 -12
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +12 -14
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +15 -24
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +74 -81
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +23 -25
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +6 -8
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +9 -32
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +1 -10
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +52 -88
- package/dist/Collapsible/Collapsible.d.ts +3 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +22 -110
- package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +12 -73
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
- package/dist/Collapsible/index.d.ts +0 -1
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +1 -4
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +6 -20
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +34 -36
- package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
- package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
- package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
- package/dist/CommandPalette/CommandPaletteInput.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/CommandPalette/CommandPaletteList.js +3 -3
- package/dist/ContextMenu/ContextMenu.d.ts +2 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +43 -76
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +26 -30
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +3 -4
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +12 -29
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.d.ts +1 -5
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +12 -16
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.d.ts +2 -29
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +31 -44
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +31 -55
- package/dist/Lightbox/useLightbox.js +3 -3
- package/dist/Link/Link.js +15 -15
- package/dist/Link/LinkProvider.js +3 -3
- package/dist/Link/useLinkify.js +3 -3
- package/dist/List/List.js +11 -11
- package/dist/List/ListItem.js +11 -11
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +102 -102
- package/dist/MetadataList/MetadataList.js +10 -10
- package/dist/MetadataList/MetadataListItem.js +15 -15
- package/dist/MobileNav/MobileNav.js +15 -15
- package/dist/MobileNav/MobileNavToggle.js +5 -5
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.js +56 -56
- package/dist/NavIcon/NavIcon.js +3 -3
- package/dist/NavMenu/NavHeadingMenu.js +5 -5
- package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +32 -48
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.js +3 -3
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +72 -125
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +92 -110
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -25
- package/dist/RadioList/RadioList.js +7 -7
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +21 -24
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +10 -28
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +10 -32
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.js +46 -46
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +34 -38
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +6 -8
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +16 -18
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.js +23 -23
- package/dist/Spinner/Spinner.js +9 -9
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +4 -8
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +29 -34
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +30 -57
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +39 -50
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +5 -9
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +5 -9
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +5 -9
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +1 -5
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
- package/dist/Table/plugins/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
- package/dist/Table/tableContextMenu.js +9 -9
- package/dist/Text/Text.js +10 -10
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +2 -3
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +29 -30
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -26
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +26 -37
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +17 -25
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +11 -23
- package/dist/Toast/useToast.js +4 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +34 -36
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +1 -5
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -3
- package/dist/TopNav/TopNav.js +32 -32
- package/dist/TopNav/TopNavHeading.js +67 -67
- package/dist/TopNav/TopNavItem.js +5 -5
- package/dist/TopNav/TopNavMegaMenu.js +30 -30
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +20 -23
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/astryx.css +0 -7
- package/dist/astryx.umd.js +60 -60
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +2 -8
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +0 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/useFocusTrap.d.ts +0 -3
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +1 -38
- package/dist/hooks/useInteractiveRole.d.ts +2 -6
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +2 -6
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +1 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +5 -14
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +3 -10
- package/dist/theme/hct.d.ts +15 -0
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +2 -10
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +4 -220
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -8
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
- package/src/AlertDialog/AlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +0 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
- package/src/AspectRatio/AspectRatio.test.tsx +1 -142
- package/src/AspectRatio/AspectRatio.tsx +10 -70
- package/src/AspectRatio/index.ts +1 -5
- package/src/Avatar/Avatar.doc.mjs +0 -11
- package/src/Avatar/Avatar.test.tsx +1 -32
- package/src/Avatar/Avatar.tsx +20 -12
- package/src/Banner/Banner.doc.mjs +0 -8
- package/src/Banner/Banner.test.tsx +0 -38
- package/src/Banner/Banner.tsx +1 -8
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +17 -122
- package/src/Calendar/Calendar.tsx +5 -26
- package/src/Calendar/dayCellUtils.ts +1 -3
- package/src/Calendar/styles.ts +2 -12
- package/src/Card/Card.tsx +6 -16
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +0 -13
- package/src/Carousel/Carousel.tsx +2 -4
- package/src/Carousel/carousel.markers.stylex.ts +10 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +1 -27
- package/src/Chat/ChatComposerInput.tsx +15 -20
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
- package/src/Chat/ChatMessageMetadata.tsx +6 -4
- package/src/Chat/ChatSystemMessage.test.tsx +11 -26
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +16 -29
- package/src/Chat/ChatTokenizedText.tsx +8 -15
- package/src/Chat/ChatToolCalls.test.tsx +0 -55
- package/src/Chat/ChatToolCalls.tsx +12 -10
- package/src/Chat/index.ts +4 -1
- package/src/Chat/useTriggerMenu.tsx +4 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
- package/src/CheckboxInput/CheckboxInput.tsx +0 -2
- package/src/CheckboxList/CheckboxList.test.tsx +0 -19
- package/src/CheckboxList/CheckboxListItem.tsx +2 -11
- package/src/Citation/Citation.doc.mjs +0 -5
- package/src/ClickableCard/ClickableCard.tsx +2 -45
- package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
- package/src/CodeBlock/CodeBlock.test.tsx +3 -122
- package/src/CodeBlock/CodeBlock.tsx +4 -62
- package/src/Collapsible/Collapsible.doc.mjs +4 -8
- package/src/Collapsible/Collapsible.tsx +10 -86
- package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
- package/src/Collapsible/CollapsibleGroup.tsx +9 -107
- package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
- package/src/Collapsible/index.ts +0 -4
- package/src/Collapsible/useCollapsible.ts +6 -20
- package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
- package/src/CommandPalette/CommandPalette.tsx +3 -5
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
- package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
- package/src/ContextMenu/ContextMenu.test.tsx +0 -87
- package/src/ContextMenu/ContextMenu.tsx +28 -87
- package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
- package/src/DateInput/DateInput.test.tsx +20 -11
- package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
- package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
- package/src/DateTimeInput/DateTimeInput.tsx +2 -8
- package/src/DateTimeInput/index.ts +0 -1
- package/src/Dialog/Dialog.doc.mjs +0 -4
- package/src/Dialog/DialogHeader.doc.mjs +0 -45
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
- package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
- package/src/Field/Field.test.tsx +4 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
- package/src/Grid/Grid.test.tsx +18 -43
- package/src/Grid/Grid.tsx +9 -26
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +2 -9
- package/src/Icon/Icon.test.tsx +29 -41
- package/src/Icon/Icon.tsx +2 -6
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +2 -221
- package/src/Layer/useLayer.tsx +30 -69
- package/src/Layout/LayoutContent.doc.mjs +0 -12
- package/src/Layout/LayoutPanel.doc.mjs +0 -40
- package/src/Lightbox/Lightbox.doc.mjs +0 -5
- package/src/Lightbox/Lightbox.test.tsx +2 -123
- package/src/Lightbox/Lightbox.tsx +1 -29
- package/src/Markdown/Markdown.tsx +7 -9
- package/src/Markdown/parser.perf.test.ts +12 -34
- package/src/NavMenu/NavMenu.doc.mjs +0 -15
- package/src/NumberInput/NumberInput.test.tsx +3 -48
- package/src/NumberInput/NumberInput.tsx +15 -32
- package/src/Overlay/Overlay.doc.mjs +0 -6
- package/src/Pagination/Pagination.test.tsx +0 -162
- package/src/Pagination/Pagination.tsx +26 -80
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +0 -65
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +1 -109
- package/src/PowerSearch/PowerSearch.tsx +16 -37
- package/src/ProgressBar/ProgressBar.test.tsx +0 -30
- package/src/ProgressBar/ProgressBar.tsx +5 -12
- package/src/RadioList/RadioList.test.tsx +0 -19
- package/src/RadioList/RadioListItem.tsx +4 -9
- package/src/Resizable/ResizeHandle.tsx +4 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
- package/src/SegmentedControl/SegmentedControl.tsx +5 -27
- package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +1 -27
- package/src/SideNav/SideNav.doc.mjs +1 -7
- package/src/SideNav/SideNav.test.tsx +0 -66
- package/src/SideNav/SideNav.tsx +2 -6
- package/src/SideNav/SideNavCollapseButton.tsx +3 -4
- package/src/SideNav/SideNavSection.tsx +4 -6
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +3 -102
- package/src/Switch/Switch.tsx +7 -20
- package/src/TabList/TabList.test.tsx +1 -185
- package/src/TabList/TabMenu.tsx +9 -45
- package/src/Table/BaseTable.tsx +2 -13
- package/src/Table/Table.test.tsx +0 -87
- package/src/Table/TableBody.tsx +2 -15
- package/src/Table/TableFooter.tsx +2 -15
- package/src/Table/TableHeader.tsx +2 -15
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
- package/src/Table/plugins/pagination/paginateData.ts +1 -5
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
- package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
- package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +2 -36
- package/src/Thumbnail/Thumbnail.tsx +2 -4
- package/src/TimeInput/TimeInput.test.tsx +0 -37
- package/src/TimeInput/TimeInput.tsx +1 -11
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +0 -52
- package/src/Timestamp/Timestamp.tsx +16 -30
- package/src/Toast/Toast.tsx +3 -11
- package/src/Toast/ToastViewport.test.tsx +0 -64
- package/src/Toast/ToastViewport.tsx +0 -12
- package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +0 -54
- package/src/Tokenizer/Tokenizer.tsx +4 -5
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +2 -12
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +7 -23
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
- package/src/Typeahead/BaseTypeahead.tsx +2 -5
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +1 -45
- package/src/docs-types.ts +1 -9
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +0 -3
- package/src/hooks/useFocusTrap.doc.mjs +2 -4
- package/src/hooks/useFocusTrap.test.tsx +1 -149
- package/src/hooks/useFocusTrap.ts +1 -50
- package/src/hooks/useInteractiveRole.ts +4 -12
- package/src/hooks/useStreamingText.test.ts +19 -54
- package/src/hooks/useStreamingText.ts +5 -16
- package/src/hooks/useTreeFocus.test.tsx +3 -1
- package/src/reset.css +0 -29
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +13 -4
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +0 -29
- package/src/theme/expandColorScale.ts +6 -11
- package/src/theme/hct.ts +17 -9
- package/src/theme/tokens.test.ts +9 -182
- package/src/theme/tokens.ts +4 -239
- package/src/theme/useTheme.test.tsx +0 -20
- package/src/utils/index.ts +0 -4
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +0 -13
- package/src/utils/timeParser.ts +5 -8
- package/dist/hooks/useHotkeys.d.ts +0 -51
- package/dist/hooks/useHotkeys.d.ts.map +0 -1
- package/dist/hooks/useHotkeys.js +0 -160
- package/dist/utils/color.d.ts +0 -42
- package/dist/utils/color.d.ts.map +0 -1
- package/dist/utils/color.js +0 -150
- package/dist/utils/composeEventHandlers.d.ts +0 -30
- package/dist/utils/composeEventHandlers.d.ts.map +0 -1
- package/dist/utils/composeEventHandlers.js +0 -40
- package/src/Chat/ChatDictationButton.test.tsx +0 -43
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
- package/src/Collapsible/Collapsible.test.tsx +0 -405
- package/src/FieldStatus/FieldStatus.test.tsx +0 -282
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Layout/Layout.test.tsx +0 -285
- package/src/Layout/LayoutSlots.test.tsx +0 -364
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
- package/src/OverflowList/OverflowList.test.tsx +0 -416
- package/src/Overlay/Overlay.test.tsx +0 -356
- package/src/Resizable/ResizeHandle.test.tsx +0 -218
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/docPropReferences.test.ts +0 -178
- package/src/hooks/useHotkeys.doc.mjs +0 -52
- package/src/hooks/useHotkeys.test.ts +0 -245
- package/src/hooks/useHotkeys.ts +0 -203
- package/src/utils/color.test.ts +0 -133
- package/src/utils/color.ts +0 -148
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/composeEventHandlers.ts +0 -44
- package/src/utils/mergeProps.test.ts +0 -166
package/src/utils/timeParser.ts
CHANGED
|
@@ -361,16 +361,13 @@ export function adjustTime(
|
|
|
361
361
|
return time;
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
// A non-finite delta would spin the wrap-around forever (-Infinity) or
|
|
365
|
-
// produce "NaN:NaN" (NaN) — return the input unchanged instead.
|
|
366
|
-
if (!Number.isFinite(deltaMinutes)) {
|
|
367
|
-
return time;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
364
|
let totalMinutes = parsed.hour * 60 + parsed.minute + deltaMinutes;
|
|
371
365
|
|
|
372
|
-
// Wrap around midnight
|
|
373
|
-
|
|
366
|
+
// Wrap around midnight
|
|
367
|
+
while (totalMinutes < 0) {
|
|
368
|
+
totalMinutes += 24 * 60;
|
|
369
|
+
}
|
|
370
|
+
totalMinutes = totalMinutes % (24 * 60);
|
|
374
371
|
|
|
375
372
|
const newHour = Math.floor(totalMinutes / 60);
|
|
376
373
|
const newMinute = totalMinutes % 60;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A single keyboard shortcut registration.
|
|
3
|
-
*/
|
|
4
|
-
export interface Hotkey {
|
|
5
|
-
/**
|
|
6
|
-
* Key combo, e.g. 'mod+k', 'shift+/', 'c', 'escape'.
|
|
7
|
-
* 'mod' = ⌘ on macOS, Ctrl elsewhere.
|
|
8
|
-
*
|
|
9
|
-
* Format: '+'-separated modifiers (mod, ctrl, meta, shift, alt) followed
|
|
10
|
-
* by a final key compared case-insensitively against event.key.
|
|
11
|
-
* Named keys: 'escape', 'enter', 'space', 'up', 'down', 'left', 'right'
|
|
12
|
-
* (arrow names map to ArrowUp/ArrowDown/ArrowLeft/ArrowRight).
|
|
13
|
-
* Use 'plus' for a literal '+' key.
|
|
14
|
-
*
|
|
15
|
-
* Shift semantics: when 'shift' is not specified, shift state is ignored,
|
|
16
|
-
* so single letters match regardless of shift. When 'shift' is specified,
|
|
17
|
-
* shiftKey must be pressed and the final key is still compared against
|
|
18
|
-
* event.key — for punctuation that shift transforms (e.g. shift+/ produces
|
|
19
|
-
* '?' on US layouts), prefer registering the produced character instead.
|
|
20
|
-
*/
|
|
21
|
-
keys: string;
|
|
22
|
-
/** Called when the combo matches. The event has preventDefault() applied. */
|
|
23
|
-
onPress: (event: KeyboardEvent) => void;
|
|
24
|
-
/**
|
|
25
|
-
* Fire even when focus is in an input/textarea/select/contenteditable.
|
|
26
|
-
* @default false
|
|
27
|
-
*/
|
|
28
|
-
allowInInputs?: boolean;
|
|
29
|
-
/** Temporarily disable this hotkey without unregistering it. */
|
|
30
|
-
isDisabled?: boolean;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Registers global keyboard shortcuts on window.
|
|
34
|
-
*
|
|
35
|
-
* A single keydown listener is attached per hook instance; the hotkey
|
|
36
|
-
* definitions live in a ref, so re-renders update behavior without
|
|
37
|
-
* re-subscribing. First matching hotkey wins per event.
|
|
38
|
-
*
|
|
39
|
-
* @param hotkeys - Shortcut registrations to listen for.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```
|
|
43
|
-
* useHotkeys([
|
|
44
|
-
* { keys: 'mod+k', onPress: () => openCommandPalette() },
|
|
45
|
-
* { keys: 'escape', onPress: () => closePanel(), allowInInputs: true },
|
|
46
|
-
* { keys: 'c', onPress: () => compose(), isDisabled: isModalOpen },
|
|
47
|
-
* ]);
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export declare function useHotkeys(hotkeys: Hotkey[]): void;
|
|
51
|
-
//# sourceMappingURL=useHotkeys.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useHotkeys.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkeys.ts"],"names":[],"mappings":"AA6BA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;;;;;;;OAeG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA2FD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAkClD"}
|
package/dist/hooks/useHotkeys.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
'use client';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @file useHotkeys.ts
|
|
7
|
-
* @input Uses React useEffect, useRef
|
|
8
|
-
* @output Exports useHotkeys hook and Hotkey interface for global keyboard shortcuts
|
|
9
|
-
* @position Core hook; used by consumers for app-level keyboard shortcuts
|
|
10
|
-
*
|
|
11
|
-
* Registers a single window keydown listener per hook instance. Handlers
|
|
12
|
-
* are kept in a ref so re-renders never re-subscribe (subscribe once on
|
|
13
|
-
* mount, unsubscribe on unmount). SSR-safe — window is only touched
|
|
14
|
-
* inside the effect.
|
|
15
|
-
*
|
|
16
|
-
* Skips events that are already handled (defaultPrevented) and events
|
|
17
|
-
* targeting typing surfaces (input, textarea, select, contenteditable)
|
|
18
|
-
* unless a hotkey opts in via `allowInInputs`.
|
|
19
|
-
*
|
|
20
|
-
* Platform-aware: `mod` maps to metaKey (⌘) on Apple platforms and
|
|
21
|
-
* ctrlKey elsewhere — mirrors the detection used by Kbd.
|
|
22
|
-
*
|
|
23
|
-
* SYNC: When modified, update:
|
|
24
|
-
* - /packages/core/src/hooks/index.ts
|
|
25
|
-
* - /packages/core/src/hooks/useHotkeys.doc.mjs
|
|
26
|
-
*/
|
|
27
|
-
import { useEffect, useRef } from 'react';
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* A single keyboard shortcut registration.
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/** Aliases for the final key of a combo, normalized to event.key values. */
|
|
34
|
-
const KEY_ALIASES = {
|
|
35
|
-
esc: 'escape',
|
|
36
|
-
space: ' ',
|
|
37
|
-
up: 'arrowup',
|
|
38
|
-
down: 'arrowdown',
|
|
39
|
-
left: 'arrowleft',
|
|
40
|
-
right: 'arrowright',
|
|
41
|
-
return: 'enter',
|
|
42
|
-
plus: '+'
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Detects whether the current platform is macOS/iOS.
|
|
47
|
-
* Prefers the User-Agent Client Hints API when available (modern Chrome/Edge),
|
|
48
|
-
* falls back to navigator.platform (deprecated but universally supported).
|
|
49
|
-
* Mirrors the detection used by Kbd so displayed and handled shortcuts agree.
|
|
50
|
-
*/
|
|
51
|
-
function isApplePlatform() {
|
|
52
|
-
if (typeof navigator === 'undefined') {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
const uaData = 'userAgentData' in navigator ? navigator.userAgentData : null;
|
|
56
|
-
if (uaData && typeof uaData === 'object' && 'platform' in uaData) {
|
|
57
|
-
return /mac/i.test(uaData.platform ?? '');
|
|
58
|
-
}
|
|
59
|
-
return /Mac|iPhone|iPad|iPod/.test(navigator.platform ?? '');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Whether the event target is a typing surface where global shortcuts
|
|
64
|
-
* should stay silent by default.
|
|
65
|
-
*/
|
|
66
|
-
function isTypingTarget(target) {
|
|
67
|
-
if (!(target instanceof HTMLElement)) {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
if (target.isContentEditable) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
const tag = target.tagName;
|
|
74
|
-
return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT';
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Whether a keydown event matches a '+'-separated combo string.
|
|
79
|
-
*/
|
|
80
|
-
function matchesCombo(keys, event, isApple) {
|
|
81
|
-
const parts = keys.toLowerCase().split('+').map(part => part.trim()).filter(Boolean);
|
|
82
|
-
if (parts.length === 0) {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
const key = parts[parts.length - 1];
|
|
86
|
-
const mods = new Set(parts.slice(0, -1));
|
|
87
|
-
const wantsMod = mods.has('mod');
|
|
88
|
-
const wantsCtrl = mods.has('ctrl') || wantsMod && !isApple;
|
|
89
|
-
const wantsMeta = mods.has('meta') || wantsMod && isApple;
|
|
90
|
-
const wantsAlt = mods.has('alt');
|
|
91
|
-
const wantsShift = mods.has('shift');
|
|
92
|
-
|
|
93
|
-
// Non-shift modifiers must match exactly so 'k' doesn't fire on 'mod+k'.
|
|
94
|
-
if (event.ctrlKey !== wantsCtrl) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
if (event.metaKey !== wantsMeta) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
if (event.altKey !== wantsAlt) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
// Shift is only enforced when specified — see Hotkey.keys docs.
|
|
104
|
-
if (wantsShift && !event.shiftKey) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
const expected = KEY_ALIASES[key] ?? key;
|
|
108
|
-
return event.key.toLowerCase() === expected;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Registers global keyboard shortcuts on window.
|
|
113
|
-
*
|
|
114
|
-
* A single keydown listener is attached per hook instance; the hotkey
|
|
115
|
-
* definitions live in a ref, so re-renders update behavior without
|
|
116
|
-
* re-subscribing. First matching hotkey wins per event.
|
|
117
|
-
*
|
|
118
|
-
* @param hotkeys - Shortcut registrations to listen for.
|
|
119
|
-
*
|
|
120
|
-
* @example
|
|
121
|
-
* ```
|
|
122
|
-
* useHotkeys([
|
|
123
|
-
* { keys: 'mod+k', onPress: () => openCommandPalette() },
|
|
124
|
-
* { keys: 'escape', onPress: () => closePanel(), allowInInputs: true },
|
|
125
|
-
* { keys: 'c', onPress: () => compose(), isDisabled: isModalOpen },
|
|
126
|
-
* ]);
|
|
127
|
-
* ```
|
|
128
|
-
*/
|
|
129
|
-
export function useHotkeys(hotkeys) {
|
|
130
|
-
const hotkeysRef = useRef(hotkeys);
|
|
131
|
-
|
|
132
|
-
// Keep the latest definitions available to the stable listener.
|
|
133
|
-
useEffect(() => {
|
|
134
|
-
hotkeysRef.current = hotkeys;
|
|
135
|
-
});
|
|
136
|
-
useEffect(() => {
|
|
137
|
-
const isApple = isApplePlatform();
|
|
138
|
-
const handleKeyDown = event => {
|
|
139
|
-
if (event.defaultPrevented) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const isTyping = isTypingTarget(event.target);
|
|
143
|
-
for (const hotkey of hotkeysRef.current) {
|
|
144
|
-
if (hotkey.isDisabled) {
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
if (isTyping && !hotkey.allowInInputs) {
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
if (matchesCombo(hotkey.keys, event, isApple)) {
|
|
151
|
-
event.preventDefault();
|
|
152
|
-
hotkey.onPress(event);
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
158
|
-
return () => window.removeEventListener('keydown', handleKeyDown);
|
|
159
|
-
}, []);
|
|
160
|
-
}
|
package/dist/utils/color.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file color.ts
|
|
3
|
-
* @input CSS color strings (hex, rgb()/rgba(), a small set of named colors)
|
|
4
|
-
* @output Shared color parsing/formatting primitives used across the design system
|
|
5
|
-
* @position Package utility; backs theme token resolution, HCT color math, and chart rendering
|
|
6
|
-
*
|
|
7
|
-
* A single home for the color parsers that were previously duplicated across
|
|
8
|
-
* the theme layer, charts, and lab. Consumers get one well-tested definition of
|
|
9
|
-
* "parse this color" rather than several subtly different regexes.
|
|
10
|
-
*/
|
|
11
|
-
/** A color decomposed into 0-255 RGB channels and a 0-1 alpha. */
|
|
12
|
-
export interface RGBA {
|
|
13
|
-
r: number;
|
|
14
|
-
g: number;
|
|
15
|
-
b: number;
|
|
16
|
-
a: number;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Parse a hex color into {@link RGBA}. Accepts `#rgb`, `#rgba`, `#rrggbb`, and
|
|
20
|
-
* `#rrggbbaa`, with or without the leading `#`. Returns null for anything else.
|
|
21
|
-
*/
|
|
22
|
-
export declare function parseHex(hex: string): RGBA | null;
|
|
23
|
-
/**
|
|
24
|
-
* Parse an `rgb()`/`rgba()` color into {@link RGBA}. Accepts comma- or
|
|
25
|
-
* space-separated channels, an optional `/ alpha`, and percentage channels.
|
|
26
|
-
*/
|
|
27
|
-
export declare function parseRgb(value: string): RGBA | null;
|
|
28
|
-
/**
|
|
29
|
-
* Parse a concrete CSS color string into {@link RGBA}. Supports hex,
|
|
30
|
-
* `rgb()`/`rgba()`, and the named colors used in token expressions. Returns
|
|
31
|
-
* null for anything it can't evaluate (e.g. `var()`, `oklch()`, unknown names)
|
|
32
|
-
* so callers can preserve the original expression rather than guessing.
|
|
33
|
-
*/
|
|
34
|
-
export declare function parseColor(value: string): RGBA | null;
|
|
35
|
-
/** Format RGB channels (0-255) as an uppercase `#RRGGBB` string. */
|
|
36
|
-
export declare function formatHex(r: number, g: number, b: number): string;
|
|
37
|
-
/**
|
|
38
|
-
* Serialize {@link RGBA} to a compact, JS-usable CSS color: `#RRGGBB` when
|
|
39
|
-
* fully opaque, otherwise `rgba(r, g, b, a)`.
|
|
40
|
-
*/
|
|
41
|
-
export declare function formatColor({ r, g, b, a }: RGBA): string;
|
|
42
|
-
//# sourceMappingURL=color.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/utils/color.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,kEAAkE;AAClE,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAoBD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAqBjD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAqCnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAarD;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,EAAE,IAAI,GAAG,MAAM,CAMtD"}
|
package/dist/utils/color.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file color.ts
|
|
5
|
-
* @input CSS color strings (hex, rgb()/rgba(), a small set of named colors)
|
|
6
|
-
* @output Shared color parsing/formatting primitives used across the design system
|
|
7
|
-
* @position Package utility; backs theme token resolution, HCT color math, and chart rendering
|
|
8
|
-
*
|
|
9
|
-
* A single home for the color parsers that were previously duplicated across
|
|
10
|
-
* the theme layer, charts, and lab. Consumers get one well-tested definition of
|
|
11
|
-
* "parse this color" rather than several subtly different regexes.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/** A color decomposed into 0-255 RGB channels and a 0-1 alpha. */
|
|
15
|
-
|
|
16
|
-
/** The named colors the design system relies on in token expressions. */
|
|
17
|
-
const NAMED_COLORS = {
|
|
18
|
-
transparent: {
|
|
19
|
-
r: 0,
|
|
20
|
-
g: 0,
|
|
21
|
-
b: 0,
|
|
22
|
-
a: 0
|
|
23
|
-
},
|
|
24
|
-
black: {
|
|
25
|
-
r: 0,
|
|
26
|
-
g: 0,
|
|
27
|
-
b: 0,
|
|
28
|
-
a: 1
|
|
29
|
-
},
|
|
30
|
-
white: {
|
|
31
|
-
r: 255,
|
|
32
|
-
g: 255,
|
|
33
|
-
b: 255,
|
|
34
|
-
a: 1
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
|
|
38
|
-
|
|
39
|
-
/** Expand a shorthand hex body (`rgb`/`rgba`) to its full form (`rrggbb`/`rrggbbaa`). */
|
|
40
|
-
function expandShorthand(body) {
|
|
41
|
-
return body.split('').map(c => c + c).join('');
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Parse a hex color into {@link RGBA}. Accepts `#rgb`, `#rgba`, `#rrggbb`, and
|
|
46
|
-
* `#rrggbbaa`, with or without the leading `#`. Returns null for anything else.
|
|
47
|
-
*/
|
|
48
|
-
export function parseHex(hex) {
|
|
49
|
-
if (typeof hex !== 'string') {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
const body = hex.trim().replace(/^#/, '');
|
|
53
|
-
const normalized = body.length === 3 || body.length === 4 ? expandShorthand(body) : body;
|
|
54
|
-
if (normalized.length !== 6 && normalized.length !== 8 || !/^[0-9a-fA-F]+$/.test(normalized)) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
r: parseInt(normalized.slice(0, 2), 16),
|
|
59
|
-
g: parseInt(normalized.slice(2, 4), 16),
|
|
60
|
-
b: parseInt(normalized.slice(4, 6), 16),
|
|
61
|
-
a: normalized.length === 8 ? parseInt(normalized.slice(6, 8), 16) / 255 : 1
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Parse an `rgb()`/`rgba()` color into {@link RGBA}. Accepts comma- or
|
|
67
|
-
* space-separated channels, an optional `/ alpha`, and percentage channels.
|
|
68
|
-
*/
|
|
69
|
-
export function parseRgb(value) {
|
|
70
|
-
const open = value.indexOf('(');
|
|
71
|
-
if (open === -1 || !value.trim().endsWith(')')) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
const body = value.slice(open + 1, value.lastIndexOf(')')).replace(/\//g, ' ');
|
|
75
|
-
const parts = body.split(/[\s,]+/).map(p => p.trim()).filter(Boolean);
|
|
76
|
-
if (parts.length < 3) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
const channel = p => {
|
|
80
|
-
const n = p.endsWith('%') ? parseFloat(p) / 100 * 255 : parseFloat(p);
|
|
81
|
-
return clamp(n, 0, 255);
|
|
82
|
-
};
|
|
83
|
-
const r = channel(parts[0]);
|
|
84
|
-
const g = channel(parts[1]);
|
|
85
|
-
const b = channel(parts[2]);
|
|
86
|
-
if ([r, g, b].some(Number.isNaN)) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
let a = 1;
|
|
90
|
-
if (parts.length >= 4) {
|
|
91
|
-
const raw = parts[3];
|
|
92
|
-
a = raw.endsWith('%') ? parseFloat(raw) / 100 : parseFloat(raw);
|
|
93
|
-
if (Number.isNaN(a)) {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
a = clamp(a, 0, 1);
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
r,
|
|
100
|
-
g,
|
|
101
|
-
b,
|
|
102
|
-
a
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Parse a concrete CSS color string into {@link RGBA}. Supports hex,
|
|
108
|
-
* `rgb()`/`rgba()`, and the named colors used in token expressions. Returns
|
|
109
|
-
* null for anything it can't evaluate (e.g. `var()`, `oklch()`, unknown names)
|
|
110
|
-
* so callers can preserve the original expression rather than guessing.
|
|
111
|
-
*/
|
|
112
|
-
export function parseColor(value) {
|
|
113
|
-
const trimmed = value.trim();
|
|
114
|
-
const named = NAMED_COLORS[trimmed.toLowerCase()];
|
|
115
|
-
if (named) {
|
|
116
|
-
return {
|
|
117
|
-
...named
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
if (trimmed.startsWith('#')) {
|
|
121
|
-
return parseHex(trimmed);
|
|
122
|
-
}
|
|
123
|
-
if (/^rgba?\(/i.test(trimmed)) {
|
|
124
|
-
return parseRgb(trimmed);
|
|
125
|
-
}
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/** Format RGB channels (0-255) as an uppercase `#RRGGBB` string. */
|
|
130
|
-
export function formatHex(r, g, b) {
|
|
131
|
-
const channel = c => clamp(Math.round(c), 0, 255).toString(16).padStart(2, '0').toUpperCase();
|
|
132
|
-
return `#${channel(r)}${channel(g)}${channel(b)}`;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Serialize {@link RGBA} to a compact, JS-usable CSS color: `#RRGGBB` when
|
|
137
|
-
* fully opaque, otherwise `rgba(r, g, b, a)`.
|
|
138
|
-
*/
|
|
139
|
-
export function formatColor({
|
|
140
|
-
r,
|
|
141
|
-
g,
|
|
142
|
-
b,
|
|
143
|
-
a
|
|
144
|
-
}) {
|
|
145
|
-
if (a >= 1) {
|
|
146
|
-
return formatHex(r, g, b);
|
|
147
|
-
}
|
|
148
|
-
const round = n => clamp(Math.round(n), 0, 255);
|
|
149
|
-
return `rgba(${round(r)}, ${round(g)}, ${round(b)}, ${parseFloat(a.toFixed(4))})`;
|
|
150
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file composeEventHandlers.ts
|
|
3
|
-
* @input Multiple React event handlers (or undefined)
|
|
4
|
-
* @output A single handler that calls each in order, stopping if one prevents default
|
|
5
|
-
* @position Utility; used by components that own an interaction (a click that
|
|
6
|
-
* selects, a keydown that drives arrow navigation) but also accept a consumer
|
|
7
|
-
* handler for the same event through {...rest}. Composes them instead of
|
|
8
|
-
* letting one clobber the other.
|
|
9
|
-
*
|
|
10
|
-
* Order is call order: the first argument runs first. Put the consumer handler
|
|
11
|
-
* first so it can opt out of the component's built-in behavior via
|
|
12
|
-
* `event.preventDefault()`; put the component's handler first when its behavior
|
|
13
|
-
* must always run regardless of the consumer.
|
|
14
|
-
*/
|
|
15
|
-
import type { SyntheticEvent } from 'react';
|
|
16
|
-
/**
|
|
17
|
-
* Compose event handlers into one. Each handler runs in argument order; if any
|
|
18
|
-
* calls `event.preventDefault()`, the remaining handlers are skipped.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```tsx
|
|
22
|
-
* // Consumer first: a consumer onClick can preventDefault to block selection.
|
|
23
|
-
* <button onClick={composeEventHandlers(onClickProp, handleSelect)} />
|
|
24
|
-
*
|
|
25
|
-
* // Component first: built-in keyboard nav always runs.
|
|
26
|
-
* <div onKeyDown={composeEventHandlers(handleArrowKeys, onKeyDownProp)} />
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare function composeEventHandlers<E extends SyntheticEvent>(...handlers: (((event: E) => void) | undefined)[]): (event: E) => void;
|
|
30
|
-
//# sourceMappingURL=composeEventHandlers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composeEventHandlers.d.ts","sourceRoot":"","sources":["../../src/utils/composeEventHandlers.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,OAAO,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,cAAc,EAC3D,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,GAChD,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CASpB"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file composeEventHandlers.ts
|
|
5
|
-
* @input Multiple React event handlers (or undefined)
|
|
6
|
-
* @output A single handler that calls each in order, stopping if one prevents default
|
|
7
|
-
* @position Utility; used by components that own an interaction (a click that
|
|
8
|
-
* selects, a keydown that drives arrow navigation) but also accept a consumer
|
|
9
|
-
* handler for the same event through {...rest}. Composes them instead of
|
|
10
|
-
* letting one clobber the other.
|
|
11
|
-
*
|
|
12
|
-
* Order is call order: the first argument runs first. Put the consumer handler
|
|
13
|
-
* first so it can opt out of the component's built-in behavior via
|
|
14
|
-
* `event.preventDefault()`; put the component's handler first when its behavior
|
|
15
|
-
* must always run regardless of the consumer.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Compose event handlers into one. Each handler runs in argument order; if any
|
|
20
|
-
* calls `event.preventDefault()`, the remaining handlers are skipped.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```tsx
|
|
24
|
-
* // Consumer first: a consumer onClick can preventDefault to block selection.
|
|
25
|
-
* <button onClick={composeEventHandlers(onClickProp, handleSelect)} />
|
|
26
|
-
*
|
|
27
|
-
* // Component first: built-in keyboard nav always runs.
|
|
28
|
-
* <div onKeyDown={composeEventHandlers(handleArrowKeys, onKeyDownProp)} />
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
export function composeEventHandlers(...handlers) {
|
|
32
|
-
return event => {
|
|
33
|
-
for (const handler of handlers) {
|
|
34
|
-
handler?.(event);
|
|
35
|
-
if (event.defaultPrevented) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
import {describe, it, expect} from 'vitest';
|
|
4
|
-
import {render, screen} from '@testing-library/react';
|
|
5
|
-
import {ChatDictationButton} from './ChatDictationButton';
|
|
6
|
-
import type {UseSpeechRecognitionReturn} from './useSpeechRecognition';
|
|
7
|
-
|
|
8
|
-
const dictation: UseSpeechRecognitionReturn = {
|
|
9
|
-
isSupported: true,
|
|
10
|
-
isListening: false,
|
|
11
|
-
isSpeaking: false,
|
|
12
|
-
volume: 0,
|
|
13
|
-
bands: [0, 0, 0, 0, 0],
|
|
14
|
-
rawBands: [0, 0, 0, 0, 0],
|
|
15
|
-
interimTranscript: '',
|
|
16
|
-
start: () => {},
|
|
17
|
-
stop: () => {},
|
|
18
|
-
abort: () => {},
|
|
19
|
-
toggle: () => {},
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
describe('ChatDictationButton', () => {
|
|
23
|
-
it('renders a dictation button', () => {
|
|
24
|
-
render(
|
|
25
|
-
<ChatDictationButton dictation={dictation} data-testid="dictation" />,
|
|
26
|
-
);
|
|
27
|
-
expect(screen.getByTestId('dictation')).toBeTruthy();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('forwards rest props (data-*, aria-*, id) to the root element', () => {
|
|
31
|
-
render(
|
|
32
|
-
<ChatDictationButton
|
|
33
|
-
dictation={dictation}
|
|
34
|
-
data-testid="dictation"
|
|
35
|
-
data-custom="x"
|
|
36
|
-
id="dictate-1"
|
|
37
|
-
/>,
|
|
38
|
-
);
|
|
39
|
-
const root = screen.getByTestId('dictation');
|
|
40
|
-
expect(root).toHaveAttribute('data-custom', 'x');
|
|
41
|
-
expect(root).toHaveAttribute('id', 'dictate-1');
|
|
42
|
-
});
|
|
43
|
-
});
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
import {describe, it, expect} from 'vitest';
|
|
4
|
-
import {render, screen} from '@testing-library/react';
|
|
5
|
-
import {ChatLayoutScrollButton} from './ChatLayoutScrollButton';
|
|
6
|
-
|
|
7
|
-
describe('ChatLayoutScrollButton', () => {
|
|
8
|
-
it('renders a scroll button', () => {
|
|
9
|
-
render(
|
|
10
|
-
<ChatLayoutScrollButton
|
|
11
|
-
isVisible
|
|
12
|
-
onClick={() => {}}
|
|
13
|
-
data-testid="scroll"
|
|
14
|
-
/>,
|
|
15
|
-
);
|
|
16
|
-
expect(screen.getByTestId('scroll')).toBeTruthy();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('forwards rest props (data-*, aria-*, id) to the root element', () => {
|
|
20
|
-
render(
|
|
21
|
-
<ChatLayoutScrollButton
|
|
22
|
-
isVisible
|
|
23
|
-
onClick={() => {}}
|
|
24
|
-
data-testid="scroll"
|
|
25
|
-
data-custom="x"
|
|
26
|
-
id="scroll-1"
|
|
27
|
-
/>,
|
|
28
|
-
);
|
|
29
|
-
const root = screen.getByTestId('scroll');
|
|
30
|
-
expect(root).toHaveAttribute('data-custom', 'x');
|
|
31
|
-
expect(root).toHaveAttribute('id', 'scroll-1');
|
|
32
|
-
});
|
|
33
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
import {describe, it, expect} from 'vitest';
|
|
4
|
-
import {render, screen} from '@testing-library/react';
|
|
5
|
-
import {ChatMessageMetadata} from './ChatMessageMetadata';
|
|
6
|
-
|
|
7
|
-
describe('ChatMessageMetadata', () => {
|
|
8
|
-
it('renders metadata content', () => {
|
|
9
|
-
render(
|
|
10
|
-
<ChatMessageMetadata
|
|
11
|
-
timestamp="12:00"
|
|
12
|
-
status="read"
|
|
13
|
-
data-testid="meta"
|
|
14
|
-
/>,
|
|
15
|
-
);
|
|
16
|
-
expect(screen.getByTestId('meta')).toBeTruthy();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('forwards rest props (data-*, aria-*, id) to the root element', () => {
|
|
20
|
-
render(
|
|
21
|
-
<ChatMessageMetadata
|
|
22
|
-
timestamp="12:00"
|
|
23
|
-
data-testid="meta"
|
|
24
|
-
data-custom="x"
|
|
25
|
-
id="meta-1"
|
|
26
|
-
/>,
|
|
27
|
-
);
|
|
28
|
-
const root = screen.getByTestId('meta');
|
|
29
|
-
expect(root).toHaveAttribute('data-custom', 'x');
|
|
30
|
-
expect(root).toHaveAttribute('id', 'meta-1');
|
|
31
|
-
});
|
|
32
|
-
});
|