@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileReview.js","names":[],"sources":["../../../src/file-findings/file-review/FileReview.tsx"],"sourcesContent":["import type { DropdownMenuItem } from \"../../overlay/DropdownMenu\";\nimport { ProblemActions } from \"../../data/diagnostics/ProblemActions\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type MouseEvent, type ReactNode } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { highlightToLines, languageFromPath, type HighlightedLine } from \"../../data/code-highlight\";\nimport { Icon } from \"../../data/Icon\";\nimport { useResolvedTheme } from \"../../hooks/use-theme\";\nimport { Markdown } from \"../../data/Markdown\";\nimport { Tabs } from \"../../layout/Tabs\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { cn } from \"../../lib/utils\";\nimport { resolveCommentStage, selectCommentThreadsByStage } from \"../../lib/comment-stage\";\nimport { CommentThread } from \"../../comments/CommentThread\";\nimport { DEFAULT_COMMENT_STATUSES, type Comment, type CommentCallbacks, type CommentConfig } from \"../../comments/comment-types\";\nimport { getRoots, selectAnchorThreads } from \"../../comments/comment-utils\";\nimport { UiCheck, UiDotsVertical, UiEye, UiFileCode, UiGitCommit, UiListChecks } from \"../../icons\";\nimport { FINDINGS_COMMENT_CONFIG, findingsToComments, lineAnchor } from \"../findings-comments\";\nimport { AnnotatedCode } from \"../LazyAnnotatedCode\";\nimport { blankMdxPreamble } from \"../mdx-source\";\nimport type { FileFinding } from \"../types\";\nimport { layoutCards, type AnchorMode, type Box } from \"./geometry\";\nimport { useAnchorBoxes, useCardHeights, useNarrow } from \"./hooks\";\nimport { SEVERITY_MARK, SEVERITY_RANK, severityOf, squiggle, type Severity } from \"./marks\";\nimport { ProblemsList } from \"./ProblemsList\";\nimport type { ProblemFilters } from \"./problem-filters\";\nimport {\n QUOTE_PREFIX,\n describeQuote,\n locateSelection,\n locateSourceSelection,\n parseQuoteAnchor,\n quoteAnchor,\n sourceSpans,\n type QuoteLocator,\n} from \"./quote-anchor\";\nimport { SourceView } from \"./SourceView\";\nimport { markAnchors, sourceRangeOf, sourceSpanOf, type SourceMark } from \"./source-marks\";\nimport { SOURCE_PREFIX, describeSource, locateSource, parseSourceAnchor, resolveSource, sourceAnchor } from \"./source-anchor\";\nimport { blameLines, type BlameRange } from \"./blame\";\nimport { InlineThread } from \"./InlineThread\";\nimport { InlineAuthors } from \"./InlineAuthors\";\nimport { CommentDraft, type CommentDraftPosition } from \"./CommentDraft\";\n\nconst DEFAULT_CONFIG: CommentConfig = { statuses: DEFAULT_COMMENT_STATUSES };\nconst ESTIMATED_CARD_HEIGHT = 96;\n/** How long the pointer rests on a highlight before its inline box opens. */\nconst HOVER_OPEN_MS = 450;\n/** Grace period for the pointer to travel from a highlight into its inline box. */\nconst HOVER_CLOSE_MS = 300;\n/** Width left of a block, over its severity bar, that previews a finding on hover. */\nconst BAR_HOVER_WIDTH = 16;\n// Stable defaults: a fresh `[]` per render would re-derive every anchor and re-measure forever.\nconst NO_FINDINGS: readonly FileFinding[] = [];\nconst NO_COMMENTS: Comment[] = [];\nconst NO_CALLBACKS: CommentCallbacks = {};\n\n/** Findings anchor on their line (`lineAnchor`); people's threads on a quote. */\nconst FINDING_ANCHOR_PREFIX = lineAnchor(1).replace(/\\d+$/, \"\");\nconst isFindingAnchor = (anchor: string) => anchor.startsWith(FINDING_ANCHOR_PREFIX);\n\ntype AuthorFilter = \"all\" | \"user\" | \"agent\";\n/** A selection offered for commenting: a Comment pill that morphs into a composer card once `expanded`. */\ntype Draft = { anchor: string; label: string; position: CommentDraftPosition; expanded: boolean; surface: \"preview\" | \"source\" };\n\nconst isMarkdownPath = (path: string) => /\\.mdx?$/i.test(path);\n/** Anchors on quoted text: words in rendered markdown (`q:`) or characters in a source file (`s:`). */\nconst isTextAnchor = (anchor: string) => anchor.startsWith(QUOTE_PREFIX) || anchor.startsWith(SOURCE_PREFIX);\nconst quoteDraft = (locator: QuoteLocator) => ({ anchor: quoteAnchor(locator), label: describeQuote(locator) });\n\nfunction boxClass({ mode, active }: { mode: AnchorMode; active: boolean }) {\n if (mode === \"block\") {\n return cn(\n \"border-l-[3px] border-amber-400\",\n active ? \"bg-amber-200/50 [[data-theme=dark]_&]:bg-amber-400/20\" : \"bg-amber-100/30 [[data-theme=dark]_&]:bg-amber-400/5\",\n );\n }\n return cn(\n \"rounded-sm\",\n active ? \"bg-amber-300 [[data-theme=dark]_&]:bg-amber-400/50\" : \"bg-amber-200/60 [[data-theme=dark]_&]:bg-amber-400/25\",\n );\n}\n\nfunction anchorLabel(anchor: string, found: boolean): string {\n const label = anchor.startsWith(QUOTE_PREFIX)\n ? describeQuote(parseQuoteAnchor(anchor))\n : anchor.startsWith(SOURCE_PREFIX)\n ? describeSource(parseSourceAnchor(anchor))\n : anchor.replace(\"line:\", \"line \");\n return found ? label : `Text not found · ${label}`;\n}\n\nconst WORD = /[\\p{L}\\p{N}'’-]/u;\n\n/** The word under a viewport point, or null when the point is not over a word. */\nfunction wordAt(x: number, y: number): Range | null {\n const caret = document.caretRangeFromPoint?.(x, y);\n const node = caret?.startContainer;\n if (!caret || !node || node.nodeType !== Node.TEXT_NODE) return null;\n const text = node.textContent ?? \"\";\n let start = caret.startOffset;\n let end = caret.startOffset;\n while (start > 0 && WORD.test(text[start - 1]!)) start--;\n while (end < text.length && WORD.test(text[end]!)) end++;\n if (start === end) return null;\n const range = document.createRange();\n range.setStart(node, start);\n range.setEnd(node, end);\n return range;\n}\n\nexport type FileReviewView = \"preview\" | \"source\" | \"problems\";\n\nexport type FileReviewLayout = \"margin\" | \"inline\";\n\n/** People's threads on the document and what they may do with them. */\nexport type FileReviewComments = {\n /** Every comment on the document; quote threads carry `q:` anchors from `quoteAnchor`. */\n items: Comment[];\n callbacks: CommentCallbacks;\n /** Statuses and facets of the host's comments; lint statuses are added for findings. */\n config?: CommentConfig | undefined;\n};\n\nexport type FileReviewProps = {\n /**\n * File path. Markdown (`.md`, `.mdx`) gets a rendered Preview, with an\n * `.mdx` file's frontmatter and ESM statements blanked; any other file is\n * reviewed as syntax-highlighted Source, its language taken from the extension.\n */\n path: string;\n /** The file being reviewed. */\n source: string;\n /** \"preview\" is only valid for markdown. */\n view: FileReviewView;\n onViewChange: (view: FileReviewView) => void;\n /** Lint findings: a severity rail and squiggle on each flagged block, read-only threads, and a Problems tab. */\n findings?: readonly FileFinding[] | undefined;\n /** Severity and issue-type filters on the Problems tab. Controlled; needed with the \"problems\" view. */\n problemFilters?: ProblemFilters | undefined;\n onProblemFiltersChange?: ((filters: ProblemFilters) => void) | undefined;\n /** People's comments: quote highlights, threads and author avatars. Without it the document has no comment UI. */\n comments?: FileReviewComments | undefined;\n /** Draw a quote as its exact text, or as the whole block holding it. */\n mode?: AnchorMode | undefined;\n /** Selecting or right-clicking text offers a Comment button that starts a thread on it; needs `comments.callbacks.onCreate`. */\n selectToComment?: boolean | undefined;\n /** Show People / Tools chips that filter threads by author kind. */\n authorFilter?: boolean | undefined;\n /** Threads in a margin rail, or in a box under the highlight that opens on hover. */\n layout?: FileReviewLayout | undefined;\n /** Offers the thread layouts in the tab bar's overflow menu. */\n onLayoutChange?: ((layout: FileReviewLayout) => void) | undefined;\n /**\n * Makes Source an editor: the findings show in Monaco (host renders a\n * MonacoProvider) and each edit is reported here. Without it Source is a\n * read-only listing where text can be commented on.\n */\n onSourceChange?: ((source: string) => void) | undefined;\n /**\n * `git blame` for `source`: offers a Blame toggle that shows who last\n * changed each line in a gutter, in the read-only Source listing. Must cover\n * the same revision as `source`, so omit it while the text has unsaved edits.\n */\n blame?: readonly BlameRange[] | undefined;\n /** Line to reveal and focus, e.g. from the host's URL. Controlled with `onLineChange`. */\n line?: number | undefined;\n /** Called with a finding's line when the reader picks it. */\n onLineChange?: ((line: number) => void) | undefined;\n /** Contextual actions for a finding in Problems, Source and Preview. Return an empty array when no host actions apply. */\n getFindingActions?: ((finding: FileFinding) => DropdownMenuItem[]) | undefined;\n /** Host controls in the header row, e.g. lint, save or revert buttons. */\n toolbar?: ReactNode;\n /** Sizes the frame; the document and sidebar scroll inside it. Defaults to a fixed 520px pane. */\n className?: string | undefined;\n};\n\nconst LAYOUTS: { id: FileReviewLayout; label: string }[] = [\n { id: \"inline\", label: \"Inline comments\" },\n { id: \"margin\", label: \"Comment sidebar\" },\n];\n\n/** Sidebar cards level with their anchored line, or stacked in document order. */\ntype SidebarAlign = \"line\" | \"stack\";\n\nconst SIDEBAR_ALIGNS: { id: SidebarAlign; label: string }[] = [\n { id: \"line\", label: \"Align to line\" },\n { id: \"stack\", label: \"Stacked list\" },\n];\n\n/** Space kept above a target scrolled into view. */\nconst REVEAL_OFFSET = 48;\n\n/**\n * Google Docs-style review of one file. Markdown gets a rendered Preview with\n * threads in the margin or inline; any file gets a syntax-highlighted Source\n * listing with threads under their lines. Each feature is on when its prop is\n * given: lint `findings` (rail, squiggles, Problems), people's `comments`\n * (quote highlights and threads), text selection to comment, `blame`, and an\n * editable source.\n */\nexport function FileReview({\n path,\n source: raw,\n view,\n onViewChange,\n findings: findingsProp,\n problemFilters,\n onProblemFiltersChange,\n comments,\n mode = \"text\",\n selectToComment = false,\n authorFilter = false,\n layout = \"margin\",\n onLayoutChange,\n onSourceChange,\n blame,\n line,\n onLineChange,\n getFindingActions,\n toolbar,\n className,\n}: FileReviewProps) {\n const lint = findingsProp !== undefined;\n const findings = findingsProp ?? NO_FINDINGS;\n const prose = isMarkdownPath(path);\n if (view === \"problems\" && !lint) throw new Error(\"FileReview: view \\\"problems\\\" needs `findings`\");\n if (view === \"problems\" && (!problemFilters || !onProblemFiltersChange))\n throw new Error(\"FileReview: view \\\"problems\\\" needs `problemFilters` and `onProblemFiltersChange`\");\n if (view === \"preview\" && !prose) throw new Error(`FileReview: view \"preview\" needs a markdown file, got ${path}`);\n const [showBlame, setShowBlame] = useState(false);\n const [showFindings, setShowFindings] = useState(true);\n const blaming = showBlame && blame !== undefined;\n // Blame annotates committed lines, so it shows in the read-only listing even for an editable file.\n const editing = onSourceChange !== undefined && !blaming;\n const people = comments?.items ?? NO_COMMENTS;\n const callbacks = comments?.callbacks ?? NO_CALLBACKS;\n const hostConfig = comments?.config ?? DEFAULT_CONFIG;\n const config = useMemo<CommentConfig>(\n () => ({\n ...hostConfig,\n statuses: [...hostConfig.statuses, ...FINDINGS_COMMENT_CONFIG.statuses],\n // Severity is already the status badge; repeating it as a facet chip crowds a 300px card.\n facets: [...(hostConfig.facets ?? []), ...(FINDINGS_COMMENT_CONFIG.facets ?? []).filter((facet) => facet.key !== \"severity\")],\n }),\n [hostConfig],\n );\n const canComment = selectToComment && Boolean(callbacks.onCreate);\n const source = useMemo(() => (path.endsWith(\".mdx\") ? blankMdxPreamble(raw) : raw), [path, raw]);\n const sourceLines = useMemo(() => source.split(\"\\n\"), [source]);\n const blamed = useMemo(() => (blaming ? blameLines(blame, sourceLines.length) : null), [blaming, blame, sourceLines.length]);\n const theme = useResolvedTheme();\n const listing = view === \"source\" && !editing;\n // Source and the Problems context blocks both colour their lines with the same tokens.\n const tokenized = listing || view === \"problems\";\n const [tokens, setTokens] = useState<{ source: string; lines: HighlightedLine[] | null } | null>(null);\n useEffect(() => {\n if (!tokenized) return;\n let current = true;\n const shiki = theme === \"dark\" ? \"github-dark\" : \"github-light\";\n void highlightToLines(source, { lang: languageFromPath(path), theme: shiki }).then(\n (lines) => current && setTokens({ source, lines }),\n );\n return () => {\n current = false;\n };\n }, [tokenized, source, path, theme]);\n // Tokens of an earlier text would colour the wrong characters; show plain text until the new ones arrive.\n const sourceTokens = tokens?.source === source ? tokens.lines : null;\n const [align, setAlign] = useState<SidebarAlign>(\"line\");\n const [focused, setFocused] = useState<string | null>(null);\n const [hovered, setHovered] = useState<string | null>(null);\n const [draft, setDraft] = useState<Draft | null>(null);\n const [filter, setFilter] = useState<AuthorFilter>(\"all\");\n const [editorLine, setEditorLine] = useState<number | undefined>(undefined);\n /** A finding picked from Source or Problems: the preview scrolls to it once its box is measured. */\n const [revealing, setRevealing] = useState<string | null>(null);\n const scroller = useRef<HTMLDivElement>(null);\n /** The rendered document's own scroll pane, beside the sidebar's (wide layouts only). */\n const bodyPane = useRef<HTMLDivElement>(null);\n const sidebarPane = useRef<HTMLDivElement>(null);\n const outer = useRef<HTMLDivElement>(null);\n const origin = useRef<HTMLDivElement>(null);\n const markdown = useRef<HTMLDivElement>(null);\n const narrow = useNarrow(outer);\n const { heights, refFor } = useCardHeights();\n\n const findingComments = useMemo(() => findingsToComments(findings), [findings]);\n const all = useMemo(() => [...findingComments, ...people], [findingComments, people]);\n // findingsToComments keeps the findings' order, so a thread's id leads back to its finding.\n const findingById = useMemo(() => new Map(findingComments.map((c, i) => [c.id, findings[i]!])), [findingComments, findings]);\n const renderRootDetails = useMemo(() => {\n if (!getFindingActions) return undefined;\n return (comment: Comment) => {\n const finding = findingById.get(comment.id);\n return finding ? <ProblemActions items={getFindingActions(finding)} /> : null;\n };\n }, [getFindingActions, findingById]);\n const filtered = useMemo(\n () => all.filter((c) => c.parentId || filter === \"all\" || (c.author?.kind ?? \"user\") === filter),\n [all, filter],\n );\n const open = useMemo(() => selectCommentThreadsByStage(filtered, config, \"active\"), [filtered, config]);\n const resolvedCount = getRoots(filtered).filter((c) => resolveCommentStage(config, c.status) !== \"active\").length;\n const threadAnchors = useMemo(() => [...new Set(getRoots(open).map((c) => c.anchor ?? \"\"))].filter(Boolean), [open]);\n // An expanded draft highlights its selection, but has no thread to place in the sidebar until posted.\n const draftAnchor = draft?.expanded ? draft.anchor : null;\n const unposted = draftAnchor && !threadAnchors.includes(draftAnchor) ? draftAnchor : null;\n const anchors = useMemo(() => (unposted ? [...threadAnchors, unposted] : threadAnchors), [threadAnchors, unposted]);\n // A line with several findings shows its most severe one.\n const severity = useMemo(() => {\n const worst = new Map<string, Severity>();\n for (const c of getRoots(open)) {\n if (!c.anchor || !isFindingAnchor(c.anchor)) continue;\n const level = severityOf(c.status);\n const current = worst.get(c.anchor);\n if (!current || SEVERITY_RANK[level] > SEVERITY_RANK[current]) worst.set(c.anchor, level);\n }\n return worst;\n }, [open]);\n const { boxes, height, width } = useAnchorBoxes({ origin, markdown, anchors, mode, visible: view === \"preview\" });\n const sourceOrigin = useRef<HTMLDivElement>(null);\n const [sourceWidth, setSourceWidth] = useState(0);\n const [sourceMarks, setSourceMarks] = useState<SourceMark[]>([]);\n // Source quotes (`s:`) resolve against the text; markdown quotes (`q:`) against the\n // rendered preview, which stays mounted while hidden.\n useLayoutEffect(() => {\n if (view !== \"source\" || !sourceOrigin.current) return;\n const root = markdown.current;\n const mark = () =>\n setSourceMarks(\n anchors\n .flatMap((anchor) => {\n if (anchor.startsWith(SOURCE_PREFIX)) return [{ anchor, spans: resolveSource(source, parseSourceAnchor(anchor)) }];\n if (root && anchor.startsWith(QUOTE_PREFIX)) return [{ anchor, spans: sourceSpans(root, sourceLines, parseQuoteAnchor(anchor)) }];\n return [];\n })\n .filter((m) => m.spans.length > 0),\n );\n mark();\n // Opened straight on Source, the hidden preview may still be rendering the quotes resolve against.\n const renders = new MutationObserver(mark);\n if (root) renders.observe(root, { childList: true, subtree: true, characterData: true });\n const el = sourceOrigin.current;\n const resizes = new ResizeObserver(() => setSourceWidth(el.offsetWidth));\n resizes.observe(el);\n return () => {\n renders.disconnect();\n resizes.disconnect();\n };\n }, [view, anchors, source, sourceLines, editing]);\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n /** The anchor the pointer is heading for; `hovered` catches up once the timer fires. */\n const intended = useRef<string | null>(null);\n // A pinned box stays put while the pointer previews other highlights.\n const inlineAnchor = focused ?? hovered;\n useEffect(() => () => clearTimeout(hoverTimer.current ?? undefined), []);\n /** The hovered or pinned quote thread in Source, floating under its highlighted words. */\n const [sourceThread, setSourceThread] = useState<{ anchor: string; boxes: Box[] } | null>(null);\n useLayoutEffect(() => {\n const root = sourceOrigin.current;\n if (view !== \"source\" || !root || !inlineAnchor || !isTextAnchor(inlineAnchor)) return setSourceThread(null);\n const base = root.getBoundingClientRect();\n const boxes = [...root.querySelectorAll<HTMLElement>(\"[data-source-comment]\")]\n .filter((el) => markAnchors(el).includes(inlineAnchor))\n .flatMap((el) => [...el.getClientRects()])\n .map((r) => ({ top: r.top - base.top, left: r.left - base.left, width: r.width, height: r.height }));\n setSourceThread(boxes.length > 0 ? { anchor: inlineAnchor, boxes } : null);\n }, [view, inlineAnchor, sourceMarks, sourceWidth]);\n\n const target = revealing ? boxes.get(revealing)?.[0] : undefined;\n // Narrow layouts stack the sidebar under the document, so the whole frame scrolls as one.\n useEffect(() => {\n const pane = (narrow ? scroller : bodyPane).current;\n if (view !== \"preview\" || !target || !pane || !origin.current) return;\n const top = origin.current.getBoundingClientRect().top - pane.getBoundingClientRect().top + pane.scrollTop + target.top;\n const visible = top >= pane.scrollTop && top + target.height <= pane.scrollTop + pane.clientHeight;\n if (!visible) pane.scrollTop = top - REVEAL_OFFSET;\n setRevealing(null);\n }, [view, target, narrow]);\n // In the Source listing a picked finding scrolls its line into view.\n useEffect(() => {\n const pane = scroller.current;\n if (view !== \"source\" || !revealing || !pane) return;\n const line = isFindingAnchor(revealing) ? revealing.slice(FINDING_ANCHOR_PREFIX.length) : null;\n const row = line ? pane.querySelector<HTMLElement>(`[data-source-line=\"${line}\"]`) : null;\n if (row) {\n const top = row.getBoundingClientRect().top - pane.getBoundingClientRect().top + pane.scrollTop;\n const visible = top >= pane.scrollTop && top + row.offsetHeight <= pane.scrollTop + pane.clientHeight;\n if (!visible) pane.scrollTop = top - REVEAL_OFFSET;\n }\n setRevealing(null);\n }, [view, revealing]);\n\n const sidebarScrolls = layout === \"margin\" && !narrow;\n /** Aligned cards sit at their anchor's offset, so matching the document's scroll puts each level with its line. */\n const levelSidebar = () => {\n if (sidebarScrolls && align === \"line\" && sidebarPane.current && bodyPane.current) {\n sidebarPane.current.scrollTop = bodyPane.current.scrollTop;\n }\n };\n // Re-level after the user scrolled the sidebar on its own and then picked a thread.\n useEffect(levelSidebar, [focused, align, sidebarScrolls]);\n // A stacked list scrolls the focused card into view instead.\n useEffect(() => {\n const pane = sidebarPane.current;\n if (!sidebarScrolls || align !== \"stack\" || !focused || !pane) return;\n const card = [...pane.querySelectorAll<HTMLElement>(\"[data-card-anchor]\")].find((el) => el.dataset.cardAnchor === focused);\n if (!card) return;\n const top = card.getBoundingClientRect().top - pane.getBoundingClientRect().top + pane.scrollTop;\n const visible = top >= pane.scrollTop && top + card.offsetHeight <= pane.scrollTop + pane.clientHeight;\n if (!visible) pane.scrollTop = top - REVEAL_OFFSET;\n }, [focused, align, sidebarScrolls]);\n\n /** Picking a card focuses its thread and brings the anchored text into view. */\n function focusCard(anchor: string) {\n setFocused(anchor);\n setRevealing(anchor);\n if (isFindingAnchor(anchor)) onLineChange?.(Number(anchor.slice(FINDING_ANCHOR_PREFIX.length)));\n }\n\n function openFinding(finding: FileFinding) {\n const anchor = lineAnchor(finding.line);\n onViewChange(prose ? \"preview\" : \"source\");\n setFocused(anchor);\n setRevealing(anchor);\n if (!prose) setEditorLine(finding.line);\n onLineChange?.(finding.line);\n }\n\n // A line named by the host (its URL) is revealed and focused like a picked finding.\n useEffect(() => {\n if (line === undefined) return;\n const anchor = lineAnchor(line);\n setFocused(anchor);\n setRevealing(anchor);\n setEditorLine(line);\n }, [line]);\n\n const documentOrder = [...boxes.keys()];\n const tops = layoutCards({\n cards: threadAnchors.map((anchor) => ({\n anchor,\n desired: boxes.get(anchor)?.[0]?.top ?? height,\n order: boxes.has(anchor) ? documentOrder.indexOf(anchor) : documentOrder.length,\n height: heights[anchor] ?? ESTIMATED_CARD_HEIGHT,\n })),\n focused,\n });\n const railHeight = Math.max(height, ...threadAnchors.map((a) => (tops.get(a) ?? 0) + (heights[a] ?? ESTIMATED_CARD_HEIGHT)));\n const ordered = [...threadAnchors].sort((a, b) => (tops.get(a) ?? 0) - (tops.get(b) ?? 0));\n\n /**\n * The anchor under the pointer, preferring an exact quote over the block holding it.\n * A click takes the whole block; a hover only an exact quote or a block's severity\n * bar, so reading a paragraph with a finding in it does not open anything.\n */\n function anchorAt(event: MouseEvent<HTMLDivElement>, intent: \"click\" | \"hover\"): string | null {\n const base = event.currentTarget.getBoundingClientRect();\n const x = event.clientX - base.left;\n const y = event.clientY - base.top;\n const hits = [...boxes]\n .filter(([anchor, list]) => {\n if (anchor === unposted) return false;\n if (isFindingAnchor(anchor)) {\n const last = list[list.length - 1]!;\n const inRail = x <= BAR_HOVER_WIDTH && y >= list[0]!.top && y <= last.top + last.height;\n return inRail || (intent === \"click\" && list.some((b) => y >= b.top && y <= b.top + b.height && x >= b.left && x <= b.left + b.width));\n }\n return list.some((b) => {\n if (y < b.top || y > b.top + b.height) return false;\n const exact = mode === \"text\";\n if (intent === \"click\" || exact) return x >= b.left - (exact ? 0 : 12) && x <= b.left + b.width;\n return x >= b.left - BAR_HOVER_WIDTH && x <= b.left;\n });\n })\n .map(([anchor]) => anchor);\n return hits.find((a) => a.startsWith(QUOTE_PREFIX)) ?? hits[0] ?? null;\n }\n\n const fromInlineThread = (event: MouseEvent) =>\n (event.target as Element).closest(\"[data-inline-thread], [data-comment-draft], [data-source-thread]\") !== null;\n\n /**\n * The anchor a selection makes. In markdown, a Source selection is mapped onto\n * the rendered text so the thread shows in Preview too; in any other file it\n * anchors on the source characters.\n */\n function locate(surface: Draft[\"surface\"], range: Range): Pick<Draft, \"anchor\" | \"label\"> | null {\n if (!prose) {\n const covered = sourceRangeOf(range);\n const locator = covered && locateSource(source, covered.start, covered.end);\n return locator ? { anchor: sourceAnchor(locator), label: describeSource(locator) } : null;\n }\n if (!markdown.current) return null;\n if (surface === \"preview\") {\n const locator = locateSelection(markdown.current, range);\n return locator && quoteDraft(locator);\n }\n const span = sourceSpanOf(range);\n const locator = span && locateSourceSelection(markdown.current, sourceLines, span);\n return locator && quoteDraft(locator);\n }\n\n const surfaceOrigin = (surface: Draft[\"surface\"]) => (surface === \"preview\" ? origin : sourceOrigin).current!;\n\n function focusAt(event: MouseEvent<HTMLDivElement>) {\n if (!window.getSelection()?.isCollapsed || fromInlineThread(event) || (event.target as Element).closest(\"button, a\")) return;\n setFocused(anchorAt(event, \"click\"));\n }\n\n /**\n * Hover intent: the pointer has to rest on a highlight before its box opens,\n * and leaving starts a grace period so the pointer can still reach the box.\n * Re-targeting only on a change keeps continuous movement from resetting the timer.\n */\n function hoverTo(anchor: string | null) {\n if (anchor === intended.current) return;\n intended.current = anchor;\n clearTimeout(hoverTimer.current ?? undefined);\n hoverTimer.current = setTimeout(() => setHovered(anchor), anchor ? HOVER_OPEN_MS : HOVER_CLOSE_MS);\n }\n\n function keepHover(anchor: string) {\n clearTimeout(hoverTimer.current ?? undefined);\n intended.current = anchor;\n }\n\n function closeInlineThread() {\n clearTimeout(hoverTimer.current ?? undefined);\n intended.current = null;\n setFocused(null);\n setHovered(null);\n }\n\n /** Source previews a thread while the pointer rests on its highlighted words. */\n function hoverSourceAt(event: MouseEvent<HTMLDivElement>) {\n if (fromInlineThread(event)) return;\n const selecting = event.buttons !== 0 || !window.getSelection()?.isCollapsed;\n const mark = (event.target as Element).closest<HTMLElement>(\"[data-source-comment]\");\n hoverTo(selecting || !mark ? null : markAnchors(mark)[0]!);\n }\n\n /** Clicking away from a highlight and its box unpins it. */\n function unpinSourceAt(event: MouseEvent<HTMLDivElement>) {\n if (fromInlineThread(event) || (event.target as Element).closest(\"[data-source-comment], button, a\")) return;\n if (focused && isTextAnchor(focused) && window.getSelection()?.isCollapsed) closeInlineThread();\n }\n\n function hoverAt(event: MouseEvent<HTMLDivElement>) {\n if (layout !== \"inline\" || fromInlineThread(event)) return;\n // Dragging out a selection is reading or commenting, not asking to preview.\n const selecting = event.buttons !== 0 || !window.getSelection()?.isCollapsed;\n hoverTo(selecting ? null : anchorAt(event, \"hover\"));\n }\n\n function offerComment(event: MouseEvent<HTMLDivElement>, surface: Draft[\"surface\"]) {\n if (!canComment || fromInlineThread(event) || (event.target as Element).closest(\"[data-comment-author]\")) return;\n const selection = window.getSelection();\n const range = selection && !selection.isCollapsed && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n const locator = range ? locate(surface, range) : null;\n if (!range || !locator) {\n // An open composer may hold typed text: only Escape or its close button discards it.\n setDraft((current) => (current?.expanded ? current : null));\n return;\n }\n const base = surfaceOrigin(surface).getBoundingClientRect();\n const rect = range.getBoundingClientRect();\n setDraft({\n ...locator,\n position: { top: rect.top - base.top, bottom: rect.bottom - base.top, left: rect.left - base.left + rect.width / 2 },\n expanded: false,\n surface,\n });\n }\n\n /**\n * Right-click offers Comment at the pointer: on the selection when the pointer\n * is inside it, else on the word under the pointer, which it selects.\n */\n function commentMenu(event: MouseEvent<HTMLDivElement>, surface: Draft[\"surface\"]) {\n if (!canComment || fromInlineThread(event) || (event.target as Element).closest(\"[data-comment-author], button, a\")) return;\n const selection = window.getSelection();\n const current = selection && !selection.isCollapsed && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n const inside = current && [...current.getClientRects()].some((r) => event.clientX >= r.left && event.clientX <= r.right && event.clientY >= r.top && event.clientY <= r.bottom);\n const range = inside ? current : wordAt(event.clientX, event.clientY);\n const locator = range ? locate(surface, range) : null;\n if (!range || !locator) return;\n event.preventDefault();\n if (!inside) {\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n const base = surfaceOrigin(surface).getBoundingClientRect();\n const rect = range.getBoundingClientRect();\n setDraft({\n ...locator,\n position: { top: rect.top - base.top, bottom: rect.bottom - base.top, left: event.clientX - base.left },\n expanded: false,\n surface,\n });\n }\n\n /** The pill morphs into its composer card; the measured highlight replaces the browser selection. */\n function expandDraft() {\n setDraft((current) => current && { ...current, expanded: true });\n window.getSelection()?.removeAllRanges();\n }\n\n const closeDraft = useCallback(() => setDraft(null), []);\n\n /** An open card follows its measured highlight, so a reflow (width, layout) keeps it beside the text. */\n function draftPosition(current: Draft): CommentDraftPosition {\n const list = current.expanded && current.surface === \"preview\" ? boxes.get(current.anchor) : undefined;\n const first = list?.[0];\n const last = list?.at(-1);\n if (!first || !last) return current.position;\n return { top: first.top, bottom: last.top + last.height, left: first.left + first.width / 2 };\n }\n\n function renderDraft(current: Draft, containerWidth: number) {\n const onCreate = callbacks.onCreate;\n if (!onCreate) return null;\n const { anchor, label } = current;\n return (\n <CommentDraft\n key={anchor}\n anchor={anchor}\n label={label}\n position={draftPosition(current)}\n containerWidth={containerWidth}\n expanded={current.expanded}\n config={config}\n onExpand={expandDraft}\n onClose={closeDraft}\n onCreate={async (input) => {\n await onCreate(input);\n setDraft(null);\n setFocused(anchor);\n }}\n />\n );\n }\n\n return (\n <div ref={outer} data-file-review={path} className={cn(\"flex min-h-0 flex-col gap-2\", className ?? \"h-[600px]\")}>\n <div className=\"flex shrink-0 flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n {toolbar}\n {(comments || lint) && (\n <span>\n {getRoots(open).length} open · {resolvedCount} resolved (hidden)\n </span>\n )}\n {comments && layout === \"inline\" && <span>· hover a highlight to view or reply</span>}\n {canComment && <span>· select or right-click text to comment</span>}\n {authorFilter && (\n <div role=\"radiogroup\" aria-label=\"Authors\" className=\"ml-auto inline-flex rounded-md border border-border p-0.5\">\n {([\"all\", \"user\", \"agent\"] as const).map((value) => (\n <button\n key={value}\n type=\"button\"\n role=\"radio\"\n aria-checked={filter === value}\n onClick={() => setFilter(value)}\n className={cn(\n \"rounded px-2 py-0.5 font-medium\",\n filter === value ? \"bg-primary text-primary-foreground\" : \"hover:text-foreground\",\n )}\n >\n {value === \"all\" ? \"All\" : value === \"user\" ? \"People\" : \"Tools\"}\n </button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center border-b border-border\">\n <Tabs\n className=\"min-w-0 flex-1 border-b-0\"\n value={view}\n onChange={(id) => {\n onViewChange(id as FileReviewView);\n setDraft(null);\n }}\n tabs={[\n ...(prose ? [{ id: \"preview\", label: \"Preview\", icon: UiEye }] : []),\n { id: \"source\", label: \"Source\", icon: UiFileCode },\n ...(lint ? [{ id: \"problems\", label: \"Problems\", icon: UiListChecks, count: findings.length }] : []),\n ]}\n />\n {lint && findings.length > 0 && view === \"source\" && !editing && (\n <Button\n size=\"sm\"\n variant={showFindings ? \"secondary\" : \"ghost\"}\n aria-pressed={showFindings}\n title={showFindings ? \"Show only the gutter marks; pick one to read its findings\" : \"Show each line's findings underneath it\"}\n onClick={() => setShowFindings((shown) => !shown)}\n className=\"shrink-0 gap-1.5\"\n >\n <Icon icon={UiListChecks} />\n Findings\n </Button>\n )}\n {blame && view === \"source\" && (\n <Button\n size=\"sm\"\n variant={showBlame ? \"secondary\" : \"ghost\"}\n aria-pressed={showBlame}\n title={showBlame ? \"Hide who last changed each line\" : \"Show who last changed each line\"}\n onClick={() => setShowBlame((shown) => !shown)}\n className=\"shrink-0 gap-1.5\"\n >\n <Icon icon={UiGitCommit} />\n Blame\n </Button>\n )}\n {comments && onLayoutChange && prose && view !== \"problems\" && (\n <DropdownMenu\n align=\"right\"\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"sm\"\n title=\"View options\"\n menuLabel=\"View options\"\n className=\"shrink-0\"\n items={[\n ...LAYOUTS.map((entry) => ({\n label: entry.label,\n group: \"Comments\",\n icon: UiCheck,\n iconClassName: entry.id === layout ? undefined : \"invisible\",\n onSelect: () => onLayoutChange(entry.id),\n })),\n ...(layout === \"margin\"\n ? SIDEBAR_ALIGNS.map((entry) => ({\n label: entry.label,\n group: \"Sidebar cards\",\n icon: UiCheck,\n iconClassName: entry.id === align ? undefined : \"invisible\",\n onSelect: () => setAlign(entry.id),\n }))\n : []),\n ]}\n />\n )}\n </div>\n <div\n ref={scroller}\n className={cn(\n \"relative min-h-0 flex-1 rounded-md border border-border bg-background\",\n editing && view === \"source\" ? \"overflow-hidden\" : \"overflow-y-auto\",\n )}\n >\n {editing && view === \"source\" && (\n <AnnotatedCode\n path={path}\n source={raw}\n findings={findings}\n line={editorLine}\n onLineChange={setEditorLine}\n onChange={onSourceChange}\n inlineChips\n />\n )}\n {!editing && view === \"source\" && (\n <div\n ref={sourceOrigin}\n className=\"relative\"\n onMouseUp={(event) => event.button === 0 && offerComment(event, \"source\")}\n onContextMenu={(event) => commentMenu(event, \"source\")}\n onClick={unpinSourceAt}\n onMouseMove={hoverSourceAt}\n onMouseLeave={() => hoverTo(null)}\n >\n <SourceView\n source={source}\n tokens={sourceTokens}\n blame={blamed}\n findings={findings}\n showFindings={showFindings}\n marks={sourceMarks}\n comments={open}\n selected={inlineAnchor ?? draftAnchor}\n onSelect={(f) => {\n setFocused(lineAnchor(f.line));\n onLineChange?.(f.line);\n }}\n getFindingActions={getFindingActions}\n onFocus={setFocused}\n />\n {draft?.surface === \"source\" && renderDraft(draft, sourceWidth)}\n {sourceThread && (\n <InlineThread\n key={sourceThread.anchor}\n seamless\n anchor={sourceThread.anchor}\n label={anchorLabel(sourceThread.anchor, true)}\n boxes={sourceThread.boxes}\n containerWidth={sourceWidth}\n thread={selectAnchorThreads(open, sourceThread.anchor)}\n config={config}\n callbacks={callbacks}\n pinned={focused === sourceThread.anchor}\n onPin={() => setFocused(sourceThread.anchor)}\n onClose={closeInlineThread}\n onPointerEnter={() => keepHover(sourceThread.anchor)}\n onPointerLeave={() => hoverTo(null)}\n />\n )}\n </div>\n )}\n {view === \"problems\" && problemFilters && onProblemFiltersChange && (\n <ProblemsList\n source={source}\n tokens={sourceTokens}\n findings={findings}\n filters={problemFilters}\n onFiltersChange={onProblemFiltersChange}\n onOpen={openFinding}\n openLabel={prose ? \"Open in preview\" : \"Open in source\"}\n getFindingActions={getFindingActions}\n />\n )}\n {/* Hidden rather than unmounted, so anchor boxes stay measured and a picked finding scrolls straight to its line. */}\n {prose && (\n <div className={cn(\"flex\", narrow ? \"flex-col gap-4 p-4\" : \"h-full\", view !== \"preview\" && \"hidden\")}>\n {/* Wide layouts give the document and the sidebar their own scroll panes. */}\n <div ref={bodyPane} onScroll={levelSidebar} className={cn(\"min-w-0 flex-1\", !narrow && \"overflow-y-auto p-4\")}>\n <div\n ref={origin}\n className=\"relative\"\n onMouseUp={(event) => event.button === 0 && offerComment(event, \"preview\")}\n onContextMenu={(event) => commentMenu(event, \"preview\")}\n onClick={focusAt}\n onMouseMove={hoverAt}\n onMouseLeave={() => layout === \"inline\" && hoverTo(null)}\n >\n {[...boxes].flatMap(([anchor, list]) => {\n const active = anchor === focused || anchor === hovered || anchor === draftAnchor;\n if (isFindingAnchor(anchor)) {\n const level = severity.get(anchor);\n if (!level) throw new Error(`lint anchor ${anchor} has no open finding`);\n const mark = SEVERITY_MARK[level];\n const first = list[0]!;\n return [\n <span\n key={`${anchor}:rail`}\n data-lint-rail={level}\n aria-hidden\n className={cn(\"pointer-events-none absolute z-20 flex size-4 items-center justify-center rounded-sm\", mark.tone, active && mark.tint)}\n style={{ top: first.top + first.height / 2 - 8, left: 0 }}\n >\n <Icon icon={mark.icon} className=\"text-[13px]\" />\n </span>,\n ...list.map((box, i) => (\n <div\n key={`${anchor}:${i}`}\n data-anchor-box={anchor}\n data-lint-squiggle={level}\n aria-hidden\n className={cn(\"pointer-events-none absolute z-0 transition-colors\", active && mark.tint)}\n style={{ top: box.top, left: box.left, width: box.width, height: box.height + 3 }}\n >\n <span\n className=\"absolute inset-x-0 bottom-0 h-[3px]\"\n style={{ backgroundImage: squiggle(mark.stroke), backgroundRepeat: \"repeat-x\", backgroundSize: \"6px 3px\" }}\n />\n </div>\n )),\n ];\n }\n return list.map((box, i) => (\n <div\n key={`${anchor}:${i}`}\n data-anchor-box={anchor}\n aria-hidden\n className={cn(\"pointer-events-none absolute z-0 transition-colors\", boxClass({ mode, active }))}\n style={\n mode === \"text\"\n ? { top: box.top, left: box.left, width: box.width, height: box.height }\n : { top: box.top - 2, left: box.left - 10, width: box.width + 10, height: box.height + 4 }\n }\n />\n ));\n })}\n <div ref={markdown} data-annotated-markdown=\"\" className=\"relative z-10 pl-4\">\n <Markdown sourceBlocks text={source} />\n </div>\n {comments && layout === \"inline\" && <InlineAuthors markdown={markdown} comments={open} focused={focused} onFocus={setFocused} />}\n {draft?.surface === \"preview\" && renderDraft(draft, width)}\n {layout === \"inline\" && inlineAnchor && (\n <InlineThread\n key={inlineAnchor}\n anchor={inlineAnchor}\n label={anchorLabel(inlineAnchor, true)}\n boxes={boxes.get(inlineAnchor) ?? []}\n containerWidth={width}\n thread={selectAnchorThreads(open, inlineAnchor)}\n config={config}\n callbacks={isFindingAnchor(inlineAnchor) ? NO_CALLBACKS : callbacks}\n renderRootDetails={renderRootDetails}\n pinned={focused === inlineAnchor}\n onPin={() => setFocused(inlineAnchor)}\n onClose={closeInlineThread}\n onPointerEnter={() => keepHover(inlineAnchor)}\n onPointerLeave={() => hoverTo(null)}\n />\n )}\n </div>\n </div>\n {layout === \"margin\" && (\n <div\n ref={sidebarPane}\n data-comment-sidebar={narrow ? \"below\" : align}\n className={cn(narrow ? \"w-full\" : \"w-[316px] shrink-0 overflow-y-auto overscroll-contain border-l border-border py-4 pl-2 pr-4\")}\n >\n <div\n className={cn(\"relative\", (narrow || align === \"stack\") && \"space-y-2\")}\n style={sidebarScrolls && align === \"line\" ? { height: railHeight } : undefined}\n >\n {ordered.map((anchor) => {\n const thread = selectAnchorThreads(open, anchor);\n const isFocused = anchor === focused;\n return (\n <div\n key={`${anchor}:${isFocused}`}\n ref={refFor(anchor)}\n data-card-anchor={anchor}\n onMouseEnter={() => setHovered(anchor)}\n onMouseLeave={() => setHovered(null)}\n onClick={() => focusCard(anchor)}\n className={cn(\n \"rounded-lg border bg-card transition-[top,transform] duration-150\",\n sidebarScrolls && align === \"line\" && \"absolute inset-x-0\",\n isFocused ? \"z-10 -translate-x-2 border-primary/50 shadow-lg\" : \"border-border shadow-sm\",\n )}\n style={sidebarScrolls && align === \"line\" ? { top: tops.get(anchor) ?? 0 } : undefined}\n >\n <div className=\"truncate px-2 pt-2 text-[11px] text-muted-foreground\">\n {anchorLabel(anchor, boxes.has(anchor))}\n </div>\n <CommentThread\n comments={thread}\n config={config}\n anchor={anchor}\n compact\n defaultExpanded={isFocused || isFindingAnchor(anchor)}\n hideComposer={thread.length > 0}\n autoFocusComposer={thread.length === 0}\n composerPlaceholder=\"Add a comment…\"\n {...(isFindingAnchor(anchor) ? NO_CALLBACKS : callbacks)}\n {...(renderRootDetails ? { renderRootDetails } : {})}\n />\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const require_utils = require("../../lib/utils.cjs");
|
|
2
|
+
const require_comment_utils = require("../../comments/comment-utils.cjs");
|
|
3
|
+
const require_CommentAuthor = require("../../comments/CommentAuthor.cjs");
|
|
4
|
+
const require_quote_anchor = require("./quote-anchor.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let react_dom = require("react-dom");
|
|
8
|
+
// src/file-findings/file-review/InlineAuthors.tsx
|
|
9
|
+
function InlineAuthors({ markdown, comments, focused, onFocus }) {
|
|
10
|
+
const [hosts, setHosts] = (0, react.useState)(/* @__PURE__ */ new Map());
|
|
11
|
+
(0, react.useLayoutEffect)(() => {
|
|
12
|
+
const root = markdown.current;
|
|
13
|
+
if (!root) return;
|
|
14
|
+
const mounted = /* @__PURE__ */ new Map();
|
|
15
|
+
const sync = () => {
|
|
16
|
+
let changed = false;
|
|
17
|
+
for (const comment of require_comment_utils.getRoots(comments)) {
|
|
18
|
+
const anchor = comment.anchor;
|
|
19
|
+
if (!anchor?.startsWith("q:") || mounted.get(comment.id)?.isConnected) continue;
|
|
20
|
+
const range = require_quote_anchor.resolveQuote(root, require_quote_anchor.parseQuoteAnchor(anchor));
|
|
21
|
+
if (!range) continue;
|
|
22
|
+
const host = document.createElement("span");
|
|
23
|
+
host.dataset.commentAuthor = comment.id;
|
|
24
|
+
host.className = "ml-1 inline-flex max-w-full align-middle leading-none";
|
|
25
|
+
host.contentEditable = "false";
|
|
26
|
+
range.collapse(false);
|
|
27
|
+
range.insertNode(host);
|
|
28
|
+
mounted.set(comment.id, host);
|
|
29
|
+
changed = true;
|
|
30
|
+
}
|
|
31
|
+
if (changed) setHosts(new Map(mounted));
|
|
32
|
+
};
|
|
33
|
+
sync();
|
|
34
|
+
const observer = new MutationObserver(sync);
|
|
35
|
+
observer.observe(root, {
|
|
36
|
+
childList: true,
|
|
37
|
+
subtree: true
|
|
38
|
+
});
|
|
39
|
+
return () => {
|
|
40
|
+
observer.disconnect();
|
|
41
|
+
for (const host of mounted.values()) host.remove();
|
|
42
|
+
};
|
|
43
|
+
}, [markdown, comments]);
|
|
44
|
+
const replies = require_comment_utils.buildReplyMap(comments);
|
|
45
|
+
return require_comment_utils.getRoots(comments).map((comment) => {
|
|
46
|
+
const host = hosts.get(comment.id);
|
|
47
|
+
const anchor = comment.anchor;
|
|
48
|
+
if (!host || !anchor) return null;
|
|
49
|
+
const replyCount = replies.get(comment.id)?.length ?? 0;
|
|
50
|
+
return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
51
|
+
type: "button",
|
|
52
|
+
"aria-label": `Open comment by ${require_comment_utils.authorDisplayName(comment.author ?? null)}`,
|
|
53
|
+
"aria-pressed": focused === anchor,
|
|
54
|
+
title: comment.body,
|
|
55
|
+
className: require_utils.cn("inline-flex max-w-[min(40ch,100%)] items-center gap-1 rounded-full border border-border bg-muted py-px pl-px pr-2 text-xs font-normal text-muted-foreground ring-offset-background hover:text-foreground hover:ring-2 hover:ring-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary", focused === anchor && "text-foreground ring-2 ring-primary"),
|
|
56
|
+
onClick: () => onFocus(anchor),
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CommentAuthor.CommentAuthorAvatar, {
|
|
59
|
+
author: comment.author ?? null,
|
|
60
|
+
size: "xs",
|
|
61
|
+
bare: true
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
64
|
+
className: "truncate",
|
|
65
|
+
children: require_comment_utils.truncatePlain(comment.body)
|
|
66
|
+
}),
|
|
67
|
+
replyCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
68
|
+
className: "shrink-0 tabular-nums",
|
|
69
|
+
children: ["· ", replyCount]
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
}), host, comment.id);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
exports.InlineAuthors = InlineAuthors;
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=InlineAuthors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineAuthors.cjs","names":["useState","getRoots","resolveQuote","parseQuoteAnchor","buildReplyMap","createPortal","authorDisplayName","cn","CommentAuthorAvatar","truncatePlain"],"sources":["../../../src/file-findings/file-review/InlineAuthors.tsx"],"sourcesContent":["import { useLayoutEffect, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CommentAuthorAvatar } from \"../../comments/CommentAuthor\";\nimport type { Comment } from \"../../comments/comment-types\";\nimport { authorDisplayName, buildReplyMap, getRoots, truncatePlain } from \"../../comments/comment-utils\";\nimport { cn } from \"../../lib/utils\";\n\nimport { QUOTE_PREFIX, parseQuoteAnchor, resolveQuote } from \"./quote-anchor\";\n\nexport function InlineAuthors({\n markdown,\n comments,\n focused,\n onFocus,\n}: {\n markdown: RefObject<HTMLDivElement | null>;\n comments: Comment[];\n focused: string | null;\n onFocus: (anchor: string) => void;\n}) {\n const [hosts, setHosts] = useState(new Map<string, HTMLElement>());\n useLayoutEffect(() => {\n const root = markdown.current;\n if (!root) return;\n const mounted = new Map<string, HTMLElement>();\n const sync = () => {\n let changed = false;\n for (const comment of getRoots(comments)) {\n const anchor = comment.anchor;\n if (!anchor?.startsWith(QUOTE_PREFIX) || mounted.get(comment.id)?.isConnected) continue;\n const range = resolveQuote(root, parseQuoteAnchor(anchor));\n if (!range) continue;\n const host = document.createElement(\"span\");\n host.dataset.commentAuthor = comment.id;\n host.className = \"ml-1 inline-flex max-w-full align-middle leading-none\";\n host.contentEditable = \"false\";\n range.collapse(false);\n range.insertNode(host);\n mounted.set(comment.id, host);\n changed = true;\n }\n if (changed) setHosts(new Map(mounted));\n };\n sync();\n const observer = new MutationObserver(sync);\n observer.observe(root, { childList: true, subtree: true });\n return () => {\n observer.disconnect();\n for (const host of mounted.values()) host.remove();\n };\n }, [markdown, comments]);\n\n const replies = buildReplyMap(comments);\n return getRoots(comments).map((comment) => {\n const host = hosts.get(comment.id);\n const anchor = comment.anchor;\n if (!host || !anchor) return null;\n const replyCount = replies.get(comment.id)?.length ?? 0;\n return createPortal(\n <button\n type=\"button\"\n aria-label={`Open comment by ${authorDisplayName(comment.author ?? null)}`}\n aria-pressed={focused === anchor}\n title={comment.body}\n className={cn(\n \"inline-flex max-w-[min(40ch,100%)] items-center gap-1 rounded-full border border-border bg-muted py-px pl-px pr-2 text-xs font-normal text-muted-foreground ring-offset-background hover:text-foreground hover:ring-2 hover:ring-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\",\n focused === anchor && \"text-foreground ring-2 ring-primary\",\n )}\n onClick={() => onFocus(anchor)}\n >\n <CommentAuthorAvatar author={comment.author ?? null} size=\"xs\" bare />\n <span className=\"truncate\">{truncatePlain(comment.body)}</span>\n {replyCount > 0 && <span className=\"shrink-0 tabular-nums\">· {replyCount}</span>}\n </button>,\n host,\n comment.id,\n );\n });\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,cAAc,EAC5B,UACA,UACA,SACA,WAMC;CACD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,iBAAS,IAAI,IAAyB,CAAC;CACjE,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,OAAO,SAAS;EACtB,IAAI,CAAC,MAAM;EACX,MAAM,0BAAU,IAAI,IAAyB;EAC7C,MAAM,aAAa;GACjB,IAAI,UAAU;GACd,KAAK,MAAM,WAAWC,sBAAAA,SAAS,QAAQ,GAAG;IACxC,MAAM,SAAS,QAAQ;IACvB,IAAI,CAAC,QAAQ,WAAA,IAAuB,KAAK,QAAQ,IAAI,QAAQ,EAAE,CAAC,EAAE,aAAa;IAC/E,MAAM,QAAQC,qBAAAA,aAAa,MAAMC,qBAAAA,iBAAiB,MAAM,CAAC;IACzD,IAAI,CAAC,OAAO;IACZ,MAAM,OAAO,SAAS,cAAc,MAAM;IAC1C,KAAK,QAAQ,gBAAgB,QAAQ;IACrC,KAAK,YAAY;IACjB,KAAK,kBAAkB;IACvB,MAAM,SAAS,KAAK;IACpB,MAAM,WAAW,IAAI;IACrB,QAAQ,IAAI,QAAQ,IAAI,IAAI;IAC5B,UAAU;GACZ;GACA,IAAI,SAAS,SAAS,IAAI,IAAI,OAAO,CAAC;EACxC;EACA,KAAK;EACL,MAAM,WAAW,IAAI,iBAAiB,IAAI;EAC1C,SAAS,QAAQ,MAAM;GAAE,WAAW;GAAM,SAAS;EAAK,CAAC;EACzD,aAAa;GACX,SAAS,WAAW;GACpB,KAAK,MAAM,QAAQ,QAAQ,OAAO,GAAG,KAAK,OAAO;EACnD;CACF,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,UAAUC,sBAAAA,cAAc,QAAQ;CACtC,OAAOH,sBAAAA,SAAS,QAAQ,CAAC,CAAC,KAAK,YAAY;EACzC,MAAM,OAAO,MAAM,IAAI,QAAQ,EAAE;EACjC,MAAM,SAAS,QAAQ;EACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,OAAO;EAC7B,MAAM,aAAa,QAAQ,IAAI,QAAQ,EAAE,CAAC,EAAE,UAAU;EACtD,QAAA,GAAOI,UAAAA,aAAAA,CACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;GACE,MAAK;GACL,cAAY,mBAAmBC,sBAAAA,kBAAkB,QAAQ,UAAU,IAAI;GACvE,gBAAc,YAAY;GAC1B,OAAO,QAAQ;GACf,WAAWC,cAAAA,GACT,0TACA,YAAY,UAAU,qCACxB;GACA,eAAe,QAAQ,MAAM;GAT/B,UAAA;IAWE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,qBAAD;KAAqB,QAAQ,QAAQ,UAAU;KAAM,MAAK;KAAK,MAAA;IAAM,CAAA;IACrE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAY,UAAAC,sBAAAA,cAAc,QAAQ,IAAI;IAAQ,CAAA;IAC7D,aAAa,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CAAwC,MAAG,UAAiB;;GACzE;EACR,CAAA,GAAA,MACA,QAAQ,EACV;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { Comment } from '../../comments/comment-types.js';
|
|
3
|
+
export declare function InlineAuthors({ markdown, comments, focused, onFocus, }: {
|
|
4
|
+
markdown: RefObject<HTMLDivElement | null>;
|
|
5
|
+
comments: Comment[];
|
|
6
|
+
focused: string | null;
|
|
7
|
+
onFocus: (anchor: string) => void;
|
|
8
|
+
}): (import('react').ReactPortal | null)[];
|
|
9
|
+
//# sourceMappingURL=InlineAuthors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineAuthors.d.ts","sourceRoot":"","sources":["../../../src/file-findings/file-review/InlineAuthors.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAM5D,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,0CA2DA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { authorDisplayName, buildReplyMap, getRoots, truncatePlain } from "../../comments/comment-utils.js";
|
|
3
|
+
import { CommentAuthorAvatar } from "../../comments/CommentAuthor.js";
|
|
4
|
+
import { parseQuoteAnchor, resolveQuote } from "./quote-anchor.js";
|
|
5
|
+
import { useLayoutEffect, useState } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { createPortal } from "react-dom";
|
|
8
|
+
// src/file-findings/file-review/InlineAuthors.tsx
|
|
9
|
+
function InlineAuthors({ markdown, comments, focused, onFocus }) {
|
|
10
|
+
const [hosts, setHosts] = useState(/* @__PURE__ */ new Map());
|
|
11
|
+
useLayoutEffect(() => {
|
|
12
|
+
const root = markdown.current;
|
|
13
|
+
if (!root) return;
|
|
14
|
+
const mounted = /* @__PURE__ */ new Map();
|
|
15
|
+
const sync = () => {
|
|
16
|
+
let changed = false;
|
|
17
|
+
for (const comment of getRoots(comments)) {
|
|
18
|
+
const anchor = comment.anchor;
|
|
19
|
+
if (!anchor?.startsWith("q:") || mounted.get(comment.id)?.isConnected) continue;
|
|
20
|
+
const range = resolveQuote(root, parseQuoteAnchor(anchor));
|
|
21
|
+
if (!range) continue;
|
|
22
|
+
const host = document.createElement("span");
|
|
23
|
+
host.dataset.commentAuthor = comment.id;
|
|
24
|
+
host.className = "ml-1 inline-flex max-w-full align-middle leading-none";
|
|
25
|
+
host.contentEditable = "false";
|
|
26
|
+
range.collapse(false);
|
|
27
|
+
range.insertNode(host);
|
|
28
|
+
mounted.set(comment.id, host);
|
|
29
|
+
changed = true;
|
|
30
|
+
}
|
|
31
|
+
if (changed) setHosts(new Map(mounted));
|
|
32
|
+
};
|
|
33
|
+
sync();
|
|
34
|
+
const observer = new MutationObserver(sync);
|
|
35
|
+
observer.observe(root, {
|
|
36
|
+
childList: true,
|
|
37
|
+
subtree: true
|
|
38
|
+
});
|
|
39
|
+
return () => {
|
|
40
|
+
observer.disconnect();
|
|
41
|
+
for (const host of mounted.values()) host.remove();
|
|
42
|
+
};
|
|
43
|
+
}, [markdown, comments]);
|
|
44
|
+
const replies = buildReplyMap(comments);
|
|
45
|
+
return getRoots(comments).map((comment) => {
|
|
46
|
+
const host = hosts.get(comment.id);
|
|
47
|
+
const anchor = comment.anchor;
|
|
48
|
+
if (!host || !anchor) return null;
|
|
49
|
+
const replyCount = replies.get(comment.id)?.length ?? 0;
|
|
50
|
+
return createPortal(/* @__PURE__ */ jsxs("button", {
|
|
51
|
+
type: "button",
|
|
52
|
+
"aria-label": `Open comment by ${authorDisplayName(comment.author ?? null)}`,
|
|
53
|
+
"aria-pressed": focused === anchor,
|
|
54
|
+
title: comment.body,
|
|
55
|
+
className: cn("inline-flex max-w-[min(40ch,100%)] items-center gap-1 rounded-full border border-border bg-muted py-px pl-px pr-2 text-xs font-normal text-muted-foreground ring-offset-background hover:text-foreground hover:ring-2 hover:ring-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary", focused === anchor && "text-foreground ring-2 ring-primary"),
|
|
56
|
+
onClick: () => onFocus(anchor),
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ jsx(CommentAuthorAvatar, {
|
|
59
|
+
author: comment.author ?? null,
|
|
60
|
+
size: "xs",
|
|
61
|
+
bare: true
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ jsx("span", {
|
|
64
|
+
className: "truncate",
|
|
65
|
+
children: truncatePlain(comment.body)
|
|
66
|
+
}),
|
|
67
|
+
replyCount > 0 && /* @__PURE__ */ jsxs("span", {
|
|
68
|
+
className: "shrink-0 tabular-nums",
|
|
69
|
+
children: ["· ", replyCount]
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
}), host, comment.id);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export { InlineAuthors };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=InlineAuthors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineAuthors.js","names":[],"sources":["../../../src/file-findings/file-review/InlineAuthors.tsx"],"sourcesContent":["import { useLayoutEffect, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CommentAuthorAvatar } from \"../../comments/CommentAuthor\";\nimport type { Comment } from \"../../comments/comment-types\";\nimport { authorDisplayName, buildReplyMap, getRoots, truncatePlain } from \"../../comments/comment-utils\";\nimport { cn } from \"../../lib/utils\";\n\nimport { QUOTE_PREFIX, parseQuoteAnchor, resolveQuote } from \"./quote-anchor\";\n\nexport function InlineAuthors({\n markdown,\n comments,\n focused,\n onFocus,\n}: {\n markdown: RefObject<HTMLDivElement | null>;\n comments: Comment[];\n focused: string | null;\n onFocus: (anchor: string) => void;\n}) {\n const [hosts, setHosts] = useState(new Map<string, HTMLElement>());\n useLayoutEffect(() => {\n const root = markdown.current;\n if (!root) return;\n const mounted = new Map<string, HTMLElement>();\n const sync = () => {\n let changed = false;\n for (const comment of getRoots(comments)) {\n const anchor = comment.anchor;\n if (!anchor?.startsWith(QUOTE_PREFIX) || mounted.get(comment.id)?.isConnected) continue;\n const range = resolveQuote(root, parseQuoteAnchor(anchor));\n if (!range) continue;\n const host = document.createElement(\"span\");\n host.dataset.commentAuthor = comment.id;\n host.className = \"ml-1 inline-flex max-w-full align-middle leading-none\";\n host.contentEditable = \"false\";\n range.collapse(false);\n range.insertNode(host);\n mounted.set(comment.id, host);\n changed = true;\n }\n if (changed) setHosts(new Map(mounted));\n };\n sync();\n const observer = new MutationObserver(sync);\n observer.observe(root, { childList: true, subtree: true });\n return () => {\n observer.disconnect();\n for (const host of mounted.values()) host.remove();\n };\n }, [markdown, comments]);\n\n const replies = buildReplyMap(comments);\n return getRoots(comments).map((comment) => {\n const host = hosts.get(comment.id);\n const anchor = comment.anchor;\n if (!host || !anchor) return null;\n const replyCount = replies.get(comment.id)?.length ?? 0;\n return createPortal(\n <button\n type=\"button\"\n aria-label={`Open comment by ${authorDisplayName(comment.author ?? null)}`}\n aria-pressed={focused === anchor}\n title={comment.body}\n className={cn(\n \"inline-flex max-w-[min(40ch,100%)] items-center gap-1 rounded-full border border-border bg-muted py-px pl-px pr-2 text-xs font-normal text-muted-foreground ring-offset-background hover:text-foreground hover:ring-2 hover:ring-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\",\n focused === anchor && \"text-foreground ring-2 ring-primary\",\n )}\n onClick={() => onFocus(anchor)}\n >\n <CommentAuthorAvatar author={comment.author ?? null} size=\"xs\" bare />\n <span className=\"truncate\">{truncatePlain(comment.body)}</span>\n {replyCount > 0 && <span className=\"shrink-0 tabular-nums\">· {replyCount}</span>}\n </button>,\n host,\n comment.id,\n );\n });\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,cAAc,EAC5B,UACA,UACA,SACA,WAMC;CACD,MAAM,CAAC,OAAO,YAAY,yBAAS,IAAI,IAAyB,CAAC;CACjE,sBAAsB;EACpB,MAAM,OAAO,SAAS;EACtB,IAAI,CAAC,MAAM;EACX,MAAM,0BAAU,IAAI,IAAyB;EAC7C,MAAM,aAAa;GACjB,IAAI,UAAU;GACd,KAAK,MAAM,WAAW,SAAS,QAAQ,GAAG;IACxC,MAAM,SAAS,QAAQ;IACvB,IAAI,CAAC,QAAQ,WAAA,IAAuB,KAAK,QAAQ,IAAI,QAAQ,EAAE,CAAC,EAAE,aAAa;IAC/E,MAAM,QAAQ,aAAa,MAAM,iBAAiB,MAAM,CAAC;IACzD,IAAI,CAAC,OAAO;IACZ,MAAM,OAAO,SAAS,cAAc,MAAM;IAC1C,KAAK,QAAQ,gBAAgB,QAAQ;IACrC,KAAK,YAAY;IACjB,KAAK,kBAAkB;IACvB,MAAM,SAAS,KAAK;IACpB,MAAM,WAAW,IAAI;IACrB,QAAQ,IAAI,QAAQ,IAAI,IAAI;IAC5B,UAAU;GACZ;GACA,IAAI,SAAS,SAAS,IAAI,IAAI,OAAO,CAAC;EACxC;EACA,KAAK;EACL,MAAM,WAAW,IAAI,iBAAiB,IAAI;EAC1C,SAAS,QAAQ,MAAM;GAAE,WAAW;GAAM,SAAS;EAAK,CAAC;EACzD,aAAa;GACX,SAAS,WAAW;GACpB,KAAK,MAAM,QAAQ,QAAQ,OAAO,GAAG,KAAK,OAAO;EACnD;CACF,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,UAAU,cAAc,QAAQ;CACtC,OAAO,SAAS,QAAQ,CAAC,CAAC,KAAK,YAAY;EACzC,MAAM,OAAO,MAAM,IAAI,QAAQ,EAAE;EACjC,MAAM,SAAS,QAAQ;EACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,OAAO;EAC7B,MAAM,aAAa,QAAQ,IAAI,QAAQ,EAAE,CAAC,EAAE,UAAU;EACtD,OAAO,aACL,qBAAC,UAAD;GACE,MAAK;GACL,cAAY,mBAAmB,kBAAkB,QAAQ,UAAU,IAAI;GACvE,gBAAc,YAAY;GAC1B,OAAO,QAAQ;GACf,WAAW,GACT,0TACA,YAAY,UAAU,qCACxB;GACA,eAAe,QAAQ,MAAM;GAT/B,UAAA;IAWE,oBAAC,qBAAD;KAAqB,QAAQ,QAAQ,UAAU;KAAM,MAAK;KAAK,MAAA;IAAM,CAAA;IACrE,oBAAC,QAAD;KAAM,WAAU;KAAY,UAAA,cAAc,QAAQ,IAAI;IAAQ,CAAA;IAC7D,aAAa,KAAK,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CAAwC,MAAG,UAAiB;;GACzE;EACR,CAAA,GAAA,MACA,QAAQ,EACV;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const require_utils = require("../../lib/utils.cjs");
|
|
2
|
+
const require_UiClose = require("../../icons/components/UiClose.cjs");
|
|
3
|
+
const require_Icon = require("../../data/Icon.cjs");
|
|
4
|
+
const require_CommentThread = require("../../comments/CommentThread.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
// src/file-findings/file-review/InlineThread.tsx
|
|
8
|
+
var WIDTH = 340;
|
|
9
|
+
var GAP = 6;
|
|
10
|
+
/**
|
|
11
|
+
* A thread shown in a box just under its highlighted text. Hovering previews
|
|
12
|
+
* it; any click inside pins it so typing a reply survives the pointer leaving.
|
|
13
|
+
*/
|
|
14
|
+
function InlineThread({ anchor, label, boxes, containerWidth, thread, config, callbacks, pinned, onPin, onClose, onPointerEnter, onPointerLeave, seamless = false, renderRootDetails }) {
|
|
15
|
+
(0, react.useEffect)(() => {
|
|
16
|
+
const close = (event) => event.key === "Escape" && onClose();
|
|
17
|
+
window.addEventListener("keydown", close);
|
|
18
|
+
return () => window.removeEventListener("keydown", close);
|
|
19
|
+
}, [onClose]);
|
|
20
|
+
const first = boxes[0];
|
|
21
|
+
const last = boxes.at(-1);
|
|
22
|
+
if (!first || !last) return null;
|
|
23
|
+
const width = Math.min(WIDTH, containerWidth);
|
|
24
|
+
const left = Math.max(0, Math.min(first.left, containerWidth - width));
|
|
25
|
+
const canAdd = Boolean(callbacks.onCreate);
|
|
26
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
27
|
+
"data-inline-thread": anchor,
|
|
28
|
+
role: "dialog",
|
|
29
|
+
"aria-label": `Comments on ${label}`,
|
|
30
|
+
onMouseEnter: onPointerEnter,
|
|
31
|
+
onMouseLeave: onPointerLeave,
|
|
32
|
+
onMouseDown: onPin,
|
|
33
|
+
className: require_utils.cn("absolute z-30 bg-card", seamless ? "rounded-md font-sans shadow-[0_4px_16px_rgba(0,0,0,0.12)] ring-1 ring-border/60" : "rounded-lg border shadow-lg", !seamless && (pinned ? "border-primary/50" : "border-border")),
|
|
34
|
+
style: {
|
|
35
|
+
top: last.top + last.height + (seamless ? 2 : GAP),
|
|
36
|
+
left,
|
|
37
|
+
width
|
|
38
|
+
},
|
|
39
|
+
children: [!seamless && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
40
|
+
className: "flex items-center gap-1 border-b border-border px-2 py-1 text-[11px] text-muted-foreground",
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
43
|
+
className: "min-w-0 flex-1 truncate",
|
|
44
|
+
children: label
|
|
45
|
+
}),
|
|
46
|
+
!pinned && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "click to pin" }),
|
|
47
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
48
|
+
type: "button",
|
|
49
|
+
"aria-label": "Close comments",
|
|
50
|
+
onClick: onClose,
|
|
51
|
+
className: "rounded p-0.5 hover:bg-muted hover:text-foreground [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:min-w-11",
|
|
52
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
53
|
+
icon: require_UiClose.UiClose,
|
|
54
|
+
className: "text-xs"
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
59
|
+
className: "max-h-[360px] overflow-y-auto",
|
|
60
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CommentThread.CommentThread, {
|
|
61
|
+
comments: thread,
|
|
62
|
+
config,
|
|
63
|
+
anchor,
|
|
64
|
+
compact: true,
|
|
65
|
+
defaultExpanded: true,
|
|
66
|
+
hideComposer: !canAdd || thread.length > 0 && !pinned,
|
|
67
|
+
autoFocusComposer: thread.length === 0,
|
|
68
|
+
composerPlaceholder: thread.length > 0 ? "Add another comment…" : "Add a comment…",
|
|
69
|
+
...callbacks,
|
|
70
|
+
...renderRootDetails ? { renderRootDetails } : {}
|
|
71
|
+
})
|
|
72
|
+
})]
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
exports.InlineThread = InlineThread;
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=InlineThread.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineThread.cjs","names":["cn","Icon","UiClose","CommentThread"],"sources":["../../../src/file-findings/file-review/InlineThread.tsx"],"sourcesContent":["import { useEffect, type ReactNode } from \"react\";\nimport { Icon } from \"../../data/Icon\";\nimport { cn } from \"../../lib/utils\";\nimport { CommentThread } from \"../../comments/CommentThread\";\nimport type { Comment, CommentCallbacks, CommentConfig } from \"../../comments/comment-types\";\nimport { UiClose } from \"../../icons\";\n\nimport type { Box } from \"./geometry\";\n\nconst WIDTH = 340;\nconst GAP = 6;\n\n/**\n * A thread shown in a box just under its highlighted text. Hovering previews\n * it; any click inside pins it so typing a reply survives the pointer leaving.\n */\nexport function InlineThread({\n anchor,\n label,\n boxes,\n containerWidth,\n thread,\n config,\n callbacks,\n pinned,\n onPin,\n onClose,\n onPointerEnter,\n onPointerLeave,\n seamless = false,\n renderRootDetails,\n}: {\n anchor: string;\n label: string;\n boxes: readonly Box[];\n containerWidth: number;\n thread: Comment[];\n config: CommentConfig;\n /** Absent for read-only threads such as tool findings. */\n callbacks: CommentCallbacks;\n pinned: boolean;\n onPin: () => void;\n onClose: () => void;\n onPointerEnter: () => void;\n onPointerLeave: () => void;\n /** No title bar or frame: just the thread floating under its text; Escape or clicking away closes it. */\n seamless?: boolean;\n /** Extra content under a root comment, such as a finding's actions. */\n renderRootDetails?: ((comment: Comment) => ReactNode) | undefined;\n}) {\n // Posting closes the composer and drops focus out of the box, so Escape listens on the window.\n useEffect(() => {\n const close = (event: KeyboardEvent) => event.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [onClose]);\n\n const first = boxes[0];\n const last = boxes.at(-1);\n if (!first || !last) return null;\n const width = Math.min(WIDTH, containerWidth);\n const left = Math.max(0, Math.min(first.left, containerWidth - width));\n const canAdd = Boolean(callbacks.onCreate);\n\n return (\n <div\n data-inline-thread={anchor}\n role=\"dialog\"\n aria-label={`Comments on ${label}`}\n onMouseEnter={onPointerEnter}\n onMouseLeave={onPointerLeave}\n onMouseDown={onPin}\n className={cn(\n \"absolute z-30 bg-card\",\n seamless ? \"rounded-md font-sans shadow-[0_4px_16px_rgba(0,0,0,0.12)] ring-1 ring-border/60\" : \"rounded-lg border shadow-lg\",\n !seamless && (pinned ? \"border-primary/50\" : \"border-border\"),\n )}\n style={{ top: last.top + last.height + (seamless ? 2 : GAP), left, width }}\n >\n {!seamless && (\n <div className=\"flex items-center gap-1 border-b border-border px-2 py-1 text-[11px] text-muted-foreground\">\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {!pinned && <span>click to pin</span>}\n <button\n type=\"button\"\n aria-label=\"Close comments\"\n onClick={onClose}\n className=\"rounded p-0.5 hover:bg-muted hover:text-foreground [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:min-w-11\"\n >\n <Icon icon={UiClose} className=\"text-xs\" />\n </button>\n </div>\n )}\n <div className=\"max-h-[360px] overflow-y-auto\">\n <CommentThread\n comments={thread}\n config={config}\n anchor={anchor}\n compact\n defaultExpanded\n // Hovering only views and replies; a new root comment waits for a pin.\n hideComposer={!canAdd || (thread.length > 0 && !pinned)}\n autoFocusComposer={thread.length === 0}\n composerPlaceholder={thread.length > 0 ? \"Add another comment…\" : \"Add a comment…\"}\n {...callbacks}\n {...(renderRootDetails ? { renderRootDetails } : {})}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AASA,IAAM,QAAQ;AACd,IAAM,MAAM;;;;;AAMZ,SAAgB,aAAa,EAC3B,QACA,OACA,OACA,gBACA,QACA,QACA,WACA,QACA,OACA,SACA,gBACA,gBACA,WAAW,OACX,qBAmBC;CAED,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,SAAS,UAAyB,MAAM,QAAQ,YAAY,QAAQ;EAC1E,OAAO,iBAAiB,WAAW,KAAK;EACxC,aAAa,OAAO,oBAAoB,WAAW,KAAK;CAC1D,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,QAAQ,MAAM;CACpB,MAAM,OAAO,MAAM,GAAG,EAAE;CACxB,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO;CAC5B,MAAM,QAAQ,KAAK,IAAI,OAAO,cAAc;CAC5C,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,MAAM,iBAAiB,KAAK,CAAC;CACrE,MAAM,SAAS,QAAQ,UAAU,QAAQ;CAEzC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,sBAAoB;EACpB,MAAK;EACL,cAAY,eAAe;EAC3B,cAAc;EACd,cAAc;EACd,aAAa;EACb,WAAWA,cAAAA,GACT,yBACA,WAAW,oFAAoF,+BAC/F,CAAC,aAAa,SAAS,sBAAsB,gBAC/C;EACA,OAAO;GAAE,KAAK,KAAK,MAAM,KAAK,UAAU,WAAW,IAAI;GAAM;GAAM;EAAM;EAZ3E,UAAA,CAcG,CAAC,YACF,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAA2B,UAAA;IAAY,CAAA;IACtD,CAAC,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,eAAkB,CAAA;IACpC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KACE,MAAK;KACL,cAAW;KACX,SAAS;KACT,WAAU;KAEV,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;MAAM,MAAMC,gBAAAA;MAAS,WAAU;KAAW,CAAA;IACpC,CAAA;GACL;EAEL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,eAAD;IACE,UAAU;IACF;IACA;IACR,SAAA;IACA,iBAAA;IAEA,cAAc,CAAC,UAAW,OAAO,SAAS,KAAK,CAAC;IAChD,mBAAmB,OAAO,WAAW;IACrC,qBAAqB,OAAO,SAAS,IAAI,yBAAyB;IAClE,GAAI;IACJ,GAAK,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;GACnD,CAAA;EACE,CAAA,CACF;;AAET"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Comment, CommentCallbacks, CommentConfig } from '../../comments/comment-types.js';
|
|
3
|
+
import { Box } from './geometry.js';
|
|
4
|
+
/**
|
|
5
|
+
* A thread shown in a box just under its highlighted text. Hovering previews
|
|
6
|
+
* it; any click inside pins it so typing a reply survives the pointer leaving.
|
|
7
|
+
*/
|
|
8
|
+
export declare function InlineThread({ anchor, label, boxes, containerWidth, thread, config, callbacks, pinned, onPin, onClose, onPointerEnter, onPointerLeave, seamless, renderRootDetails, }: {
|
|
9
|
+
anchor: string;
|
|
10
|
+
label: string;
|
|
11
|
+
boxes: readonly Box[];
|
|
12
|
+
containerWidth: number;
|
|
13
|
+
thread: Comment[];
|
|
14
|
+
config: CommentConfig;
|
|
15
|
+
/** Absent for read-only threads such as tool findings. */
|
|
16
|
+
callbacks: CommentCallbacks;
|
|
17
|
+
pinned: boolean;
|
|
18
|
+
onPin: () => void;
|
|
19
|
+
onClose: () => void;
|
|
20
|
+
onPointerEnter: () => void;
|
|
21
|
+
onPointerLeave: () => void;
|
|
22
|
+
/** No title bar or frame: just the thread floating under its text; Escape or clicking away closes it. */
|
|
23
|
+
seamless?: boolean;
|
|
24
|
+
/** Extra content under a root comment, such as a finding's actions. */
|
|
25
|
+
renderRootDetails?: ((comment: Comment) => ReactNode) | undefined;
|
|
26
|
+
}): import("react").JSX.Element | null;
|
|
27
|
+
//# sourceMappingURL=InlineThread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineThread.d.ts","sourceRoot":"","sources":["../../../src/file-findings/file-review/InlineThread.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAKtC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,KAAK,EACL,KAAK,EACL,cAAc,EACd,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACN,KAAK,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAgB,EAChB,iBAAiB,GAClB,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,0DAA0D;IAC1D,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,yGAAyG;IACzG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;CACnE,sCA6DA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { UiClose } from "../../icons/components/UiClose.js";
|
|
3
|
+
import { Icon } from "../../data/Icon.js";
|
|
4
|
+
import { CommentThread } from "../../comments/CommentThread.js";
|
|
5
|
+
import { useEffect } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
// src/file-findings/file-review/InlineThread.tsx
|
|
8
|
+
var WIDTH = 340;
|
|
9
|
+
var GAP = 6;
|
|
10
|
+
/**
|
|
11
|
+
* A thread shown in a box just under its highlighted text. Hovering previews
|
|
12
|
+
* it; any click inside pins it so typing a reply survives the pointer leaving.
|
|
13
|
+
*/
|
|
14
|
+
function InlineThread({ anchor, label, boxes, containerWidth, thread, config, callbacks, pinned, onPin, onClose, onPointerEnter, onPointerLeave, seamless = false, renderRootDetails }) {
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const close = (event) => event.key === "Escape" && onClose();
|
|
17
|
+
window.addEventListener("keydown", close);
|
|
18
|
+
return () => window.removeEventListener("keydown", close);
|
|
19
|
+
}, [onClose]);
|
|
20
|
+
const first = boxes[0];
|
|
21
|
+
const last = boxes.at(-1);
|
|
22
|
+
if (!first || !last) return null;
|
|
23
|
+
const width = Math.min(WIDTH, containerWidth);
|
|
24
|
+
const left = Math.max(0, Math.min(first.left, containerWidth - width));
|
|
25
|
+
const canAdd = Boolean(callbacks.onCreate);
|
|
26
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
27
|
+
"data-inline-thread": anchor,
|
|
28
|
+
role: "dialog",
|
|
29
|
+
"aria-label": `Comments on ${label}`,
|
|
30
|
+
onMouseEnter: onPointerEnter,
|
|
31
|
+
onMouseLeave: onPointerLeave,
|
|
32
|
+
onMouseDown: onPin,
|
|
33
|
+
className: cn("absolute z-30 bg-card", seamless ? "rounded-md font-sans shadow-[0_4px_16px_rgba(0,0,0,0.12)] ring-1 ring-border/60" : "rounded-lg border shadow-lg", !seamless && (pinned ? "border-primary/50" : "border-border")),
|
|
34
|
+
style: {
|
|
35
|
+
top: last.top + last.height + (seamless ? 2 : GAP),
|
|
36
|
+
left,
|
|
37
|
+
width
|
|
38
|
+
},
|
|
39
|
+
children: [!seamless && /* @__PURE__ */ jsxs("div", {
|
|
40
|
+
className: "flex items-center gap-1 border-b border-border px-2 py-1 text-[11px] text-muted-foreground",
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ jsx("span", {
|
|
43
|
+
className: "min-w-0 flex-1 truncate",
|
|
44
|
+
children: label
|
|
45
|
+
}),
|
|
46
|
+
!pinned && /* @__PURE__ */ jsx("span", { children: "click to pin" }),
|
|
47
|
+
/* @__PURE__ */ jsx("button", {
|
|
48
|
+
type: "button",
|
|
49
|
+
"aria-label": "Close comments",
|
|
50
|
+
onClick: onClose,
|
|
51
|
+
className: "rounded p-0.5 hover:bg-muted hover:text-foreground [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:min-w-11",
|
|
52
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
53
|
+
icon: UiClose,
|
|
54
|
+
className: "text-xs"
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
59
|
+
className: "max-h-[360px] overflow-y-auto",
|
|
60
|
+
children: /* @__PURE__ */ jsx(CommentThread, {
|
|
61
|
+
comments: thread,
|
|
62
|
+
config,
|
|
63
|
+
anchor,
|
|
64
|
+
compact: true,
|
|
65
|
+
defaultExpanded: true,
|
|
66
|
+
hideComposer: !canAdd || thread.length > 0 && !pinned,
|
|
67
|
+
autoFocusComposer: thread.length === 0,
|
|
68
|
+
composerPlaceholder: thread.length > 0 ? "Add another comment…" : "Add a comment…",
|
|
69
|
+
...callbacks,
|
|
70
|
+
...renderRootDetails ? { renderRootDetails } : {}
|
|
71
|
+
})
|
|
72
|
+
})]
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export { InlineThread };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=InlineThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineThread.js","names":[],"sources":["../../../src/file-findings/file-review/InlineThread.tsx"],"sourcesContent":["import { useEffect, type ReactNode } from \"react\";\nimport { Icon } from \"../../data/Icon\";\nimport { cn } from \"../../lib/utils\";\nimport { CommentThread } from \"../../comments/CommentThread\";\nimport type { Comment, CommentCallbacks, CommentConfig } from \"../../comments/comment-types\";\nimport { UiClose } from \"../../icons\";\n\nimport type { Box } from \"./geometry\";\n\nconst WIDTH = 340;\nconst GAP = 6;\n\n/**\n * A thread shown in a box just under its highlighted text. Hovering previews\n * it; any click inside pins it so typing a reply survives the pointer leaving.\n */\nexport function InlineThread({\n anchor,\n label,\n boxes,\n containerWidth,\n thread,\n config,\n callbacks,\n pinned,\n onPin,\n onClose,\n onPointerEnter,\n onPointerLeave,\n seamless = false,\n renderRootDetails,\n}: {\n anchor: string;\n label: string;\n boxes: readonly Box[];\n containerWidth: number;\n thread: Comment[];\n config: CommentConfig;\n /** Absent for read-only threads such as tool findings. */\n callbacks: CommentCallbacks;\n pinned: boolean;\n onPin: () => void;\n onClose: () => void;\n onPointerEnter: () => void;\n onPointerLeave: () => void;\n /** No title bar or frame: just the thread floating under its text; Escape or clicking away closes it. */\n seamless?: boolean;\n /** Extra content under a root comment, such as a finding's actions. */\n renderRootDetails?: ((comment: Comment) => ReactNode) | undefined;\n}) {\n // Posting closes the composer and drops focus out of the box, so Escape listens on the window.\n useEffect(() => {\n const close = (event: KeyboardEvent) => event.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [onClose]);\n\n const first = boxes[0];\n const last = boxes.at(-1);\n if (!first || !last) return null;\n const width = Math.min(WIDTH, containerWidth);\n const left = Math.max(0, Math.min(first.left, containerWidth - width));\n const canAdd = Boolean(callbacks.onCreate);\n\n return (\n <div\n data-inline-thread={anchor}\n role=\"dialog\"\n aria-label={`Comments on ${label}`}\n onMouseEnter={onPointerEnter}\n onMouseLeave={onPointerLeave}\n onMouseDown={onPin}\n className={cn(\n \"absolute z-30 bg-card\",\n seamless ? \"rounded-md font-sans shadow-[0_4px_16px_rgba(0,0,0,0.12)] ring-1 ring-border/60\" : \"rounded-lg border shadow-lg\",\n !seamless && (pinned ? \"border-primary/50\" : \"border-border\"),\n )}\n style={{ top: last.top + last.height + (seamless ? 2 : GAP), left, width }}\n >\n {!seamless && (\n <div className=\"flex items-center gap-1 border-b border-border px-2 py-1 text-[11px] text-muted-foreground\">\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {!pinned && <span>click to pin</span>}\n <button\n type=\"button\"\n aria-label=\"Close comments\"\n onClick={onClose}\n className=\"rounded p-0.5 hover:bg-muted hover:text-foreground [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:min-w-11\"\n >\n <Icon icon={UiClose} className=\"text-xs\" />\n </button>\n </div>\n )}\n <div className=\"max-h-[360px] overflow-y-auto\">\n <CommentThread\n comments={thread}\n config={config}\n anchor={anchor}\n compact\n defaultExpanded\n // Hovering only views and replies; a new root comment waits for a pin.\n hideComposer={!canAdd || (thread.length > 0 && !pinned)}\n autoFocusComposer={thread.length === 0}\n composerPlaceholder={thread.length > 0 ? \"Add another comment…\" : \"Add a comment…\"}\n {...callbacks}\n {...(renderRootDetails ? { renderRootDetails } : {})}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AASA,IAAM,QAAQ;AACd,IAAM,MAAM;;;;;AAMZ,SAAgB,aAAa,EAC3B,QACA,OACA,OACA,gBACA,QACA,QACA,WACA,QACA,OACA,SACA,gBACA,gBACA,WAAW,OACX,qBAmBC;CAED,gBAAgB;EACd,MAAM,SAAS,UAAyB,MAAM,QAAQ,YAAY,QAAQ;EAC1E,OAAO,iBAAiB,WAAW,KAAK;EACxC,aAAa,OAAO,oBAAoB,WAAW,KAAK;CAC1D,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,QAAQ,MAAM;CACpB,MAAM,OAAO,MAAM,GAAG,EAAE;CACxB,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO;CAC5B,MAAM,QAAQ,KAAK,IAAI,OAAO,cAAc;CAC5C,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,MAAM,iBAAiB,KAAK,CAAC;CACrE,MAAM,SAAS,QAAQ,UAAU,QAAQ;CAEzC,OACE,qBAAC,OAAD;EACE,sBAAoB;EACpB,MAAK;EACL,cAAY,eAAe;EAC3B,cAAc;EACd,cAAc;EACd,aAAa;EACb,WAAW,GACT,yBACA,WAAW,oFAAoF,+BAC/F,CAAC,aAAa,SAAS,sBAAsB,gBAC/C;EACA,OAAO;GAAE,KAAK,KAAK,MAAM,KAAK,UAAU,WAAW,IAAI;GAAM;GAAM;EAAM;EAZ3E,UAAA,CAcG,CAAC,YACF,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,oBAAC,QAAD;KAAM,WAAU;KAA2B,UAAA;IAAY,CAAA;IACtD,CAAC,UAAU,oBAAC,QAAD,EAAA,UAAM,eAAkB,CAAA;IACpC,oBAAC,UAAD;KACE,MAAK;KACL,cAAW;KACX,SAAS;KACT,WAAU;KAEV,UAAA,oBAAC,MAAD;MAAM,MAAM;MAAS,WAAU;KAAW,CAAA;IACpC,CAAA;GACL;EAEL,CAAA,GAAA,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,eAAD;IACE,UAAU;IACF;IACA;IACR,SAAA;IACA,iBAAA;IAEA,cAAc,CAAC,UAAW,OAAO,SAAS,KAAK,CAAC;IAChD,mBAAmB,OAAO,WAAW;IACrC,qBAAqB,OAAO,SAAS,IAAI,yBAAyB;IAClE,GAAI;IACJ,GAAK,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;GACnD,CAAA;EACE,CAAA,CACF;;AAET"}
|