@astryxdesign/core 0.5.2-canary.17f22f4 → 0.5.2-canary.18eec18
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/AppShell/AppShell.d.ts +2 -2
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +10 -7
- package/dist/Banner/Banner.d.ts +5 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +7 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +22 -15
- package/dist/Chat/ChatComposer.d.ts +2 -2
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +21 -2
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +84 -6
- package/dist/Chat/ChatToolCalls.d.ts +1 -1
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +12 -34
- package/dist/Chat/chatComposerSelection.d.ts +71 -9
- package/dist/Chat/chatComposerSelection.d.ts.map +1 -1
- package/dist/Chat/chatComposerSelection.js +155 -9
- package/dist/Chat/useChatNewMessages.js +3 -3
- package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.js +64 -72
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +9 -8
- package/dist/CheckboxList/CheckboxListItem.d.ts +5 -3
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +47 -13
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +269 -162
- package/dist/DateTimeInput/NativeDateSegment.d.ts +24 -0
- package/dist/DateTimeInput/NativeDateSegment.d.ts.map +1 -0
- package/dist/DateTimeInput/NativeDateSegment.js +235 -0
- package/dist/DateTimeInput/NativeTimeSegment.d.ts +30 -0
- package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -0
- package/dist/DateTimeInput/NativeTimeSegment.js +248 -0
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +95 -0
- package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -0
- package/dist/DateTimeInput/nativePickerSegmentStyles.js +103 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +2 -4
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +10 -4
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +35 -20
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +3 -5
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +4 -2
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +2 -4
- package/dist/Layout/Layout.d.ts +7 -8
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +7 -8
- package/dist/Layout/LayoutHeader.d.ts +10 -1
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.js +8 -2
- package/dist/Markdown/parser.d.ts +26 -0
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +241 -61
- package/dist/MultiSelector/MultiSelector.d.ts +11 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +89 -45
- package/dist/Popover/Popover.d.ts +1 -1
- package/dist/Popover/Popover.js +2 -2
- package/dist/Popover/usePopover.d.ts +6 -5
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +3 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +38 -49
- package/dist/PowerSearch/resolveDateTimeRangePart.d.ts +10 -0
- package/dist/PowerSearch/resolveDateTimeRangePart.d.ts.map +1 -0
- package/dist/PowerSearch/resolveDateTimeRangePart.js +30 -0
- package/dist/PowerSearch/usePowerSearchConfig.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchConfig.js +4 -24
- package/dist/RadioList/RadioListItem.d.ts +30 -5
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +25 -11
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +102 -44
- package/dist/Resizable/index.d.ts +2 -0
- package/dist/Resizable/index.d.ts.map +1 -1
- package/dist/Resizable/index.js +1 -0
- package/dist/Resizable/useResizable.d.ts +89 -8
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +521 -38
- package/dist/Resizable/utils.d.ts +35 -0
- package/dist/Resizable/utils.d.ts.map +1 -0
- package/dist/Resizable/utils.js +27 -0
- package/dist/Selector/Selector.d.ts +10 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +105 -57
- package/dist/Selector/useSelectorPresentation.d.ts +1 -0
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +17 -2
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +3 -5
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +9 -10
- package/dist/Stepper/Step.d.ts +10 -3
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +176 -27
- package/dist/Stepper/Stepper.d.ts +34 -4
- package/dist/Stepper/Stepper.d.ts.map +1 -1
- package/dist/Stepper/Stepper.js +222 -18
- package/dist/Stepper/StepperContext.d.ts +61 -4
- package/dist/Stepper/StepperContext.d.ts.map +1 -1
- package/dist/Stepper/index.d.ts +1 -1
- package/dist/Stepper/index.d.ts.map +1 -1
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +8 -8
- package/dist/TabList/TabList.d.ts +19 -1
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +28 -5
- package/dist/Table/index.d.ts +16 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +4 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +8 -9
- package/dist/Table/plugins/rowStatus/index.d.ts +1 -1
- package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +11 -30
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +108 -62
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +9 -1
- package/dist/Text/useTruncation.d.ts +1 -1
- package/dist/Text/useTruncation.d.ts.map +1 -1
- package/dist/Text/useTruncation.js +8 -7
- package/dist/TimeInput/TimeInput.d.ts +16 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +98 -60
- package/dist/TimeInput/index.d.ts +1 -1
- package/dist/TimeInput/index.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.d.ts +2 -2
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +4 -145
- package/dist/Timestamp/formatRelativeTime.d.ts +20 -0
- package/dist/Timestamp/formatRelativeTime.d.ts.map +1 -0
- package/dist/Timestamp/formatRelativeTime.js +81 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +125 -77
- package/dist/Tokenizer/Tokenizer.d.ts +0 -38
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +94 -26
- package/dist/Tokenizer/useEndLaneReserve.d.ts +31 -0
- package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -0
- package/dist/Tokenizer/useEndLaneReserve.js +136 -0
- package/dist/Tooltip/useTooltip.d.ts +1 -1
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +53 -42
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +11 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +85 -30
- package/dist/Typeahead/Typeahead.d.ts +0 -21
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +108 -67
- package/dist/Typeahead/busyIndicatorLane.d.ts +62 -0
- package/dist/Typeahead/busyIndicatorLane.d.ts.map +1 -0
- package/dist/Typeahead/busyIndicatorLane.js +98 -0
- package/dist/astryx.css +26 -10
- package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -1
- package/dist/hooks/useFocusReturnVisibility.js +3 -5
- package/dist/hooks/useFocusTrap.d.ts +3 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +31 -1
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +11 -11
- package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
- package/dist/hooks/useScrollOverflow.js +7 -4
- package/dist/theme/defineTheme.d.ts +13 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +7 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +1 -1
- package/dist/theme/localTokens.d.ts +18 -0
- package/dist/theme/localTokens.d.ts.map +1 -0
- package/dist/theme/localTokens.js +162 -0
- package/dist/utils/interactionModality.d.ts +6 -28
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +72 -37
- package/dist/utils/sharedResizeObserver.d.ts +17 -9
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +54 -12
- package/locales/en.json +16 -0
- package/locales/fr-FR.json +12 -0
- package/locales/pseudo.json +12 -0
- package/package.json +8 -2
- package/scripts/agent-doc-state.mjs +137 -0
- package/scripts/postinstall.mjs +28 -60
- package/src/AlertDialog/useImperativeAlertDialog.test.tsx +163 -0
- package/src/AppShell/AppShell.doc.mjs +4 -3
- package/src/AppShell/AppShell.test.tsx +21 -0
- package/src/AppShell/AppShell.tsx +12 -7
- package/src/Banner/Banner.doc.mjs +5 -1
- package/src/Banner/Banner.tsx +12 -1
- package/src/BottomSheet/BottomSheet.doc.mjs +31 -0
- package/src/BottomSheet/BottomSheet.spec.md +178 -0
- package/src/Breadcrumbs/BreadcrumbItem.tsx +18 -9
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +4 -1
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +12 -0
- package/src/Calendar/hooks/useCalendarConstraints.test.ts +153 -0
- package/src/Calendar/hooks/useCalendarDays.test.ts +265 -0
- package/src/Calendar/hooks/useCalendarNavigation.test.ts +252 -0
- package/src/Center/Center.doc.mjs +7 -0
- package/src/Chat/ChatComposer.doc.mjs +7 -4
- package/src/Chat/ChatComposer.test.tsx +84 -2
- package/src/Chat/ChatComposer.tsx +45 -3
- package/src/Chat/ChatComposerInput.test.tsx +504 -0
- package/src/Chat/ChatComposerInput.tsx +94 -6
- package/src/Chat/ChatComposerTokenElement.doc.mjs +5 -0
- package/src/Chat/ChatMessage.doc.mjs +17 -0
- package/src/Chat/ChatMessageList.doc.mjs +33 -0
- package/src/Chat/ChatSendButton.test.tsx +189 -0
- package/src/Chat/ChatToolCalls.doc.mjs +10 -1
- package/src/Chat/ChatToolCalls.test.tsx +33 -1
- package/src/Chat/ChatToolCalls.tsx +13 -34
- package/src/Chat/chatComposerSelection.ts +189 -9
- package/src/Chat/useChatNewMessages.ts +3 -3
- package/src/Chat/useChatPasteAsToken.test.ts +191 -0
- package/src/Chat/useChatStreamScroll.test.tsx +168 -5
- package/src/Chat/useChatStreamScroll.ts +71 -67
- package/src/CheckboxInput/CheckboxInput.test.tsx +53 -0
- package/src/CheckboxInput/CheckboxInput.tsx +9 -21
- package/src/CheckboxList/CheckboxList.doc.mjs +172 -31
- package/src/CheckboxList/CheckboxList.spec.md +215 -0
- package/src/CheckboxList/CheckboxList.test.tsx +45 -0
- package/src/CheckboxList/CheckboxListItem.doc.mjs +11 -9
- package/src/CheckboxList/CheckboxListItem.tsx +5 -3
- package/src/Collapsible/Collapsible.tsx +10 -0
- package/src/Collapsible/useCollapsible.test.tsx +236 -0
- package/src/CommandPalette/CommandPalette.doc.mjs +72 -0
- package/src/CommandPalette/CommandPalette.spec.md +224 -0
- package/src/CommandPalette/CommandPaletteEmpty.test.tsx +101 -0
- package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
- package/src/ComplexSelector/ComplexSelector.spec.md +190 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +48 -0
- package/src/ContextMenu/ContextMenu.spec.md +207 -0
- package/src/DateTimeInput/DateTimeInput.doc.mjs +43 -23
- package/src/DateTimeInput/DateTimeInput.tsx +388 -181
- package/src/DateTimeInput/DateTimeInputTouch.test.tsx +10 -2
- package/src/DateTimeInput/NativeDateSegment.tsx +308 -0
- package/src/DateTimeInput/NativePickerSegments.test.tsx +626 -0
- package/src/DateTimeInput/NativeTimeSegment.tsx +331 -0
- package/src/DateTimeInput/index.ts +1 -0
- package/src/DateTimeInput/nativePickerSegmentStyles.ts +120 -0
- package/src/Divider/Divider.doc.mjs +24 -0
- package/src/Divider/Divider.spec.md +157 -0
- package/src/DropdownMenu/DropdownMenu.doc.mjs +104 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +246 -0
- package/src/DropdownMenu/DropdownMenu.tsx +2 -4
- package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +13 -0
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +31 -0
- package/src/Field/Field.doc.mjs +1 -0
- package/src/Field/Field.test.tsx +39 -0
- package/src/Field/Field.tsx +18 -1
- package/src/Field/FieldLabel.test.tsx +15 -0
- package/src/Field/FieldLabel.tsx +69 -41
- package/src/Field/InputClearButton.test.tsx +68 -6
- package/src/Field/PanelSearchInput.tsx +3 -5
- package/src/FieldStatus/FieldStatus.doc.mjs +21 -0
- package/src/FieldStatus/FieldStatus.spec.md +213 -0
- package/src/FieldStatus/FieldStatus.test.tsx +17 -0
- package/src/FieldStatus/FieldStatus.tsx +7 -2
- package/src/Grid/Grid.doc.mjs +30 -0
- package/src/Grid/Grid.spec.md +162 -0
- package/src/Grid/GridSpan.doc.mjs +7 -0
- package/src/Icon/Icon.doc.mjs +196 -48
- package/src/Icon/Icon.spec.md +192 -0
- package/src/Indicator/Indicator.doc.mjs +3 -0
- package/src/Kbd/Kbd.doc.mjs +18 -0
- package/src/Kbd/Kbd.spec.md +142 -0
- package/src/Layer/useTouchTrigger.ts +2 -4
- package/src/Layout/Layout.doc.mjs +57 -17
- package/src/Layout/Layout.spec.md +235 -0
- package/src/Layout/Layout.test.tsx +65 -1
- package/src/Layout/Layout.tsx +7 -8
- package/src/Layout/LayoutHeader.doc.mjs +23 -0
- package/src/Layout/LayoutHeader.tsx +18 -0
- package/src/Layout/LayoutPanel.doc.mjs +22 -3
- package/src/Lightbox/Lightbox.doc.mjs +149 -33
- package/src/Lightbox/Lightbox.spec.md +198 -0
- package/src/Lightbox/useLightbox.test.tsx +263 -0
- package/src/Markdown/Markdown.doc.mjs +60 -0
- package/src/Markdown/Markdown.spec.md +207 -0
- package/src/Markdown/Markdown.test.tsx +86 -1
- package/src/Markdown/incremental.test.ts +242 -0
- package/src/Markdown/parser.perf.test.ts +93 -0
- package/src/Markdown/parser.ts +287 -60
- package/src/MobileNav/MobileNav.doc.mjs +140 -32
- package/src/MobileNav/MobileNav.spec.md +209 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +42 -0
- package/src/MoreMenu/MoreMenu.spec.md +222 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +135 -1
- package/src/MultiSelector/MultiSelector.spec.md +293 -0
- package/src/MultiSelector/MultiSelector.test.tsx +305 -2
- package/src/MultiSelector/MultiSelector.tsx +124 -55
- package/src/NavIcon/NavIcon.doc.mjs +17 -0
- package/src/NavIcon/NavIcon.spec.md +134 -0
- package/src/NavMenu/NavHeadingMenu.spec.md +210 -0
- package/src/NavMenu/NavMenu.doc.mjs +37 -0
- package/src/Outline/Outline.doc.mjs +35 -0
- package/src/Outline/Outline.spec.md +162 -0
- package/src/OverflowList/OverflowList.doc.mjs +24 -0
- package/src/OverflowList/OverflowList.spec.md +157 -0
- package/src/Pagination/Pagination.doc.mjs +74 -0
- package/src/Pagination/Pagination.spec.md +226 -0
- package/src/Popover/Popover.doc.mjs +264 -65
- package/src/Popover/Popover.spec.md +421 -0
- package/src/Popover/Popover.test.tsx +5 -4
- package/src/Popover/Popover.tsx +2 -2
- package/src/Popover/usePopover.doc.mjs +208 -33
- package/src/Popover/usePopover.tsx +12 -22
- package/src/PowerSearch/PowerSearch.doc.mjs +45 -0
- package/src/PowerSearch/PowerSearch.spec.md +291 -0
- package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +376 -0
- package/src/PowerSearch/PowerSearchToken.test.tsx +228 -0
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +120 -4
- package/src/PowerSearch/PowerSearchValueEditor.tsx +48 -63
- package/src/PowerSearch/resolveDateTimeRangePart.test.ts +40 -0
- package/src/PowerSearch/resolveDateTimeRangePart.ts +37 -0
- package/src/PowerSearch/usePowerSearchConfig.test.ts +26 -1
- package/src/PowerSearch/usePowerSearchConfig.ts +7 -25
- package/src/ProgressBar/ProgressBar.doc.mjs +198 -38
- package/src/ProgressBar/ProgressBar.spec.md +79 -26
- package/src/RadioList/RadioList.test.tsx +185 -2
- package/src/RadioList/RadioListItem.doc.mjs +30 -11
- package/src/RadioList/RadioListItem.tsx +53 -28
- package/src/Resizable/Resizable.doc.mjs +130 -24
- package/src/Resizable/Resizable.spec.md +246 -0
- package/src/Resizable/ResizeHandle.test.tsx +177 -56
- package/src/Resizable/ResizeHandle.tsx +128 -45
- package/src/Resizable/index.ts +2 -0
- package/src/Resizable/shippedDirections.test.ts +462 -0
- package/src/Resizable/useResizable.doc.mjs +124 -29
- package/src/Resizable/useResizable.test.ts +1329 -3
- package/src/Resizable/useResizable.ts +760 -48
- package/src/Resizable/utils.test.ts +74 -0
- package/src/Resizable/utils.ts +35 -0
- package/src/Section/Section.doc.mjs +17 -0
- package/src/Section/Section.spec.md +139 -0
- package/src/SegmentedControl/SegmentedControl.doc.mjs +27 -0
- package/src/SegmentedControl/SegmentedControl.spec.md +152 -0
- package/src/Selector/Selector.doc.mjs +143 -97
- package/src/Selector/Selector.spec.md +300 -0
- package/src/Selector/Selector.test.tsx +318 -1
- package/src/Selector/Selector.tsx +127 -60
- package/src/Selector/useSelectorPresentation.ts +24 -4
- package/src/SideNav/SideNav.test.tsx +3 -3
- package/src/SideNav/SideNavCollapseButton.doc.mjs +8 -0
- package/src/SideNav/SideNavHeading.doc.mjs +3 -0
- package/src/SideNav/SideNavItem.doc.mjs +4 -1
- package/src/SideNav/SideNavSection.doc.mjs +10 -0
- package/src/Skeleton/Skeleton.doc.mjs +12 -0
- package/src/Skeleton/Skeleton.spec.md +127 -0
- package/src/Slider/Slider.doc.mjs +184 -30
- package/src/Slider/Slider.spec.md +224 -0
- package/src/Slider/Slider.tsx +2 -5
- package/src/Spinner/Spinner.doc.mjs +5 -5
- package/src/Spinner/Spinner.test.tsx +32 -7
- package/src/Spinner/Spinner.tsx +46 -14
- package/src/Stack/Stack.doc.mjs +60 -0
- package/src/Stack/Stack.spec.md +155 -0
- package/src/StatusDot/StatusDot.doc.mjs +17 -0
- package/src/StatusDot/StatusDot.spec.md +138 -0
- package/src/Stepper/Step.doc.mjs +4 -3
- package/src/Stepper/Step.tsx +281 -30
- package/src/Stepper/Stepper.doc.mjs +116 -7
- package/src/Stepper/Stepper.spec.md +296 -0
- package/src/Stepper/Stepper.test.tsx +985 -2
- package/src/Stepper/Stepper.tsx +341 -18
- package/src/Stepper/StepperContext.ts +51 -5
- package/src/Stepper/index.ts +5 -1
- package/src/Switch/Switch.doc.mjs +40 -0
- package/src/Switch/Switch.spec.md +175 -0
- package/src/Switch/Switch.test.tsx +53 -0
- package/src/Switch/Switch.tsx +9 -21
- package/src/TabList/TabList.doc.mjs +10 -1
- package/src/TabList/TabList.tsx +53 -3
- package/src/TabList/TabMenu.doc.mjs +14 -0
- package/src/Table/Table.doc.mjs +102 -24
- package/src/Table/Table.perf.test.tsx +51 -1
- package/src/Table/Table.spec.md +325 -0
- package/src/Table/TableHeaderCell.test.tsx +291 -0
- package/src/Table/index.ts +19 -4
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -12
- package/src/Table/plugins/filtering/useTableFilterState.test.tsx +143 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +2 -1
- package/src/Table/plugins/rowStatus/index.ts +1 -4
- package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +92 -0
- package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +354 -0
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +431 -56
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +155 -84
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +72 -0
- package/src/Table/plugins/sortable/useTableSortable.tsx +18 -1
- package/src/Table/useTableGroupedRows.doc.mjs +2 -2
- package/src/Table/useTableRowStatus.doc.mjs +5 -5
- package/src/Text/Text.doc.mjs +190 -43
- package/src/Text/Text.spec.md +206 -0
- package/src/Text/useTruncation.ts +8 -7
- package/src/TextArea/TextArea.doc.mjs +255 -45
- package/src/TextArea/TextArea.spec.md +205 -0
- package/src/TimeInput/NativeTimeInput.test.tsx +269 -0
- package/src/TimeInput/TimeInput.doc.mjs +47 -23
- package/src/TimeInput/TimeInput.tsx +109 -50
- package/src/TimeInput/index.ts +1 -0
- package/src/Timestamp/Timestamp.doc.mjs +2 -2
- package/src/Timestamp/Timestamp.test.tsx +75 -3
- package/src/Timestamp/Timestamp.tsx +7 -153
- package/src/Timestamp/formatRelativeTime.ts +96 -0
- package/src/Toast/Toast.doc.mjs +4 -0
- package/src/Toast/ToastViewport.test.tsx +194 -0
- package/src/Toast/ToastViewport.tsx +136 -58
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -0
- package/src/Tokenizer/Tokenizer.spec.md +293 -0
- package/src/Tokenizer/Tokenizer.test.tsx +335 -1
- package/src/Tokenizer/Tokenizer.tsx +129 -46
- package/src/Tokenizer/useEndLaneReserve.ts +146 -0
- package/src/Toolbar/Toolbar.doc.mjs +19 -0
- package/src/Toolbar/Toolbar.spec.md +174 -0
- package/src/Tooltip/Tooltip.doc.mjs +17 -0
- package/src/Tooltip/Tooltip.spec.md +142 -0
- package/src/Tooltip/Tooltip.test.tsx +21 -1
- package/src/Tooltip/useTooltip.test.tsx +318 -0
- package/src/Tooltip/useTooltip.tsx +60 -39
- package/src/TopNav/TopNavHeading.doc.mjs +3 -0
- package/src/TopNav/TopNavItem.doc.mjs +3 -0
- package/src/TopNav/TopNavMenu.doc.mjs +10 -0
- package/src/TreeList/TreeList.doc.mjs +58 -0
- package/src/TreeList/TreeList.spec.md +224 -0
- package/src/TreeList/TreeList.test.tsx +94 -0
- package/src/TreeList/TreeList.tsx +19 -1
- package/src/Typeahead/BaseTypeahead.tsx +96 -25
- package/src/Typeahead/Typeahead.doc.mjs +89 -1
- package/src/Typeahead/Typeahead.spec.md +257 -0
- package/src/Typeahead/Typeahead.test.tsx +502 -1
- package/src/Typeahead/Typeahead.tsx +187 -69
- package/src/Typeahead/TypeaheadItem.test.tsx +93 -2
- package/src/Typeahead/busyIndicatorLane.tsx +109 -0
- package/src/__tests__/stylexDeclarations.ts +51 -0
- package/src/hooks/useFocusReturnVisibility.ts +3 -5
- package/src/hooks/useFocusTrap.doc.mjs +2 -2
- package/src/hooks/useFocusTrap.test.tsx +48 -0
- package/src/hooks/useFocusTrap.ts +35 -1
- package/src/hooks/useOverflow.ts +11 -11
- package/src/hooks/useScrollLock.test.ts +103 -0
- package/src/hooks/useScrollOverflow.ts +7 -4
- package/src/i18n/useTranslator.test.tsx +197 -0
- package/src/postinstall.test.mjs +71 -5
- package/src/theme/defineTheme.test.ts +227 -0
- package/src/theme/defineTheme.ts +30 -0
- package/src/theme/derivedVarRegistry.test.ts +6 -0
- package/src/theme/extensibleAxes.test.ts +26 -9
- package/src/theme/generateThemeRules.ts +4 -1
- package/src/theme/localTokens.ts +272 -0
- package/src/theme/themingTargets.test.ts +126 -28
- package/src/utils/interactionModality.test.ts +83 -0
- package/src/utils/interactionModality.ts +88 -36
- package/src/utils/sharedResizeObserver.test.ts +124 -5
- package/src/utils/sharedResizeObserver.ts +60 -14
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
* @file AppShell.tsx
|
|
4
4
|
* @input Uses React, Layout, LayoutHeader, LayoutPanel, LayoutContent, StyleX
|
|
5
5
|
* @output Exports AppShell component and AppShellProps type
|
|
6
|
-
* @position
|
|
6
|
+
* @position Page shell for an application — the top-level wrapper for any app.
|
|
7
7
|
* Composes Layout internally to provide header, sideNav, and main content areas.
|
|
8
8
|
* Use for any app that needs a top nav, side navigation, and scrollable content.
|
|
9
9
|
*
|
|
@@ -175,7 +175,7 @@ export interface AppShellProps extends BaseProps<HTMLDivElement> {
|
|
|
175
175
|
topNav?: ReactNode;
|
|
176
176
|
}
|
|
177
177
|
/**
|
|
178
|
-
*
|
|
178
|
+
* Page shell for an application. Provides the structural frame for an app:
|
|
179
179
|
* top navigation, side navigation, and main content area.
|
|
180
180
|
*
|
|
181
181
|
* Slot-based API with `topNav`, `sideNav`, `banner`, and `children`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AA4KD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBAiZf;yBAhae,QAAQ"}
|
|
@@ -8,7 +8,7 @@ import React from 'react';
|
|
|
8
8
|
* @file AppShell.tsx
|
|
9
9
|
* @input Uses React, Layout, LayoutHeader, LayoutPanel, LayoutContent, StyleX
|
|
10
10
|
* @output Exports AppShell component and AppShellProps type
|
|
11
|
-
* @position
|
|
11
|
+
* @position Page shell for an application — the top-level wrapper for any app.
|
|
12
12
|
* Composes Layout internally to provide header, sideNav, and main content areas.
|
|
13
13
|
* Use for any app that needs a top nav, side navigation, and scrollable content.
|
|
14
14
|
*
|
|
@@ -36,7 +36,7 @@ import { AppShellMobileContext } from "./AppShellMobileContext.js";
|
|
|
36
36
|
import { mergeProps, isRenderable } from "../utils/index.js";
|
|
37
37
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
38
38
|
import { useMediaQuery } from "../hooks/useMediaQuery.js";
|
|
39
|
-
import { observeResize
|
|
39
|
+
import { observeResize } from "../utils/sharedResizeObserver.js";
|
|
40
40
|
import { themeProps } from "../utils/themeProps.js";
|
|
41
41
|
import { useTranslator } from "../i18n/index.js";
|
|
42
42
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
@@ -105,6 +105,7 @@ const styles = {
|
|
|
105
105
|
k1xSpc: "x78zum5",
|
|
106
106
|
kXwgrk: "xdt5ytf",
|
|
107
107
|
kVAEAm: "x1n2onr6",
|
|
108
|
+
kVQacm: "x7giv3",
|
|
108
109
|
$$css: true
|
|
109
110
|
},
|
|
110
111
|
variantWash: {
|
|
@@ -199,7 +200,7 @@ const styles = {
|
|
|
199
200
|
// =============================================================================
|
|
200
201
|
|
|
201
202
|
/**
|
|
202
|
-
*
|
|
203
|
+
* Page shell for an application. Provides the structural frame for an app:
|
|
203
204
|
* top navigation, side navigation, and main content area.
|
|
204
205
|
*
|
|
205
206
|
* Slot-based API with `topNav`, `sideNav`, `banner`, and `children`.
|
|
@@ -294,6 +295,9 @@ export function AppShell({
|
|
|
294
295
|
const navHasDividers = variant === 'section';
|
|
295
296
|
const isElevated = variant === 'elevated';
|
|
296
297
|
const navAreaStyle = variant === 'wash' || variant === 'elevated' ? styles.navAreaWash : variant === 'surface' ? styles.navAreaSurface : undefined;
|
|
298
|
+
// Section normally inherits the shell's surface background. Its auto-height
|
|
299
|
+
// header needs to paint that surface itself while content scrolls beneath it.
|
|
300
|
+
const headerAreaStyle = navAreaStyle ?? (isAuto && variant === 'section' ? styles.navAreaSurface : undefined);
|
|
297
301
|
const contentAreaStyle = variant === 'wash' ? styles.contentBgWash : variant === 'elevated' && hasTopNav && hasSideNav && !isBelowBreakpoint ? styles.contentBgTransparent : variant === 'surface' || variant === 'elevated' ? styles.contentBgSurface : undefined;
|
|
298
302
|
|
|
299
303
|
// Background for sticky elements in auto mode — must be opaque so content
|
|
@@ -316,8 +320,7 @@ export function AppShell({
|
|
|
316
320
|
const height = headerEl.getBoundingClientRect().height;
|
|
317
321
|
shellEl.style.setProperty('--_app-shell-header-height', `${height}px`);
|
|
318
322
|
};
|
|
319
|
-
observeResize(headerEl, () => updateHeight());
|
|
320
|
-
return () => unobserveResize(headerEl);
|
|
323
|
+
return observeResize(headerEl, () => updateHeight());
|
|
321
324
|
}, [isAuto]);
|
|
322
325
|
|
|
323
326
|
// =========================================================================
|
|
@@ -395,7 +398,7 @@ export function AppShell({
|
|
|
395
398
|
role: "banner",
|
|
396
399
|
...mergeProps(themeProps('app-shell-header', {
|
|
397
400
|
variant
|
|
398
|
-
}), stylex.props(
|
|
401
|
+
}), stylex.props(headerAreaStyle, isAuto && styles.headerSticky)),
|
|
399
402
|
children: headerInner
|
|
400
403
|
}) : undefined;
|
|
401
404
|
|
|
@@ -473,7 +476,7 @@ export function AppShell({
|
|
|
473
476
|
role: headerContent == null ? 'banner' : undefined,
|
|
474
477
|
...mergeProps(themeProps('app-shell-header', {
|
|
475
478
|
variant
|
|
476
|
-
}), stylex.props(
|
|
479
|
+
}), stylex.props(headerAreaStyle, isAuto && styles.headerSticky)),
|
|
477
480
|
children: /*#__PURE__*/_jsx(LayoutHeader, {
|
|
478
481
|
padding: 0,
|
|
479
482
|
hasDivider: navHasDividers,
|
package/dist/Banner/Banner.d.ts
CHANGED
|
@@ -11,6 +11,11 @@
|
|
|
11
11
|
* - Status icon (themeProps 'banner-icon'): the target rides on the default
|
|
12
12
|
* <Icon> itself — the element that paints — so 'status:X' overrides reach
|
|
13
13
|
* the glyph (#4166); for a custom `icon` node it stays on the layout wrapper
|
|
14
|
+
* - Description (themeProps 'banner-description'): the supporting line owns its
|
|
15
|
+
* own colour and type, and the space between it and the title
|
|
16
|
+
* - The end area carries no target: it is a layout row (flex, wrap, edge
|
|
17
|
+
* compensation) rather than a painted surface, and a theme that wants the
|
|
18
|
+
* header to grow around its buttons sets `padding-block` on 'banner'
|
|
14
19
|
* - No left border accent — color is expressed through the full header background
|
|
15
20
|
* - Each visual area owns its own border-radius (no overflow:clip on the container)
|
|
16
21
|
* - Children are collapsible by default: a toggle appears in the header end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAA0B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAgB5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAmND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,KAAK,EACL,WAAW,EACX,IAAI,EACJ,aAAqB,EACrB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAkB,EAClB,SAAkB,EAClB,WAAkB,EAClB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,cAAc,EACd,oBAAoB,EACpB,GAAG,IAAI,EACR,EAAE,WAAW,sCAmPb;yBAvQe,MAAM"}
|
package/dist/Banner/Banner.js
CHANGED
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
* - Status icon (themeProps 'banner-icon'): the target rides on the default
|
|
16
16
|
* <Icon> itself — the element that paints — so 'status:X' overrides reach
|
|
17
17
|
* the glyph (#4166); for a custom `icon` node it stays on the layout wrapper
|
|
18
|
+
* - Description (themeProps 'banner-description'): the supporting line owns its
|
|
19
|
+
* own colour and type, and the space between it and the title
|
|
20
|
+
* - The end area carries no target: it is a layout row (flex, wrap, edge
|
|
21
|
+
* compensation) rather than a painted surface, and a theme that wants the
|
|
22
|
+
* header to grow around its buttons sets `padding-block` on 'banner'
|
|
18
23
|
* - No left border accent — color is expressed through the full header background
|
|
19
24
|
* - Each visual area owns its own border-radius (no overflow:clip on the container)
|
|
20
25
|
* - Children are collapsible by default: a toggle appears in the header end
|
|
@@ -429,9 +434,9 @@ export function Banner({
|
|
|
429
434
|
},
|
|
430
435
|
children: title
|
|
431
436
|
}), isRenderable(description) && /*#__PURE__*/_jsx("div", {
|
|
432
|
-
...{
|
|
437
|
+
...mergeProps(themeProps('banner-description'), {
|
|
433
438
|
className: "x1ghz6dp xjb2p0i x141an7d x1sodnla x1ltkj2j xv1l7n4 xj0a0fe"
|
|
434
|
-
},
|
|
439
|
+
}),
|
|
435
440
|
children: description
|
|
436
441
|
})]
|
|
437
442
|
}), showEndArea && /*#__PURE__*/_jsxs("div", {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file BreadcrumbItem.tsx
|
|
3
3
|
* @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext,
|
|
4
|
-
*
|
|
5
|
-
* (renderDropdownItems,
|
|
4
|
+
* rtlStyles for the contextual default slash, and (for the menu trigger)
|
|
5
|
+
* usePopover + the shared DropdownMenu item API (renderDropdownItems,
|
|
6
|
+
* DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
|
|
6
7
|
* @output Exports BreadcrumbItem component and BreadcrumbItemProps
|
|
7
8
|
* @position Individual breadcrumb item; used inside Breadcrumbs
|
|
8
9
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAqID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAkMrB;yBAjNe,cAAc"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @file BreadcrumbItem.tsx
|
|
7
7
|
* @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext,
|
|
8
|
-
*
|
|
9
|
-
* (renderDropdownItems,
|
|
8
|
+
* rtlStyles for the contextual default slash, and (for the menu trigger)
|
|
9
|
+
* usePopover + the shared DropdownMenu item API (renderDropdownItems,
|
|
10
|
+
* DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
|
|
10
11
|
* @output Exports BreadcrumbItem component and BreadcrumbItemProps
|
|
11
12
|
* @position Individual breadcrumb item; used inside Breadcrumbs
|
|
12
13
|
*
|
|
@@ -27,7 +28,7 @@ import "../theme/tokens.stylex.js";
|
|
|
27
28
|
import { colorVars, spacingVars, typeScaleVars, radiusVars, fontWeightVars } from "../theme/tokens.stylex.js";
|
|
28
29
|
import { BreadcrumbContext } from "./Breadcrumbs.js";
|
|
29
30
|
import { useLinkComponent } from "../Link/useLinkComponent.js";
|
|
30
|
-
import { mergeProps } from "../utils/index.js";
|
|
31
|
+
import { mergeProps, rtlStyles } from "../utils/index.js";
|
|
31
32
|
import { themeProps } from "../utils/themeProps.js";
|
|
32
33
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
33
34
|
import { Icon } from "../Icon/index.js";
|
|
@@ -99,6 +100,20 @@ const itemStyles = {
|
|
|
99
100
|
$$css: true
|
|
100
101
|
}
|
|
101
102
|
};
|
|
103
|
+
function BreadcrumbSeparator({
|
|
104
|
+
separator
|
|
105
|
+
}) {
|
|
106
|
+
return /*#__PURE__*/_jsx("span", {
|
|
107
|
+
"aria-hidden": "true",
|
|
108
|
+
...{
|
|
109
|
+
className: "x11ke7fs x6s0dn4 xv1l7n4 xu0wf1k x87ps6o"
|
|
110
|
+
},
|
|
111
|
+
children: separator === '/' ? /*#__PURE__*/_jsx("span", {
|
|
112
|
+
...stylex.props(rtlStyles.mirror),
|
|
113
|
+
children: "/"
|
|
114
|
+
}) : separator
|
|
115
|
+
});
|
|
116
|
+
}
|
|
102
117
|
const menuStyles = {
|
|
103
118
|
popover: {
|
|
104
119
|
k7Eaqz: "x5w4yej",
|
|
@@ -220,12 +235,8 @@ export function BreadcrumbItem({
|
|
|
220
235
|
}), stylex.props(itemStyles.root, isSupporting ? itemStyles.supportingSize : itemStyles.defaultSize, xstyle), className, style),
|
|
221
236
|
"data-testid": testId,
|
|
222
237
|
...rest,
|
|
223
|
-
children: [/*#__PURE__*/_jsx(
|
|
224
|
-
|
|
225
|
-
...{
|
|
226
|
-
className: "x11ke7fs x6s0dn4 xv1l7n4 xu0wf1k x87ps6o"
|
|
227
|
-
},
|
|
228
|
-
children: ctx.separator
|
|
238
|
+
children: [/*#__PURE__*/_jsx(BreadcrumbSeparator, {
|
|
239
|
+
separator: ctx.separator
|
|
229
240
|
}), hasMenu ?
|
|
230
241
|
/*#__PURE__*/
|
|
231
242
|
// A current crumb can also open a sibling menu — the trigger keeps
|
|
@@ -262,12 +273,8 @@ export function BreadcrumbItem({
|
|
|
262
273
|
}), stylex.props(itemStyles.root, isSupporting ? itemStyles.supportingSize : itemStyles.defaultSize, xstyle), className, style),
|
|
263
274
|
"data-testid": testId,
|
|
264
275
|
...rest,
|
|
265
|
-
children: [/*#__PURE__*/_jsx(
|
|
266
|
-
|
|
267
|
-
...{
|
|
268
|
-
className: "x11ke7fs x6s0dn4 xv1l7n4 xu0wf1k x87ps6o"
|
|
269
|
-
},
|
|
270
|
-
children: ctx.separator
|
|
276
|
+
children: [/*#__PURE__*/_jsx(BreadcrumbSeparator, {
|
|
277
|
+
separator: ctx.separator
|
|
271
278
|
}), hasMenu ? /*#__PURE__*/_jsx(BreadcrumbMenuTrigger, {
|
|
272
279
|
ref: contentRef,
|
|
273
280
|
menu: menu,
|
|
@@ -46,8 +46,8 @@ export interface ChatComposerProps extends Omit<BaseProps<HTMLDivElement>, 'onCh
|
|
|
46
46
|
/**
|
|
47
47
|
* Resting elevation of the composer body. `low` (the default) keeps today's
|
|
48
48
|
* raised look — low at rest, bumping to med on hover / focus. `none` flattens
|
|
49
|
-
* it and draws a border
|
|
50
|
-
*
|
|
49
|
+
* it and draws a border. Keyboard focus in the editor adds the shared focus
|
|
50
|
+
* ring in either presentation; pointer focus does not add that ring.
|
|
51
51
|
* @default 'low'
|
|
52
52
|
*/
|
|
53
53
|
elevation?: 'none' | 'low';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA+B5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,UAAU,CACxB;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAI3B,6GAA6G;IAC7G,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yHAAyH;IACzH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,yGAAyG;IACzG,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gHAAgH;IAChH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gHAAgH;IAChH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oDAAoD;IACpD,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACnC;AA8MD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBA2MpD;yBA3Me,YAAY"}
|
|
@@ -33,6 +33,8 @@ import { ChatComposerContext } from "./ChatContext.js";
|
|
|
33
33
|
import { ChatSendButton } from "./ChatSendButton.js";
|
|
34
34
|
import { themeProps } from "../utils/themeProps.js";
|
|
35
35
|
import { useTranslator } from "../i18n/index.js";
|
|
36
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
37
|
+
import { getInteractionModality, useInteractionModalityTracking } from "../utils/interactionModality.js";
|
|
36
38
|
|
|
37
39
|
// =============================================================================
|
|
38
40
|
// Types
|
|
@@ -65,7 +67,8 @@ const styles = {
|
|
|
65
67
|
|
|
66
68
|
// Resting elevation for the composer body, narrowed to two steps.
|
|
67
69
|
// - `low` (default) preserves today's look: low at rest, bumping to med on
|
|
68
|
-
// hover / focus-within
|
|
70
|
+
// hover / focus-within. The WCAG focus indicator is a separate shared ring,
|
|
71
|
+
// gated to keyboard focus in the editor; the shadow change remains depth.
|
|
69
72
|
// - `none` is flat; depth comes from a border + inset rings instead. The
|
|
70
73
|
// border is drawn *inside* the padding — its width is subtracted from every
|
|
71
74
|
// side (like Card) so total inset (border + padding) equals the elevated
|
|
@@ -88,6 +91,9 @@ const elevationStyles = {
|
|
|
88
91
|
$$css: true
|
|
89
92
|
}
|
|
90
93
|
};
|
|
94
|
+
function isComposerEditor(target) {
|
|
95
|
+
return target instanceof HTMLElement && target.matches('textarea, [contenteditable="true"], [role="textbox"], input:not([type]), input[type="text"], input[type="search"], input[type="email"], input[type="url"], input[type="tel"], input[type="password"]');
|
|
96
|
+
}
|
|
91
97
|
|
|
92
98
|
// =============================================================================
|
|
93
99
|
// Component
|
|
@@ -134,6 +140,8 @@ export function ChatComposer(props) {
|
|
|
134
140
|
} = props;
|
|
135
141
|
const placeholder = placeholderFromProps ?? t('@astryx.chat.composer.placeholder');
|
|
136
142
|
const [internalValue, setInternalValue] = useState('');
|
|
143
|
+
const [hasKeyboardEditorFocus, setHasKeyboardEditorFocus] = useState(false);
|
|
144
|
+
useInteractionModalityTracking();
|
|
137
145
|
const isControlled = controlledValue !== undefined;
|
|
138
146
|
const currentValue = isControlled ? controlledValue : internalValue;
|
|
139
147
|
const updateValue = useCallback(newValue => {
|
|
@@ -175,6 +183,14 @@ export function ChatComposer(props) {
|
|
|
175
183
|
const editable = bodyRef.current?.querySelector('[contenteditable="true"], textarea');
|
|
176
184
|
editable?.focus();
|
|
177
185
|
}, []);
|
|
186
|
+
const handleBodyFocusCapture = useCallback(event => {
|
|
187
|
+
setHasKeyboardEditorFocus(isComposerEditor(event.target) && getInteractionModality() === 'keyboard');
|
|
188
|
+
}, []);
|
|
189
|
+
const handleBodyBlurCapture = useCallback(event => {
|
|
190
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
191
|
+
setHasKeyboardEditorFocus(false);
|
|
192
|
+
}
|
|
193
|
+
}, []);
|
|
178
194
|
const statusEl = status ? /*#__PURE__*/_jsxs("div", {
|
|
179
195
|
role: status.type === 'error' ? 'alert' : 'status',
|
|
180
196
|
...{
|
|
@@ -238,7 +254,10 @@ export function ChatComposer(props) {
|
|
|
238
254
|
children: [statusPosition === 'top' && statusEl, drawer, /*#__PURE__*/_jsxs("div", {
|
|
239
255
|
ref: bodyRef,
|
|
240
256
|
onClick: handleBodyClick,
|
|
241
|
-
|
|
257
|
+
onPointerDownCapture: () => setHasKeyboardEditorFocus(false),
|
|
258
|
+
onFocusCapture: handleBodyFocusCapture,
|
|
259
|
+
onBlurCapture: handleBodyBlurCapture,
|
|
260
|
+
...stylex.props(styles.body, elevationStyles[elevation], hasKeyboardEditorFocus && focusOutlineStyles.focusWithin, density === 'compact' && styles.compact, xstyle),
|
|
242
261
|
children: [(headerActions || headerContext) && /*#__PURE__*/_jsxs("div", {
|
|
243
262
|
...{
|
|
244
263
|
className: "x78zum5 x6s0dn4 x1qughib x1txdalj xe0p6wg"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatComposerInput.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposerInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAML,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatComposerInput.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposerInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ import { colorVars, spacingVars, typeScaleVars, typographyVars } from "../theme/
|
|
|
30
30
|
import { mergeProps, isImeKeyEvent } from "../utils/index.js";
|
|
31
31
|
import { useTriggerMenu } from "./useTriggerMenu.js";
|
|
32
32
|
import { useChatComposerTokens, isCustomToken } from "./useChatComposerTokens.js";
|
|
33
|
-
import { ensureCaretInside, insertTextAtCursor } from "./chatComposerSelection.js";
|
|
33
|
+
import { ensureCaretInside, insertTextAtCursor, isSelectionAtStart, isSelectionAtEnd, placeCaretAtEnd, getSelectionRangeInside, restoreSelectionRange } from "./chatComposerSelection.js";
|
|
34
34
|
import { ChatPastedTextToken } from "./ChatPastedTextToken.js";
|
|
35
35
|
import { useChatPasteAsToken } from "./useChatPasteAsToken.js";
|
|
36
36
|
import { Badge } from "../Badge/index.js";
|
|
@@ -182,11 +182,65 @@ export function ChatComposerInput(props) {
|
|
|
182
182
|
// when a parent attaches a ref — without this, paste-as-token would
|
|
183
183
|
// silently no-op whenever `ChatComposerInput` is rendered without
|
|
184
184
|
// a forwarded ref (e.g. inside `ChatComposer`).
|
|
185
|
+
/**
|
|
186
|
+
* Focus the editable and put the caret after the draft.
|
|
187
|
+
*
|
|
188
|
+
* A bare `focus()` is not enough: Chromium collapses the caret to the
|
|
189
|
+
* start of the content, which is the one position where ArrowUp means
|
|
190
|
+
* "recall history" — so focusing a composer that already holds a draft
|
|
191
|
+
* would arm the next ArrowUp to replace it. Landing after the text is
|
|
192
|
+
* also what a click on the composer's trailing space means.
|
|
193
|
+
*/
|
|
194
|
+
/**
|
|
195
|
+
* Focus the editable, keeping a caret or selection the user already has
|
|
196
|
+
* inside it.
|
|
197
|
+
*
|
|
198
|
+
* A bare `focus()` is not enough on its own: Chromium collapses the caret
|
|
199
|
+
* to the start of the content, which is the one position where ArrowUp
|
|
200
|
+
* means "recall history" — so focusing a composer that already holds a
|
|
201
|
+
* draft would arm the next ArrowUp to replace it. But a consumer calling
|
|
202
|
+
* `focus()` to return the user to where they were must not have their
|
|
203
|
+
* caret moved either, so an existing in-editor selection is captured
|
|
204
|
+
* before focusing and restored after. Only when there is none does the
|
|
205
|
+
* caret land after the draft.
|
|
206
|
+
*/
|
|
207
|
+
const focusEditable = useCallback(() => {
|
|
208
|
+
const editable = editableRef.current;
|
|
209
|
+
if (!editable) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
// Read before focusing: `focus()` itself creates the offset-0 caret, so
|
|
213
|
+
// asking afterwards cannot tell the user's own caret from the engine's.
|
|
214
|
+
const existing = getSelectionRangeInside(editable);
|
|
215
|
+
editable.focus();
|
|
216
|
+
if (existing) {
|
|
217
|
+
restoreSelectionRange(existing);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
placeCaretAtEnd(editable);
|
|
221
|
+
}, []);
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Focus the editable and put the caret after the draft, whatever the
|
|
225
|
+
* selection was.
|
|
226
|
+
*
|
|
227
|
+
* This is the composer shell's click-to-focus path: clicking the empty
|
|
228
|
+
* space after a draft means "put me after the text", so it overrides a
|
|
229
|
+
* stale caret rather than restoring one.
|
|
230
|
+
*/
|
|
231
|
+
const focusEditableAtEnd = useCallback(() => {
|
|
232
|
+
const editable = editableRef.current;
|
|
233
|
+
if (!editable) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
editable.focus();
|
|
237
|
+
placeCaretAtEnd(editable);
|
|
238
|
+
}, []);
|
|
185
239
|
const handle = {
|
|
186
240
|
insertToken: token => insertTokenRef.current(token),
|
|
187
241
|
expandToken: id => tokens.expandToken(id),
|
|
188
242
|
insertText: text => insertTextRef.current(text),
|
|
189
|
-
focus:
|
|
243
|
+
focus: focusEditable,
|
|
190
244
|
getValue: () => serialize(editableRef.current ?? document.createElement('div'))
|
|
191
245
|
};
|
|
192
246
|
selfRef.current = handle;
|
|
@@ -201,12 +255,12 @@ export function ChatComposerInput(props) {
|
|
|
201
255
|
return;
|
|
202
256
|
}
|
|
203
257
|
inputControlRef.current = {
|
|
204
|
-
focus:
|
|
258
|
+
focus: focusEditableAtEnd
|
|
205
259
|
};
|
|
206
260
|
return () => {
|
|
207
261
|
inputControlRef.current = null;
|
|
208
262
|
};
|
|
209
|
-
}, [inputControlRef]);
|
|
263
|
+
}, [inputControlRef, focusEditableAtEnd]);
|
|
210
264
|
useEffect(() => {
|
|
211
265
|
if (controlledValue === undefined || !editableRef.current) {
|
|
212
266
|
return;
|
|
@@ -373,12 +427,36 @@ export function ChatComposerInput(props) {
|
|
|
373
427
|
return;
|
|
374
428
|
}
|
|
375
429
|
|
|
376
|
-
// History navigation (only when trigger menu is not active)
|
|
430
|
+
// History navigation (only when trigger menu is not active).
|
|
431
|
+
// Recall only at the text boundaries so the caret can still move
|
|
432
|
+
// between lines in a multi-line draft: ArrowUp recalls the
|
|
433
|
+
// previous message when the caret is at the very start, ArrowDown
|
|
434
|
+
// steps forward when it's at the very end. A recalled message is
|
|
435
|
+
// shown fully selected (see `selectAll` below); that spans both
|
|
436
|
+
// boundaries at once, so repeated presses keep stepping through
|
|
437
|
+
// history. Mid-text, we bail before `preventDefault` and let the
|
|
438
|
+
// browser move the caret up/down a line.
|
|
377
439
|
if (hasHistory && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {
|
|
378
440
|
if (!editableRef.current) {
|
|
379
441
|
return;
|
|
380
442
|
}
|
|
381
|
-
const
|
|
443
|
+
const editable = editableRef.current;
|
|
444
|
+
// Last-resort fallback for a caret we never placed: an engine that
|
|
445
|
+
// leaves no Range inside the editable on focus, or a consumer that
|
|
446
|
+
// focused the DOM node directly instead of through our focus
|
|
447
|
+
// control. Place it where the focus control would have, so a
|
|
448
|
+
// pending draft is never mistaken for a caret at the start. A no-op
|
|
449
|
+
// whenever a real caret exists — including one the user moved.
|
|
450
|
+
ensureCaretInside(editable);
|
|
451
|
+
const isCollapsed = window.getSelection()?.isCollapsed ?? true;
|
|
452
|
+
const atStart = isSelectionAtStart(editable);
|
|
453
|
+
const atEnd = isSelectionAtEnd(editable);
|
|
454
|
+
const canRecallPrev = atStart && (isCollapsed || atEnd);
|
|
455
|
+
const canRecallNext = atEnd && (isCollapsed || atStart);
|
|
456
|
+
if (e.key === 'ArrowUp' ? !canRecallPrev : !canRecallNext) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
const text = serialize(editable);
|
|
382
460
|
const history = historyRef.current;
|
|
383
461
|
if (history.length === 0) {
|
|
384
462
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatToolCalls.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatToolCalls.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAA+B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwB5C,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6FAA6F;IAC7F,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+BAA+B;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;
|
|
1
|
+
{"version":3,"file":"ChatToolCalls.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatToolCalls.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAA+B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwB5C,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6FAA6F;IAC7F,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+BAA+B;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;AAkaD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,4BA2JtD;yBA3Je,aAAa"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file ChatToolCalls.tsx
|
|
7
|
-
* @input Uses React, StyleX, theme tokens
|
|
7
|
+
* @input Uses React, StyleX, semantic icon registry, theme tokens
|
|
8
8
|
* @output Exports ChatToolCalls component
|
|
9
9
|
* @position Chat component — displays tool/function call invocations
|
|
10
10
|
*
|
|
@@ -32,7 +32,7 @@ import { useTranslator } from "../i18n/index.js";
|
|
|
32
32
|
// =============================================================================
|
|
33
33
|
// Types
|
|
34
34
|
// =============================================================================
|
|
35
|
-
import { jsx as _jsx,
|
|
35
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
36
36
|
// =============================================================================
|
|
37
37
|
// =============================================================================
|
|
38
38
|
// Styles
|
|
@@ -93,8 +93,8 @@ const styles = {
|
|
|
93
93
|
const STATUS_ICON_NAMES = {
|
|
94
94
|
pending: 'clock',
|
|
95
95
|
running: null,
|
|
96
|
-
complete: '
|
|
97
|
-
error: '
|
|
96
|
+
complete: 'success',
|
|
97
|
+
error: 'error'
|
|
98
98
|
};
|
|
99
99
|
const STATUS_STYLES = {
|
|
100
100
|
pending: styles.colorPending,
|
|
@@ -168,21 +168,10 @@ function CallRow({
|
|
|
168
168
|
size: "sm",
|
|
169
169
|
shade: "subtle",
|
|
170
170
|
"aria-hidden": "true"
|
|
171
|
-
}) : /*#__PURE__*/
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
}), /*#__PURE__*/_jsx("span", {
|
|
177
|
-
...{
|
|
178
|
-
className: "x1n2onr6 x3nfvp2"
|
|
179
|
-
},
|
|
180
|
-
children: /*#__PURE__*/_jsx(Icon, {
|
|
181
|
-
icon: STATUS_ICON_NAMES[status] ?? 'check',
|
|
182
|
-
size: "xsm",
|
|
183
|
-
color: "inherit"
|
|
184
|
-
})
|
|
185
|
-
})]
|
|
171
|
+
}) : /*#__PURE__*/_jsx(Icon, {
|
|
172
|
+
icon: STATUS_ICON_NAMES[status] ?? 'success',
|
|
173
|
+
size: "xsm",
|
|
174
|
+
color: "inherit"
|
|
186
175
|
}), /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
187
176
|
children: statusAnnouncement
|
|
188
177
|
})]
|
|
@@ -365,21 +354,10 @@ export function ChatToolCalls(props) {
|
|
|
365
354
|
size: "sm",
|
|
366
355
|
shade: "subtle",
|
|
367
356
|
"aria-hidden": "true"
|
|
368
|
-
}) : /*#__PURE__*/
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
}
|
|
373
|
-
}), /*#__PURE__*/_jsx("span", {
|
|
374
|
-
...{
|
|
375
|
-
className: "x1n2onr6 x3nfvp2"
|
|
376
|
-
},
|
|
377
|
-
children: /*#__PURE__*/_jsx(Icon, {
|
|
378
|
-
icon: STATUS_ICON_NAMES[latestStatus] ?? 'check',
|
|
379
|
-
size: "xsm",
|
|
380
|
-
color: "inherit"
|
|
381
|
-
})
|
|
382
|
-
})]
|
|
357
|
+
}) : /*#__PURE__*/_jsx(Icon, {
|
|
358
|
+
icon: STATUS_ICON_NAMES[latestStatus] ?? 'success',
|
|
359
|
+
size: "xsm",
|
|
360
|
+
color: "inherit"
|
|
383
361
|
}), /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
384
362
|
children: latestStatusAnnouncement
|
|
385
363
|
})]
|