@flanksource/clicky-ui 0.3.55 → 0.3.57
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/NOTICE.md +6 -0
- package/dist/ai.cjs +6 -0
- package/dist/ai.js +3 -1
- package/dist/chat.cjs +2 -0
- package/dist/chat.d.ts +1 -0
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -1
- package/dist/comments/CommentCard.cjs +37 -7
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +11 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +37 -7
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +9 -4
- package/dist/comments/CommentCardParts.cjs.map +1 -1
- package/dist/comments/CommentCardParts.d.ts.map +1 -1
- package/dist/comments/CommentCardParts.js +9 -4
- package/dist/comments/CommentCardParts.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +8 -8
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +8 -8
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +5 -1
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +5 -1
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +17 -11
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +6 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +17 -11
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +4 -1
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +4 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +4 -1
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +6 -3
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +7 -2
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +6 -3
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/MentionTextarea.cjs +1 -1
- package/dist/comments/MentionTextarea.cjs.map +1 -1
- package/dist/comments/MentionTextarea.d.ts.map +1 -1
- package/dist/comments/MentionTextarea.js +1 -1
- package/dist/comments/MentionTextarea.js.map +1 -1
- package/dist/comments/comment-assign.cjs +68 -0
- package/dist/comments/comment-assign.cjs.map +1 -0
- package/dist/comments/comment-assign.d.ts +31 -0
- package/dist/comments/comment-assign.d.ts.map +1 -0
- package/dist/comments/comment-assign.js +67 -0
- package/dist/comments/comment-assign.js.map +1 -0
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +39 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/comments/comment-utils.cjs +2 -0
- package/dist/comments/comment-utils.cjs.map +1 -1
- package/dist/comments/comment-utils.d.ts +2 -0
- package/dist/comments/comment-utils.d.ts.map +1 -1
- package/dist/comments/comment-utils.js +2 -0
- package/dist/comments/comment-utils.js.map +1 -1
- package/dist/comments.cjs +3 -0
- package/dist/comments.d.ts +1 -0
- package/dist/comments.d.ts.map +1 -1
- package/dist/comments.js +2 -1
- package/dist/components/ComboboxMenu.cjs +23 -13
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +23 -13
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ErrorWrapper.cjs +15 -4
- package/dist/components/ErrorWrapper.cjs.map +1 -1
- package/dist/components/ErrorWrapper.d.ts +7 -0
- package/dist/components/ErrorWrapper.d.ts.map +1 -1
- package/dist/components/ErrorWrapper.js +15 -4
- package/dist/components/ErrorWrapper.js.map +1 -1
- package/dist/components/FilterBar.cjs +29 -6
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +3 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +29 -6
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/ItemActions.cjs +1 -1
- package/dist/components/ItemActions.cjs.map +1 -1
- package/dist/components/ItemActions.js +1 -1
- package/dist/components/ItemActions.js.map +1 -1
- package/dist/components/ListMenu.cjs +33 -3
- package/dist/components/ListMenu.cjs.map +1 -1
- package/dist/components/ListMenu.d.ts +4 -1
- package/dist/components/ListMenu.d.ts.map +1 -1
- package/dist/components/ListMenu.js +33 -3
- package/dist/components/ListMenu.js.map +1 -1
- package/dist/components/ListMenuItems.cjs +80 -0
- package/dist/components/ListMenuItems.cjs.map +1 -0
- package/dist/components/ListMenuItems.d.ts +8 -0
- package/dist/components/ListMenuItems.d.ts.map +1 -0
- package/dist/components/ListMenuItems.js +80 -0
- package/dist/components/ListMenuItems.js.map +1 -0
- package/dist/components/LocalPathPicker.cjs +182 -0
- package/dist/components/LocalPathPicker.cjs.map +1 -0
- package/dist/components/LocalPathPicker.d.ts +11 -0
- package/dist/components/LocalPathPicker.d.ts.map +1 -0
- package/dist/components/LocalPathPicker.js +182 -0
- package/dist/components/LocalPathPicker.js.map +1 -0
- package/dist/components/LocalPathTree.cjs +89 -0
- package/dist/components/LocalPathTree.cjs.map +1 -0
- package/dist/components/LocalPathTree.d.ts +9 -0
- package/dist/components/LocalPathTree.d.ts.map +1 -0
- package/dist/components/LocalPathTree.js +89 -0
- package/dist/components/LocalPathTree.js.map +1 -0
- package/dist/components/RangeSlider.cjs +10 -30
- package/dist/components/RangeSlider.cjs.map +1 -1
- package/dist/components/RangeSlider.d.ts.map +1 -1
- package/dist/components/RangeSlider.js +4 -24
- package/dist/components/RangeSlider.js.map +1 -1
- package/dist/components/Slider.cjs +79 -0
- package/dist/components/Slider.cjs.map +1 -0
- package/dist/components/Slider.d.ts +23 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Slider.js +79 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/combobox-types.d.ts +4 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.cjs +3 -5
- package/dist/components/filter-bar-field-utils.cjs.map +1 -1
- package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.js +3 -5
- package/dist/components/filter-bar-field-utils.js.map +1 -1
- package/dist/components/filter-bar-tree-model.cjs +22 -0
- package/dist/components/filter-bar-tree-model.cjs.map +1 -0
- package/dist/components/filter-bar-tree-model.d.ts +33 -0
- package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
- package/dist/components/filter-bar-tree-model.js +21 -0
- package/dist/components/filter-bar-tree-model.js.map +1 -0
- package/dist/components/filter-bar-tree.cjs +84 -0
- package/dist/components/filter-bar-tree.cjs.map +1 -0
- package/dist/components/filter-bar-tree.d.ts +7 -0
- package/dist/components/filter-bar-tree.d.ts.map +1 -0
- package/dist/components/filter-bar-tree.js +84 -0
- package/dist/components/filter-bar-tree.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
- package/dist/components/json-schema-form-help-links.cjs +18 -0
- package/dist/components/json-schema-form-help-links.cjs.map +1 -0
- package/dist/components/json-schema-form-help-links.d.ts +5 -0
- package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-links.js +18 -0
- package/dist/components/json-schema-form-help-links.js.map +1 -0
- package/dist/components/json-schema-form-help-model.cjs +7 -0
- package/dist/components/json-schema-form-help-model.cjs.map +1 -0
- package/dist/components/json-schema-form-help-model.d.ts +3 -0
- package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-model.js +7 -0
- package/dist/components/json-schema-form-help-model.js.map +1 -0
- package/dist/components/json-schema-form-json.cjs +48 -0
- package/dist/components/json-schema-form-json.cjs.map +1 -0
- package/dist/components/json-schema-form-json.d.ts +7 -0
- package/dist/components/json-schema-form-json.d.ts.map +1 -0
- package/dist/components/json-schema-form-json.js +48 -0
- package/dist/components/json-schema-form-json.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +7 -5
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +2 -2
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +7 -5
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +2 -13
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +2 -13
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-refs.cjs +1 -1
- package/dist/components/json-schema-form-refs.cjs.map +1 -1
- package/dist/components/json-schema-form-refs.d.ts.map +1 -1
- package/dist/components/json-schema-form-refs.js +1 -1
- package/dist/components/json-schema-form-refs.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +20 -6
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +20 -6
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +22 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +22 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +5 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-union-model.cjs +46 -0
- package/dist/components/json-schema-form-union-model.cjs.map +1 -0
- package/dist/components/json-schema-form-union-model.d.ts +6 -0
- package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-union-model.js +43 -0
- package/dist/components/json-schema-form-union-model.js.map +1 -0
- package/dist/components/json-schema-form-union.cjs +52 -0
- package/dist/components/json-schema-form-union.cjs.map +1 -0
- package/dist/components/json-schema-form-union.d.ts +7 -0
- package/dist/components/json-schema-form-union.d.ts.map +1 -0
- package/dist/components/json-schema-form-union.js +52 -0
- package/dist/components/json-schema-form-union.js.map +1 -0
- package/dist/components/list-menu-virtual.cjs +5 -0
- package/dist/components/list-menu-virtual.cjs.map +1 -0
- package/dist/components/list-menu-virtual.d.ts +12 -0
- package/dist/components/list-menu-virtual.d.ts.map +1 -0
- package/dist/components/list-menu-virtual.js +6 -0
- package/dist/components/list-menu-virtual.js.map +1 -0
- package/dist/components/local-path.cjs +12 -0
- package/dist/components/local-path.cjs.map +1 -0
- package/dist/components/local-path.d.ts +14 -0
- package/dist/components/local-path.d.ts.map +1 -0
- package/dist/components/local-path.js +12 -0
- package/dist/components/local-path.js.map +1 -0
- package/dist/components/slider-shared.cjs +32 -0
- package/dist/components/slider-shared.cjs.map +1 -0
- package/dist/components/slider-shared.d.ts +18 -0
- package/dist/components/slider-shared.d.ts.map +1 -0
- package/dist/components/slider-shared.js +27 -0
- package/dist/components/slider-shared.js.map +1 -0
- package/dist/components.cjs +8 -0
- package/dist/components.d.ts +6 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +5 -1
- package/dist/connections/ConnectionsPage.cjs +51 -19
- package/dist/connections/ConnectionsPage.cjs.map +1 -1
- package/dist/connections/ConnectionsPage.d.ts +9 -1
- package/dist/connections/ConnectionsPage.d.ts.map +1 -1
- package/dist/connections/ConnectionsPage.js +52 -20
- package/dist/connections/ConnectionsPage.js.map +1 -1
- package/dist/connections/connectionDashboard.cjs +13 -8
- package/dist/connections/connectionDashboard.cjs.map +1 -1
- package/dist/connections/connectionDashboard.d.ts +8 -3
- package/dist/connections/connectionDashboard.d.ts.map +1 -1
- package/dist/connections/connectionDashboard.js +14 -9
- package/dist/connections/connectionDashboard.js.map +1 -1
- package/dist/connections/connectionDashboardModel.cjs.map +1 -1
- package/dist/connections/connectionDashboardModel.d.ts +4 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
- package/dist/connections/connectionDashboardModel.js.map +1 -1
- package/dist/connections/connectionDashboardRow.cjs +75 -55
- package/dist/connections/connectionDashboardRow.cjs.map +1 -1
- package/dist/connections/connectionDashboardRow.d.ts +3 -2
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
- package/dist/connections/connectionDashboardRow.js +75 -55
- package/dist/connections/connectionDashboardRow.js.map +1 -1
- package/dist/connections/connectionNamespaceField.cjs +17 -0
- package/dist/connections/connectionNamespaceField.cjs.map +1 -0
- package/dist/connections/connectionNamespaceField.d.ts +10 -0
- package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
- package/dist/connections/connectionNamespaceField.js +17 -0
- package/dist/connections/connectionNamespaceField.js.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.js +96 -0
- package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +11 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -1
- package/dist/connections/connectionsPageModel.d.ts +5 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -1
- package/dist/connections/connectionsPageModel.js +11 -1
- package/dist/connections/connectionsPageModel.js.map +1 -1
- package/dist/connections.cjs +5 -0
- package/dist/connections.d.ts +2 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +3 -2
- package/dist/data/AvatarBadge.cjs +3 -3
- package/dist/data/AvatarBadge.cjs.map +1 -1
- package/dist/data/AvatarBadge.js +3 -3
- package/dist/data/AvatarBadge.js.map +1 -1
- package/dist/data/CodeDiff.cjs +2 -0
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.js +2 -0
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/DataTable.cjs +3 -2
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +3 -2
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Gauge.cjs +1 -1
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.js +1 -1
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/HighlightedTokens.cjs +2 -10
- package/dist/data/HighlightedTokens.cjs.map +1 -1
- package/dist/data/HighlightedTokens.d.ts.map +1 -1
- package/dist/data/HighlightedTokens.js +1 -9
- package/dist/data/HighlightedTokens.js.map +1 -1
- package/dist/data/Markdown.cjs +38 -11
- package/dist/data/Markdown.cjs.map +1 -1
- package/dist/data/Markdown.d.ts +9 -1
- package/dist/data/Markdown.d.ts.map +1 -1
- package/dist/data/Markdown.js +39 -12
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/MultiGaugeBar.cjs +157 -0
- package/dist/data/MultiGaugeBar.cjs.map +1 -0
- package/dist/data/MultiGaugeBar.d.ts +29 -0
- package/dist/data/MultiGaugeBar.d.ts.map +1 -0
- package/dist/data/MultiGaugeBar.js +157 -0
- package/dist/data/MultiGaugeBar.js.map +1 -0
- package/dist/data/OpenInFilesLink.cjs +27 -0
- package/dist/data/OpenInFilesLink.cjs.map +1 -0
- package/dist/data/OpenInFilesLink.d.ts +15 -0
- package/dist/data/OpenInFilesLink.d.ts.map +1 -0
- package/dist/data/OpenInFilesLink.js +27 -0
- package/dist/data/OpenInFilesLink.js.map +1 -0
- package/dist/data/ProgressBar.cjs +5 -3
- package/dist/data/ProgressBar.cjs.map +1 -1
- package/dist/data/ProgressBar.d.ts +5 -1
- package/dist/data/ProgressBar.d.ts.map +1 -1
- package/dist/data/ProgressBar.js +5 -3
- package/dist/data/ProgressBar.js.map +1 -1
- package/dist/data/ProgressBars.cjs +13 -5
- package/dist/data/ProgressBars.cjs.map +1 -1
- package/dist/data/ProgressBars.d.ts +6 -1
- package/dist/data/ProgressBars.d.ts.map +1 -1
- package/dist/data/ProgressBars.js +13 -5
- package/dist/data/ProgressBars.js.map +1 -1
- package/dist/data/Properties.cjs +3 -3
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.js +3 -3
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -6
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +3 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +14 -6
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskPrompts.cjs +96 -0
- package/dist/data/TaskPrompts.cjs.map +1 -0
- package/dist/data/TaskPrompts.d.ts +6 -0
- package/dist/data/TaskPrompts.d.ts.map +1 -0
- package/dist/data/TaskPrompts.js +96 -0
- package/dist/data/TaskPrompts.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +3 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.cjs +7 -3
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +8 -4
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +12 -5
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +13 -6
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/TimeseriesPanel.cjs +10 -9
- package/dist/data/TimeseriesPanel.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.d.ts +1 -1
- package/dist/data/TimeseriesPanel.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.js +11 -10
- package/dist/data/TimeseriesPanel.js.map +1 -1
- package/dist/data/TimeseriesPanel.model.cjs +62 -10
- package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.model.d.ts +40 -1
- package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.model.js +62 -11
- package/dist/data/TimeseriesPanel.model.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +7 -3
- package/dist/data/WorkloadCard.cjs.map +1 -1
- package/dist/data/WorkloadCard.d.ts +3 -1
- package/dist/data/WorkloadCard.d.ts.map +1 -1
- package/dist/data/WorkloadCard.js +7 -3
- package/dist/data/WorkloadCard.js.map +1 -1
- package/dist/data/WorkloadCard.model.cjs.map +1 -1
- package/dist/data/WorkloadCard.model.d.ts +2 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -1
- package/dist/data/WorkloadCard.model.js.map +1 -1
- package/dist/data/ai/ChatWindow.placement.cjs +2 -1
- package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.placement.js +2 -1
- package/dist/data/ai/ChatWindow.placement.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +6 -3
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +6 -3
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.cjs +2 -1
- package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.js +2 -1
- package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +9 -6
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js +9 -6
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +3 -3
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +2 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +3 -3
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +4 -3
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.js +4 -3
- package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -1
- package/dist/data/ai/PromptCatalog/types.d.ts +1 -0
- package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
- package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.js +2 -2
- package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +2 -2
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.js +2 -2
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/index.d.ts +2 -0
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
- package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.js +126 -0
- package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.js +1 -0
- package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
- package/dist/data/charts/BarChart.cjs +194 -0
- package/dist/data/charts/BarChart.cjs.map +1 -0
- package/dist/data/charts/BarChart.d.ts +19 -0
- package/dist/data/charts/BarChart.d.ts.map +1 -0
- package/dist/data/charts/BarChart.js +194 -0
- package/dist/data/charts/BarChart.js.map +1 -0
- package/dist/data/charts/ChartLegend.cjs +54 -0
- package/dist/data/charts/ChartLegend.cjs.map +1 -0
- package/dist/data/charts/ChartLegend.d.ts +17 -0
- package/dist/data/charts/ChartLegend.d.ts.map +1 -0
- package/dist/data/charts/ChartLegend.js +54 -0
- package/dist/data/charts/ChartLegend.js.map +1 -0
- package/dist/data/charts/Sparkline.cjs +56 -0
- package/dist/data/charts/Sparkline.cjs.map +1 -0
- package/dist/data/charts/Sparkline.d.ts +15 -0
- package/dist/data/charts/Sparkline.d.ts.map +1 -0
- package/dist/data/charts/Sparkline.js +56 -0
- package/dist/data/charts/Sparkline.js.map +1 -0
- package/dist/data/charts/StackedBarChart.cjs +241 -0
- package/dist/data/charts/StackedBarChart.cjs.map +1 -0
- package/dist/data/charts/StackedBarChart.d.ts +20 -0
- package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
- package/dist/data/charts/StackedBarChart.js +241 -0
- package/dist/data/charts/StackedBarChart.js.map +1 -0
- package/dist/data/charts/TrendChart.cjs +157 -0
- package/dist/data/charts/TrendChart.cjs.map +1 -0
- package/dist/data/charts/TrendChart.d.ts +20 -0
- package/dist/data/charts/TrendChart.d.ts.map +1 -0
- package/dist/data/charts/TrendChart.js +157 -0
- package/dist/data/charts/TrendChart.js.map +1 -0
- package/dist/data/charts/chart-marks.cjs +115 -0
- package/dist/data/charts/chart-marks.cjs.map +1 -0
- package/dist/data/charts/chart-marks.d.ts +39 -0
- package/dist/data/charts/chart-marks.d.ts.map +1 -0
- package/dist/data/charts/chart-marks.js +112 -0
- package/dist/data/charts/chart-marks.js.map +1 -0
- package/dist/data/charts/chart-palette.cjs +74 -0
- package/dist/data/charts/chart-palette.cjs.map +1 -0
- package/dist/data/charts/chart-palette.d.ts +58 -0
- package/dist/data/charts/chart-palette.d.ts.map +1 -0
- package/dist/data/charts/chart-palette.js +72 -0
- package/dist/data/charts/chart-palette.js.map +1 -0
- package/dist/data/charts/chart-scale.cjs +115 -0
- package/dist/data/charts/chart-scale.cjs.map +1 -0
- package/dist/data/charts/chart-scale.d.ts +41 -0
- package/dist/data/charts/chart-scale.d.ts.map +1 -0
- package/dist/data/charts/chart-scale.js +104 -0
- package/dist/data/charts/chart-scale.js.map +1 -0
- package/dist/data/charts/chart.test-utils.d.ts +7 -0
- package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
- package/dist/data/charts/index.d.ts +7 -0
- package/dist/data/charts/index.d.ts.map +1 -0
- package/dist/data/chat/MessageActions.cjs +1 -1
- package/dist/data/chat/MessageActions.cjs.map +1 -1
- package/dist/data/chat/MessageActions.js +1 -1
- package/dist/data/chat/MessageActions.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
- package/dist/data/diagnostics/ProblemActions.cjs +37 -0
- package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemActions.js +37 -0
- package/dist/data/diagnostics/ProblemActions.js.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
- package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.js +33 -0
- package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
- package/dist/data/diagnostics/ProblemRow.cjs +62 -0
- package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
- package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemRow.js +62 -0
- package/dist/data/diagnostics/ProblemRow.js.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +1 -1
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
- package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.js +14 -0
- package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.js +16 -0
- package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
- package/dist/data/git/GitChangeList.cjs +9 -6
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -0
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +9 -6
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
- package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.js +1 -0
- package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
- package/dist/data/lint/LintDetail.cjs +230 -189
- package/dist/data/lint/LintDetail.cjs.map +1 -1
- package/dist/data/lint/LintDetail.d.ts +25 -3
- package/dist/data/lint/LintDetail.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.js +231 -192
- package/dist/data/lint/LintDetail.js.map +1 -1
- package/dist/data/lint/LintFilterBar.cjs +78 -83
- package/dist/data/lint/LintFilterBar.cjs.map +1 -1
- package/dist/data/lint/LintFilterBar.d.ts +23 -6
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
- package/dist/data/lint/LintFilterBar.js +78 -85
- package/dist/data/lint/LintFilterBar.js.map +1 -1
- package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
- package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.js +58 -0
- package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +59 -14
- package/dist/data/lint/LintResults.cjs.map +1 -1
- package/dist/data/lint/LintResults.d.ts +25 -1
- package/dist/data/lint/LintResults.d.ts.map +1 -1
- package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
- package/dist/data/lint/LintResults.js +60 -15
- package/dist/data/lint/LintResults.js.map +1 -1
- package/dist/data/lint/LintTable.cjs +156 -0
- package/dist/data/lint/LintTable.cjs.map +1 -0
- package/dist/data/lint/LintTable.d.ts +13 -0
- package/dist/data/lint/LintTable.d.ts.map +1 -0
- package/dist/data/lint/LintTable.js +156 -0
- package/dist/data/lint/LintTable.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +42 -19
- package/dist/data/lint/LintTreeNode.cjs.map +1 -1
- package/dist/data/lint/LintTreeNode.d.ts +7 -2
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
- package/dist/data/lint/LintTreeNode.js +44 -21
- package/dist/data/lint/LintTreeNode.js.map +1 -1
- package/dist/data/lint/ViolationSnippet.cjs +113 -0
- package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
- package/dist/data/lint/ViolationSnippet.d.ts +20 -0
- package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
- package/dist/data/lint/ViolationSnippet.js +112 -0
- package/dist/data/lint/ViolationSnippet.js.map +1 -0
- package/dist/data/lint/actions.cjs +44 -16
- package/dist/data/lint/actions.cjs.map +1 -1
- package/dist/data/lint/actions.d.ts +7 -3
- package/dist/data/lint/actions.d.ts.map +1 -1
- package/dist/data/lint/actions.js +44 -16
- package/dist/data/lint/actions.js.map +1 -1
- package/dist/data/lint/grouping.cjs +105 -8
- package/dist/data/lint/grouping.cjs.map +1 -1
- package/dist/data/lint/grouping.d.ts +21 -1
- package/dist/data/lint/grouping.d.ts.map +1 -1
- package/dist/data/lint/grouping.js +105 -10
- package/dist/data/lint/grouping.js.map +1 -1
- package/dist/data/lint/ignore-menu-items.cjs +18 -0
- package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
- package/dist/data/lint/ignore-menu-items.d.ts +6 -0
- package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
- package/dist/data/lint/ignore-menu-items.js +17 -0
- package/dist/data/lint/ignore-menu-items.js.map +1 -0
- package/dist/data/lint/index.d.ts +7 -5
- package/dist/data/lint/index.d.ts.map +1 -1
- package/dist/data/lint/stats.cjs +19 -4
- package/dist/data/lint/stats.cjs.map +1 -1
- package/dist/data/lint/stats.d.ts +13 -3
- package/dist/data/lint/stats.d.ts.map +1 -1
- package/dist/data/lint/stats.js +17 -5
- package/dist/data/lint/stats.js.map +1 -1
- package/dist/data/lint/types.cjs +8 -0
- package/dist/data/lint/types.cjs.map +1 -1
- package/dist/data/lint/types.d.ts +47 -0
- package/dist/data/lint/types.d.ts.map +1 -1
- package/dist/data/lint/types.js +8 -1
- package/dist/data/lint/types.js.map +1 -1
- package/dist/data/lint/violation-menu-items.cjs +31 -0
- package/dist/data/lint/violation-menu-items.cjs.map +1 -0
- package/dist/data/lint/violation-menu-items.d.ts +12 -0
- package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
- package/dist/data/lint/violation-menu-items.js +31 -0
- package/dist/data/lint/violation-menu-items.js.map +1 -0
- package/dist/data/markdown-source-blocks.cjs +38 -0
- package/dist/data/markdown-source-blocks.cjs.map +1 -0
- package/dist/data/markdown-source-blocks.d.ts +32 -0
- package/dist/data/markdown-source-blocks.d.ts.map +1 -0
- package/dist/data/markdown-source-blocks.js +35 -0
- package/dist/data/markdown-source-blocks.js.map +1 -0
- package/dist/data/test-runner/FilterFacet.cjs +52 -0
- package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
- package/dist/data/test-runner/FilterFacet.d.ts +13 -0
- package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
- package/dist/data/test-runner/FilterFacet.js +52 -0
- package/dist/data/test-runner/FilterFacet.js.map +1 -0
- package/dist/data/test-runner/MatrixMarks.cjs +19 -29
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +4 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +19 -29
- package/dist/data/test-runner/MatrixMarks.js.map +1 -1
- package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
- package/dist/data/test-runner/TestAttemptDetail.js +1 -1
- package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +11 -0
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFilterBar.cjs +3 -44
- package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
- package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
- package/dist/data/test-runner/TestFilterBar.js +3 -44
- package/dist/data/test-runner/TestFilterBar.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -1
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +7 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -1
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +3 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +2 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/timeseries-query.cjs +98 -2
- package/dist/data/timeseries-query.cjs.map +1 -1
- package/dist/data/timeseries-query.d.ts +31 -5
- package/dist/data/timeseries-query.d.ts.map +1 -1
- package/dist/data/timeseries-query.js +98 -3
- package/dist/data/timeseries-query.js.map +1 -1
- package/dist/data/timeseries-stream-provider.cjs +38 -0
- package/dist/data/timeseries-stream-provider.cjs.map +1 -0
- package/dist/data/timeseries-stream-provider.d.ts +26 -0
- package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
- package/dist/data/timeseries-stream-provider.js +38 -0
- package/dist/data/timeseries-stream-provider.js.map +1 -0
- package/dist/data/timeseries-stream.cjs +304 -0
- package/dist/data/timeseries-stream.cjs.map +1 -0
- package/dist/data/timeseries-stream.d.ts +81 -0
- package/dist/data/timeseries-stream.d.ts.map +1 -0
- package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
- package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
- package/dist/data/timeseries-stream.js +296 -0
- package/dist/data/timeseries-stream.js.map +1 -0
- package/dist/data/token-style.cjs +13 -0
- package/dist/data/token-style.cjs.map +1 -0
- package/dist/data/token-style.d.ts +4 -0
- package/dist/data/token-style.d.ts.map +1 -0
- package/dist/data/token-style.js +13 -0
- package/dist/data/token-style.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
- package/dist/data/traces/ProcessTraceDetail.js +1 -1
- package/dist/data/traces/index.d.ts +8 -1
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/otel/OperationList.cjs +64 -0
- package/dist/data/traces/otel/OperationList.cjs.map +1 -0
- package/dist/data/traces/otel/OperationList.d.ts +10 -0
- package/dist/data/traces/otel/OperationList.d.ts.map +1 -0
- package/dist/data/traces/otel/OperationList.js +64 -0
- package/dist/data/traces/otel/OperationList.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.cjs +781 -0
- package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.d.ts +7 -0
- package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.js +781 -0
- package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.cjs +145 -0
- package/dist/data/traces/otel/OtelTraceSearch.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.d.ts +16 -0
- package/dist/data/traces/otel/OtelTraceSearch.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.js +145 -0
- package/dist/data/traces/otel/OtelTraceSearch.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.cjs +47 -0
- package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.d.ts +12 -0
- package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.js +47 -0
- package/dist/data/traces/otel/OtelTraceTable.js.map +1 -0
- package/dist/data/traces/otel/QueryBar.cjs +158 -0
- package/dist/data/traces/otel/QueryBar.cjs.map +1 -0
- package/dist/data/traces/otel/QueryBar.d.ts +12 -0
- package/dist/data/traces/otel/QueryBar.d.ts.map +1 -0
- package/dist/data/traces/otel/QueryBar.js +158 -0
- package/dist/data/traces/otel/QueryBar.js.map +1 -0
- package/dist/data/traces/otel/SpanCards.cjs +264 -0
- package/dist/data/traces/otel/SpanCards.cjs.map +1 -0
- package/dist/data/traces/otel/SpanCards.d.ts +17 -0
- package/dist/data/traces/otel/SpanCards.d.ts.map +1 -0
- package/dist/data/traces/otel/SpanCards.js +261 -0
- package/dist/data/traces/otel/SpanCards.js.map +1 -0
- package/dist/data/traces/otel/SpanCategory.cjs +18 -0
- package/dist/data/traces/otel/SpanCategory.cjs.map +1 -0
- package/dist/data/traces/otel/SpanCategory.d.ts +7 -0
- package/dist/data/traces/otel/SpanCategory.d.ts.map +1 -0
- package/dist/data/traces/otel/SpanCategory.js +18 -0
- package/dist/data/traces/otel/SpanCategory.js.map +1 -0
- package/dist/data/traces/otel/TraceResults.cjs +195 -0
- package/dist/data/traces/otel/TraceResults.cjs.map +1 -0
- package/dist/data/traces/otel/TraceResults.d.ts +19 -0
- package/dist/data/traces/otel/TraceResults.d.ts.map +1 -0
- package/dist/data/traces/otel/TraceResults.js +193 -0
- package/dist/data/traces/otel/TraceResults.js.map +1 -0
- package/dist/data/traces/otel/api.cjs +36 -0
- package/dist/data/traces/otel/api.cjs.map +1 -0
- package/dist/data/traces/otel/api.d.ts +87 -0
- package/dist/data/traces/otel/api.d.ts.map +1 -0
- package/dist/data/traces/otel/api.js +33 -0
- package/dist/data/traces/otel/api.js.map +1 -0
- package/dist/data/traces/otel/fixtures.d.ts +4 -0
- package/dist/data/traces/otel/fixtures.d.ts.map +1 -0
- package/dist/data/traces/otel/metrics.cjs +7 -0
- package/dist/data/traces/otel/metrics.cjs.map +1 -0
- package/dist/data/traces/otel/metrics.d.ts +2 -0
- package/dist/data/traces/otel/metrics.d.ts.map +1 -0
- package/dist/data/traces/otel/metrics.js +7 -0
- package/dist/data/traces/otel/metrics.js.map +1 -0
- package/dist/data/traces/otel/model.cjs +167 -0
- package/dist/data/traces/otel/model.cjs.map +1 -0
- package/dist/data/traces/otel/model.d.ts +81 -0
- package/dist/data/traces/otel/model.d.ts.map +1 -0
- package/dist/data/traces/otel/model.js +154 -0
- package/dist/data/traces/otel/model.js.map +1 -0
- package/dist/data/traces/otel/query.cjs +90 -0
- package/dist/data/traces/otel/query.cjs.map +1 -0
- package/dist/data/traces/otel/query.d.ts +20 -0
- package/dist/data/traces/otel/query.d.ts.map +1 -0
- package/dist/data/traces/otel/query.js +86 -0
- package/dist/data/traces/otel/query.js.map +1 -0
- package/dist/data/traces/otel/result-model.cjs +25 -0
- package/dist/data/traces/otel/result-model.cjs.map +1 -0
- package/dist/data/traces/otel/result-model.d.ts +5 -0
- package/dist/data/traces/otel/result-model.d.ts.map +1 -0
- package/dist/data/traces/otel/result-model.js +24 -0
- package/dist/data/traces/otel/result-model.js.map +1 -0
- package/dist/data/traces/otel/source.cjs +11 -0
- package/dist/data/traces/otel/source.cjs.map +1 -0
- package/dist/data/traces/otel/source.d.ts +5 -0
- package/dist/data/traces/otel/source.d.ts.map +1 -0
- package/dist/data/traces/otel/source.js +10 -0
- package/dist/data/traces/otel/source.js.map +1 -0
- package/dist/data/traces/otel/span-traces.cjs +39 -0
- package/dist/data/traces/otel/span-traces.cjs.map +1 -0
- package/dist/data/traces/otel/span-traces.d.ts +3 -0
- package/dist/data/traces/otel/span-traces.d.ts.map +1 -0
- package/dist/data/traces/otel/span-traces.js +39 -0
- package/dist/data/traces/otel/span-traces.js.map +1 -0
- package/dist/data/use-data-table-virtual.d.ts +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data/workload-panel/MemoryStack.cjs +49 -0
- package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
- package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
- package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
- package/dist/data/workload-panel/MemoryStack.js +48 -0
- package/dist/data/workload-panel/MemoryStack.js.map +1 -0
- package/dist/data/workload-panel/Metrics.cjs +197 -0
- package/dist/data/workload-panel/Metrics.cjs.map +1 -0
- package/dist/data/workload-panel/Metrics.d.ts +11 -0
- package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
- package/dist/data/workload-panel/Metrics.js +196 -0
- package/dist/data/workload-panel/Metrics.js.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.js +66 -0
- package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
- package/dist/data/workload-panel/fixtures.d.ts +60 -0
- package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
- package/dist/data/workload-panel/model.cjs +137 -0
- package/dist/data/workload-panel/model.cjs.map +1 -0
- package/dist/data/workload-panel/model.d.ts +53 -0
- package/dist/data/workload-panel/model.d.ts.map +1 -0
- package/dist/data/workload-panel/model.js +133 -0
- package/dist/data/workload-panel/model.js.map +1 -0
- package/dist/data/workload-panel/types.d.ts +56 -0
- package/dist/data/workload-panel/types.d.ts.map +1 -0
- package/dist/data.cjs +68 -6
- package/dist/data.d.ts +9 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +32 -10
- package/dist/file-findings/AnnotatedCode.cjs +243 -0
- package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/AnnotatedCode.d.ts +30 -0
- package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/AnnotatedCode.js +243 -0
- package/dist/file-findings/AnnotatedCode.js.map +1 -0
- package/dist/file-findings/FileFindingsView.cjs +213 -0
- package/dist/file-findings/FileFindingsView.cjs.map +1 -0
- package/dist/file-findings/FileFindingsView.d.ts +35 -0
- package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
- package/dist/file-findings/FileFindingsView.js +213 -0
- package/dist/file-findings/FileFindingsView.js.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.js +22 -0
- package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
- package/dist/file-findings/adapters.cjs +155 -0
- package/dist/file-findings/adapters.cjs.map +1 -0
- package/dist/file-findings/adapters.d.ts +24 -0
- package/dist/file-findings/adapters.d.ts.map +1 -0
- package/dist/file-findings/adapters.js +153 -0
- package/dist/file-findings/adapters.js.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
- package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.js +97 -0
- package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
- package/dist/file-findings/file-review/FileReview.cjs +863 -0
- package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
- package/dist/file-findings/file-review/FileReview.d.ts +79 -0
- package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.js +863 -0
- package/dist/file-findings/file-review/FileReview.js.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.js +77 -0
- package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
- package/dist/file-findings/file-review/InlineThread.cjs +77 -0
- package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
- package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineThread.js +77 -0
- package/dist/file-findings/file-review/InlineThread.js.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
- package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.js +164 -0
- package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
- package/dist/file-findings/file-review/SourceView.cjs +179 -0
- package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
- package/dist/file-findings/file-review/SourceView.d.ts +29 -0
- package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
- package/dist/file-findings/file-review/SourceView.js +179 -0
- package/dist/file-findings/file-review/SourceView.js.map +1 -0
- package/dist/file-findings/file-review/blame.cjs +35 -0
- package/dist/file-findings/file-review/blame.cjs.map +1 -0
- package/dist/file-findings/file-review/blame.d.ts +28 -0
- package/dist/file-findings/file-review/blame.d.ts.map +1 -0
- package/dist/file-findings/file-review/blame.js +33 -0
- package/dist/file-findings/file-review/blame.js.map +1 -0
- package/dist/file-findings/file-review/geometry.cjs +101 -0
- package/dist/file-findings/file-review/geometry.cjs.map +1 -0
- package/dist/file-findings/file-review/geometry.d.ts +45 -0
- package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
- package/dist/file-findings/file-review/geometry.js +98 -0
- package/dist/file-findings/file-review/geometry.js.map +1 -0
- package/dist/file-findings/file-review/hooks.cjs +101 -0
- package/dist/file-findings/file-review/hooks.cjs.map +1 -0
- package/dist/file-findings/file-review/hooks.d.ts +22 -0
- package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
- package/dist/file-findings/file-review/hooks.js +99 -0
- package/dist/file-findings/file-review/hooks.js.map +1 -0
- package/dist/file-findings/file-review/marks.cjs +52 -0
- package/dist/file-findings/file-review/marks.cjs.map +1 -0
- package/dist/file-findings/file-review/marks.d.ts +23 -0
- package/dist/file-findings/file-review/marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/marks.js +47 -0
- package/dist/file-findings/file-review/marks.js.map +1 -0
- package/dist/file-findings/file-review/problem-filters.cjs +14 -0
- package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
- package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
- package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
- package/dist/file-findings/file-review/problem-filters.js +13 -0
- package/dist/file-findings/file-review/problem-filters.js.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
- package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.js +226 -0
- package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-anchor.cjs +104 -0
- package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
- package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-anchor.js +99 -0
- package/dist/file-findings/file-review/source-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-marks.cjs +71 -0
- package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
- package/dist/file-findings/file-review/source-marks.d.ts +27 -0
- package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-marks.js +68 -0
- package/dist/file-findings/file-review/source-marks.js.map +1 -0
- package/dist/file-findings/findings-comments.cjs +136 -0
- package/dist/file-findings/findings-comments.cjs.map +1 -0
- package/dist/file-findings/findings-comments.d.ts +28 -0
- package/dist/file-findings/findings-comments.d.ts.map +1 -0
- package/dist/file-findings/findings-comments.js +131 -0
- package/dist/file-findings/findings-comments.js.map +1 -0
- package/dist/file-findings/findings-languages.cjs +53 -0
- package/dist/file-findings/findings-languages.cjs.map +1 -0
- package/dist/file-findings/findings-languages.d.ts +11 -0
- package/dist/file-findings/findings-languages.d.ts.map +1 -0
- package/dist/file-findings/findings-languages.js +53 -0
- package/dist/file-findings/findings-languages.js.map +1 -0
- package/dist/file-findings/mdx-source.cjs +48 -0
- package/dist/file-findings/mdx-source.cjs.map +1 -0
- package/dist/file-findings/mdx-source.d.ts +7 -0
- package/dist/file-findings/mdx-source.d.ts.map +1 -0
- package/dist/file-findings/mdx-source.js +48 -0
- package/dist/file-findings/mdx-source.js.map +1 -0
- package/dist/file-findings/monaco-language.cjs +73 -0
- package/dist/file-findings/monaco-language.cjs.map +1 -0
- package/dist/file-findings/monaco-language.d.ts +11 -0
- package/dist/file-findings/monaco-language.d.ts.map +1 -0
- package/dist/file-findings/monaco-language.js +72 -0
- package/dist/file-findings/monaco-language.js.map +1 -0
- package/dist/file-findings/severity-counts.cjs +20 -0
- package/dist/file-findings/severity-counts.cjs.map +1 -0
- package/dist/file-findings/severity-counts.d.ts +5 -0
- package/dist/file-findings/severity-counts.d.ts.map +1 -0
- package/dist/file-findings/severity-counts.js +19 -0
- package/dist/file-findings/severity-counts.js.map +1 -0
- package/dist/file-findings/types.cjs +12 -0
- package/dist/file-findings/types.cjs.map +1 -0
- package/dist/file-findings/types.d.ts +43 -0
- package/dist/file-findings/types.d.ts.map +1 -0
- package/dist/file-findings/types.js +11 -0
- package/dist/file-findings/types.js.map +1 -0
- package/dist/file-findings.cjs +47 -0
- package/dist/file-findings.d.ts +15 -0
- package/dist/file-findings.d.ts.map +1 -0
- package/dist/file-findings.js +15 -0
- package/dist/hooks/event-hub.cjs +22 -8
- package/dist/hooks/event-hub.cjs.map +1 -1
- package/dist/hooks/event-hub.d.ts.map +1 -1
- package/dist/hooks/event-hub.js +22 -8
- package/dist/hooks/event-hub.js.map +1 -1
- package/dist/icons/components/UiBrowser.cjs +51 -0
- package/dist/icons/components/UiBrowser.cjs.map +1 -0
- package/dist/icons/components/UiBrowser.d.ts +15 -0
- package/dist/icons/components/UiBrowser.d.ts.map +1 -0
- package/dist/icons/components/UiBrowser.js +48 -0
- package/dist/icons/components/UiBrowser.js.map +1 -0
- package/dist/icons/components/UiCreditCard.cjs +51 -0
- package/dist/icons/components/UiCreditCard.cjs.map +1 -0
- package/dist/icons/components/UiCreditCard.d.ts +15 -0
- package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
- package/dist/icons/components/UiCreditCard.js +48 -0
- package/dist/icons/components/UiCreditCard.js.map +1 -0
- package/dist/icons/components/UiShoppingCart.cjs +51 -0
- package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
- package/dist/icons/components/UiShoppingCart.d.ts +15 -0
- package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
- package/dist/icons/components/UiShoppingCart.js +48 -0
- package/dist/icons/components/UiShoppingCart.js.map +1 -0
- package/dist/icons/index.d.ts +6 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +6 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +6 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +9 -0
- package/dist/icons.js +4 -1
- package/dist/index.cjs +86 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -12
- package/dist/layout/AppShell.cjs +37 -21
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +13 -2
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +37 -21
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +7 -6
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +7 -6
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +16 -6
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +12 -2
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +16 -6
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/layout/Workspace.cjs +37 -33
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +37 -33
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/layout/Workspace.regions.cjs +3 -3
- package/dist/layout/Workspace.regions.cjs.map +1 -1
- package/dist/layout/Workspace.regions.js +3 -3
- package/dist/layout/Workspace.regions.js.map +1 -1
- package/dist/lib/breakpoints.cjs +102 -0
- package/dist/lib/breakpoints.cjs.map +1 -0
- package/dist/lib/breakpoints.d.ts +36 -0
- package/dist/lib/breakpoints.d.ts.map +1 -0
- package/dist/lib/breakpoints.js +99 -0
- package/dist/lib/breakpoints.js.map +1 -0
- package/dist/lib/combobox.cjs +2 -1
- package/dist/lib/combobox.cjs.map +1 -1
- package/dist/lib/combobox.d.ts +1 -1
- package/dist/lib/combobox.d.ts.map +1 -1
- package/dist/lib/combobox.js +2 -1
- package/dist/lib/combobox.js.map +1 -1
- package/dist/lib/path-tree.cjs +21 -0
- package/dist/lib/path-tree.cjs.map +1 -1
- package/dist/lib/path-tree.d.ts +15 -0
- package/dist/lib/path-tree.d.ts.map +1 -1
- package/dist/lib/path-tree.js +21 -1
- package/dist/lib/path-tree.js.map +1 -1
- package/dist/overlay/Modal.cjs +2 -1
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +2 -1
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/dropdownMenuContext.d.ts +1 -1
- package/dist/profiles/editor/profileEditor.cjs +1 -1
- package/dist/profiles/editor/profileEditor.cjs.map +1 -1
- package/dist/profiles/editor/profileEditor.js +1 -1
- package/dist/profiles/editor/profileEditor.js.map +1 -1
- package/dist/profiles/editor/profileEditorSections.cjs +6 -2
- package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
- package/dist/profiles/editor/profileEditorSections.d.ts.map +1 -1
- package/dist/profiles/editor/profileEditorSections.js +6 -2
- package/dist/profiles/editor/profileEditorSections.js.map +1 -1
- package/dist/profiles/query/prometheusResults.cjs +24 -36
- package/dist/profiles/query/prometheusResults.cjs.map +1 -1
- package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
- package/dist/profiles/query/prometheusResults.js +24 -36
- package/dist/profiles/query/prometheusResults.js.map +1 -1
- package/dist/rpc/CommandForm.cjs +1 -1
- package/dist/rpc/CommandForm.cjs.map +1 -1
- package/dist/rpc/CommandForm.js +1 -1
- package/dist/rpc/CommandForm.js.map +1 -1
- package/dist/rpc/classify.cjs +1 -1
- package/dist/rpc/classify.cjs.map +1 -1
- package/dist/rpc/classify.d.ts.map +1 -1
- package/dist/rpc/classify.js +1 -1
- package/dist/rpc/classify.js.map +1 -1
- package/dist/rpc/useOperations.d.ts +24 -24
- package/dist/rpc.cjs +0 -2
- package/dist/rpc.d.ts +0 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +1 -2
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +6 -0
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -2
- package/package.json +9 -3
- package/schemas/json-schema-form.schema.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-utils.d.ts","sourceRoot":"","sources":["../../src/comments/comment-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"comment-utils.d.ts","sourceRoot":"","sources":["../../src/comments/comment-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -196,6 +196,8 @@ function buildThreadListHandlers(comments, config, cb) {
|
|
|
196
196
|
const handlers = {};
|
|
197
197
|
if (cb.onUpdateStatus) handlers.onUpdateStatus = cb.onUpdateStatus;
|
|
198
198
|
if (cb.onClose) handlers.onClose = cb.onClose;
|
|
199
|
+
if (cb.onAcknowledge) handlers.onAcknowledge = cb.onAcknowledge;
|
|
200
|
+
if (cb.onAssign) handlers.onAssign = cb.onAssign;
|
|
199
201
|
if (cb.onDelete) handlers.onDelete = cb.onDelete;
|
|
200
202
|
if (cb.onChecklistToggle) {
|
|
201
203
|
const toggle = cb.onChecklistToggle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-utils.js","names":[],"sources":["../../src/comments/comment-utils.ts"],"sourcesContent":["import type { BadgeTone } from \"../data/Badge\";\nimport {\n DEFAULT_CHECKLIST_CYCLE,\n type Comment,\n type CommentAnchor,\n type CommentAnchorMeta,\n type CommentAuthor,\n type CommentCallbacks,\n type CommentConfig,\n type CommentFacet,\n type CommentFacetOption,\n type CommentFilters,\n type CommentMention,\n type CommentMentionable,\n type CommentMentionKind,\n type CommentStatusConfig,\n type CommentTone,\n DOCUMENT_ANCHOR,\n} from \"./comment-types\";\n\n/** Human-readable name for an author, falling back to \"Unknown\". */\nexport function authorDisplayName(author: CommentAuthor | null): string {\n return author?.name?.trim() || \"Unknown\";\n}\n\n/** Maps a CommentTone onto the Badge component's tone vocabulary. */\nexport function toneToBadgeTone(tone: CommentTone | undefined): BadgeTone {\n switch (tone) {\n case \"success\":\n return \"success\";\n case \"danger\":\n return \"danger\";\n case \"warning\":\n return \"warning\";\n case \"info\":\n return \"info\";\n case \"neutral\":\n case \"default\":\n default:\n return \"neutral\";\n }\n}\n\n/** Looks up the status config for a stored status value. */\nexport function resolveStatusConfig(\n config: CommentConfig,\n value: string | undefined,\n): CommentStatusConfig | undefined {\n if (value == null) return undefined;\n return config.statuses.find((s) => s.value === value);\n}\n\n/** Looks up a facet option for a stored facet value. */\nexport function resolveFacetOption(\n facet: CommentFacet,\n value: string | undefined,\n): CommentFacetOption | undefined {\n if (value == null) return undefined;\n return facet.options.find((o) => o.value === value);\n}\n\n/** The default status value for new comments: first unresolved, else first. */\nexport function defaultStatusValue(config: CommentConfig): string | undefined {\n const unresolved = config.statuses.find((s) => s.unresolved);\n return (unresolved ?? config.statuses[0])?.value;\n}\n\n/** Whether a stored status counts as unresolved/open. */\nexport function isUnresolved(\n config: CommentConfig,\n status: string | undefined,\n): boolean {\n return resolveStatusConfig(config, status)?.unresolved ?? false;\n}\n\n/** Returns the root (non-reply) comments in input order. */\nexport function getRoots(comments: Comment[]): Comment[] {\n return comments.filter((c) => !c.parentId);\n}\n\n/** Indexes replies by their parent id. */\nexport function buildReplyMap(comments: Comment[]): Map<string, Comment[]> {\n const map = new Map<string, Comment[]>();\n for (const reply of comments) {\n if (!reply.parentId) continue;\n const items = map.get(reply.parentId) ?? [];\n items.push(reply);\n map.set(reply.parentId, items);\n }\n return map;\n}\n\n/**\n * Comments forming the threads rooted at `anchor`: matching roots plus their\n * descendants. Replies carry no anchor of their own — they belong to a thread,\n * not to a location — so selecting by anchor equality alone would drop them.\n */\nexport function selectAnchorThreads(\n comments: Comment[],\n anchor: CommentAnchor,\n): Comment[] {\n const roots = comments.filter(\n (c) => !c.parentId && (c.anchor ?? DOCUMENT_ANCHOR) === anchor,\n );\n const ids = new Set(roots.map((c) => String(c.id)));\n const descendants: Comment[] = [];\n // Fixed point, so a reply to a reply is kept when replies are not flattened.\n for (let grew = true; grew; ) {\n grew = false;\n for (const c of comments) {\n if (!c.parentId || ids.has(String(c.id))) continue;\n if (!ids.has(String(c.parentId))) continue;\n ids.add(String(c.id));\n descendants.push(c);\n grew = true;\n }\n }\n return [...roots, ...descendants];\n}\n\n/**\n * Threads whose root is not yet resolved. A root carrying no status has not\n * been acted on, so it counts as unresolved; replies follow their root.\n */\nexport function selectUnresolvedThreads(\n comments: Comment[],\n config: CommentConfig,\n): Comment[] {\n const keep = new Set(\n getRoots(comments)\n .filter(\n (root) => root.status == null || isUnresolved(config, root.status),\n )\n .map((root) => String(root.id)),\n );\n return comments.filter((c) => keep.has(String(c.parentId ?? c.id)));\n}\n\n/** Stable reply ordering: by creation time, then id. */\nexport function sortReplies(replies: Comment[]): Comment[] {\n return [...replies].sort((a, b) => {\n if (a.createdAt !== b.createdAt)\n return a.createdAt.localeCompare(b.createdAt);\n return String(a.id).localeCompare(String(b.id));\n });\n}\n\n/** Groups root comments by the value of a facet key (missing → \"\"). */\nexport function groupByFacet(\n comments: Comment[],\n facetKey: string,\n): Map<string, Comment[]> {\n const map = new Map<string, Comment[]>();\n for (const root of getRoots(comments)) {\n const key = root.facets?.[facetKey] ?? \"\";\n const items = map.get(key) ?? [];\n items.push(root);\n map.set(key, items);\n }\n return map;\n}\n\n/** Per-anchor comment counts derived from the list (document-level → DOCUMENT_ANCHOR). */\nexport function deriveAnchorCounts(\n comments: Comment[],\n): Record<CommentAnchor, number> {\n const counts: Record<CommentAnchor, number> = {};\n for (const c of comments) {\n const key = c.anchor ?? DOCUMENT_ANCHOR;\n counts[key] = (counts[key] ?? 0) + 1;\n }\n return counts;\n}\n\n/** Per-anchor aggregate metadata (count, distinct authors, latest status). */\nexport function deriveAnchorMeta(\n comments: Comment[],\n): Record<CommentAnchor, CommentAnchorMeta> {\n const grouped: Record<CommentAnchor, Comment[]> = {};\n for (const c of comments) {\n const key = c.anchor ?? DOCUMENT_ANCHOR;\n (grouped[key] ??= []).push(c);\n }\n const meta: Record<CommentAnchor, CommentAnchorMeta> = {};\n for (const [anchor, items] of Object.entries(grouped)) {\n const authors = [\n ...new Set(\n items.map((c) => c.author?.name).filter((n): n is string => !!n),\n ),\n ];\n const latest = items.reduce((a, b) =>\n (a.updatedAt ?? a.createdAt) > (b.updatedAt ?? b.createdAt) ? a : b,\n );\n meta[anchor] = {\n count: items.length,\n authors,\n ...(latest.status != null ? { latestStatus: latest.status } : {}),\n };\n }\n return meta;\n}\n\n/** Sums counts for an anchor and its descendants under a separator-delimited prefix. */\nexport function commentCountForPrefix(\n counts: Record<string, number>,\n prefix: string,\n separator = \".\",\n): number {\n let total = 0;\n for (const [key, count] of Object.entries(counts)) {\n if (key === prefix || key.startsWith(prefix + separator)) total += count;\n }\n return total;\n}\n\n/** Advances a checklist status to the next in the cycle (wrapping). */\nexport function nextChecklistStatus(\n current: string,\n cycle = DEFAULT_CHECKLIST_CYCLE,\n): string {\n const idx = cycle.indexOf(current);\n if (idx === -1) return cycle[0] ?? current;\n return cycle[(idx + 1) % cycle.length] ?? current;\n}\n\n/** Strips inline markdown punctuation and truncates to a plain preview. */\nexport function truncatePlain(body: string, max = 80): string {\n const plain = body.replace(/[#*_`~>[\\]()!]/g, \"\").trim();\n return plain.length > max ? `${plain.slice(0, max)}…` : plain;\n}\n\nfunction authorKindOf(comment: Comment): CommentMentionKind {\n return comment.author?.kind ?? \"user\";\n}\n\n/**\n * Filters a comment list by status / facets / author kind while keeping threads\n * intact: a reply survives iff its root survives. An empty status set or empty\n * per-facet set means \"no constraint\" for that axis.\n */\nexport function applyCommentFilters(\n comments: Comment[],\n filters: CommentFilters,\n config: CommentConfig,\n): Comment[] {\n const facetKeys = (config.facets ?? []).map((f) => f.key);\n const passingRootIds = new Set<string>();\n\n for (const root of getRoots(comments)) {\n if (\n filters.statuses.size > 0 &&\n (root.status == null || !filters.statuses.has(root.status))\n ) {\n continue;\n }\n if (\n filters.authorKind &&\n filters.authorKind !== \"all\" &&\n authorKindOf(root) !== filters.authorKind\n ) {\n continue;\n }\n const facetsPass = facetKeys.every((key) => {\n const selected = filters.facets[key];\n if (!selected || selected.size === 0) return true;\n const value = root.facets?.[key];\n return value != null && selected.has(value);\n });\n if (!facetsPass) continue;\n passingRootIds.add(root.id);\n }\n\n return comments.filter((c) =>\n c.parentId ? passingRootIds.has(c.parentId) : passingRootIds.has(c.id),\n );\n}\n\n/** True when any filter axis constrains the result. */\nexport function hasActiveFilters(filters: CommentFilters): boolean {\n if (filters.statuses.size > 0) return true;\n if (filters.authorKind && filters.authorKind !== \"all\") return true;\n return Object.values(filters.facets).some((set) => set.size > 0);\n}\n\n/** An empty filter state. */\nexport function emptyCommentFilters(): CommentFilters {\n return { statuses: new Set(), facets: {}, authorKind: \"all\" };\n}\n\n/** Finds mentionables whose `@name` token appears in a body (case-insensitive). */\nexport function matchMentionsInBody(\n body: string,\n mentionables: CommentMentionable[],\n): CommentMention[] {\n const lower = body.toLowerCase();\n return mentionables\n .filter((m) => lower.includes(`@${m.name.toLowerCase()}`))\n .map((m) => ({ id: m.id, name: m.name, kind: m.kind }));\n}\n\n/** Per-id handlers consumed by CommentThreadList. */\nexport type ThreadListHandlers = {\n onUpdateStatus?: (id: string, status: string) => void | Promise<void>;\n onClose?: (id: string) => void | Promise<void>;\n onChecklistToggle?: (id: string, index: number) => void;\n onDelete?: (id: string) => void;\n onReply?: (parent: Comment, body: string) => void | Promise<void>;\n};\n\n/**\n * Adapts high-level {@link CommentCallbacks} into the id-keyed handlers a\n * {@link CommentThreadList} consumes: resolves the next checklist status from the\n * cycle and extracts mentions from a reply body. Shared by `CommentThread` and\n * `CommentSidePanel` so the adaptation lives in one place.\n */\nexport function buildThreadListHandlers(\n comments: Comment[],\n config: CommentConfig,\n cb: CommentCallbacks,\n): ThreadListHandlers {\n const handlers: ThreadListHandlers = {};\n if (cb.onUpdateStatus) handlers.onUpdateStatus = cb.onUpdateStatus;\n if (cb.onClose) handlers.onClose = cb.onClose;\n if (cb.onDelete) handlers.onDelete = cb.onDelete;\n if (cb.onChecklistToggle) {\n const toggle = cb.onChecklistToggle;\n handlers.onChecklistToggle = (id, index) => {\n const item = comments.find((c) => c.id === id)?.checklist?.[index];\n if (!item) return;\n void toggle(\n id,\n index,\n nextChecklistStatus(item.status, config.checklistStatusCycle),\n );\n };\n }\n if (cb.onReply) {\n const reply = cb.onReply;\n const onMention = cb.onMention;\n handlers.onReply = async (parent, body) => {\n const mentions = matchMentionsInBody(body, config.mentionables ?? []);\n await reply({\n parentId: parent.id,\n body,\n anchor: parent.anchor ?? null,\n ...(mentions.length > 0 ? { mentions } : {}),\n });\n for (const mention of mentions) onMention?.(mention, { body });\n };\n }\n return handlers;\n}\n"],"mappings":";;;AAqBA,SAAgB,kBAAkB,QAAsC;CACtE,OAAO,QAAQ,MAAM,KAAK,KAAK;AACjC;;AAGA,SAAgB,gBAAgB,MAA0C;CACxE,QAAQ,MAAR;EACE,KAAK,WACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,QACH,OAAO;EAGT,SACE,OAAO;CACX;AACF;;AAGA,SAAgB,oBACd,QACA,OACiC;CACjC,IAAI,SAAS,MAAM,OAAO,KAAA;CAC1B,OAAO,OAAO,SAAS,MAAM,MAAM,EAAE,UAAU,KAAK;AACtD;;AAGA,SAAgB,mBACd,OACA,OACgC;CAChC,IAAI,SAAS,MAAM,OAAO,KAAA;CAC1B,OAAO,MAAM,QAAQ,MAAM,MAAM,EAAE,UAAU,KAAK;AACpD;;AAGA,SAAgB,mBAAmB,QAA2C;CAE5E,QADmB,OAAO,SAAS,MAAM,MAAM,EAAE,UACzC,KAAc,OAAO,SAAS,GAAA,EAAK;AAC7C;;AAGA,SAAgB,aACd,QACA,QACS;CACT,OAAO,oBAAoB,QAAQ,MAAM,CAAC,EAAE,cAAc;AAC5D;;AAGA,SAAgB,SAAS,UAAgC;CACvD,OAAO,SAAS,QAAQ,MAAM,CAAC,EAAE,QAAQ;AAC3C;;AAGA,SAAgB,cAAc,UAA6C;CACzE,MAAM,sBAAM,IAAI,IAAuB;CACvC,KAAK,MAAM,SAAS,UAAU;EAC5B,IAAI,CAAC,MAAM,UAAU;EACrB,MAAM,QAAQ,IAAI,IAAI,MAAM,QAAQ,KAAK,CAAC;EAC1C,MAAM,KAAK,KAAK;EAChB,IAAI,IAAI,MAAM,UAAU,KAAK;CAC/B;CACA,OAAO;AACT;;;;;;AAOA,SAAgB,oBACd,UACA,QACW;CACX,MAAM,QAAQ,SAAS,QACpB,MAAM,CAAC,EAAE,aAAa,EAAE,UAAA,oBAA+B,MAC1D;CACA,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,MAAM,OAAO,EAAE,EAAE,CAAC,CAAC;CAClD,MAAM,cAAyB,CAAC;CAEhC,KAAK,IAAI,OAAO,MAAM,OAAQ;EAC5B,OAAO;EACP,KAAK,MAAM,KAAK,UAAU;GACxB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,OAAO,EAAE,EAAE,CAAC,GAAG;GAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,QAAQ,CAAC,GAAG;GAClC,IAAI,IAAI,OAAO,EAAE,EAAE,CAAC;GACpB,YAAY,KAAK,CAAC;GAClB,OAAO;EACT;CACF;CACA,OAAO,CAAC,GAAG,OAAO,GAAG,WAAW;AAClC;;;;;AAMA,SAAgB,wBACd,UACA,QACW;CACX,MAAM,OAAO,IAAI,IACf,SAAS,QAAQ,CAAC,CACf,QACE,SAAS,KAAK,UAAU,QAAQ,aAAa,QAAQ,KAAK,MAAM,CACnE,CAAC,CACA,KAAK,SAAS,OAAO,KAAK,EAAE,CAAC,CAClC;CACA,OAAO,SAAS,QAAQ,MAAM,KAAK,IAAI,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;AACpE;;AAGA,SAAgB,YAAY,SAA+B;CACzD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM;EACjC,IAAI,EAAE,cAAc,EAAE,WACpB,OAAO,EAAE,UAAU,cAAc,EAAE,SAAS;EAC9C,OAAO,OAAO,EAAE,EAAE,CAAC,CAAC,cAAc,OAAO,EAAE,EAAE,CAAC;CAChD,CAAC;AACH;;AAGA,SAAgB,aACd,UACA,UACwB;CACxB,MAAM,sBAAM,IAAI,IAAuB;CACvC,KAAK,MAAM,QAAQ,SAAS,QAAQ,GAAG;EACrC,MAAM,MAAM,KAAK,SAAS,aAAa;EACvC,MAAM,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC;EAC/B,MAAM,KAAK,IAAI;EACf,IAAI,IAAI,KAAK,KAAK;CACpB;CACA,OAAO;AACT;;AAGA,SAAgB,mBACd,UAC+B;CAC/B,MAAM,SAAwC,CAAC;CAC/C,KAAK,MAAM,KAAK,UAAU;EACxB,MAAM,MAAM,EAAE,UAAA;EACd,OAAO,QAAQ,OAAO,QAAQ,KAAK;CACrC;CACA,OAAO;AACT;;AAGA,SAAgB,iBACd,UAC0C;CAC1C,MAAM,UAA4C,CAAC;CACnD,KAAK,MAAM,KAAK,UAAU;EACxB,MAAM,MAAM,EAAE,UAAA;EACd,CAAC,QAAQ,SAAS,CAAC,EAAA,CAAG,KAAK,CAAC;CAC9B;CACA,MAAM,OAAiD,CAAC;CACxD,KAAK,MAAM,CAAC,QAAQ,UAAU,OAAO,QAAQ,OAAO,GAAG;EACrD,MAAM,UAAU,CACd,GAAG,IAAI,IACL,MAAM,KAAK,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,QAAQ,MAAmB,CAAC,CAAC,CAAC,CACjE,CACF;EACA,MAAM,SAAS,MAAM,QAAQ,GAAG,OAC7B,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,IAAI,CACpE;EACA,KAAK,UAAU;GACb,OAAO,MAAM;GACb;GACA,GAAI,OAAO,UAAU,OAAO,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;EACjE;CACF;CACA,OAAO;AACT;;AAGA,SAAgB,sBACd,QACA,QACA,YAAY,KACJ;CACR,IAAI,QAAQ;CACZ,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,GAC9C,IAAI,QAAQ,UAAU,IAAI,WAAW,SAAS,SAAS,GAAG,SAAS;CAErE,OAAO;AACT;;AAGA,SAAgB,oBACd,SACA,QAAQ,yBACA;CACR,MAAM,MAAM,MAAM,QAAQ,OAAO;CACjC,IAAI,QAAQ,IAAI,OAAO,MAAM,MAAM;CACnC,OAAO,OAAO,MAAM,KAAK,MAAM,WAAW;AAC5C;;AAGA,SAAgB,cAAc,MAAc,MAAM,IAAY;CAC5D,MAAM,QAAQ,KAAK,QAAQ,mBAAmB,EAAE,CAAC,CAAC,KAAK;CACvD,OAAO,MAAM,SAAS,MAAM,GAAG,MAAM,MAAM,GAAG,GAAG,EAAE,KAAK;AAC1D;AAEA,SAAS,aAAa,SAAsC;CAC1D,OAAO,QAAQ,QAAQ,QAAQ;AACjC;;;;;;AAOA,SAAgB,oBACd,UACA,SACA,QACW;CACX,MAAM,aAAa,OAAO,UAAU,CAAC,EAAA,CAAG,KAAK,MAAM,EAAE,GAAG;CACxD,MAAM,iCAAiB,IAAI,IAAY;CAEvC,KAAK,MAAM,QAAQ,SAAS,QAAQ,GAAG;EACrC,IACE,QAAQ,SAAS,OAAO,MACvB,KAAK,UAAU,QAAQ,CAAC,QAAQ,SAAS,IAAI,KAAK,MAAM,IAEzD;EAEF,IACE,QAAQ,cACR,QAAQ,eAAe,SACvB,aAAa,IAAI,MAAM,QAAQ,YAE/B;EAQF,IAAI,CANe,UAAU,OAAO,QAAQ;GAC1C,MAAM,WAAW,QAAQ,OAAO;GAChC,IAAI,CAAC,YAAY,SAAS,SAAS,GAAG,OAAO;GAC7C,MAAM,QAAQ,KAAK,SAAS;GAC5B,OAAO,SAAS,QAAQ,SAAS,IAAI,KAAK;EAC5C,CACK,GAAY;EACjB,eAAe,IAAI,KAAK,EAAE;CAC5B;CAEA,OAAO,SAAS,QAAQ,MACtB,EAAE,WAAW,eAAe,IAAI,EAAE,QAAQ,IAAI,eAAe,IAAI,EAAE,EAAE,CACvE;AACF;;AAGA,SAAgB,iBAAiB,SAAkC;CACjE,IAAI,QAAQ,SAAS,OAAO,GAAG,OAAO;CACtC,IAAI,QAAQ,cAAc,QAAQ,eAAe,OAAO,OAAO;CAC/D,OAAO,OAAO,OAAO,QAAQ,MAAM,CAAC,CAAC,MAAM,QAAQ,IAAI,OAAO,CAAC;AACjE;;AAGA,SAAgB,sBAAsC;CACpD,OAAO;EAAE,0BAAU,IAAI,IAAI;EAAG,QAAQ,CAAC;EAAG,YAAY;CAAM;AAC9D;;AAGA,SAAgB,oBACd,MACA,cACkB;CAClB,MAAM,QAAQ,KAAK,YAAY;CAC/B,OAAO,aACJ,QAAQ,MAAM,MAAM,SAAS,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,CAAC,CACzD,KAAK,OAAO;EAAE,IAAI,EAAE;EAAI,MAAM,EAAE;EAAM,MAAM,EAAE;CAAK,EAAE;AAC1D;;;;;;;AAiBA,SAAgB,wBACd,UACA,QACA,IACoB;CACpB,MAAM,WAA+B,CAAC;CACtC,IAAI,GAAG,gBAAgB,SAAS,iBAAiB,GAAG;CACpD,IAAI,GAAG,SAAS,SAAS,UAAU,GAAG;CACtC,IAAI,GAAG,UAAU,SAAS,WAAW,GAAG;CACxC,IAAI,GAAG,mBAAmB;EACxB,MAAM,SAAS,GAAG;EAClB,SAAS,qBAAqB,IAAI,UAAU;GAC1C,MAAM,OAAO,SAAS,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY;GAC5D,IAAI,CAAC,MAAM;GACX,OACE,IACA,OACA,oBAAoB,KAAK,QAAQ,OAAO,oBAAoB,CAC9D;EACF;CACF;CACA,IAAI,GAAG,SAAS;EACd,MAAM,QAAQ,GAAG;EACjB,MAAM,YAAY,GAAG;EACrB,SAAS,UAAU,OAAO,QAAQ,SAAS;GACzC,MAAM,WAAW,oBAAoB,MAAM,OAAO,gBAAgB,CAAC,CAAC;GACpE,MAAM,MAAM;IACV,UAAU,OAAO;IACjB;IACA,QAAQ,OAAO,UAAU;IACzB,GAAI,SAAS,SAAS,IAAI,EAAE,SAAS,IAAI,CAAC;GAC5C,CAAC;GACD,KAAK,MAAM,WAAW,UAAU,YAAY,SAAS,EAAE,KAAK,CAAC;EAC/D;CACF;CACA,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"comment-utils.js","names":[],"sources":["../../src/comments/comment-utils.ts"],"sourcesContent":["import type { BadgeTone } from \"../data/Badge\";\nimport {\n DEFAULT_CHECKLIST_CYCLE,\n type Comment,\n type CommentAnchor,\n type CommentAnchorMeta,\n type CommentAuthor,\n type CommentCallbacks,\n type CommentConfig,\n type CommentFacet,\n type CommentFacetOption,\n type CommentFilters,\n type CommentMention,\n type CommentMentionable,\n type CommentMentionKind,\n type CommentStatusConfig,\n type CommentTone,\n DOCUMENT_ANCHOR,\n} from \"./comment-types\";\n\n/** Human-readable name for an author, falling back to \"Unknown\". */\nexport function authorDisplayName(author: CommentAuthor | null): string {\n return author?.name?.trim() || \"Unknown\";\n}\n\n/** Maps a CommentTone onto the Badge component's tone vocabulary. */\nexport function toneToBadgeTone(tone: CommentTone | undefined): BadgeTone {\n switch (tone) {\n case \"success\":\n return \"success\";\n case \"danger\":\n return \"danger\";\n case \"warning\":\n return \"warning\";\n case \"info\":\n return \"info\";\n case \"neutral\":\n case \"default\":\n default:\n return \"neutral\";\n }\n}\n\n/** Looks up the status config for a stored status value. */\nexport function resolveStatusConfig(\n config: CommentConfig,\n value: string | undefined,\n): CommentStatusConfig | undefined {\n if (value == null) return undefined;\n return config.statuses.find((s) => s.value === value);\n}\n\n/** Looks up a facet option for a stored facet value. */\nexport function resolveFacetOption(\n facet: CommentFacet,\n value: string | undefined,\n): CommentFacetOption | undefined {\n if (value == null) return undefined;\n return facet.options.find((o) => o.value === value);\n}\n\n/** The default status value for new comments: first unresolved, else first. */\nexport function defaultStatusValue(config: CommentConfig): string | undefined {\n const unresolved = config.statuses.find((s) => s.unresolved);\n return (unresolved ?? config.statuses[0])?.value;\n}\n\n/** Whether a stored status counts as unresolved/open. */\nexport function isUnresolved(\n config: CommentConfig,\n status: string | undefined,\n): boolean {\n return resolveStatusConfig(config, status)?.unresolved ?? false;\n}\n\n/** Returns the root (non-reply) comments in input order. */\nexport function getRoots(comments: Comment[]): Comment[] {\n return comments.filter((c) => !c.parentId);\n}\n\n/** Indexes replies by their parent id. */\nexport function buildReplyMap(comments: Comment[]): Map<string, Comment[]> {\n const map = new Map<string, Comment[]>();\n for (const reply of comments) {\n if (!reply.parentId) continue;\n const items = map.get(reply.parentId) ?? [];\n items.push(reply);\n map.set(reply.parentId, items);\n }\n return map;\n}\n\n/**\n * Comments forming the threads rooted at `anchor`: matching roots plus their\n * descendants. Replies carry no anchor of their own — they belong to a thread,\n * not to a location — so selecting by anchor equality alone would drop them.\n */\nexport function selectAnchorThreads(\n comments: Comment[],\n anchor: CommentAnchor,\n): Comment[] {\n const roots = comments.filter(\n (c) => !c.parentId && (c.anchor ?? DOCUMENT_ANCHOR) === anchor,\n );\n const ids = new Set(roots.map((c) => String(c.id)));\n const descendants: Comment[] = [];\n // Fixed point, so a reply to a reply is kept when replies are not flattened.\n for (let grew = true; grew; ) {\n grew = false;\n for (const c of comments) {\n if (!c.parentId || ids.has(String(c.id))) continue;\n if (!ids.has(String(c.parentId))) continue;\n ids.add(String(c.id));\n descendants.push(c);\n grew = true;\n }\n }\n return [...roots, ...descendants];\n}\n\n/**\n * Threads whose root is not yet resolved. A root carrying no status has not\n * been acted on, so it counts as unresolved; replies follow their root.\n */\nexport function selectUnresolvedThreads(\n comments: Comment[],\n config: CommentConfig,\n): Comment[] {\n const keep = new Set(\n getRoots(comments)\n .filter(\n (root) => root.status == null || isUnresolved(config, root.status),\n )\n .map((root) => String(root.id)),\n );\n return comments.filter((c) => keep.has(String(c.parentId ?? c.id)));\n}\n\n/** Stable reply ordering: by creation time, then id. */\nexport function sortReplies(replies: Comment[]): Comment[] {\n return [...replies].sort((a, b) => {\n if (a.createdAt !== b.createdAt)\n return a.createdAt.localeCompare(b.createdAt);\n return String(a.id).localeCompare(String(b.id));\n });\n}\n\n/** Groups root comments by the value of a facet key (missing → \"\"). */\nexport function groupByFacet(\n comments: Comment[],\n facetKey: string,\n): Map<string, Comment[]> {\n const map = new Map<string, Comment[]>();\n for (const root of getRoots(comments)) {\n const key = root.facets?.[facetKey] ?? \"\";\n const items = map.get(key) ?? [];\n items.push(root);\n map.set(key, items);\n }\n return map;\n}\n\n/** Per-anchor comment counts derived from the list (document-level → DOCUMENT_ANCHOR). */\nexport function deriveAnchorCounts(\n comments: Comment[],\n): Record<CommentAnchor, number> {\n const counts: Record<CommentAnchor, number> = {};\n for (const c of comments) {\n const key = c.anchor ?? DOCUMENT_ANCHOR;\n counts[key] = (counts[key] ?? 0) + 1;\n }\n return counts;\n}\n\n/** Per-anchor aggregate metadata (count, distinct authors, latest status). */\nexport function deriveAnchorMeta(\n comments: Comment[],\n): Record<CommentAnchor, CommentAnchorMeta> {\n const grouped: Record<CommentAnchor, Comment[]> = {};\n for (const c of comments) {\n const key = c.anchor ?? DOCUMENT_ANCHOR;\n (grouped[key] ??= []).push(c);\n }\n const meta: Record<CommentAnchor, CommentAnchorMeta> = {};\n for (const [anchor, items] of Object.entries(grouped)) {\n const authors = [\n ...new Set(\n items.map((c) => c.author?.name).filter((n): n is string => !!n),\n ),\n ];\n const latest = items.reduce((a, b) =>\n (a.updatedAt ?? a.createdAt) > (b.updatedAt ?? b.createdAt) ? a : b,\n );\n meta[anchor] = {\n count: items.length,\n authors,\n ...(latest.status != null ? { latestStatus: latest.status } : {}),\n };\n }\n return meta;\n}\n\n/** Sums counts for an anchor and its descendants under a separator-delimited prefix. */\nexport function commentCountForPrefix(\n counts: Record<string, number>,\n prefix: string,\n separator = \".\",\n): number {\n let total = 0;\n for (const [key, count] of Object.entries(counts)) {\n if (key === prefix || key.startsWith(prefix + separator)) total += count;\n }\n return total;\n}\n\n/** Advances a checklist status to the next in the cycle (wrapping). */\nexport function nextChecklistStatus(\n current: string,\n cycle = DEFAULT_CHECKLIST_CYCLE,\n): string {\n const idx = cycle.indexOf(current);\n if (idx === -1) return cycle[0] ?? current;\n return cycle[(idx + 1) % cycle.length] ?? current;\n}\n\n/** Strips inline markdown punctuation and truncates to a plain preview. */\nexport function truncatePlain(body: string, max = 80): string {\n const plain = body.replace(/[#*_`~>[\\]()!]/g, \"\").trim();\n return plain.length > max ? `${plain.slice(0, max)}…` : plain;\n}\n\nfunction authorKindOf(comment: Comment): CommentMentionKind {\n return comment.author?.kind ?? \"user\";\n}\n\n/**\n * Filters a comment list by status / facets / author kind while keeping threads\n * intact: a reply survives iff its root survives. An empty status set or empty\n * per-facet set means \"no constraint\" for that axis.\n */\nexport function applyCommentFilters(\n comments: Comment[],\n filters: CommentFilters,\n config: CommentConfig,\n): Comment[] {\n const facetKeys = (config.facets ?? []).map((f) => f.key);\n const passingRootIds = new Set<string>();\n\n for (const root of getRoots(comments)) {\n if (\n filters.statuses.size > 0 &&\n (root.status == null || !filters.statuses.has(root.status))\n ) {\n continue;\n }\n if (\n filters.authorKind &&\n filters.authorKind !== \"all\" &&\n authorKindOf(root) !== filters.authorKind\n ) {\n continue;\n }\n const facetsPass = facetKeys.every((key) => {\n const selected = filters.facets[key];\n if (!selected || selected.size === 0) return true;\n const value = root.facets?.[key];\n return value != null && selected.has(value);\n });\n if (!facetsPass) continue;\n passingRootIds.add(root.id);\n }\n\n return comments.filter((c) =>\n c.parentId ? passingRootIds.has(c.parentId) : passingRootIds.has(c.id),\n );\n}\n\n/** True when any filter axis constrains the result. */\nexport function hasActiveFilters(filters: CommentFilters): boolean {\n if (filters.statuses.size > 0) return true;\n if (filters.authorKind && filters.authorKind !== \"all\") return true;\n return Object.values(filters.facets).some((set) => set.size > 0);\n}\n\n/** An empty filter state. */\nexport function emptyCommentFilters(): CommentFilters {\n return { statuses: new Set(), facets: {}, authorKind: \"all\" };\n}\n\n/** Finds mentionables whose `@name` token appears in a body (case-insensitive). */\nexport function matchMentionsInBody(\n body: string,\n mentionables: CommentMentionable[],\n): CommentMention[] {\n const lower = body.toLowerCase();\n return mentionables\n .filter((m) => lower.includes(`@${m.name.toLowerCase()}`))\n .map((m) => ({ id: m.id, name: m.name, kind: m.kind }));\n}\n\n/** Per-id handlers consumed by CommentThreadList. */\nexport type ThreadListHandlers = {\n onUpdateStatus?: (id: string, status: string) => void | Promise<void>;\n onClose?: (id: string) => void | Promise<void>;\n onAcknowledge?: (id: string) => void | Promise<void>;\n onAssign?: (\n id: string,\n assignee: CommentAuthor | null,\n ) => void | Promise<void>;\n onChecklistToggle?: (id: string, index: number) => void;\n onDelete?: (id: string) => void;\n onReply?: (parent: Comment, body: string) => void | Promise<void>;\n};\n\n/**\n * Adapts high-level {@link CommentCallbacks} into the id-keyed handlers a\n * {@link CommentThreadList} consumes: resolves the next checklist status from the\n * cycle and extracts mentions from a reply body. Shared by `CommentThread` and\n * `CommentSidePanel` so the adaptation lives in one place.\n */\nexport function buildThreadListHandlers(\n comments: Comment[],\n config: CommentConfig,\n cb: CommentCallbacks,\n): ThreadListHandlers {\n const handlers: ThreadListHandlers = {};\n if (cb.onUpdateStatus) handlers.onUpdateStatus = cb.onUpdateStatus;\n if (cb.onClose) handlers.onClose = cb.onClose;\n if (cb.onAcknowledge) handlers.onAcknowledge = cb.onAcknowledge;\n if (cb.onAssign) handlers.onAssign = cb.onAssign;\n if (cb.onDelete) handlers.onDelete = cb.onDelete;\n if (cb.onChecklistToggle) {\n const toggle = cb.onChecklistToggle;\n handlers.onChecklistToggle = (id, index) => {\n const item = comments.find((c) => c.id === id)?.checklist?.[index];\n if (!item) return;\n void toggle(\n id,\n index,\n nextChecklistStatus(item.status, config.checklistStatusCycle),\n );\n };\n }\n if (cb.onReply) {\n const reply = cb.onReply;\n const onMention = cb.onMention;\n handlers.onReply = async (parent, body) => {\n const mentions = matchMentionsInBody(body, config.mentionables ?? []);\n await reply({\n parentId: parent.id,\n body,\n anchor: parent.anchor ?? null,\n ...(mentions.length > 0 ? { mentions } : {}),\n });\n for (const mention of mentions) onMention?.(mention, { body });\n };\n }\n return handlers;\n}\n"],"mappings":"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"}
|
package/dist/comments.cjs
CHANGED
|
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_comment_types = require("./comments/comment-types.cjs");
|
|
3
3
|
const require_comment_utils = require("./comments/comment-utils.cjs");
|
|
4
4
|
const require_comment_stage = require("./lib/comment-stage.cjs");
|
|
5
|
+
const require_comment_assign = require("./comments/comment-assign.cjs");
|
|
5
6
|
const require_CommentMarkdown = require("./comments/CommentMarkdown.cjs");
|
|
6
7
|
const require_CommentAuthor = require("./comments/CommentAuthor.cjs");
|
|
7
8
|
const require_MentionTextarea = require("./comments/MentionTextarea.cjs");
|
|
@@ -31,6 +32,8 @@ exports.DOCUMENT_ANCHOR = require_comment_types.DOCUMENT_ANCHOR;
|
|
|
31
32
|
exports.GroupedComments = require_GroupedComments.GroupedComments;
|
|
32
33
|
exports.MentionTextarea = require_MentionTextarea.MentionTextarea;
|
|
33
34
|
exports.applyCommentFilters = require_comment_utils.applyCommentFilters;
|
|
35
|
+
exports.assignTargetItems = require_comment_assign.assignTargetItems;
|
|
36
|
+
exports.assignmentMenuItems = require_comment_assign.assignmentMenuItems;
|
|
34
37
|
exports.authorDisplayName = require_comment_utils.authorDisplayName;
|
|
35
38
|
exports.buildReplyMap = require_comment_utils.buildReplyMap;
|
|
36
39
|
exports.buildThreadListHandlers = require_comment_utils.buildThreadListHandlers;
|
package/dist/comments.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './comments/comment-types.js';
|
|
2
2
|
export * from './comments/comment-utils.js';
|
|
3
|
+
export { assignTargetItems, assignmentMenuItems, type CommentActionRunner, type CommentAssignmentOptions, } from './comments/comment-assign.js';
|
|
3
4
|
export { resolveCommentStage, selectCommentThreadsByStage, statusForCommentStage, } from './lib/comment-stage.js';
|
|
4
5
|
export { CommentMarkdown, type CommentMarkdownProps, } from './comments/CommentMarkdown.js';
|
|
5
6
|
export { CommentAuthorAvatar, type CommentAuthorAvatarProps, } from './comments/CommentAuthor.js';
|
package/dist/comments.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../src/comments.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,EAC/B,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../src/comments.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,EAC/B,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC"}
|
package/dist/comments.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_CHECKLIST_CYCLE, DEFAULT_COMMENT_STATUSES, DOCUMENT_ANCHOR } from "./comments/comment-types.js";
|
|
2
2
|
import { applyCommentFilters, authorDisplayName, buildReplyMap, buildThreadListHandlers, commentCountForPrefix, defaultStatusValue, deriveAnchorCounts, deriveAnchorMeta, emptyCommentFilters, getRoots, groupByFacet, hasActiveFilters, isUnresolved, matchMentionsInBody, nextChecklistStatus, resolveFacetOption, resolveStatusConfig, selectAnchorThreads, selectUnresolvedThreads, sortReplies, toneToBadgeTone, truncatePlain } from "./comments/comment-utils.js";
|
|
3
3
|
import { resolveCommentStage, selectCommentThreadsByStage, statusForCommentStage } from "./lib/comment-stage.js";
|
|
4
|
+
import { assignTargetItems, assignmentMenuItems } from "./comments/comment-assign.js";
|
|
4
5
|
import { CommentMarkdown } from "./comments/CommentMarkdown.js";
|
|
5
6
|
import { CommentAuthorAvatar } from "./comments/CommentAuthor.js";
|
|
6
7
|
import { MentionTextarea } from "./comments/MentionTextarea.js";
|
|
@@ -14,4 +15,4 @@ import { CommentSidePanel } from "./comments/CommentSidePanel.js";
|
|
|
14
15
|
import { GroupedComments } from "./comments/GroupedComments.js";
|
|
15
16
|
import { CommentFilterBar } from "./comments/CommentFilterBar.js";
|
|
16
17
|
import { CommentProgress } from "./comments/CommentProgress.js";
|
|
17
|
-
export { CommentAuthorAvatar, CommentCard, CommentComposer, CommentFilterBar, CommentMarkdown, CommentProgress, CommentProvider, CommentSidePanel, CommentThread, CommentThreadList, DEFAULT_CHECKLIST_CYCLE, DEFAULT_COMMENT_STATUSES, DOCUMENT_ANCHOR, GroupedComments, MentionTextarea, applyCommentFilters, authorDisplayName, buildReplyMap, buildThreadListHandlers, commentCountForPrefix, defaultStatusValue, deriveAnchorCounts, deriveAnchorMeta, dottedAnchorResolver, emptyCommentFilters, exactAnchorResolver, getRoots, groupByFacet, hasActiveFilters, isUnresolved, matchMentionsInBody, nextChecklistStatus, resolveCommentStage, resolveFacetOption, resolveStatusConfig, selectAnchorThreads, selectCommentThreadsByStage, selectUnresolvedThreads, sortReplies, statusForCommentStage, strictAnchorResolver, toneToBadgeTone, truncatePlain, useCommentAnchorActionsOptional, useCommentAnchorOptional, useCommentContext, useCommentContextOptional };
|
|
18
|
+
export { CommentAuthorAvatar, CommentCard, CommentComposer, CommentFilterBar, CommentMarkdown, CommentProgress, CommentProvider, CommentSidePanel, CommentThread, CommentThreadList, DEFAULT_CHECKLIST_CYCLE, DEFAULT_COMMENT_STATUSES, DOCUMENT_ANCHOR, GroupedComments, MentionTextarea, applyCommentFilters, assignTargetItems, assignmentMenuItems, authorDisplayName, buildReplyMap, buildThreadListHandlers, commentCountForPrefix, defaultStatusValue, deriveAnchorCounts, deriveAnchorMeta, dottedAnchorResolver, emptyCommentFilters, exactAnchorResolver, getRoots, groupByFacet, hasActiveFilters, isUnresolved, matchMentionsInBody, nextChecklistStatus, resolveCommentStage, resolveFacetOption, resolveStatusConfig, selectAnchorThreads, selectCommentThreadsByStage, selectUnresolvedThreads, sortReplies, statusForCommentStage, strictAnchorResolver, toneToBadgeTone, truncatePlain, useCommentAnchorActionsOptional, useCommentAnchorOptional, useCommentContext, useCommentContextOptional };
|
|
@@ -26,6 +26,7 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
26
26
|
},
|
|
27
27
|
className: require_utils.cn("overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5", !mobile && "w-max"),
|
|
28
28
|
children: [header, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
29
|
+
className: require_utils.cn(filtered.some((option) => option.layout === "responsive") && "@container/combobox-options"),
|
|
29
30
|
id: header ? listId : void 0,
|
|
30
31
|
role: header ? "listbox" : void 0,
|
|
31
32
|
"aria-label": header ? ariaLabel : void 0,
|
|
@@ -69,7 +70,7 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
69
70
|
if (!option.disabled) onSelect(option);
|
|
70
71
|
} } : {},
|
|
71
72
|
onMouseEnter: () => onHighlight(index),
|
|
72
|
-
className: require_utils.cn("flex cursor-pointer rounded-sm py-1.5 text-sm", multiple ? "gap-2 px-2" : "gap-1.5 px-1.5", option.description && option.descriptionLayout !== "inline" ? "items-start" : "items-center", index === highlighted && "bg-accent", selected && !tristate && "font-medium", option.disabled && "cursor-not-allowed opacity-50"),
|
|
73
|
+
className: require_utils.cn("flex cursor-pointer rounded-sm py-1.5 text-sm", multiple ? "gap-2 px-2" : "gap-1.5 px-1.5", option.layout === "responsive" ? "items-start @min-[28rem]/combobox-options:items-center" : option.description && option.descriptionLayout !== "inline" ? "items-start" : "items-center", index === highlighted && "bg-accent", selected && !tristate && "font-medium", option.disabled && "cursor-not-allowed opacity-50"),
|
|
73
74
|
children: tristate ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
74
75
|
className: "min-w-0 flex-1",
|
|
75
76
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterPill.FilterPill, {
|
|
@@ -94,10 +95,10 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
94
95
|
multiple && selectionIndicator,
|
|
95
96
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.LabelIcon, {
|
|
96
97
|
icon: option.icon,
|
|
97
|
-
className: require_utils.cn("text-sm text-muted-foreground", option.description && option.descriptionLayout !== "inline" && "mt-1")
|
|
98
|
+
className: require_utils.cn("shrink-0 text-sm text-muted-foreground", option.description && option.descriptionLayout !== "inline" && "mt-1")
|
|
98
99
|
}),
|
|
99
100
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ComboboxOptionText, { option }),
|
|
100
|
-
option.trailing != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
101
|
+
option.trailing != null && option.layout !== "responsive" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
101
102
|
className: "ml-auto min-w-0 max-w-[55%] truncate pl-2 text-right text-xs text-muted-foreground",
|
|
102
103
|
children: option.trailing
|
|
103
104
|
}),
|
|
@@ -142,21 +143,30 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
142
143
|
}) : listbox, document.body);
|
|
143
144
|
}
|
|
144
145
|
function ComboboxOptionText({ option }) {
|
|
146
|
+
const responsive = option.layout === "responsive";
|
|
145
147
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
146
148
|
"data-slot": "combobox-option-text",
|
|
147
|
-
className: require_utils.cn("min-w-0 flex-1", option.descriptionLayout === "inline" && "flex items-center gap-2"),
|
|
148
|
-
children: [
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
149
|
+
className: require_utils.cn("min-w-0 flex-1", responsive ? "flex flex-col gap-1 @min-[28rem]/combobox-options:flex-row @min-[28rem]/combobox-options:items-center @min-[28rem]/combobox-options:gap-2" : option.descriptionLayout === "inline" && "flex items-center gap-2"),
|
|
150
|
+
children: [
|
|
151
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
152
|
+
className: require_utils.cn("block min-w-0", responsive ? "whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:flex-1 @min-[28rem]/combobox-options:truncate" : "truncate"),
|
|
153
|
+
children: option.label
|
|
154
|
+
}),
|
|
155
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ComboboxOptionDescription, {
|
|
156
|
+
description: option.description,
|
|
157
|
+
inline: option.descriptionLayout === "inline",
|
|
158
|
+
responsive
|
|
159
|
+
}),
|
|
160
|
+
responsive && option.trailing != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
161
|
+
className: "min-w-0 text-xs font-normal text-muted-foreground @min-[28rem]/combobox-options:ml-auto @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:truncate @min-[28rem]/combobox-options:pl-2 @min-[28rem]/combobox-options:text-right",
|
|
162
|
+
children: option.trailing
|
|
163
|
+
})
|
|
164
|
+
]
|
|
155
165
|
});
|
|
156
166
|
}
|
|
157
|
-
function ComboboxOptionDescription({ description, inline = false }) {
|
|
167
|
+
function ComboboxOptionDescription({ description, inline = false, responsive = false }) {
|
|
158
168
|
return description ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
159
|
-
className: require_utils.cn("text-xs font-normal leading-4 text-muted-foreground", inline ? "min-w-0 max-w-[55%] shrink-0 truncate" : "mt-0.5 block whitespace-pre-line"),
|
|
169
|
+
className: require_utils.cn("text-xs font-normal leading-4 text-muted-foreground", responsive ? "min-w-0 whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:shrink-0 @min-[28rem]/combobox-options:truncate" : inline ? "min-w-0 max-w-[55%] shrink-0 truncate" : "mt-0.5 block whitespace-pre-line"),
|
|
160
170
|
children: description
|
|
161
171
|
}) : null;
|
|
162
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxMenu.cjs","names":["cn","Icon","UiCheck","Fragment","FilterPill","LabelIcon","_Fragment","createPortal"],"sources":["../../src/components/ComboboxMenu.tsx"],"sourcesContent":["import { Fragment, type ReactNode, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { ComboboxOption, ComboboxTriStateMode } from \"./combobox-types\";\nimport type { ComboboxMenuPosition } from \"../lib/combobox\";\n\nexport function ComboboxMenu({\n customEntry,\n filtered,\n floatingZ,\n footer,\n header,\n ariaLabel,\n hasOptions,\n highlighted,\n isSelected,\n listId,\n listRef,\n loading,\n menuPos,\n modes,\n multiple,\n onHighlight,\n onSelect,\n onSetMode,\n tristate,\n}: {\n customEntry: ComboboxOption | null;\n filtered: ComboboxOption[];\n floatingZ: number;\n footer: ReactNode;\n header?: ReactNode;\n ariaLabel?: string | undefined;\n /** Whether the control has an option set at all (before filtering). */\n hasOptions: boolean;\n highlighted: number;\n isSelected: (value: string) => boolean;\n listId: string | undefined;\n listRef: RefObject<HTMLDivElement | null>;\n loading: boolean | undefined;\n menuPos: ComboboxMenuPosition;\n modes: Record<string, ComboboxTriStateMode>;\n multiple: boolean;\n onHighlight: (index: number) => void;\n onSelect: (option: ComboboxOption) => void;\n onSetMode: (value: string, mode: string) => void;\n tristate: boolean;\n}) {\n const mobile = menuPos.strategy === \"mobile\";\n const listbox = (\n <div\n id={header ? undefined : listId}\n ref={listRef}\n role={header ? undefined : \"listbox\"}\n aria-label={header ? undefined : ariaLabel}\n aria-multiselectable={!header && multiple ? true : undefined}\n style={{\n position: mobile ? \"absolute\" : \"fixed\",\n ...(menuPos.top != null\n ? { top: menuPos.top }\n : { bottom: menuPos.bottom }),\n left: menuPos.left,\n ...(mobile ? { width: menuPos.width } : { minWidth: menuPos.width }),\n maxWidth: menuPos.maxWidth,\n maxHeight: menuPos.maxHeight,\n zIndex: mobile ? undefined : floatingZ,\n pointerEvents: mobile ? \"auto\" : undefined,\n }}\n className={cn(\n \"overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\",\n !mobile && \"w-max\",\n )}\n >\n {header}\n <div\n id={header ? listId : undefined}\n role={header ? \"listbox\" : undefined}\n aria-label={header ? ariaLabel : undefined}\n aria-multiselectable={header && multiple ? true : undefined}\n >\n {loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n {/* \"No results\" answers \"did my query match anything?\" — a control with\n no option set at all (a free tag list) was never asked the question, so\n it says nothing rather than reporting an empty search. */}\n {!loading && filtered.length === 0 && !customEntry && hasOptions && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n No results\n </div>\n )}\n {filtered.map((option, index) => {\n const selected = isSelected(option.value);\n const mode = tristate ? modes[option.value] : undefined;\n const showHeader =\n option.group != null && option.group !== filtered[index - 1]?.group;\n const selectionIndicator = (\n <span\n data-slot=\"combobox-selection-indicator\"\n aria-hidden\n className={cn(\n \"shrink-0 text-xs\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n selected ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n <Icon icon={UiCheck} />\n </span>\n );\n return (\n <Fragment key={option.value}>\n {showHeader && (\n <div\n role=\"presentation\"\n className=\"select-none px-2 pb-1 pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {option.group}\n </div>\n )}\n <div\n id={listId ? `${listId}-${index}` : undefined}\n role=\"option\"\n aria-selected={tristate ? mode != null : selected}\n aria-disabled={option.disabled}\n {...(mode != null\n ? {\n \"aria-label\": `${option.label}, ${\n mode === \"include\" ? \"included\" : \"excluded\"\n }`,\n }\n : {})}\n {...(option.title !== undefined ? { title: option.title } : {})}\n {...(tristate ? { \"data-filter-option\": option.value } : {})}\n onMouseDown={(event) => {\n event.preventDefault();\n if (!tristate && !option.disabled) onSelect(option);\n }}\n {...(tristate\n ? {\n onClick: () => {\n if (!option.disabled) onSelect(option);\n },\n }\n : {})}\n onMouseEnter={() => onHighlight(index)}\n className={cn(\n \"flex cursor-pointer rounded-sm py-1.5 text-sm\",\n multiple ? \"gap-2 px-2\" : \"gap-1.5 px-1.5\",\n option.description && option.descriptionLayout !== \"inline\" ? \"items-start\" : \"items-center\",\n index === highlighted && \"bg-accent\",\n selected && !tristate && \"font-medium\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {tristate ? (\n <div className=\"min-w-0 flex-1\">\n <FilterPill\n mode={mode ?? \"neutral\"}\n togglePosition=\"right\"\n interactive={false}\n label={\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n <LabelIcon\n icon={option.icon}\n className=\"shrink-0 text-sm text-muted-foreground\"\n />\n <span className=\"truncate\">{option.label}</span>\n </span>\n }\n onModeChange={(next) => onSetMode(option.value, next)}\n className=\"w-full justify-between\"\n {...(option.count !== undefined\n ? { count: option.count }\n : {})}\n />\n <ComboboxOptionDescription\n description={option.description}\n />\n </div>\n ) : (\n <>\n {multiple && selectionIndicator}\n <LabelIcon\n icon={option.icon}\n className={cn(\n \"text-sm text-muted-foreground\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n )}\n />\n <ComboboxOptionText option={option} />\n {option.trailing != null && (\n // Capped and truncating rather than `shrink-0`: in a menu\n // clamped by the viewport edge the label is what identifies\n // the option, so the preview yields first.\n <span className=\"ml-auto min-w-0 max-w-[55%] truncate pl-2 text-right text-xs text-muted-foreground\">\n {option.trailing}\n </span>\n )}\n {!multiple && selectionIndicator}\n </>\n )}\n </div>\n </Fragment>\n );\n })}\n {customEntry && (\n <div\n id={listId ? `${listId}-${filtered.length}` : undefined}\n role=\"option\"\n aria-selected={false}\n data-filter-add-custom={customEntry.value}\n title={customEntry.title}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelect(customEntry)}\n onMouseEnter={() => onHighlight(filtered.length)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-primary\",\n highlighted === filtered.length && \"bg-accent\",\n )}\n >\n <LabelIcon\n icon={customEntry.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{customEntry.label}</span>\n </div>\n )}\n {footer != null && (\n <div className=\"select-none px-2 py-1.5 text-[11px] text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n return createPortal(\n mobile ? (\n <div\n data-slot=\"combobox-viewport-layer\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: floatingZ,\n pointerEvents: \"none\",\n }}\n >\n {listbox}\n </div>\n ) : (\n listbox\n ),\n document.body,\n );\n}\n\nfunction ComboboxOptionText({ option }: { option: ComboboxOption }) {\n return (\n <span data-slot=\"combobox-option-text\" className={cn(\"min-w-0 flex-1\", option.descriptionLayout === \"inline\" && \"flex items-center gap-2\")}>\n <span className=\"block min-w-0 truncate\">{option.label}</span>\n <ComboboxOptionDescription description={option.description} inline={option.descriptionLayout === \"inline\"} />\n </span>\n );\n}\n\nfunction ComboboxOptionDescription({\n description,\n inline = false,\n}: {\n description: string | undefined;\n inline?: boolean;\n}) {\n return description ? (\n <span className={cn(\"text-xs font-normal leading-4 text-muted-foreground\", inline ? \"min-w-0 max-w-[55%] shrink-0 truncate\" : \"mt-0.5 block whitespace-pre-line\")}>\n {description}\n </span>\n ) : null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ComboboxMenu.cjs","names":["cn","Icon","UiCheck","Fragment","FilterPill","LabelIcon","_Fragment","createPortal"],"sources":["../../src/components/ComboboxMenu.tsx"],"sourcesContent":["import { Fragment, type ReactNode, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { ComboboxOption, ComboboxTriStateMode } from \"./combobox-types\";\nimport type { ComboboxMenuPosition } from \"../lib/combobox\";\n\nexport function ComboboxMenu({\n customEntry,\n filtered,\n floatingZ,\n footer,\n header,\n ariaLabel,\n hasOptions,\n highlighted,\n isSelected,\n listId,\n listRef,\n loading,\n menuPos,\n modes,\n multiple,\n onHighlight,\n onSelect,\n onSetMode,\n tristate,\n}: {\n customEntry: ComboboxOption | null;\n filtered: ComboboxOption[];\n floatingZ: number;\n footer: ReactNode;\n header?: ReactNode;\n ariaLabel?: string | undefined;\n /** Whether the control has an option set at all (before filtering). */\n hasOptions: boolean;\n highlighted: number;\n isSelected: (value: string) => boolean;\n listId: string | undefined;\n listRef: RefObject<HTMLDivElement | null>;\n loading: boolean | undefined;\n menuPos: ComboboxMenuPosition;\n modes: Record<string, ComboboxTriStateMode>;\n multiple: boolean;\n onHighlight: (index: number) => void;\n onSelect: (option: ComboboxOption) => void;\n onSetMode: (value: string, mode: string) => void;\n tristate: boolean;\n}) {\n const mobile = menuPos.strategy === \"mobile\";\n const listbox = (\n <div\n id={header ? undefined : listId}\n ref={listRef}\n role={header ? undefined : \"listbox\"}\n aria-label={header ? undefined : ariaLabel}\n aria-multiselectable={!header && multiple ? true : undefined}\n style={{\n position: mobile ? \"absolute\" : \"fixed\",\n ...(menuPos.top != null\n ? { top: menuPos.top }\n : { bottom: menuPos.bottom }),\n left: menuPos.left,\n ...(mobile ? { width: menuPos.width } : { minWidth: menuPos.width }),\n maxWidth: menuPos.maxWidth,\n maxHeight: menuPos.maxHeight,\n zIndex: mobile ? undefined : floatingZ,\n pointerEvents: mobile ? \"auto\" : undefined,\n }}\n className={cn(\n \"overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\",\n !mobile && \"w-max\",\n )}\n >\n {header}\n <div\n className={cn(filtered.some(option => option.layout === \"responsive\") && \"@container/combobox-options\")}\n id={header ? listId : undefined}\n role={header ? \"listbox\" : undefined}\n aria-label={header ? ariaLabel : undefined}\n aria-multiselectable={header && multiple ? true : undefined}\n >\n {loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n {/* \"No results\" answers \"did my query match anything?\" — a control with\n no option set at all (a free tag list) was never asked the question, so\n it says nothing rather than reporting an empty search. */}\n {!loading && filtered.length === 0 && !customEntry && hasOptions && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n No results\n </div>\n )}\n {filtered.map((option, index) => {\n const selected = isSelected(option.value);\n const mode = tristate ? modes[option.value] : undefined;\n const showHeader =\n option.group != null && option.group !== filtered[index - 1]?.group;\n const selectionIndicator = (\n <span\n data-slot=\"combobox-selection-indicator\"\n aria-hidden\n className={cn(\n \"shrink-0 text-xs\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n selected ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n <Icon icon={UiCheck} />\n </span>\n );\n return (\n <Fragment key={option.value}>\n {showHeader && (\n <div\n role=\"presentation\"\n className=\"select-none px-2 pb-1 pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {option.group}\n </div>\n )}\n <div\n id={listId ? `${listId}-${index}` : undefined}\n role=\"option\"\n aria-selected={tristate ? mode != null : selected}\n aria-disabled={option.disabled}\n {...(mode != null\n ? {\n \"aria-label\": `${option.label}, ${\n mode === \"include\" ? \"included\" : \"excluded\"\n }`,\n }\n : {})}\n {...(option.title !== undefined ? { title: option.title } : {})}\n {...(tristate ? { \"data-filter-option\": option.value } : {})}\n onMouseDown={(event) => {\n event.preventDefault();\n if (!tristate && !option.disabled) onSelect(option);\n }}\n {...(tristate\n ? {\n onClick: () => {\n if (!option.disabled) onSelect(option);\n },\n }\n : {})}\n onMouseEnter={() => onHighlight(index)}\n className={cn(\n \"flex cursor-pointer rounded-sm py-1.5 text-sm\",\n multiple ? \"gap-2 px-2\" : \"gap-1.5 px-1.5\",\n option.layout === \"responsive\" ? \"items-start @min-[28rem]/combobox-options:items-center\" : option.description && option.descriptionLayout !== \"inline\" ? \"items-start\" : \"items-center\",\n index === highlighted && \"bg-accent\",\n selected && !tristate && \"font-medium\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {tristate ? (\n <div className=\"min-w-0 flex-1\">\n <FilterPill\n mode={mode ?? \"neutral\"}\n togglePosition=\"right\"\n interactive={false}\n label={\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n <LabelIcon\n icon={option.icon}\n className=\"shrink-0 text-sm text-muted-foreground\"\n />\n <span className=\"truncate\">{option.label}</span>\n </span>\n }\n onModeChange={(next) => onSetMode(option.value, next)}\n className=\"w-full justify-between\"\n {...(option.count !== undefined\n ? { count: option.count }\n : {})}\n />\n <ComboboxOptionDescription\n description={option.description}\n />\n </div>\n ) : (\n <>\n {multiple && selectionIndicator}\n <LabelIcon\n icon={option.icon}\n className={cn(\n \"shrink-0 text-sm text-muted-foreground\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n )}\n />\n <ComboboxOptionText option={option} />\n {option.trailing != null && option.layout !== \"responsive\" && (\n // Capped and truncating rather than `shrink-0`: in a menu\n // clamped by the viewport edge the label is what identifies\n // the option, so the preview yields first.\n <span className=\"ml-auto min-w-0 max-w-[55%] truncate pl-2 text-right text-xs text-muted-foreground\">\n {option.trailing}\n </span>\n )}\n {!multiple && selectionIndicator}\n </>\n )}\n </div>\n </Fragment>\n );\n })}\n {customEntry && (\n <div\n id={listId ? `${listId}-${filtered.length}` : undefined}\n role=\"option\"\n aria-selected={false}\n data-filter-add-custom={customEntry.value}\n title={customEntry.title}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelect(customEntry)}\n onMouseEnter={() => onHighlight(filtered.length)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-primary\",\n highlighted === filtered.length && \"bg-accent\",\n )}\n >\n <LabelIcon\n icon={customEntry.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{customEntry.label}</span>\n </div>\n )}\n {footer != null && (\n <div className=\"select-none px-2 py-1.5 text-[11px] text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n return createPortal(\n mobile ? (\n <div\n data-slot=\"combobox-viewport-layer\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: floatingZ,\n pointerEvents: \"none\",\n }}\n >\n {listbox}\n </div>\n ) : (\n listbox\n ),\n document.body,\n );\n}\n\nfunction ComboboxOptionText({ option }: { option: ComboboxOption }) {\n const responsive = option.layout === \"responsive\";\n return (\n <span data-slot=\"combobox-option-text\" className={cn(\"min-w-0 flex-1\", responsive ? \"flex flex-col gap-1 @min-[28rem]/combobox-options:flex-row @min-[28rem]/combobox-options:items-center @min-[28rem]/combobox-options:gap-2\" : option.descriptionLayout === \"inline\" && \"flex items-center gap-2\")}>\n <span className={cn(\"block min-w-0\", responsive ? \"whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:flex-1 @min-[28rem]/combobox-options:truncate\" : \"truncate\")}>{option.label}</span>\n <ComboboxOptionDescription description={option.description} inline={option.descriptionLayout === \"inline\"} responsive={responsive} />\n {responsive && option.trailing != null && (\n <span className=\"min-w-0 text-xs font-normal text-muted-foreground @min-[28rem]/combobox-options:ml-auto @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:truncate @min-[28rem]/combobox-options:pl-2 @min-[28rem]/combobox-options:text-right\">\n {option.trailing}\n </span>\n )}\n </span>\n );\n}\n\nfunction ComboboxOptionDescription({\n description,\n inline = false,\n responsive = false,\n}: {\n description: string | undefined;\n inline?: boolean;\n responsive?: boolean;\n}) {\n return description ? (\n <span className={cn(\"text-xs font-normal leading-4 text-muted-foreground\", responsive ? \"min-w-0 whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:shrink-0 @min-[28rem]/combobox-options:truncate\" : inline ? \"min-w-0 max-w-[55%] shrink-0 truncate\" : \"mt-0.5 block whitespace-pre-line\")}>\n {description}\n </span>\n ) : null;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxMenu.d.ts","sourceRoot":"","sources":["../../src/components/ComboboxMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMjE,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,uEAAuE;IACvE,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,OAAO,CAAC;CACnB,+
|
|
1
|
+
{"version":3,"file":"ComboboxMenu.d.ts","sourceRoot":"","sources":["../../src/components/ComboboxMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMjE,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,uEAAuE;IACvE,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,OAAO,CAAC;CACnB,+BAiNA"}
|
|
@@ -26,6 +26,7 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
26
26
|
},
|
|
27
27
|
className: cn("overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5", !mobile && "w-max"),
|
|
28
28
|
children: [header, /* @__PURE__ */ jsxs("div", {
|
|
29
|
+
className: cn(filtered.some((option) => option.layout === "responsive") && "@container/combobox-options"),
|
|
29
30
|
id: header ? listId : void 0,
|
|
30
31
|
role: header ? "listbox" : void 0,
|
|
31
32
|
"aria-label": header ? ariaLabel : void 0,
|
|
@@ -69,7 +70,7 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
69
70
|
if (!option.disabled) onSelect(option);
|
|
70
71
|
} } : {},
|
|
71
72
|
onMouseEnter: () => onHighlight(index),
|
|
72
|
-
className: cn("flex cursor-pointer rounded-sm py-1.5 text-sm", multiple ? "gap-2 px-2" : "gap-1.5 px-1.5", option.description && option.descriptionLayout !== "inline" ? "items-start" : "items-center", index === highlighted && "bg-accent", selected && !tristate && "font-medium", option.disabled && "cursor-not-allowed opacity-50"),
|
|
73
|
+
className: cn("flex cursor-pointer rounded-sm py-1.5 text-sm", multiple ? "gap-2 px-2" : "gap-1.5 px-1.5", option.layout === "responsive" ? "items-start @min-[28rem]/combobox-options:items-center" : option.description && option.descriptionLayout !== "inline" ? "items-start" : "items-center", index === highlighted && "bg-accent", selected && !tristate && "font-medium", option.disabled && "cursor-not-allowed opacity-50"),
|
|
73
74
|
children: tristate ? /* @__PURE__ */ jsxs("div", {
|
|
74
75
|
className: "min-w-0 flex-1",
|
|
75
76
|
children: [/* @__PURE__ */ jsx(FilterPill, {
|
|
@@ -94,10 +95,10 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
94
95
|
multiple && selectionIndicator,
|
|
95
96
|
/* @__PURE__ */ jsx(LabelIcon, {
|
|
96
97
|
icon: option.icon,
|
|
97
|
-
className: cn("text-sm text-muted-foreground", option.description && option.descriptionLayout !== "inline" && "mt-1")
|
|
98
|
+
className: cn("shrink-0 text-sm text-muted-foreground", option.description && option.descriptionLayout !== "inline" && "mt-1")
|
|
98
99
|
}),
|
|
99
100
|
/* @__PURE__ */ jsx(ComboboxOptionText, { option }),
|
|
100
|
-
option.trailing != null && /* @__PURE__ */ jsx("span", {
|
|
101
|
+
option.trailing != null && option.layout !== "responsive" && /* @__PURE__ */ jsx("span", {
|
|
101
102
|
className: "ml-auto min-w-0 max-w-[55%] truncate pl-2 text-right text-xs text-muted-foreground",
|
|
102
103
|
children: option.trailing
|
|
103
104
|
}),
|
|
@@ -142,21 +143,30 @@ function ComboboxMenu({ customEntry, filtered, floatingZ, footer, header, ariaLa
|
|
|
142
143
|
}) : listbox, document.body);
|
|
143
144
|
}
|
|
144
145
|
function ComboboxOptionText({ option }) {
|
|
146
|
+
const responsive = option.layout === "responsive";
|
|
145
147
|
return /* @__PURE__ */ jsxs("span", {
|
|
146
148
|
"data-slot": "combobox-option-text",
|
|
147
|
-
className: cn("min-w-0 flex-1", option.descriptionLayout === "inline" && "flex items-center gap-2"),
|
|
148
|
-
children: [
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
149
|
+
className: cn("min-w-0 flex-1", responsive ? "flex flex-col gap-1 @min-[28rem]/combobox-options:flex-row @min-[28rem]/combobox-options:items-center @min-[28rem]/combobox-options:gap-2" : option.descriptionLayout === "inline" && "flex items-center gap-2"),
|
|
150
|
+
children: [
|
|
151
|
+
/* @__PURE__ */ jsx("span", {
|
|
152
|
+
className: cn("block min-w-0", responsive ? "whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:flex-1 @min-[28rem]/combobox-options:truncate" : "truncate"),
|
|
153
|
+
children: option.label
|
|
154
|
+
}),
|
|
155
|
+
/* @__PURE__ */ jsx(ComboboxOptionDescription, {
|
|
156
|
+
description: option.description,
|
|
157
|
+
inline: option.descriptionLayout === "inline",
|
|
158
|
+
responsive
|
|
159
|
+
}),
|
|
160
|
+
responsive && option.trailing != null && /* @__PURE__ */ jsx("span", {
|
|
161
|
+
className: "min-w-0 text-xs font-normal text-muted-foreground @min-[28rem]/combobox-options:ml-auto @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:truncate @min-[28rem]/combobox-options:pl-2 @min-[28rem]/combobox-options:text-right",
|
|
162
|
+
children: option.trailing
|
|
163
|
+
})
|
|
164
|
+
]
|
|
155
165
|
});
|
|
156
166
|
}
|
|
157
|
-
function ComboboxOptionDescription({ description, inline = false }) {
|
|
167
|
+
function ComboboxOptionDescription({ description, inline = false, responsive = false }) {
|
|
158
168
|
return description ? /* @__PURE__ */ jsx("span", {
|
|
159
|
-
className: cn("text-xs font-normal leading-4 text-muted-foreground", inline ? "min-w-0 max-w-[55%] shrink-0 truncate" : "mt-0.5 block whitespace-pre-line"),
|
|
169
|
+
className: cn("text-xs font-normal leading-4 text-muted-foreground", responsive ? "min-w-0 whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:shrink-0 @min-[28rem]/combobox-options:truncate" : inline ? "min-w-0 max-w-[55%] shrink-0 truncate" : "mt-0.5 block whitespace-pre-line"),
|
|
160
170
|
children: description
|
|
161
171
|
}) : null;
|
|
162
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxMenu.js","names":["_Fragment"],"sources":["../../src/components/ComboboxMenu.tsx"],"sourcesContent":["import { Fragment, type ReactNode, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { ComboboxOption, ComboboxTriStateMode } from \"./combobox-types\";\nimport type { ComboboxMenuPosition } from \"../lib/combobox\";\n\nexport function ComboboxMenu({\n customEntry,\n filtered,\n floatingZ,\n footer,\n header,\n ariaLabel,\n hasOptions,\n highlighted,\n isSelected,\n listId,\n listRef,\n loading,\n menuPos,\n modes,\n multiple,\n onHighlight,\n onSelect,\n onSetMode,\n tristate,\n}: {\n customEntry: ComboboxOption | null;\n filtered: ComboboxOption[];\n floatingZ: number;\n footer: ReactNode;\n header?: ReactNode;\n ariaLabel?: string | undefined;\n /** Whether the control has an option set at all (before filtering). */\n hasOptions: boolean;\n highlighted: number;\n isSelected: (value: string) => boolean;\n listId: string | undefined;\n listRef: RefObject<HTMLDivElement | null>;\n loading: boolean | undefined;\n menuPos: ComboboxMenuPosition;\n modes: Record<string, ComboboxTriStateMode>;\n multiple: boolean;\n onHighlight: (index: number) => void;\n onSelect: (option: ComboboxOption) => void;\n onSetMode: (value: string, mode: string) => void;\n tristate: boolean;\n}) {\n const mobile = menuPos.strategy === \"mobile\";\n const listbox = (\n <div\n id={header ? undefined : listId}\n ref={listRef}\n role={header ? undefined : \"listbox\"}\n aria-label={header ? undefined : ariaLabel}\n aria-multiselectable={!header && multiple ? true : undefined}\n style={{\n position: mobile ? \"absolute\" : \"fixed\",\n ...(menuPos.top != null\n ? { top: menuPos.top }\n : { bottom: menuPos.bottom }),\n left: menuPos.left,\n ...(mobile ? { width: menuPos.width } : { minWidth: menuPos.width }),\n maxWidth: menuPos.maxWidth,\n maxHeight: menuPos.maxHeight,\n zIndex: mobile ? undefined : floatingZ,\n pointerEvents: mobile ? \"auto\" : undefined,\n }}\n className={cn(\n \"overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\",\n !mobile && \"w-max\",\n )}\n >\n {header}\n <div\n id={header ? listId : undefined}\n role={header ? \"listbox\" : undefined}\n aria-label={header ? ariaLabel : undefined}\n aria-multiselectable={header && multiple ? true : undefined}\n >\n {loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n {/* \"No results\" answers \"did my query match anything?\" — a control with\n no option set at all (a free tag list) was never asked the question, so\n it says nothing rather than reporting an empty search. */}\n {!loading && filtered.length === 0 && !customEntry && hasOptions && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n No results\n </div>\n )}\n {filtered.map((option, index) => {\n const selected = isSelected(option.value);\n const mode = tristate ? modes[option.value] : undefined;\n const showHeader =\n option.group != null && option.group !== filtered[index - 1]?.group;\n const selectionIndicator = (\n <span\n data-slot=\"combobox-selection-indicator\"\n aria-hidden\n className={cn(\n \"shrink-0 text-xs\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n selected ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n <Icon icon={UiCheck} />\n </span>\n );\n return (\n <Fragment key={option.value}>\n {showHeader && (\n <div\n role=\"presentation\"\n className=\"select-none px-2 pb-1 pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {option.group}\n </div>\n )}\n <div\n id={listId ? `${listId}-${index}` : undefined}\n role=\"option\"\n aria-selected={tristate ? mode != null : selected}\n aria-disabled={option.disabled}\n {...(mode != null\n ? {\n \"aria-label\": `${option.label}, ${\n mode === \"include\" ? \"included\" : \"excluded\"\n }`,\n }\n : {})}\n {...(option.title !== undefined ? { title: option.title } : {})}\n {...(tristate ? { \"data-filter-option\": option.value } : {})}\n onMouseDown={(event) => {\n event.preventDefault();\n if (!tristate && !option.disabled) onSelect(option);\n }}\n {...(tristate\n ? {\n onClick: () => {\n if (!option.disabled) onSelect(option);\n },\n }\n : {})}\n onMouseEnter={() => onHighlight(index)}\n className={cn(\n \"flex cursor-pointer rounded-sm py-1.5 text-sm\",\n multiple ? \"gap-2 px-2\" : \"gap-1.5 px-1.5\",\n option.description && option.descriptionLayout !== \"inline\" ? \"items-start\" : \"items-center\",\n index === highlighted && \"bg-accent\",\n selected && !tristate && \"font-medium\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {tristate ? (\n <div className=\"min-w-0 flex-1\">\n <FilterPill\n mode={mode ?? \"neutral\"}\n togglePosition=\"right\"\n interactive={false}\n label={\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n <LabelIcon\n icon={option.icon}\n className=\"shrink-0 text-sm text-muted-foreground\"\n />\n <span className=\"truncate\">{option.label}</span>\n </span>\n }\n onModeChange={(next) => onSetMode(option.value, next)}\n className=\"w-full justify-between\"\n {...(option.count !== undefined\n ? { count: option.count }\n : {})}\n />\n <ComboboxOptionDescription\n description={option.description}\n />\n </div>\n ) : (\n <>\n {multiple && selectionIndicator}\n <LabelIcon\n icon={option.icon}\n className={cn(\n \"text-sm text-muted-foreground\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n )}\n />\n <ComboboxOptionText option={option} />\n {option.trailing != null && (\n // Capped and truncating rather than `shrink-0`: in a menu\n // clamped by the viewport edge the label is what identifies\n // the option, so the preview yields first.\n <span className=\"ml-auto min-w-0 max-w-[55%] truncate pl-2 text-right text-xs text-muted-foreground\">\n {option.trailing}\n </span>\n )}\n {!multiple && selectionIndicator}\n </>\n )}\n </div>\n </Fragment>\n );\n })}\n {customEntry && (\n <div\n id={listId ? `${listId}-${filtered.length}` : undefined}\n role=\"option\"\n aria-selected={false}\n data-filter-add-custom={customEntry.value}\n title={customEntry.title}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelect(customEntry)}\n onMouseEnter={() => onHighlight(filtered.length)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-primary\",\n highlighted === filtered.length && \"bg-accent\",\n )}\n >\n <LabelIcon\n icon={customEntry.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{customEntry.label}</span>\n </div>\n )}\n {footer != null && (\n <div className=\"select-none px-2 py-1.5 text-[11px] text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n return createPortal(\n mobile ? (\n <div\n data-slot=\"combobox-viewport-layer\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: floatingZ,\n pointerEvents: \"none\",\n }}\n >\n {listbox}\n </div>\n ) : (\n listbox\n ),\n document.body,\n );\n}\n\nfunction ComboboxOptionText({ option }: { option: ComboboxOption }) {\n return (\n <span data-slot=\"combobox-option-text\" className={cn(\"min-w-0 flex-1\", option.descriptionLayout === \"inline\" && \"flex items-center gap-2\")}>\n <span className=\"block min-w-0 truncate\">{option.label}</span>\n <ComboboxOptionDescription description={option.description} inline={option.descriptionLayout === \"inline\"} />\n </span>\n );\n}\n\nfunction ComboboxOptionDescription({\n description,\n inline = false,\n}: {\n description: string | undefined;\n inline?: boolean;\n}) {\n return description ? (\n <span className={cn(\"text-xs font-normal leading-4 text-muted-foreground\", inline ? \"min-w-0 max-w-[55%] shrink-0 truncate\" : \"mt-0.5 block whitespace-pre-line\")}>\n {description}\n </span>\n ) : null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ComboboxMenu.js","names":["_Fragment"],"sources":["../../src/components/ComboboxMenu.tsx"],"sourcesContent":["import { Fragment, type ReactNode, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiCheck } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { ComboboxOption, ComboboxTriStateMode } from \"./combobox-types\";\nimport type { ComboboxMenuPosition } from \"../lib/combobox\";\n\nexport function ComboboxMenu({\n customEntry,\n filtered,\n floatingZ,\n footer,\n header,\n ariaLabel,\n hasOptions,\n highlighted,\n isSelected,\n listId,\n listRef,\n loading,\n menuPos,\n modes,\n multiple,\n onHighlight,\n onSelect,\n onSetMode,\n tristate,\n}: {\n customEntry: ComboboxOption | null;\n filtered: ComboboxOption[];\n floatingZ: number;\n footer: ReactNode;\n header?: ReactNode;\n ariaLabel?: string | undefined;\n /** Whether the control has an option set at all (before filtering). */\n hasOptions: boolean;\n highlighted: number;\n isSelected: (value: string) => boolean;\n listId: string | undefined;\n listRef: RefObject<HTMLDivElement | null>;\n loading: boolean | undefined;\n menuPos: ComboboxMenuPosition;\n modes: Record<string, ComboboxTriStateMode>;\n multiple: boolean;\n onHighlight: (index: number) => void;\n onSelect: (option: ComboboxOption) => void;\n onSetMode: (value: string, mode: string) => void;\n tristate: boolean;\n}) {\n const mobile = menuPos.strategy === \"mobile\";\n const listbox = (\n <div\n id={header ? undefined : listId}\n ref={listRef}\n role={header ? undefined : \"listbox\"}\n aria-label={header ? undefined : ariaLabel}\n aria-multiselectable={!header && multiple ? true : undefined}\n style={{\n position: mobile ? \"absolute\" : \"fixed\",\n ...(menuPos.top != null\n ? { top: menuPos.top }\n : { bottom: menuPos.bottom }),\n left: menuPos.left,\n ...(mobile ? { width: menuPos.width } : { minWidth: menuPos.width }),\n maxWidth: menuPos.maxWidth,\n maxHeight: menuPos.maxHeight,\n zIndex: mobile ? undefined : floatingZ,\n pointerEvents: mobile ? \"auto\" : undefined,\n }}\n className={cn(\n \"overflow-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\",\n !mobile && \"w-max\",\n )}\n >\n {header}\n <div\n className={cn(filtered.some(option => option.layout === \"responsive\") && \"@container/combobox-options\")}\n id={header ? listId : undefined}\n role={header ? \"listbox\" : undefined}\n aria-label={header ? ariaLabel : undefined}\n aria-multiselectable={header && multiple ? true : undefined}\n >\n {loading && filtered.length === 0 && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n {/* \"No results\" answers \"did my query match anything?\" — a control with\n no option set at all (a free tag list) was never asked the question, so\n it says nothing rather than reporting an empty search. */}\n {!loading && filtered.length === 0 && !customEntry && hasOptions && (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n No results\n </div>\n )}\n {filtered.map((option, index) => {\n const selected = isSelected(option.value);\n const mode = tristate ? modes[option.value] : undefined;\n const showHeader =\n option.group != null && option.group !== filtered[index - 1]?.group;\n const selectionIndicator = (\n <span\n data-slot=\"combobox-selection-indicator\"\n aria-hidden\n className={cn(\n \"shrink-0 text-xs\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n selected ? \"opacity-100\" : \"opacity-0\",\n )}\n >\n <Icon icon={UiCheck} />\n </span>\n );\n return (\n <Fragment key={option.value}>\n {showHeader && (\n <div\n role=\"presentation\"\n className=\"select-none px-2 pb-1 pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {option.group}\n </div>\n )}\n <div\n id={listId ? `${listId}-${index}` : undefined}\n role=\"option\"\n aria-selected={tristate ? mode != null : selected}\n aria-disabled={option.disabled}\n {...(mode != null\n ? {\n \"aria-label\": `${option.label}, ${\n mode === \"include\" ? \"included\" : \"excluded\"\n }`,\n }\n : {})}\n {...(option.title !== undefined ? { title: option.title } : {})}\n {...(tristate ? { \"data-filter-option\": option.value } : {})}\n onMouseDown={(event) => {\n event.preventDefault();\n if (!tristate && !option.disabled) onSelect(option);\n }}\n {...(tristate\n ? {\n onClick: () => {\n if (!option.disabled) onSelect(option);\n },\n }\n : {})}\n onMouseEnter={() => onHighlight(index)}\n className={cn(\n \"flex cursor-pointer rounded-sm py-1.5 text-sm\",\n multiple ? \"gap-2 px-2\" : \"gap-1.5 px-1.5\",\n option.layout === \"responsive\" ? \"items-start @min-[28rem]/combobox-options:items-center\" : option.description && option.descriptionLayout !== \"inline\" ? \"items-start\" : \"items-center\",\n index === highlighted && \"bg-accent\",\n selected && !tristate && \"font-medium\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {tristate ? (\n <div className=\"min-w-0 flex-1\">\n <FilterPill\n mode={mode ?? \"neutral\"}\n togglePosition=\"right\"\n interactive={false}\n label={\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n <LabelIcon\n icon={option.icon}\n className=\"shrink-0 text-sm text-muted-foreground\"\n />\n <span className=\"truncate\">{option.label}</span>\n </span>\n }\n onModeChange={(next) => onSetMode(option.value, next)}\n className=\"w-full justify-between\"\n {...(option.count !== undefined\n ? { count: option.count }\n : {})}\n />\n <ComboboxOptionDescription\n description={option.description}\n />\n </div>\n ) : (\n <>\n {multiple && selectionIndicator}\n <LabelIcon\n icon={option.icon}\n className={cn(\n \"shrink-0 text-sm text-muted-foreground\",\n option.description && option.descriptionLayout !== \"inline\" && \"mt-1\",\n )}\n />\n <ComboboxOptionText option={option} />\n {option.trailing != null && option.layout !== \"responsive\" && (\n // Capped and truncating rather than `shrink-0`: in a menu\n // clamped by the viewport edge the label is what identifies\n // the option, so the preview yields first.\n <span className=\"ml-auto min-w-0 max-w-[55%] truncate pl-2 text-right text-xs text-muted-foreground\">\n {option.trailing}\n </span>\n )}\n {!multiple && selectionIndicator}\n </>\n )}\n </div>\n </Fragment>\n );\n })}\n {customEntry && (\n <div\n id={listId ? `${listId}-${filtered.length}` : undefined}\n role=\"option\"\n aria-selected={false}\n data-filter-add-custom={customEntry.value}\n title={customEntry.title}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelect(customEntry)}\n onMouseEnter={() => onHighlight(filtered.length)}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-primary\",\n highlighted === filtered.length && \"bg-accent\",\n )}\n >\n <LabelIcon\n icon={customEntry.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{customEntry.label}</span>\n </div>\n )}\n {footer != null && (\n <div className=\"select-none px-2 py-1.5 text-[11px] text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n return createPortal(\n mobile ? (\n <div\n data-slot=\"combobox-viewport-layer\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: floatingZ,\n pointerEvents: \"none\",\n }}\n >\n {listbox}\n </div>\n ) : (\n listbox\n ),\n document.body,\n );\n}\n\nfunction ComboboxOptionText({ option }: { option: ComboboxOption }) {\n const responsive = option.layout === \"responsive\";\n return (\n <span data-slot=\"combobox-option-text\" className={cn(\"min-w-0 flex-1\", responsive ? \"flex flex-col gap-1 @min-[28rem]/combobox-options:flex-row @min-[28rem]/combobox-options:items-center @min-[28rem]/combobox-options:gap-2\" : option.descriptionLayout === \"inline\" && \"flex items-center gap-2\")}>\n <span className={cn(\"block min-w-0\", responsive ? \"whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:flex-1 @min-[28rem]/combobox-options:truncate\" : \"truncate\")}>{option.label}</span>\n <ComboboxOptionDescription description={option.description} inline={option.descriptionLayout === \"inline\"} responsive={responsive} />\n {responsive && option.trailing != null && (\n <span className=\"min-w-0 text-xs font-normal text-muted-foreground @min-[28rem]/combobox-options:ml-auto @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:truncate @min-[28rem]/combobox-options:pl-2 @min-[28rem]/combobox-options:text-right\">\n {option.trailing}\n </span>\n )}\n </span>\n );\n}\n\nfunction ComboboxOptionDescription({\n description,\n inline = false,\n responsive = false,\n}: {\n description: string | undefined;\n inline?: boolean;\n responsive?: boolean;\n}) {\n return description ? (\n <span className={cn(\"text-xs font-normal leading-4 text-muted-foreground\", responsive ? \"min-w-0 whitespace-normal [overflow-wrap:anywhere] @min-[28rem]/combobox-options:max-w-[55%] @min-[28rem]/combobox-options:shrink-0 @min-[28rem]/combobox-options:truncate\" : inline ? \"min-w-0 max-w-[55%] shrink-0 truncate\" : \"mt-0.5 block whitespace-pre-line\")}>\n {description}\n </span>\n ) : null;\n}\n"],"mappings":"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"}
|
|
@@ -22,10 +22,21 @@ var ErrorWrapper = class extends react.Component {
|
|
|
22
22
|
this.props.onError?.(error, errorInfo);
|
|
23
23
|
}
|
|
24
24
|
render() {
|
|
25
|
-
if (this.state.error)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
if (this.state.error) {
|
|
26
|
+
if (this.props.renderFallback) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: this.props.renderFallback({
|
|
27
|
+
error: this.state.error,
|
|
28
|
+
componentStack: this.state.componentStack,
|
|
29
|
+
report: errorReport(this.state.error, this.state.componentStack),
|
|
30
|
+
reset: () => this.setState({
|
|
31
|
+
error: null,
|
|
32
|
+
componentStack: null
|
|
33
|
+
})
|
|
34
|
+
}) });
|
|
35
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorFallback, {
|
|
36
|
+
error: this.state.error,
|
|
37
|
+
componentStack: this.state.componentStack
|
|
38
|
+
});
|
|
39
|
+
}
|
|
29
40
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: this.props.children });
|
|
30
41
|
}
|
|
31
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorWrapper.cjs","names":["Component","_Fragment","useState","useMemo","Icon","UiWarningTriangle","Button","UiCheck","UiCopy","cn","ErrorDetails","normalizeErrorDiagnostics","reportPageLine"],"sources":["../../src/components/ErrorWrapper.tsx"],"sourcesContent":["import {\n Component,\n useMemo,\n useState,\n type ErrorInfo,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { ErrorDetails } from \"../data/diagnostics/ErrorDetails\";\nimport {\n normalizeErrorDiagnostics,\n reportPageLine,\n type ErrorDiagnostics,\n} from \"../data/diagnostics/error-diagnostics\";\nimport { Icon } from \"../data/Icon\";\nimport { UiCheck, UiCopy, UiWarningTriangle } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\nexport type ErrorWrapperProps = {\n children: ReactNode;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n};\n\ntype ErrorWrapperState = {\n error: Error | null;\n componentStack: string | null;\n};\n\nexport class ErrorWrapper extends Component<\n ErrorWrapperProps,\n ErrorWrapperState\n> {\n override state: ErrorWrapperState = {\n error: null,\n componentStack: null,\n };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({ componentStack: errorInfo.componentStack ?? null });\n this.props.onError?.(error, errorInfo);\n }\n\n override render(): ReactElement {\n if (this.state.error) {\n return (\n <ErrorFallback\n error={this.state.error}\n componentStack={this.state.componentStack}\n />\n );\n }\n return <>{this.props.children}</>;\n }\n}\n\ntype CopyState = \"idle\" | \"copied\" | \"failed\";\n\nfunction copyStatusMessage(copyState: CopyState): string {\n if (copyState === \"copied\") return \"Error details copied to clipboard.\";\n if (copyState === \"failed\") {\n return \"Clipboard access failed. Expand the error details to copy individual values.\";\n }\n return \"\";\n}\n\nfunction ErrorFallback({\n error,\n componentStack,\n}: {\n error: Error;\n componentStack: string | null;\n}) {\n const [copyState, setCopyState] = useState<CopyState>(\"idle\");\n const diagnostics = useMemo(\n () => errorDiagnostics(error, componentStack),\n [componentStack, error],\n );\n\n const copyDetails = async () => {\n if (!navigator.clipboard?.writeText) {\n setCopyState(\"failed\");\n return;\n }\n try {\n await navigator.clipboard.writeText(errorReport(error, componentStack));\n setCopyState(\"copied\");\n } catch {\n setCopyState(\"failed\");\n }\n };\n\n return (\n <main\n data-slot=\"error-wrapper\"\n role=\"alert\"\n aria-labelledby=\"error-wrapper-title\"\n className=\"flex min-h-dvh w-full items-center justify-center bg-background p-density-6 text-foreground\"\n >\n <div className=\"w-full max-w-3xl\">\n <div className=\"mb-density-4 flex items-start gap-density-3\">\n <span className=\"grid size-12 shrink-0 place-items-center rounded-full bg-destructive/10 text-destructive\">\n <Icon icon={UiWarningTriangle} className=\"size-6\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-destructive\">\n Unexpected application error\n </p>\n <h1\n id=\"error-wrapper-title\"\n className=\"mt-density-1 text-2xl font-semibold tracking-tight\"\n >\n Something went wrong\n </h1>\n <p className=\"mt-density-2 break-words text-sm text-muted-foreground\">\n {diagnostics.message}\n </p>\n </div>\n </div>\n\n <div className=\"mb-density-3 flex items-center gap-density-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => void copyDetails()}\n >\n <Icon icon={copyState === \"copied\" ? UiCheck : UiCopy} />\n {/* Distinct from ErrorDetails' own \"Copy error details\" control\n below: this copies the page-level report (URL, user agent,\n React component stack), and two identically named buttons in\n one view are ambiguous to assistive tech. */}\n {copyState === \"copied\" ? \"Copied\" : \"Copy error report\"}\n </Button>\n <span\n aria-live=\"polite\"\n className={cn(\n \"text-xs\",\n copyState === \"failed\"\n ? \"text-destructive\"\n : \"text-muted-foreground\",\n )}\n >\n {copyStatusMessage(copyState)}\n </span>\n </div>\n\n <ErrorDetails diagnostics={diagnostics} />\n </div>\n </main>\n );\n}\n\nfunction errorDiagnostics(\n error: Error,\n componentStack: string | null,\n): ErrorDiagnostics {\n const diagnostics = normalizeErrorDiagnostics(\n error,\n \"An unexpected error was thrown without a message.\",\n );\n if (!diagnostics) {\n throw new Error(\"ErrorWrapper could not normalize the captured error\");\n }\n\n const cause =\n error.cause === undefined\n ? []\n : [[\"cause\", String(error.cause)] as [string, string]];\n const reactStack = componentStack?.trim();\n return {\n ...diagnostics,\n context: [...diagnostics.context, ...cause],\n ...(reactStack\n ? {\n stacktrace: [\n diagnostics.stacktrace,\n \"React component stack:\",\n reactStack,\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n }\n : {}),\n };\n}\n\nfunction errorReport(error: Error, componentStack: string | null) {\n const lines = [\n `Error: ${error.message || \"An unexpected error was thrown without a message.\"}`,\n ];\n if (error.name !== \"Error\") lines.push(`Type: ${error.name}`);\n if (error.cause !== undefined) lines.push(`Cause: ${String(error.cause)}`);\n const page = reportPageLine();\n if (page) lines.push(page);\n if (typeof navigator !== \"undefined\" && navigator.userAgent) {\n lines.push(`User agent: ${navigator.userAgent}`);\n }\n lines.push(`Time: ${new Date().toISOString()}`);\n if (error.stack) lines.push(\"\", \"Stack trace:\", error.stack);\n if (componentStack?.trim()) {\n lines.push(\"\", \"React component stack:\", componentStack.trim());\n }\n return lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;;;;;;AA6BA,IAAa,eAAb,cAAkCA,MAAAA,UAGhC;CACA,QAAoC;EAClC,OAAO;EACP,gBAAgB;CAClB;CAEA,OAAO,yBAAyB,OAAc;EAC5C,OAAO,EAAE,MAAM;CACjB;CAEA,kBAA2B,OAAc,WAAsB;EAC7D,KAAK,SAAS,EAAE,gBAAgB,UAAU,kBAAkB,KAAK,CAAC;EAClE,KAAK,MAAM,UAAU,OAAO,SAAS;CACvC;CAEA,SAAgC;EAC9B,IAAI,KAAK,MAAM,OACb,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;GACE,OAAO,KAAK,MAAM;GAClB,gBAAgB,KAAK,MAAM;EAC5B,CAAA;EAGL,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAG,KAAK,MAAM,SAAW,CAAA;CAClC;AACF;AAIA,SAAS,kBAAkB,WAA8B;CACvD,IAAI,cAAc,UAAU,OAAO;CACnC,IAAI,cAAc,UAChB,OAAO;CAET,OAAO;AACT;AAEA,SAAS,cAAc,EACrB,OACA,kBAIC;CACD,MAAM,CAAC,WAAW,iBAAA,GAAgBC,MAAAA,SAAAA,CAAoB,MAAM;CAC5D,MAAM,eAAA,GAAcC,MAAAA,QAAAA,OACZ,iBAAiB,OAAO,cAAc,GAC5C,CAAC,gBAAgB,KAAK,CACxB;CAEA,MAAM,cAAc,YAAY;EAC9B,IAAI,CAAC,UAAU,WAAW,WAAW;GACnC,aAAa,QAAQ;GACrB;EACF;EACA,IAAI;GACF,MAAM,UAAU,UAAU,UAAU,YAAY,OAAO,cAAc,CAAC;GACtE,aAAa,QAAQ;EACvB,QAAQ;GACN,aAAa,QAAQ;EACvB;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EACE,aAAU;EACV,MAAK;EACL,mBAAgB;EAChB,WAAU;EAEV,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;OAAM,MAAMC,0BAAAA;OAAmB,WAAU;MAAU,CAAA;KAC/C,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;QAAG,WAAU;QAAiE,UAAA;OAE3E,CAAA;OACH,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;QACE,IAAG;QACH,WAAU;QACX,UAAA;OAEG,CAAA;OACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;QAAG,WAAU;QACV,UAAA,YAAY;OACZ,CAAA;MACA;KACF,CAAA,CAAA;;IAEL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,eAAAA,QAAD;MACE,MAAK;MACL,SAAQ;MACR,eAAe,KAAK,YAAY;MAHlC,UAAA,CAKE,iBAAA,GAAA,kBAAA,IAAA,CAACF,aAAAA,MAAD,EAAM,MAAM,cAAc,WAAWG,gBAAAA,UAAUC,eAAAA,OAAS,CAAA,GAKvD,cAAc,WAAW,WAAW,mBAC/B;KACR,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MACE,aAAU;MACV,WAAWC,cAAAA,GACT,WACA,cAAc,WACV,qBACA,uBACN;MAEC,UAAA,kBAAkB,SAAS;KACxB,CAAA,CACH;;IAEL,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,cAAD,EAA2B,YAAc,CAAA;GACtC;;CACD,CAAA;AAEV;AAEA,SAAS,iBACP,OACA,gBACkB;CAClB,MAAM,cAAcC,0BAAAA,0BAClB,OACA,mDACF;CACA,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,qDAAqD;CAGvE,MAAM,QACJ,MAAM,UAAU,KAAA,IACZ,CAAC,IACD,CAAC,CAAC,SAAS,OAAO,MAAM,KAAK,CAAC,CAAqB;CACzD,MAAM,aAAa,gBAAgB,KAAK;CACxC,OAAO;EACL,GAAG;EACH,SAAS,CAAC,GAAG,YAAY,SAAS,GAAG,KAAK;EAC1C,GAAI,aACA,EACE,YAAY;GACV,YAAY;GACZ;GACA;EACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,MAAM,EAChB,IACA,CAAC;CACP;AACF;AAEA,SAAS,YAAY,OAAc,gBAA+B;CAChE,MAAM,QAAQ,CACZ,UAAU,MAAM,WAAW,qDAC7B;CACA,IAAI,MAAM,SAAS,SAAS,MAAM,KAAK,SAAS,MAAM,MAAM;CAC5D,IAAI,MAAM,UAAU,KAAA,GAAW,MAAM,KAAK,UAAU,OAAO,MAAM,KAAK,GAAG;CACzE,MAAM,OAAOC,0BAAAA,eAAe;CAC5B,IAAI,MAAM,MAAM,KAAK,IAAI;CACzB,IAAI,OAAO,cAAc,eAAe,UAAU,WAChD,MAAM,KAAK,eAAe,UAAU,WAAW;CAEjD,MAAM,KAAK,0BAAS,IAAI,KAAK,EAAA,CAAE,YAAY,GAAG;CAC9C,IAAI,MAAM,OAAO,MAAM,KAAK,IAAI,gBAAgB,MAAM,KAAK;CAC3D,IAAI,gBAAgB,KAAK,GACvB,MAAM,KAAK,IAAI,0BAA0B,eAAe,KAAK,CAAC;CAEhE,OAAO,MAAM,KAAK,IAAI;AACxB"}
|
|
1
|
+
{"version":3,"file":"ErrorWrapper.cjs","names":["Component","_Fragment","useState","useMemo","Icon","UiWarningTriangle","Button","UiCheck","UiCopy","cn","ErrorDetails","normalizeErrorDiagnostics","reportPageLine"],"sources":["../../src/components/ErrorWrapper.tsx"],"sourcesContent":["import {\n Component,\n useMemo,\n useState,\n type ErrorInfo,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { ErrorDetails } from \"../data/diagnostics/ErrorDetails\";\nimport {\n normalizeErrorDiagnostics,\n reportPageLine,\n type ErrorDiagnostics,\n} from \"../data/diagnostics/error-diagnostics\";\nimport { Icon } from \"../data/Icon\";\nimport { UiCheck, UiCopy, UiWarningTriangle } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\nexport type ErrorWrapperProps = {\n children: ReactNode;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n /** Render host-specific recovery actions without replacing ancestors of this boundary. */\n renderFallback?: (failure: {\n error: Error;\n componentStack: string | null;\n report: string;\n reset: () => void;\n }) => ReactNode;\n};\n\ntype ErrorWrapperState = {\n error: Error | null;\n componentStack: string | null;\n};\n\nexport class ErrorWrapper extends Component<\n ErrorWrapperProps,\n ErrorWrapperState\n> {\n override state: ErrorWrapperState = {\n error: null,\n componentStack: null,\n };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({ componentStack: errorInfo.componentStack ?? null });\n this.props.onError?.(error, errorInfo);\n }\n\n override render(): ReactElement {\n if (this.state.error) {\n if (this.props.renderFallback)\n return (\n <>\n {this.props.renderFallback({\n error: this.state.error,\n componentStack: this.state.componentStack,\n report: errorReport(this.state.error, this.state.componentStack),\n reset: () => this.setState({ error: null, componentStack: null }),\n })}\n </>\n );\n return (\n <ErrorFallback\n error={this.state.error}\n componentStack={this.state.componentStack}\n />\n );\n }\n return <>{this.props.children}</>;\n }\n}\n\ntype CopyState = \"idle\" | \"copied\" | \"failed\";\n\nfunction copyStatusMessage(copyState: CopyState): string {\n if (copyState === \"copied\") return \"Error details copied to clipboard.\";\n if (copyState === \"failed\") {\n return \"Clipboard access failed. Expand the error details to copy individual values.\";\n }\n return \"\";\n}\n\nfunction ErrorFallback({\n error,\n componentStack,\n}: {\n error: Error;\n componentStack: string | null;\n}) {\n const [copyState, setCopyState] = useState<CopyState>(\"idle\");\n const diagnostics = useMemo(\n () => errorDiagnostics(error, componentStack),\n [componentStack, error],\n );\n\n const copyDetails = async () => {\n if (!navigator.clipboard?.writeText) {\n setCopyState(\"failed\");\n return;\n }\n try {\n await navigator.clipboard.writeText(errorReport(error, componentStack));\n setCopyState(\"copied\");\n } catch {\n setCopyState(\"failed\");\n }\n };\n\n return (\n <main\n data-slot=\"error-wrapper\"\n role=\"alert\"\n aria-labelledby=\"error-wrapper-title\"\n className=\"flex min-h-dvh w-full items-center justify-center bg-background p-density-6 text-foreground\"\n >\n <div className=\"w-full max-w-3xl\">\n <div className=\"mb-density-4 flex items-start gap-density-3\">\n <span className=\"grid size-12 shrink-0 place-items-center rounded-full bg-destructive/10 text-destructive\">\n <Icon icon={UiWarningTriangle} className=\"size-6\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-destructive\">\n Unexpected application error\n </p>\n <h1\n id=\"error-wrapper-title\"\n className=\"mt-density-1 text-2xl font-semibold tracking-tight\"\n >\n Something went wrong\n </h1>\n <p className=\"mt-density-2 break-words text-sm text-muted-foreground\">\n {diagnostics.message}\n </p>\n </div>\n </div>\n\n <div className=\"mb-density-3 flex items-center gap-density-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => void copyDetails()}\n >\n <Icon icon={copyState === \"copied\" ? UiCheck : UiCopy} />\n {/* Distinct from ErrorDetails' own \"Copy error details\" control\n below: this copies the page-level report (URL, user agent,\n React component stack), and two identically named buttons in\n one view are ambiguous to assistive tech. */}\n {copyState === \"copied\" ? \"Copied\" : \"Copy error report\"}\n </Button>\n <span\n aria-live=\"polite\"\n className={cn(\n \"text-xs\",\n copyState === \"failed\"\n ? \"text-destructive\"\n : \"text-muted-foreground\",\n )}\n >\n {copyStatusMessage(copyState)}\n </span>\n </div>\n\n <ErrorDetails diagnostics={diagnostics} />\n </div>\n </main>\n );\n}\n\nfunction errorDiagnostics(\n error: Error,\n componentStack: string | null,\n): ErrorDiagnostics {\n const diagnostics = normalizeErrorDiagnostics(\n error,\n \"An unexpected error was thrown without a message.\",\n );\n if (!diagnostics) {\n throw new Error(\"ErrorWrapper could not normalize the captured error\");\n }\n\n const cause =\n error.cause === undefined\n ? []\n : [[\"cause\", String(error.cause)] as [string, string]];\n const reactStack = componentStack?.trim();\n return {\n ...diagnostics,\n context: [...diagnostics.context, ...cause],\n ...(reactStack\n ? {\n stacktrace: [\n diagnostics.stacktrace,\n \"React component stack:\",\n reactStack,\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n }\n : {}),\n };\n}\n\nfunction errorReport(error: Error, componentStack: string | null) {\n const lines = [\n `Error: ${error.message || \"An unexpected error was thrown without a message.\"}`,\n ];\n if (error.name !== \"Error\") lines.push(`Type: ${error.name}`);\n if (error.cause !== undefined) lines.push(`Cause: ${String(error.cause)}`);\n const page = reportPageLine();\n if (page) lines.push(page);\n if (typeof navigator !== \"undefined\" && navigator.userAgent) {\n lines.push(`User agent: ${navigator.userAgent}`);\n }\n lines.push(`Time: ${new Date().toISOString()}`);\n if (error.stack) lines.push(\"\", \"Stack trace:\", error.stack);\n if (componentStack?.trim()) {\n lines.push(\"\", \"React component stack:\", componentStack.trim());\n }\n return lines.join(\"\\n\");\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,13 @@ import { Component, ErrorInfo, ReactElement, ReactNode } from 'react';
|
|
|
2
2
|
export type ErrorWrapperProps = {
|
|
3
3
|
children: ReactNode;
|
|
4
4
|
onError?: (error: Error, errorInfo: ErrorInfo) => void;
|
|
5
|
+
/** Render host-specific recovery actions without replacing ancestors of this boundary. */
|
|
6
|
+
renderFallback?: (failure: {
|
|
7
|
+
error: Error;
|
|
8
|
+
componentStack: string | null;
|
|
9
|
+
report: string;
|
|
10
|
+
reset: () => void;
|
|
11
|
+
}) => ReactNode;
|
|
5
12
|
};
|
|
6
13
|
type ErrorWrapperState = {
|
|
7
14
|
error: Error | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorWrapper.d.ts","sourceRoot":"","sources":["../../src/components/ErrorWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAYf,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ErrorWrapper.d.ts","sourceRoot":"","sources":["../../src/components/ErrorWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAYf,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACvD,0FAA0F;IAC1F,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QACzB,KAAK,EAAE,KAAK,CAAC;QACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB,KAAK,SAAS,CAAC;CACjB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,qBAAa,YAAa,SAAQ,SAAS,CACzC,iBAAiB,EACjB,iBAAiB,CAClB;IACU,KAAK,EAAE,iBAAiB,CAG/B;IAEF,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK;;;IAInC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAKpD,MAAM,IAAI,YAAY;CAsBhC"}
|