@flanksource/clicky-ui 0.3.54 → 0.3.56
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/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/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 +42 -40
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +20 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +43 -42
- 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/index.d.ts +2 -2
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/matrix-marks.cjs +2 -11
- package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
- package/dist/data/test-runner/matrix-marks.d.ts +2 -4
- package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
- package/dist/data/test-runner/matrix-marks.js +3 -11
- package/dist/data/test-runner/matrix-marks.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 +1 -1
- package/dist/data/traces/index.d.ts.map +1 -1
- 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 +58 -7
- package/dist/data.d.ts +9 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +29 -12
- 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 +76 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -14
- 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 +2 -2
- package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
- package/dist/profiles/editor/profileEditorSections.js +2 -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
|
@@ -6,6 +6,11 @@ export type ConnectionFormExtensions = {
|
|
|
6
6
|
pre?: PreExtension[];
|
|
7
7
|
post?: PostExtension[];
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Concatenates form extension sets in argument order, so an earlier set (the
|
|
11
|
+
* schema-derived defaults) runs before a later one (the host's own).
|
|
12
|
+
*/
|
|
13
|
+
export declare function mergeConnectionFormExtensions(...sets: Array<ConnectionFormExtensions | undefined>): Required<ConnectionFormExtensions>;
|
|
9
14
|
/**
|
|
10
15
|
* The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)
|
|
11
16
|
* and the logging policy editor the connection schema always uses, around
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectionsPageModel.d.ts","sourceRoot":"","sources":["../../src/connections/connectionsPageModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACb,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,oEAAoE;AACpE,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAIF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,GAAE,wBAA6B,GAClC,QAAQ,CAAC,wBAAwB,CAAC,CASpC;AAED,eAAO,MAAM,sBAAsB,EAAE,iBAIpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,iBAIpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAEjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAS9E"}
|
|
1
|
+
{"version":3,"file":"connectionsPageModel.d.ts","sourceRoot":"","sources":["../../src/connections/connectionsPageModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACb,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,oEAAoE;AACpE,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAIF;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,IAAI,EAAE,KAAK,CAAC,wBAAwB,GAAG,SAAS,CAAC,GACnD,QAAQ,CAAC,wBAAwB,CAAC,CAKpC;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,GAAE,wBAA6B,GAClC,QAAQ,CAAC,wBAAwB,CAAC,CASpC;AAED,eAAO,MAAM,sBAAsB,EAAE,iBAIpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,iBAIpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAEjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAS9E"}
|
|
@@ -3,6 +3,16 @@ import { connectionLoggingFormExtensions } from "./connectionLogging.js";
|
|
|
3
3
|
// src/connections/connectionsPageModel.ts
|
|
4
4
|
var unitFormExtensions = createUnitFormExtensions();
|
|
5
5
|
/**
|
|
6
|
+
* Concatenates form extension sets in argument order, so an earlier set (the
|
|
7
|
+
* schema-derived defaults) runs before a later one (the host's own).
|
|
8
|
+
*/
|
|
9
|
+
function mergeConnectionFormExtensions(...sets) {
|
|
10
|
+
return {
|
|
11
|
+
pre: sets.flatMap((set) => set?.pre ?? []),
|
|
12
|
+
post: sets.flatMap((set) => set?.post ?? [])
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
6
16
|
* The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)
|
|
7
17
|
* and the logging policy editor the connection schema always uses, around
|
|
8
18
|
* whatever pickers the host adds (the query app's namespace and secret
|
|
@@ -49,6 +59,6 @@ function isReadOnlyConnection(connection) {
|
|
|
49
59
|
function isPlainLeftClick(event) {
|
|
50
60
|
return !event.defaultPrevented && event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
|
|
51
61
|
}
|
|
52
|
-
export { connectionFormExtensions, createConnectionAction, isPlainLeftClick, isReadOnlyConnection, updateConnectionAction };
|
|
62
|
+
export { connectionFormExtensions, createConnectionAction, isPlainLeftClick, isReadOnlyConnection, mergeConnectionFormExtensions, updateConnectionAction };
|
|
53
63
|
|
|
54
64
|
//# sourceMappingURL=connectionsPageModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectionsPageModel.js","names":[],"sources":["../../src/connections/connectionsPageModel.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport type {\n PostExtension,\n PreExtension,\n} from \"../components/json-schema-form-runtime-types\";\nimport { createUnitFormExtensions } from \"../components/unit-form-extension\";\nimport type { ResolvedOperation } from \"../rpc/types\";\nimport { connectionLoggingFormExtensions } from \"./connectionLogging\";\n\n/** JsonSchemaForm extensions a host adds to the connection form. */\nexport type ConnectionFormExtensions = {\n pre?: PreExtension[];\n post?: PostExtension[];\n};\n\nconst unitFormExtensions = createUnitFormExtensions();\n\n/**\n * The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)\n * and the logging policy editor the connection schema always uses, around\n * whatever pickers the host adds (the query app's namespace and secret\n * selectors). A host without such pickers adds none, and the hinted fields\n * render as the plain controls their schema type implies.\n */\nexport function connectionFormExtensions(\n host: ConnectionFormExtensions = {},\n): Required<ConnectionFormExtensions> {\n return {\n pre: [\n ...unitFormExtensions.pre,\n ...(host.pre ?? []),\n ...connectionLoggingFormExtensions.pre,\n ],\n post: [...(host.post ?? []), ...connectionLoggingFormExtensions.post],\n };\n}\n\nexport const createConnectionAction: ResolvedOperation = {\n path: \"/connection\",\n method: \"post\",\n operation: { operationId: \"connection_create\", summary: \"Add Connection\" },\n};\n\nexport const updateConnectionAction: ResolvedOperation = {\n path: \"/connection/{id}\",\n method: \"put\",\n operation: { operationId: \"connection_update\", summary: \"Update connection\" },\n};\n\n/**\n * A connection the service refuses to save or delete (405): a virtual one from\n * a read-only provider such as a host's config file, or one flagged read-only.\n */\nexport function isReadOnlyConnection(connection: Record<string, unknown>): boolean {\n return connection.virtual === true || connection.read_only === true;\n}\n\n/**\n * Only a plain left click selects in place; modified and middle clicks fall\n * through to the browser so \"open in new tab\" keeps working on the row's href.\n */\nexport function isPlainLeftClick(event: MouseEvent<HTMLAnchorElement>): boolean {\n return (\n !event.defaultPrevented &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n );\n}\n"],"mappings":";;;AAeA,IAAM,qBAAqB,yBAAyB;;;;;;;;
|
|
1
|
+
{"version":3,"file":"connectionsPageModel.js","names":[],"sources":["../../src/connections/connectionsPageModel.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport type {\n PostExtension,\n PreExtension,\n} from \"../components/json-schema-form-runtime-types\";\nimport { createUnitFormExtensions } from \"../components/unit-form-extension\";\nimport type { ResolvedOperation } from \"../rpc/types\";\nimport { connectionLoggingFormExtensions } from \"./connectionLogging\";\n\n/** JsonSchemaForm extensions a host adds to the connection form. */\nexport type ConnectionFormExtensions = {\n pre?: PreExtension[];\n post?: PostExtension[];\n};\n\nconst unitFormExtensions = createUnitFormExtensions();\n\n/**\n * Concatenates form extension sets in argument order, so an earlier set (the\n * schema-derived defaults) runs before a later one (the host's own).\n */\nexport function mergeConnectionFormExtensions(\n ...sets: Array<ConnectionFormExtensions | undefined>\n): Required<ConnectionFormExtensions> {\n return {\n pre: sets.flatMap((set) => set?.pre ?? []),\n post: sets.flatMap((set) => set?.post ?? []),\n };\n}\n\n/**\n * The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)\n * and the logging policy editor the connection schema always uses, around\n * whatever pickers the host adds (the query app's namespace and secret\n * selectors). A host without such pickers adds none, and the hinted fields\n * render as the plain controls their schema type implies.\n */\nexport function connectionFormExtensions(\n host: ConnectionFormExtensions = {},\n): Required<ConnectionFormExtensions> {\n return {\n pre: [\n ...unitFormExtensions.pre,\n ...(host.pre ?? []),\n ...connectionLoggingFormExtensions.pre,\n ],\n post: [...(host.post ?? []), ...connectionLoggingFormExtensions.post],\n };\n}\n\nexport const createConnectionAction: ResolvedOperation = {\n path: \"/connection\",\n method: \"post\",\n operation: { operationId: \"connection_create\", summary: \"Add Connection\" },\n};\n\nexport const updateConnectionAction: ResolvedOperation = {\n path: \"/connection/{id}\",\n method: \"put\",\n operation: { operationId: \"connection_update\", summary: \"Update connection\" },\n};\n\n/**\n * A connection the service refuses to save or delete (405): a virtual one from\n * a read-only provider such as a host's config file, or one flagged read-only.\n */\nexport function isReadOnlyConnection(connection: Record<string, unknown>): boolean {\n return connection.virtual === true || connection.read_only === true;\n}\n\n/**\n * Only a plain left click selects in place; modified and middle clicks fall\n * through to the browser so \"open in new tab\" keeps working on the row's href.\n */\nexport function isPlainLeftClick(event: MouseEvent<HTMLAnchorElement>): boolean {\n return (\n !event.defaultPrevented &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n );\n}\n"],"mappings":";;;AAeA,IAAM,qBAAqB,yBAAyB;;;;;AAMpD,SAAgB,8BACd,GAAG,MACiC;CACpC,OAAO;EACL,KAAK,KAAK,SAAS,QAAQ,KAAK,OAAO,CAAC,CAAC;EACzC,MAAM,KAAK,SAAS,QAAQ,KAAK,QAAQ,CAAC,CAAC;CAC7C;AACF;;;;;;;;AASA,SAAgB,yBACd,OAAiC,CAAC,GACE;CACpC,OAAO;EACL,KAAK;GACH,GAAG,mBAAmB;GACtB,GAAI,KAAK,OAAO,CAAC;GACjB,GAAG,gCAAgC;EACrC;EACA,MAAM,CAAC,GAAI,KAAK,QAAQ,CAAC,GAAI,GAAG,gCAAgC,IAAI;CACtE;AACF;AAEA,IAAa,yBAA4C;CACvD,MAAM;CACN,QAAQ;CACR,WAAW;EAAE,aAAa;EAAqB,SAAS;CAAiB;AAC3E;AAEA,IAAa,yBAA4C;CACvD,MAAM;CACN,QAAQ;CACR,WAAW;EAAE,aAAa;EAAqB,SAAS;CAAoB;AAC9E;;;;;AAMA,SAAgB,qBAAqB,YAA8C;CACjF,OAAO,WAAW,YAAY,QAAQ,WAAW,cAAc;AACjE;;;;;AAMA,SAAgB,iBAAiB,OAA+C;CAC9E,OACE,CAAC,MAAM,oBACP,MAAM,WAAW,KACjB,CAAC,MAAM,WACP,CAAC,MAAM,WACP,CAAC,MAAM,YACP,CAAC,MAAM;AAEX"}
|
package/dist/connections.cjs
CHANGED
|
@@ -13,6 +13,7 @@ const require_connectionActionStatus = require("./connections/connectionActionSt
|
|
|
13
13
|
const require_connectionTestButton = require("./connections/connectionTestButton.cjs");
|
|
14
14
|
const require_connectionLogging = require("./connections/connectionLogging.cjs");
|
|
15
15
|
const require_connectionsPageModel = require("./connections/connectionsPageModel.cjs");
|
|
16
|
+
const require_connectionSchemaFormExtensions = require("./connections/connectionSchemaFormExtensions.cjs");
|
|
16
17
|
const require_ConnectionsPage = require("./connections/ConnectionsPage.cjs");
|
|
17
18
|
const require_connectionDashboardRenderer = require("./connections/connectionDashboardRenderer.cjs");
|
|
18
19
|
const require_connectionActions = require("./connections/connectionActions.cjs");
|
|
@@ -33,12 +34,16 @@ exports.connectionDashboardUrl = require_connectionDashboardModel.connectionDash
|
|
|
33
34
|
exports.connectionFormExtensions = require_connectionsPageModel.connectionFormExtensions;
|
|
34
35
|
exports.connectionHealthUrl = require_connectionDashboardModel.connectionHealthUrl;
|
|
35
36
|
exports.connectionLoggingFormExtensions = require_connectionLogging.connectionLoggingFormExtensions;
|
|
37
|
+
exports.connectionSchemaFormExtensions = require_connectionSchemaFormExtensions.connectionSchemaFormExtensions;
|
|
38
|
+
exports.connectionSecretLoaders = require_connectionSchemaFormExtensions.connectionSecretLoaders;
|
|
39
|
+
exports.connectionSecretSources = require_connectionSchemaFormExtensions.connectionSecretSources;
|
|
36
40
|
exports.createConnectionDashboardResultRenderer = require_connectionDashboardRenderer.createConnectionDashboardResultRenderer;
|
|
37
41
|
exports.createConnectionFormActions = require_connectionActions.createConnectionFormActions;
|
|
38
42
|
exports.formatDuration = require_connectionActionTypes.formatDuration;
|
|
39
43
|
exports.groupConnectionDashboardLanes = require_connectionDashboardModel.groupConnectionDashboardLanes;
|
|
40
44
|
exports.initialHealthMap = require_connectionHealth.initialHealthMap;
|
|
41
45
|
exports.isReadOnlyConnection = require_connectionsPageModel.isReadOnlyConnection;
|
|
46
|
+
exports.mergeConnectionFormExtensions = require_connectionsPageModel.mergeConnectionFormExtensions;
|
|
42
47
|
exports.mergeHealthResults = require_connectionHealth.mergeHealthResults;
|
|
43
48
|
exports.postConnection = require_connectionActionTypes.postConnection;
|
|
44
49
|
exports.summarizeLaneHealth = require_connectionHealth.summarizeLaneHealth;
|
package/dist/connections.d.ts
CHANGED
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* connection-type picker shows each type's icon.
|
|
19
19
|
*/
|
|
20
20
|
export * from './connections/ConnectionsPage.js';
|
|
21
|
-
export { connectionFormExtensions, isReadOnlyConnection, type ConnectionFormExtensions, } from './connections/connectionsPageModel.js';
|
|
21
|
+
export { connectionFormExtensions, isReadOnlyConnection, mergeConnectionFormExtensions, type ConnectionFormExtensions, } from './connections/connectionsPageModel.js';
|
|
22
|
+
export { connectionSchemaFormExtensions, connectionSecretLoaders, connectionSecretSources, type ConnectionJsonFetcher, type ConnectionSchemaFormExtensionsOptions, type ConnectionSecretSources, } from './connections/connectionSchemaFormExtensions.js';
|
|
22
23
|
export * from './connections/connectionDashboard.js';
|
|
23
24
|
export * from './connections/connectionDashboardQuery.js';
|
|
24
25
|
export * from './connections/connectionDashboardRow.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,wBAAwB,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,6BAA6B,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,qCAAqC,EAC1C,KAAK,uBAAuB,GAC7B,MAAM,8CAA8C,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC"}
|
package/dist/connections.js
CHANGED
|
@@ -11,8 +11,9 @@ import { ConnectionTestView } from "./connections/connectionTestView.js";
|
|
|
11
11
|
import { ConnectionActionStatus } from "./connections/connectionActionStatus.js";
|
|
12
12
|
import { ConnectionTestButton } from "./connections/connectionTestButton.js";
|
|
13
13
|
import { connectionLoggingFormExtensions } from "./connections/connectionLogging.js";
|
|
14
|
-
import { connectionFormExtensions, isReadOnlyConnection } from "./connections/connectionsPageModel.js";
|
|
14
|
+
import { connectionFormExtensions, isReadOnlyConnection, mergeConnectionFormExtensions } from "./connections/connectionsPageModel.js";
|
|
15
|
+
import { connectionSchemaFormExtensions, connectionSecretLoaders, connectionSecretSources } from "./connections/connectionSchemaFormExtensions.js";
|
|
15
16
|
import { ConnectionsPage } from "./connections/ConnectionsPage.js";
|
|
16
17
|
import { createConnectionDashboardResultRenderer } from "./connections/connectionDashboardRenderer.js";
|
|
17
18
|
import { createConnectionFormActions } from "./connections/connectionActions.js";
|
|
18
|
-
export { CONNECTION_DASHBOARD_QUERY_KEY, ConnectionActionStatus, ConnectionDashboardLanes, ConnectionDashboardRow, ConnectionDashboardSurface, ConnectionErrorView, ConnectionHealthLegend, ConnectionResolveView, ConnectionTestButton, ConnectionTestView, ConnectionTypeIcon, ConnectionsPage, FlanksourceIcon, connectionDashboardUrl, connectionFormExtensions, connectionHealthUrl, connectionLoggingFormExtensions, createConnectionDashboardResultRenderer, createConnectionFormActions, formatDuration, groupConnectionDashboardLanes, initialHealthMap, isReadOnlyConnection, mergeHealthResults, postConnection, summarizeLaneHealth, useConnectionDashboard, useConnectionHealth };
|
|
19
|
+
export { CONNECTION_DASHBOARD_QUERY_KEY, ConnectionActionStatus, ConnectionDashboardLanes, ConnectionDashboardRow, ConnectionDashboardSurface, ConnectionErrorView, ConnectionHealthLegend, ConnectionResolveView, ConnectionTestButton, ConnectionTestView, ConnectionTypeIcon, ConnectionsPage, FlanksourceIcon, connectionDashboardUrl, connectionFormExtensions, connectionHealthUrl, connectionLoggingFormExtensions, connectionSchemaFormExtensions, connectionSecretLoaders, connectionSecretSources, createConnectionDashboardResultRenderer, createConnectionFormActions, formatDuration, groupConnectionDashboardLanes, initialHealthMap, isReadOnlyConnection, mergeConnectionFormExtensions, mergeHealthResults, postConnection, summarizeLaneHealth, useConnectionDashboard, useConnectionHealth };
|
|
@@ -9,10 +9,10 @@ function AvatarBadge({ alt, label = alt, initials, avatarKind = "user", avatarVa
|
|
|
9
9
|
const density = require_use_density.useDensityValue();
|
|
10
10
|
const px = require_size.resolveSize(size, density);
|
|
11
11
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
12
|
-
className: require_utils.cn("inline-flex max-w-[50ch] min-w-0 flex-col items-start", className),
|
|
12
|
+
className: require_utils.cn("inline-flex max-w-[min(50ch,100%)] min-w-0 flex-col items-start", className),
|
|
13
13
|
style,
|
|
14
14
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
15
|
-
className: require_utils.cn("inline-flex max-w-[40ch] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm", badgeClassName),
|
|
15
|
+
className: require_utils.cn("inline-flex max-w-[min(40ch,100%)] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm", badgeClassName),
|
|
16
16
|
style: {
|
|
17
17
|
height: px,
|
|
18
18
|
borderColor,
|
|
@@ -44,7 +44,7 @@ function AvatarBadge({ alt, label = alt, initials, avatarKind = "user", avatarVa
|
|
|
44
44
|
})
|
|
45
45
|
]
|
|
46
46
|
}), comment && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
47
|
-
className: require_utils.cn("mt-1 max-w-[50ch] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]", commentClassName),
|
|
47
|
+
className: require_utils.cn("mt-1 max-w-[min(50ch,100%)] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]", commentClassName),
|
|
48
48
|
title: typeof comment === "string" ? comment : void 0,
|
|
49
49
|
children: comment
|
|
50
50
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarBadge.cjs","names":["useDensityValue","resolveSize","cn","Avatar","Icon"],"sources":["../../src/data/AvatarBadge.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\nimport { Avatar, type AvatarKind, type AvatarVariant } from \"./Avatar\";\nimport { Icon, type IconTone, type StaticIconComponent } from \"./Icon\";\nimport { cn } from \"../lib/utils\";\nimport { resolveSize, type SizeToken } from \"../lib/size\";\nimport { useDensityValue } from \"../hooks/use-density\";\n\nexport type AvatarBadgeProps = {\n alt: string;\n label?: ReactNode;\n initials?: string;\n avatarKind?: AvatarKind;\n avatarVariant?: AvatarVariant;\n size?: SizeToken;\n title?: string;\n statusIcon?: string | StaticIconComponent;\n statusTone?: IconTone;\n statusTitle?: string;\n comment?: ReactNode;\n borderColor?: string;\n className?: string;\n badgeClassName?: string;\n labelClassName?: string;\n commentClassName?: string;\n style?: CSSProperties;\n badgeStyle?: CSSProperties;\n};\n\nexport function AvatarBadge({\n alt,\n label = alt,\n initials,\n avatarKind = \"user\",\n avatarVariant = \"duotone\",\n size = \"lg\",\n title,\n statusIcon,\n statusTone = \"neutral\",\n statusTitle,\n comment,\n borderColor,\n className,\n badgeClassName,\n labelClassName,\n commentClassName,\n style,\n badgeStyle,\n}: AvatarBadgeProps) {\n const density = useDensityValue();\n const px = resolveSize(size, density);\n\n return (\n <span\n className={cn(\"inline-flex max-w-[50ch] min-w-0 flex-col items-start\", className)}\n style={style}\n >\n <span\n className={cn(\n \"inline-flex max-w-[40ch] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm\",\n badgeClassName,\n )}\n style={{\n height: px,\n borderColor,\n ...badgeStyle,\n }}\n >\n <Avatar\n alt={alt}\n kind={avatarKind}\n size={size}\n title={title ?? alt}\n variant={avatarVariant}\n className=\"relative z-10 -ml-px shrink-0\"\n {...(initials !== undefined ? { initials } : {})}\n />\n <span\n className={cn(\n \"min-w-0 flex-1 truncate font-medium leading-none text-foreground\",\n labelClassName,\n )}\n style={{ fontSize: Math.max(11, Math.round(px * 0.32)) }}\n title={typeof label === \"string\" ? label : (title ?? alt)}\n >\n {label}\n </span>\n {statusIcon && (\n <Icon\n {...(typeof statusIcon === \"string\" ? { name: statusIcon } : { icon: statusIcon })}\n style=\"badge\"\n size={size}\n tone={statusTone}\n className=\"relative z-10 -mr-px shrink-0\"\n {...(statusTitle !== undefined ? { title: statusTitle } : {})}\n />\n )}\n </span>\n {comment && (\n <span\n className={cn(\n \"mt-1 max-w-[50ch] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]\",\n commentClassName,\n )}\n title={typeof comment === \"string\" ? comment : undefined}\n >\n {comment}\n </span>\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;;AA4BA,SAAgB,YAAY,EAC1B,KACA,QAAQ,KACR,UACA,aAAa,QACb,gBAAgB,WAChB,OAAO,MACP,OACA,YACA,aAAa,WACb,aACA,SACA,aACA,WACA,gBACA,gBACA,kBACA,OACA,cACmB;CACnB,MAAM,UAAUA,oBAAAA,gBAAgB;CAChC,MAAM,KAAKC,aAAAA,YAAY,MAAM,OAAO;CAEpC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EACE,WAAWC,cAAAA,GAAG,
|
|
1
|
+
{"version":3,"file":"AvatarBadge.cjs","names":["useDensityValue","resolveSize","cn","Avatar","Icon"],"sources":["../../src/data/AvatarBadge.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\nimport { Avatar, type AvatarKind, type AvatarVariant } from \"./Avatar\";\nimport { Icon, type IconTone, type StaticIconComponent } from \"./Icon\";\nimport { cn } from \"../lib/utils\";\nimport { resolveSize, type SizeToken } from \"../lib/size\";\nimport { useDensityValue } from \"../hooks/use-density\";\n\nexport type AvatarBadgeProps = {\n alt: string;\n label?: ReactNode;\n initials?: string;\n avatarKind?: AvatarKind;\n avatarVariant?: AvatarVariant;\n size?: SizeToken;\n title?: string;\n statusIcon?: string | StaticIconComponent;\n statusTone?: IconTone;\n statusTitle?: string;\n comment?: ReactNode;\n borderColor?: string;\n className?: string;\n badgeClassName?: string;\n labelClassName?: string;\n commentClassName?: string;\n style?: CSSProperties;\n badgeStyle?: CSSProperties;\n};\n\nexport function AvatarBadge({\n alt,\n label = alt,\n initials,\n avatarKind = \"user\",\n avatarVariant = \"duotone\",\n size = \"lg\",\n title,\n statusIcon,\n statusTone = \"neutral\",\n statusTitle,\n comment,\n borderColor,\n className,\n badgeClassName,\n labelClassName,\n commentClassName,\n style,\n badgeStyle,\n}: AvatarBadgeProps) {\n const density = useDensityValue();\n const px = resolveSize(size, density);\n\n return (\n <span\n className={cn(\"inline-flex max-w-[min(50ch,100%)] min-w-0 flex-col items-start\", className)}\n style={style}\n >\n <span\n className={cn(\n \"inline-flex max-w-[min(40ch,100%)] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm\",\n badgeClassName,\n )}\n style={{\n height: px,\n borderColor,\n ...badgeStyle,\n }}\n >\n <Avatar\n alt={alt}\n kind={avatarKind}\n size={size}\n title={title ?? alt}\n variant={avatarVariant}\n className=\"relative z-10 -ml-px shrink-0\"\n {...(initials !== undefined ? { initials } : {})}\n />\n <span\n className={cn(\n \"min-w-0 flex-1 truncate font-medium leading-none text-foreground\",\n labelClassName,\n )}\n style={{ fontSize: Math.max(11, Math.round(px * 0.32)) }}\n title={typeof label === \"string\" ? label : (title ?? alt)}\n >\n {label}\n </span>\n {statusIcon && (\n <Icon\n {...(typeof statusIcon === \"string\" ? { name: statusIcon } : { icon: statusIcon })}\n style=\"badge\"\n size={size}\n tone={statusTone}\n className=\"relative z-10 -mr-px shrink-0\"\n {...(statusTitle !== undefined ? { title: statusTitle } : {})}\n />\n )}\n </span>\n {comment && (\n <span\n className={cn(\n \"mt-1 max-w-[min(50ch,100%)] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]\",\n commentClassName,\n )}\n title={typeof comment === \"string\" ? comment : undefined}\n >\n {comment}\n </span>\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;;AA4BA,SAAgB,YAAY,EAC1B,KACA,QAAQ,KACR,UACA,aAAa,QACb,gBAAgB,WAChB,OAAO,MACP,OACA,YACA,aAAa,WACb,aACA,SACA,aACA,WACA,gBACA,gBACA,kBACA,OACA,cACmB;CACnB,MAAM,UAAUA,oBAAAA,gBAAgB;CAChC,MAAM,KAAKC,aAAAA,YAAY,MAAM,OAAO;CAEpC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EACE,WAAWC,cAAAA,GAAG,mEAAmE,SAAS;EACnF;EAFT,UAAA,CAIE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GACE,WAAWA,cAAAA,GACT,8HACA,cACF;GACA,OAAO;IACL,QAAQ;IACR;IACA,GAAG;GACL;GATF,UAAA;IAWE,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD;KACO;KACL,MAAM;KACA;KACN,OAAO,SAAS;KAChB,SAAS;KACT,WAAU;KACV,GAAK,aAAa,KAAA,IAAY,EAAE,SAAS,IAAI,CAAC;IAC/C,CAAA;IACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KACE,WAAWD,cAAAA,GACT,oEACA,cACF;KACA,OAAO,EAAE,UAAU,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,GAAI,CAAC,EAAE;KACvD,OAAO,OAAO,UAAU,WAAW,QAAS,SAAS;KAEpD,UAAA;IACG,CAAA;IACL,cACC,iBAAA,GAAA,kBAAA,IAAA,CAACE,aAAAA,MAAD;KACE,GAAK,OAAO,eAAe,WAAW,EAAE,MAAM,WAAW,IAAI,EAAE,MAAM,WAAW;KAChF,OAAM;KACA;KACN,MAAM;KACN,WAAU;KACV,GAAK,gBAAgB,KAAA,IAAY,EAAE,OAAO,YAAY,IAAI,CAAC;IAC5D,CAAA;GAEC;EACL,CAAA,GAAA,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,WAAWF,cAAAA,GACT,qKACA,gBACF;GACA,OAAO,OAAO,YAAY,WAAW,UAAU,KAAA;GAE9C,UAAA;EACG,CAAA,CAEJ;;AAEV"}
|
package/dist/data/AvatarBadge.js
CHANGED
|
@@ -9,10 +9,10 @@ function AvatarBadge({ alt, label = alt, initials, avatarKind = "user", avatarVa
|
|
|
9
9
|
const density = useDensityValue();
|
|
10
10
|
const px = resolveSize(size, density);
|
|
11
11
|
return /* @__PURE__ */ jsxs("span", {
|
|
12
|
-
className: cn("inline-flex max-w-[50ch] min-w-0 flex-col items-start", className),
|
|
12
|
+
className: cn("inline-flex max-w-[min(50ch,100%)] min-w-0 flex-col items-start", className),
|
|
13
13
|
style,
|
|
14
14
|
children: [/* @__PURE__ */ jsxs("span", {
|
|
15
|
-
className: cn("inline-flex max-w-[40ch] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm", badgeClassName),
|
|
15
|
+
className: cn("inline-flex max-w-[min(40ch,100%)] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm", badgeClassName),
|
|
16
16
|
style: {
|
|
17
17
|
height: px,
|
|
18
18
|
borderColor,
|
|
@@ -44,7 +44,7 @@ function AvatarBadge({ alt, label = alt, initials, avatarKind = "user", avatarVa
|
|
|
44
44
|
})
|
|
45
45
|
]
|
|
46
46
|
}), comment && /* @__PURE__ */ jsx("span", {
|
|
47
|
-
className: cn("mt-1 max-w-[50ch] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]", commentClassName),
|
|
47
|
+
className: cn("mt-1 max-w-[min(50ch,100%)] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]", commentClassName),
|
|
48
48
|
title: typeof comment === "string" ? comment : void 0,
|
|
49
49
|
children: comment
|
|
50
50
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarBadge.js","names":[],"sources":["../../src/data/AvatarBadge.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\nimport { Avatar, type AvatarKind, type AvatarVariant } from \"./Avatar\";\nimport { Icon, type IconTone, type StaticIconComponent } from \"./Icon\";\nimport { cn } from \"../lib/utils\";\nimport { resolveSize, type SizeToken } from \"../lib/size\";\nimport { useDensityValue } from \"../hooks/use-density\";\n\nexport type AvatarBadgeProps = {\n alt: string;\n label?: ReactNode;\n initials?: string;\n avatarKind?: AvatarKind;\n avatarVariant?: AvatarVariant;\n size?: SizeToken;\n title?: string;\n statusIcon?: string | StaticIconComponent;\n statusTone?: IconTone;\n statusTitle?: string;\n comment?: ReactNode;\n borderColor?: string;\n className?: string;\n badgeClassName?: string;\n labelClassName?: string;\n commentClassName?: string;\n style?: CSSProperties;\n badgeStyle?: CSSProperties;\n};\n\nexport function AvatarBadge({\n alt,\n label = alt,\n initials,\n avatarKind = \"user\",\n avatarVariant = \"duotone\",\n size = \"lg\",\n title,\n statusIcon,\n statusTone = \"neutral\",\n statusTitle,\n comment,\n borderColor,\n className,\n badgeClassName,\n labelClassName,\n commentClassName,\n style,\n badgeStyle,\n}: AvatarBadgeProps) {\n const density = useDensityValue();\n const px = resolveSize(size, density);\n\n return (\n <span\n className={cn(\"inline-flex max-w-[50ch] min-w-0 flex-col items-start\", className)}\n style={style}\n >\n <span\n className={cn(\n \"inline-flex max-w-[40ch] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm\",\n badgeClassName,\n )}\n style={{\n height: px,\n borderColor,\n ...badgeStyle,\n }}\n >\n <Avatar\n alt={alt}\n kind={avatarKind}\n size={size}\n title={title ?? alt}\n variant={avatarVariant}\n className=\"relative z-10 -ml-px shrink-0\"\n {...(initials !== undefined ? { initials } : {})}\n />\n <span\n className={cn(\n \"min-w-0 flex-1 truncate font-medium leading-none text-foreground\",\n labelClassName,\n )}\n style={{ fontSize: Math.max(11, Math.round(px * 0.32)) }}\n title={typeof label === \"string\" ? label : (title ?? alt)}\n >\n {label}\n </span>\n {statusIcon && (\n <Icon\n {...(typeof statusIcon === \"string\" ? { name: statusIcon } : { icon: statusIcon })}\n style=\"badge\"\n size={size}\n tone={statusTone}\n className=\"relative z-10 -mr-px shrink-0\"\n {...(statusTitle !== undefined ? { title: statusTitle } : {})}\n />\n )}\n </span>\n {comment && (\n <span\n className={cn(\n \"mt-1 max-w-[50ch] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]\",\n commentClassName,\n )}\n title={typeof comment === \"string\" ? comment : undefined}\n >\n {comment}\n </span>\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;;AA4BA,SAAgB,YAAY,EAC1B,KACA,QAAQ,KACR,UACA,aAAa,QACb,gBAAgB,WAChB,OAAO,MACP,OACA,YACA,aAAa,WACb,aACA,SACA,aACA,WACA,gBACA,gBACA,kBACA,OACA,cACmB;CACnB,MAAM,UAAU,gBAAgB;CAChC,MAAM,KAAK,YAAY,MAAM,OAAO;CAEpC,OACE,qBAAC,QAAD;EACE,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"AvatarBadge.js","names":[],"sources":["../../src/data/AvatarBadge.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\nimport { Avatar, type AvatarKind, type AvatarVariant } from \"./Avatar\";\nimport { Icon, type IconTone, type StaticIconComponent } from \"./Icon\";\nimport { cn } from \"../lib/utils\";\nimport { resolveSize, type SizeToken } from \"../lib/size\";\nimport { useDensityValue } from \"../hooks/use-density\";\n\nexport type AvatarBadgeProps = {\n alt: string;\n label?: ReactNode;\n initials?: string;\n avatarKind?: AvatarKind;\n avatarVariant?: AvatarVariant;\n size?: SizeToken;\n title?: string;\n statusIcon?: string | StaticIconComponent;\n statusTone?: IconTone;\n statusTitle?: string;\n comment?: ReactNode;\n borderColor?: string;\n className?: string;\n badgeClassName?: string;\n labelClassName?: string;\n commentClassName?: string;\n style?: CSSProperties;\n badgeStyle?: CSSProperties;\n};\n\nexport function AvatarBadge({\n alt,\n label = alt,\n initials,\n avatarKind = \"user\",\n avatarVariant = \"duotone\",\n size = \"lg\",\n title,\n statusIcon,\n statusTone = \"neutral\",\n statusTitle,\n comment,\n borderColor,\n className,\n badgeClassName,\n labelClassName,\n commentClassName,\n style,\n badgeStyle,\n}: AvatarBadgeProps) {\n const density = useDensityValue();\n const px = resolveSize(size, density);\n\n return (\n <span\n className={cn(\"inline-flex max-w-[min(50ch,100%)] min-w-0 flex-col items-start\", className)}\n style={style}\n >\n <span\n className={cn(\n \"inline-flex max-w-[min(40ch,100%)] min-w-0 items-center gap-2 overflow-visible rounded-full border bg-background shadow-sm\",\n badgeClassName,\n )}\n style={{\n height: px,\n borderColor,\n ...badgeStyle,\n }}\n >\n <Avatar\n alt={alt}\n kind={avatarKind}\n size={size}\n title={title ?? alt}\n variant={avatarVariant}\n className=\"relative z-10 -ml-px shrink-0\"\n {...(initials !== undefined ? { initials } : {})}\n />\n <span\n className={cn(\n \"min-w-0 flex-1 truncate font-medium leading-none text-foreground\",\n labelClassName,\n )}\n style={{ fontSize: Math.max(11, Math.round(px * 0.32)) }}\n title={typeof label === \"string\" ? label : (title ?? alt)}\n >\n {label}\n </span>\n {statusIcon && (\n <Icon\n {...(typeof statusIcon === \"string\" ? { name: statusIcon } : { icon: statusIcon })}\n style=\"badge\"\n size={size}\n tone={statusTone}\n className=\"relative z-10 -mr-px shrink-0\"\n {...(statusTitle !== undefined ? { title: statusTitle } : {})}\n />\n )}\n </span>\n {comment && (\n <span\n className={cn(\n \"mt-1 max-w-[min(50ch,100%)] overflow-hidden text-xs leading-snug text-muted-foreground [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:3]\",\n commentClassName,\n )}\n title={typeof comment === \"string\" ? comment : undefined}\n >\n {comment}\n </span>\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;;AA4BA,SAAgB,YAAY,EAC1B,KACA,QAAQ,KACR,UACA,aAAa,QACb,gBAAgB,WAChB,OAAO,MACP,OACA,YACA,aAAa,WACb,aACA,SACA,aACA,WACA,gBACA,gBACA,kBACA,OACA,cACmB;CACnB,MAAM,UAAU,gBAAgB;CAChC,MAAM,KAAK,YAAY,MAAM,OAAO;CAEpC,OACE,qBAAC,QAAD;EACE,WAAW,GAAG,mEAAmE,SAAS;EACnF;EAFT,UAAA,CAIE,qBAAC,QAAD;GACE,WAAW,GACT,8HACA,cACF;GACA,OAAO;IACL,QAAQ;IACR;IACA,GAAG;GACL;GATF,UAAA;IAWE,oBAAC,QAAD;KACO;KACL,MAAM;KACA;KACN,OAAO,SAAS;KAChB,SAAS;KACT,WAAU;KACV,GAAK,aAAa,KAAA,IAAY,EAAE,SAAS,IAAI,CAAC;IAC/C,CAAA;IACD,oBAAC,QAAD;KACE,WAAW,GACT,oEACA,cACF;KACA,OAAO,EAAE,UAAU,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,GAAI,CAAC,EAAE;KACvD,OAAO,OAAO,UAAU,WAAW,QAAS,SAAS;KAEpD,UAAA;IACG,CAAA;IACL,cACC,oBAAC,MAAD;KACE,GAAK,OAAO,eAAe,WAAW,EAAE,MAAM,WAAW,IAAI,EAAE,MAAM,WAAW;KAChF,OAAM;KACA;KACN,MAAM;KACN,WAAU;KACV,GAAK,gBAAgB,KAAA,IAAY,EAAE,OAAO,YAAY,IAAI,CAAC;IAC5D,CAAA;GAEC;EACL,CAAA,GAAA,WACC,oBAAC,QAAD;GACE,WAAW,GACT,qKACA,gBACF;GACA,OAAO,OAAO,YAAY,WAAW,UAAU,KAAA;GAE9C,UAAA;EACG,CAAA,CAEJ;;AAEV"}
|
package/dist/data/CodeDiff.cjs
CHANGED
|
@@ -94,6 +94,7 @@ function CodeDiff(props) {
|
|
|
94
94
|
})] }, index);
|
|
95
95
|
});
|
|
96
96
|
if (bare) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
97
|
+
"data-scroll-x": true,
|
|
97
98
|
className: require_utils.cn("overflow-x-auto font-mono text-xs leading-relaxed", className),
|
|
98
99
|
children: rows
|
|
99
100
|
});
|
|
@@ -126,6 +127,7 @@ function CodeDiff(props) {
|
|
|
126
127
|
})]
|
|
127
128
|
}) : null,
|
|
128
129
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
130
|
+
"data-scroll-x": true,
|
|
129
131
|
className: "overflow-x-auto font-mono text-xs leading-relaxed",
|
|
130
132
|
children: rows
|
|
131
133
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeDiff.cjs","names":["UiRows","UiColumns","useState","useMemo","parseUnifiedDiff","computeLineDiff","highlightToLines","Fragment","cn","SegmentedControl","_Fragment","HighlightedTokens","UiFile","UiAdd"],"sources":["../../src/data/CodeDiff.tsx"],"sourcesContent":["import { Fragment, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SegmentedControl, type SegmentedOption } from \"../components/SegmentedControl\";\nimport { UiAdd, UiColumns, UiFile, UiRows } from \"../icons\";\nimport {\n computeLineDiff,\n parseUnifiedDiff,\n type DiffHunk,\n type DiffLine,\n type DiffLineType,\n} from \"./code-diff\";\nimport { highlightToLines, type HighlightedLine } from \"./code-highlight\";\nimport { HighlightedTokens } from \"./HighlightedTokens\";\n\nexport type CodeDiffView = \"unified\" | \"split\";\n\n// Rows = stacked/unified; columns = side-by-side/split.\nconst DIFF_VIEW_OPTIONS: SegmentedOption<CodeDiffView>[] = [\n { id: \"unified\", label: \"Unified\", icon: UiRows, title: \"Unified view\" },\n { id: \"split\", label: \"Split\", icon: UiColumns, title: \"Split view\" },\n];\n\n// Either two blobs (diffed in-repo) or a ready unified-diff string (what\n// `GitDiffPanel` already receives). `never` on the absent keys keeps the shapes\n// mutually exclusive.\ntype CodeDiffInput =\n | { original: string; modified: string; unified?: never }\n | { unified: string; original?: never; modified?: never };\n\nexport type DiffSide = \"old\" | \"new\";\n\n/** The diff line a gutter \"+\" button was clicked on. */\nexport interface DiffLineTarget {\n side: DiffSide;\n line: number;\n content: string;\n}\n\n/** A node rendered as a full-width row directly below the row at `(side, line)`. */\nexport interface DiffLineWidget {\n key: string;\n side: DiffSide;\n line: number;\n node: ReactNode;\n}\n\ntype LineAnnotations = {\n onLineAction: ((target: DiffLineTarget) => void) | undefined;\n lineWidgets: DiffLineWidget[] | undefined;\n};\n\nexport type CodeDiffProps = CodeDiffInput & {\n /**\n * When set, every numbered line shows a \"+\" button in its gutter (on row hover\n * or keyboard focus). Added/context lines report side `new`, deleted lines\n * `old`; in split view the left column is `old` and the right `new`.\n */\n onLineAction?: ((target: DiffLineTarget) => void) | undefined;\n /**\n * Rendered as a full-width row directly below the row matching `(side, line)`,\n * in array order. A context line matches both its `old` and `new` number.\n */\n lineWidgets?: DiffLineWidget[] | undefined;\n /** Highlighter language hint, e.g. `typescript`, `go`, `python`. */\n language?: string | undefined;\n /** Unified (single column) or split (side-by-side). Defaults to `unified`. */\n view?: CodeDiffView | undefined;\n /** Names the original (left) side; unified view prefixes it with a minus. */\n originalLabel?: ReactNode;\n /** Names the modified (right) side; unified view prefixes it with a plus. */\n modifiedLabel?: ReactNode;\n /** Show old/new line-number gutters. Defaults to `true`. */\n showLineNumbers?: boolean | undefined;\n /** Render only the rows — no border, background, or language header. */\n bare?: boolean | undefined;\n className?: string | undefined;\n};\n\ntype ResolvedLine = {\n line: DiffLine;\n oldTokens: HighlightedLine | undefined;\n newTokens: HighlightedLine | undefined;\n};\n\ntype ResolvedHunk = { header: string | undefined; path: string | undefined; lines: ResolvedLine[] };\n\n// Row background tint — theme-aware via `[[data-theme=dark]_&]` (plain `dark:`\n// compiles to prefers-color-scheme in the built dist and ignores `data-theme`).\nconst ROW_TINT: Record<DiffLineType, string | undefined> = {\n context: undefined,\n add: \"bg-emerald-500/10\",\n remove: \"bg-rose-500/10\",\n};\n\nconst MARKER_TONE: Record<DiffLineType, string> = {\n context: \"text-muted-foreground\",\n add: \"text-emerald-700 [[data-theme=dark]_&]:text-emerald-300\",\n remove: \"text-rose-700 [[data-theme=dark]_&]:text-rose-300\",\n};\n\nconst MARKER: Record<DiffLineType, string> = { context: \"\", add: \"+\", remove: \"-\" };\n\nexport function CodeDiff(props: CodeDiffProps) {\n const { language, view: viewProp = \"unified\", showLineNumbers = true, bare = false, className } = props;\n const { unified, original, modified, originalLabel, modifiedLabel, onLineAction, lineWidgets } = props;\n const annotations: LineAnnotations = { onLineAction, lineWidgets };\n\n // `view` prop seeds the default; the header toggle then owns it.\n const [view, setView] = useState<CodeDiffView>(viewProp);\n\n const hunks = useMemo<DiffHunk[]>(\n () =>\n unified !== undefined\n ? parseUnifiedDiff(unified)\n : computeLineDiff(original ?? \"\", modified ?? \"\"),\n [unified, original, modified],\n );\n\n const { oldSource, newSource } = useMemo(() => buildSides(hunks), [hunks]);\n\n // Raw first paint, highlighted tokens swap in — matches CodeBlock. `null`\n // means \"not highlighted\" (empty/unsupported/loading); rows fall back to plain\n // text token-by-token.\n const [tokens, setTokens] = useState<{\n old: HighlightedLine[] | null;\n mod: HighlightedLine[] | null;\n }>({ old: null, mod: null });\n\n useEffect(() => {\n if (!language) {\n setTokens({ old: null, mod: null });\n return;\n }\n let cancelled = false;\n Promise.all([\n highlightToLines(oldSource, { lang: language }),\n highlightToLines(newSource, { lang: language }),\n ]).then(([old, mod]) => {\n if (!cancelled) setTokens({ old, mod });\n });\n return () => {\n cancelled = true;\n };\n }, [language, oldSource, newSource]);\n\n const resolved = useMemo(\n () => resolveHunks(hunks, tokens.old, tokens.mod),\n [hunks, tokens],\n );\n\n // Only a diff that spans more than one file labels its hunks with the path —\n // a single-file diff's path is already known from its surrounding context.\n const multiFile =\n new Set(resolved.map((hunk) => hunk.path).filter((p) => p !== undefined)).size > 1;\n\n let lastPath: string | undefined;\n const rows = resolved.map((hunk, index) => {\n const filePath =\n multiFile && hunk.path !== undefined && hunk.path !== lastPath ? hunk.path : undefined;\n lastPath = hunk.path;\n return (\n <Fragment key={index}>\n {filePath && <FileHeader path={filePath} />}\n {view === \"split\" ? (\n <SplitHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n ) : (\n <UnifiedHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n )}\n </Fragment>\n );\n });\n\n if (bare) {\n return (\n <div className={cn(\"overflow-x-auto font-mono text-xs leading-relaxed\", className)}>\n {rows}\n </div>\n );\n }\n return (\n <div className={cn(\"overflow-hidden rounded-md border border-border bg-muted/40\", className)}>\n <div className=\"flex items-center justify-between gap-2 border-b border-border px-3 py-1.5\">\n <span className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {language || \"diff\"}\n </span>\n <SegmentedControl\n size=\"sm\"\n aria-label=\"Diff view\"\n value={view}\n onChange={setView}\n options={DIFF_VIEW_OPTIONS}\n />\n </div>\n {originalLabel != null || modifiedLabel != null ? (\n <div className={cn(\"border-b border-border text-xs font-medium\", view === \"split\" ? \"grid grid-cols-2 divide-x divide-border\" : \"flex flex-wrap gap-x-4\")}>\n <div data-diff-side=\"original\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"− \" : null}{originalLabel}</div>\n <div data-diff-side=\"modified\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"+ \" : null}{modifiedLabel}</div>\n </div>\n ) : null}\n <div className=\"overflow-x-auto font-mono text-xs leading-relaxed\">{rows}</div>\n </div>\n );\n}\n\n// Reconstruct the full old side (context + remove) and new side (context + add)\n// as text — highlighting each side as a coherent blob so grammar state is intact.\nfunction buildSides(hunks: DiffHunk[]): { oldSource: string; newSource: string } {\n const oldLines: string[] = [];\n const newLines: string[] = [];\n for (const hunk of hunks) {\n for (const line of hunk.lines) {\n if (line.type !== \"add\") oldLines.push(line.content);\n if (line.type !== \"remove\") newLines.push(line.content);\n }\n }\n return { oldSource: oldLines.join(\"\\n\"), newSource: newLines.join(\"\\n\") };\n}\n\n// Map each diff line to its highlighted tokens via a sequential cursor per side\n// (not absolute line number, so unified-diff gaps between hunks stay aligned).\nfunction resolveHunks(\n hunks: DiffHunk[],\n oldTokens: HighlightedLine[] | null,\n newTokens: HighlightedLine[] | null,\n): ResolvedHunk[] {\n let oldCursor = 0;\n let newCursor = 0;\n return hunks.map((hunk) => ({\n header: hunk.header,\n path: hunk.path,\n lines: hunk.lines.map((line) => {\n const resolved: ResolvedLine = {\n line,\n oldTokens: line.type === \"add\" ? undefined : oldTokens?.[oldCursor],\n newTokens: line.type === \"remove\" ? undefined : newTokens?.[newCursor],\n };\n if (line.type !== \"add\") oldCursor += 1;\n if (line.type !== \"remove\") newCursor += 1;\n return resolved;\n }),\n }));\n}\n\ntype HunkProps = {\n hunk: ResolvedHunk;\n showLineNumbers: boolean;\n annotations: LineAnnotations;\n};\n\n// Which side of `line` a widget at (side, number) attaches to: context lines\n// carry both numbers, add lines only `new`, remove lines only `old`.\nfunction lineHasPosition(line: DiffLine, side: DiffSide, number: number): boolean {\n if (side === \"old\") return line.type !== \"add\" && line.oldNumber === number;\n return line.type !== \"remove\" && line.newNumber === number;\n}\n\nfunction WidgetRows({ widgets }: { widgets: DiffLineWidget[] }) {\n return (\n <>\n {widgets.map((widget) => (\n <div\n key={widget.key}\n data-diff-widget={widget.key}\n className=\"whitespace-normal border-y border-border bg-background px-3 py-2 font-sans text-sm leading-normal text-foreground\"\n >\n {widget.node}\n </div>\n ))}\n </>\n );\n}\n\nfunction UnifiedHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {hunk.lines.map((resolved, index) => {\n const { line } = resolved;\n const tokens = line.type === \"remove\" ? resolved.oldTokens : resolved.newTokens;\n const actionSide: DiffSide = line.type === \"remove\" ? \"old\" : \"new\";\n const widgets = lineWidgets?.filter((w) => lineHasPosition(line, w.side, w.line));\n return (\n <Fragment key={index}>\n <div className={cn(\"group flex\", ROW_TINT[line.type])} data-diff-line={line.type}>\n {showLineNumbers && (\n <>\n <Gutter\n value={line.oldNumber}\n line={line}\n side=\"old\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n <Gutter\n value={line.newNumber}\n line={line}\n side=\"new\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n </>\n )}\n <Marker type={line.type} />\n <code className=\"whitespace-pre pl-1 pr-3\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\nfunction SplitHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const pairs = useMemo(() => pairLines(hunk.lines), [hunk.lines]);\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {pairs.map((pair, index) => {\n const widgets = lineWidgets?.filter(\n (w) =>\n (pair.left !== undefined && lineHasPosition(pair.left.line, w.side, w.line) && w.side === \"old\") ||\n (pair.right !== undefined && lineHasPosition(pair.right.line, w.side, w.line) && w.side === \"new\"),\n );\n return (\n <Fragment key={index}>\n <div className=\"flex\">\n <SplitCell\n resolved={pair.left}\n side=\"old\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n <span aria-hidden className=\"w-px shrink-0 bg-border\" />\n <SplitCell\n resolved={pair.right}\n side=\"new\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\ntype SplitPair = { left: ResolvedLine | undefined; right: ResolvedLine | undefined };\n\n// Pair consecutive remove/add runs (remove[i] ↔ add[i]); leftovers get a blank\n// opposite cell. Context is one aligned row on both sides.\nfunction pairLines(lines: ResolvedLine[]): SplitPair[] {\n const pairs: SplitPair[] = [];\n let removes: ResolvedLine[] = [];\n let adds: ResolvedLine[] = [];\n const flush = () => {\n const max = Math.max(removes.length, adds.length);\n for (let i = 0; i < max; i++) pairs.push({ left: removes[i], right: adds[i] });\n removes = [];\n adds = [];\n };\n for (const resolved of lines) {\n if (resolved.line.type === \"remove\") removes.push(resolved);\n else if (resolved.line.type === \"add\") adds.push(resolved);\n else {\n flush();\n pairs.push({ left: resolved, right: resolved });\n }\n }\n flush();\n return pairs;\n}\n\nfunction SplitCell({\n resolved,\n side,\n showLineNumbers,\n onLineAction,\n}: {\n resolved: ResolvedLine | undefined;\n side: DiffSide;\n showLineNumbers: boolean;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n if (!resolved) return <div className=\"min-w-0 flex-1 basis-0\" />;\n const { line } = resolved;\n const active =\n (side === \"old\" && line.type === \"remove\") || (side === \"new\" && line.type === \"add\");\n const type: DiffLineType = active ? line.type : \"context\";\n const number = side === \"old\" ? line.oldNumber : line.newNumber;\n const tokens = side === \"old\" ? resolved.oldTokens : resolved.newTokens;\n return (\n // Equal, shrinkable halves whose code wraps: with `whitespace-pre` a long\n // line painted past its half and over the other side in a narrow container.\n <div\n className={cn(\"group flex min-w-0 flex-1 basis-0\", active && ROW_TINT[line.type])}\n data-diff-line={type}\n >\n {showLineNumbers && (\n <Gutter value={number} line={line} side={side} actionSide={side} onLineAction={onLineAction} />\n )}\n <Marker type={type} />\n <code className=\"min-w-0 flex-1 whitespace-pre-wrap pl-1 pr-3 [overflow-wrap:anywhere]\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n );\n}\n\nfunction FileHeader({ path }: { path: string }) {\n return (\n <div\n data-diff-file={path}\n className=\"flex items-center gap-1.5 border-b border-border bg-muted px-2 py-1 font-medium text-foreground\"\n >\n <UiFile className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"truncate\">{path}</span>\n </div>\n );\n}\n\nfunction HunkHeader({ header }: { header: string }) {\n return (\n <div className=\"select-none bg-muted/60 px-2 py-0.5 text-muted-foreground\">{header}</div>\n );\n}\n\n// `side` is the number this gutter shows; the \"+\" button only renders in the\n// `actionSide` gutter so a unified row (two gutters) exposes exactly one.\nfunction Gutter({\n value,\n line,\n side,\n actionSide,\n onLineAction,\n}: {\n value: number | undefined;\n line: DiffLine;\n side: DiffSide;\n actionSide: DiffSide;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n const showAction = onLineAction !== undefined && value !== undefined && side === actionSide;\n return (\n <span className=\"relative w-10 shrink-0 select-none px-2 text-right tabular-nums text-muted-foreground\">\n {value ?? \"\"}\n {showAction && (\n <button\n type=\"button\"\n aria-label={`Comment on line ${value}`}\n onClick={() => onLineAction({ side, line: value, content: line.content })}\n className=\"absolute inset-y-0 left-0.5 flex items-center rounded-sm bg-background text-primary opacity-0 hover:text-primary/80 focus-visible:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring group-hover:opacity-100\"\n >\n <UiAdd className=\"size-3.5\" />\n </button>\n )}\n </span>\n );\n}\n\nfunction Marker({ type }: { type: DiffLineType }) {\n return (\n <span className={cn(\"w-4 shrink-0 select-none text-center\", MARKER_TONE[type])}>\n {MARKER[type]}\n </span>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeDiff.cjs","names":["UiRows","UiColumns","useState","useMemo","parseUnifiedDiff","computeLineDiff","highlightToLines","Fragment","cn","SegmentedControl","_Fragment","HighlightedTokens","UiFile","UiAdd"],"sources":["../../src/data/CodeDiff.tsx"],"sourcesContent":["import { Fragment, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SegmentedControl, type SegmentedOption } from \"../components/SegmentedControl\";\nimport { UiAdd, UiColumns, UiFile, UiRows } from \"../icons\";\nimport {\n computeLineDiff,\n parseUnifiedDiff,\n type DiffHunk,\n type DiffLine,\n type DiffLineType,\n} from \"./code-diff\";\nimport { highlightToLines, type HighlightedLine } from \"./code-highlight\";\nimport { HighlightedTokens } from \"./HighlightedTokens\";\n\nexport type CodeDiffView = \"unified\" | \"split\";\n\n// Rows = stacked/unified; columns = side-by-side/split.\nconst DIFF_VIEW_OPTIONS: SegmentedOption<CodeDiffView>[] = [\n { id: \"unified\", label: \"Unified\", icon: UiRows, title: \"Unified view\" },\n { id: \"split\", label: \"Split\", icon: UiColumns, title: \"Split view\" },\n];\n\n// Either two blobs (diffed in-repo) or a ready unified-diff string (what\n// `GitDiffPanel` already receives). `never` on the absent keys keeps the shapes\n// mutually exclusive.\ntype CodeDiffInput =\n | { original: string; modified: string; unified?: never }\n | { unified: string; original?: never; modified?: never };\n\nexport type DiffSide = \"old\" | \"new\";\n\n/** The diff line a gutter \"+\" button was clicked on. */\nexport interface DiffLineTarget {\n side: DiffSide;\n line: number;\n content: string;\n}\n\n/** A node rendered as a full-width row directly below the row at `(side, line)`. */\nexport interface DiffLineWidget {\n key: string;\n side: DiffSide;\n line: number;\n node: ReactNode;\n}\n\ntype LineAnnotations = {\n onLineAction: ((target: DiffLineTarget) => void) | undefined;\n lineWidgets: DiffLineWidget[] | undefined;\n};\n\nexport type CodeDiffProps = CodeDiffInput & {\n /**\n * When set, every numbered line shows a \"+\" button in its gutter (on row hover\n * or keyboard focus). Added/context lines report side `new`, deleted lines\n * `old`; in split view the left column is `old` and the right `new`.\n */\n onLineAction?: ((target: DiffLineTarget) => void) | undefined;\n /**\n * Rendered as a full-width row directly below the row matching `(side, line)`,\n * in array order. A context line matches both its `old` and `new` number.\n */\n lineWidgets?: DiffLineWidget[] | undefined;\n /** Highlighter language hint, e.g. `typescript`, `go`, `python`. */\n language?: string | undefined;\n /** Unified (single column) or split (side-by-side). Defaults to `unified`. */\n view?: CodeDiffView | undefined;\n /** Names the original (left) side; unified view prefixes it with a minus. */\n originalLabel?: ReactNode;\n /** Names the modified (right) side; unified view prefixes it with a plus. */\n modifiedLabel?: ReactNode;\n /** Show old/new line-number gutters. Defaults to `true`. */\n showLineNumbers?: boolean | undefined;\n /** Render only the rows — no border, background, or language header. */\n bare?: boolean | undefined;\n className?: string | undefined;\n};\n\ntype ResolvedLine = {\n line: DiffLine;\n oldTokens: HighlightedLine | undefined;\n newTokens: HighlightedLine | undefined;\n};\n\ntype ResolvedHunk = { header: string | undefined; path: string | undefined; lines: ResolvedLine[] };\n\n// Row background tint — theme-aware via `[[data-theme=dark]_&]` (plain `dark:`\n// compiles to prefers-color-scheme in the built dist and ignores `data-theme`).\nconst ROW_TINT: Record<DiffLineType, string | undefined> = {\n context: undefined,\n add: \"bg-emerald-500/10\",\n remove: \"bg-rose-500/10\",\n};\n\nconst MARKER_TONE: Record<DiffLineType, string> = {\n context: \"text-muted-foreground\",\n add: \"text-emerald-700 [[data-theme=dark]_&]:text-emerald-300\",\n remove: \"text-rose-700 [[data-theme=dark]_&]:text-rose-300\",\n};\n\nconst MARKER: Record<DiffLineType, string> = { context: \"\", add: \"+\", remove: \"-\" };\n\nexport function CodeDiff(props: CodeDiffProps) {\n const { language, view: viewProp = \"unified\", showLineNumbers = true, bare = false, className } = props;\n const { unified, original, modified, originalLabel, modifiedLabel, onLineAction, lineWidgets } = props;\n const annotations: LineAnnotations = { onLineAction, lineWidgets };\n\n // `view` prop seeds the default; the header toggle then owns it.\n const [view, setView] = useState<CodeDiffView>(viewProp);\n\n const hunks = useMemo<DiffHunk[]>(\n () =>\n unified !== undefined\n ? parseUnifiedDiff(unified)\n : computeLineDiff(original ?? \"\", modified ?? \"\"),\n [unified, original, modified],\n );\n\n const { oldSource, newSource } = useMemo(() => buildSides(hunks), [hunks]);\n\n // Raw first paint, highlighted tokens swap in — matches CodeBlock. `null`\n // means \"not highlighted\" (empty/unsupported/loading); rows fall back to plain\n // text token-by-token.\n const [tokens, setTokens] = useState<{\n old: HighlightedLine[] | null;\n mod: HighlightedLine[] | null;\n }>({ old: null, mod: null });\n\n useEffect(() => {\n if (!language) {\n setTokens({ old: null, mod: null });\n return;\n }\n let cancelled = false;\n Promise.all([\n highlightToLines(oldSource, { lang: language }),\n highlightToLines(newSource, { lang: language }),\n ]).then(([old, mod]) => {\n if (!cancelled) setTokens({ old, mod });\n });\n return () => {\n cancelled = true;\n };\n }, [language, oldSource, newSource]);\n\n const resolved = useMemo(\n () => resolveHunks(hunks, tokens.old, tokens.mod),\n [hunks, tokens],\n );\n\n // Only a diff that spans more than one file labels its hunks with the path —\n // a single-file diff's path is already known from its surrounding context.\n const multiFile =\n new Set(resolved.map((hunk) => hunk.path).filter((p) => p !== undefined)).size > 1;\n\n let lastPath: string | undefined;\n const rows = resolved.map((hunk, index) => {\n const filePath =\n multiFile && hunk.path !== undefined && hunk.path !== lastPath ? hunk.path : undefined;\n lastPath = hunk.path;\n return (\n <Fragment key={index}>\n {filePath && <FileHeader path={filePath} />}\n {view === \"split\" ? (\n <SplitHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n ) : (\n <UnifiedHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n )}\n </Fragment>\n );\n });\n\n if (bare) {\n return (\n <div data-scroll-x className={cn(\"overflow-x-auto font-mono text-xs leading-relaxed\", className)}>\n {rows}\n </div>\n );\n }\n return (\n <div className={cn(\"overflow-hidden rounded-md border border-border bg-muted/40\", className)}>\n <div className=\"flex items-center justify-between gap-2 border-b border-border px-3 py-1.5\">\n <span className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {language || \"diff\"}\n </span>\n <SegmentedControl\n size=\"sm\"\n aria-label=\"Diff view\"\n value={view}\n onChange={setView}\n options={DIFF_VIEW_OPTIONS}\n />\n </div>\n {originalLabel != null || modifiedLabel != null ? (\n <div className={cn(\"border-b border-border text-xs font-medium\", view === \"split\" ? \"grid grid-cols-2 divide-x divide-border\" : \"flex flex-wrap gap-x-4\")}>\n <div data-diff-side=\"original\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"− \" : null}{originalLabel}</div>\n <div data-diff-side=\"modified\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"+ \" : null}{modifiedLabel}</div>\n </div>\n ) : null}\n <div data-scroll-x className=\"overflow-x-auto font-mono text-xs leading-relaxed\">{rows}</div>\n </div>\n );\n}\n\n// Reconstruct the full old side (context + remove) and new side (context + add)\n// as text — highlighting each side as a coherent blob so grammar state is intact.\nfunction buildSides(hunks: DiffHunk[]): { oldSource: string; newSource: string } {\n const oldLines: string[] = [];\n const newLines: string[] = [];\n for (const hunk of hunks) {\n for (const line of hunk.lines) {\n if (line.type !== \"add\") oldLines.push(line.content);\n if (line.type !== \"remove\") newLines.push(line.content);\n }\n }\n return { oldSource: oldLines.join(\"\\n\"), newSource: newLines.join(\"\\n\") };\n}\n\n// Map each diff line to its highlighted tokens via a sequential cursor per side\n// (not absolute line number, so unified-diff gaps between hunks stay aligned).\nfunction resolveHunks(\n hunks: DiffHunk[],\n oldTokens: HighlightedLine[] | null,\n newTokens: HighlightedLine[] | null,\n): ResolvedHunk[] {\n let oldCursor = 0;\n let newCursor = 0;\n return hunks.map((hunk) => ({\n header: hunk.header,\n path: hunk.path,\n lines: hunk.lines.map((line) => {\n const resolved: ResolvedLine = {\n line,\n oldTokens: line.type === \"add\" ? undefined : oldTokens?.[oldCursor],\n newTokens: line.type === \"remove\" ? undefined : newTokens?.[newCursor],\n };\n if (line.type !== \"add\") oldCursor += 1;\n if (line.type !== \"remove\") newCursor += 1;\n return resolved;\n }),\n }));\n}\n\ntype HunkProps = {\n hunk: ResolvedHunk;\n showLineNumbers: boolean;\n annotations: LineAnnotations;\n};\n\n// Which side of `line` a widget at (side, number) attaches to: context lines\n// carry both numbers, add lines only `new`, remove lines only `old`.\nfunction lineHasPosition(line: DiffLine, side: DiffSide, number: number): boolean {\n if (side === \"old\") return line.type !== \"add\" && line.oldNumber === number;\n return line.type !== \"remove\" && line.newNumber === number;\n}\n\nfunction WidgetRows({ widgets }: { widgets: DiffLineWidget[] }) {\n return (\n <>\n {widgets.map((widget) => (\n <div\n key={widget.key}\n data-diff-widget={widget.key}\n className=\"whitespace-normal border-y border-border bg-background px-3 py-2 font-sans text-sm leading-normal text-foreground\"\n >\n {widget.node}\n </div>\n ))}\n </>\n );\n}\n\nfunction UnifiedHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {hunk.lines.map((resolved, index) => {\n const { line } = resolved;\n const tokens = line.type === \"remove\" ? resolved.oldTokens : resolved.newTokens;\n const actionSide: DiffSide = line.type === \"remove\" ? \"old\" : \"new\";\n const widgets = lineWidgets?.filter((w) => lineHasPosition(line, w.side, w.line));\n return (\n <Fragment key={index}>\n <div className={cn(\"group flex\", ROW_TINT[line.type])} data-diff-line={line.type}>\n {showLineNumbers && (\n <>\n <Gutter\n value={line.oldNumber}\n line={line}\n side=\"old\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n <Gutter\n value={line.newNumber}\n line={line}\n side=\"new\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n </>\n )}\n <Marker type={line.type} />\n <code className=\"whitespace-pre pl-1 pr-3\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\nfunction SplitHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const pairs = useMemo(() => pairLines(hunk.lines), [hunk.lines]);\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {pairs.map((pair, index) => {\n const widgets = lineWidgets?.filter(\n (w) =>\n (pair.left !== undefined && lineHasPosition(pair.left.line, w.side, w.line) && w.side === \"old\") ||\n (pair.right !== undefined && lineHasPosition(pair.right.line, w.side, w.line) && w.side === \"new\"),\n );\n return (\n <Fragment key={index}>\n <div className=\"flex\">\n <SplitCell\n resolved={pair.left}\n side=\"old\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n <span aria-hidden className=\"w-px shrink-0 bg-border\" />\n <SplitCell\n resolved={pair.right}\n side=\"new\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\ntype SplitPair = { left: ResolvedLine | undefined; right: ResolvedLine | undefined };\n\n// Pair consecutive remove/add runs (remove[i] ↔ add[i]); leftovers get a blank\n// opposite cell. Context is one aligned row on both sides.\nfunction pairLines(lines: ResolvedLine[]): SplitPair[] {\n const pairs: SplitPair[] = [];\n let removes: ResolvedLine[] = [];\n let adds: ResolvedLine[] = [];\n const flush = () => {\n const max = Math.max(removes.length, adds.length);\n for (let i = 0; i < max; i++) pairs.push({ left: removes[i], right: adds[i] });\n removes = [];\n adds = [];\n };\n for (const resolved of lines) {\n if (resolved.line.type === \"remove\") removes.push(resolved);\n else if (resolved.line.type === \"add\") adds.push(resolved);\n else {\n flush();\n pairs.push({ left: resolved, right: resolved });\n }\n }\n flush();\n return pairs;\n}\n\nfunction SplitCell({\n resolved,\n side,\n showLineNumbers,\n onLineAction,\n}: {\n resolved: ResolvedLine | undefined;\n side: DiffSide;\n showLineNumbers: boolean;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n if (!resolved) return <div className=\"min-w-0 flex-1 basis-0\" />;\n const { line } = resolved;\n const active =\n (side === \"old\" && line.type === \"remove\") || (side === \"new\" && line.type === \"add\");\n const type: DiffLineType = active ? line.type : \"context\";\n const number = side === \"old\" ? line.oldNumber : line.newNumber;\n const tokens = side === \"old\" ? resolved.oldTokens : resolved.newTokens;\n return (\n // Equal, shrinkable halves whose code wraps: with `whitespace-pre` a long\n // line painted past its half and over the other side in a narrow container.\n <div\n className={cn(\"group flex min-w-0 flex-1 basis-0\", active && ROW_TINT[line.type])}\n data-diff-line={type}\n >\n {showLineNumbers && (\n <Gutter value={number} line={line} side={side} actionSide={side} onLineAction={onLineAction} />\n )}\n <Marker type={type} />\n <code className=\"min-w-0 flex-1 whitespace-pre-wrap pl-1 pr-3 [overflow-wrap:anywhere]\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n );\n}\n\nfunction FileHeader({ path }: { path: string }) {\n return (\n <div\n data-diff-file={path}\n className=\"flex items-center gap-1.5 border-b border-border bg-muted px-2 py-1 font-medium text-foreground\"\n >\n <UiFile className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"truncate\">{path}</span>\n </div>\n );\n}\n\nfunction HunkHeader({ header }: { header: string }) {\n return (\n <div className=\"select-none bg-muted/60 px-2 py-0.5 text-muted-foreground\">{header}</div>\n );\n}\n\n// `side` is the number this gutter shows; the \"+\" button only renders in the\n// `actionSide` gutter so a unified row (two gutters) exposes exactly one.\nfunction Gutter({\n value,\n line,\n side,\n actionSide,\n onLineAction,\n}: {\n value: number | undefined;\n line: DiffLine;\n side: DiffSide;\n actionSide: DiffSide;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n const showAction = onLineAction !== undefined && value !== undefined && side === actionSide;\n return (\n <span className=\"relative w-10 shrink-0 select-none px-2 text-right tabular-nums text-muted-foreground\">\n {value ?? \"\"}\n {showAction && (\n <button\n type=\"button\"\n aria-label={`Comment on line ${value}`}\n onClick={() => onLineAction({ side, line: value, content: line.content })}\n className=\"absolute inset-y-0 left-0.5 flex items-center rounded-sm bg-background text-primary opacity-0 hover:text-primary/80 focus-visible:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring group-hover:opacity-100\"\n >\n <UiAdd className=\"size-3.5\" />\n </button>\n )}\n </span>\n );\n}\n\nfunction Marker({ type }: { type: DiffLineType }) {\n return (\n <span className={cn(\"w-4 shrink-0 select-none text-center\", MARKER_TONE[type])}>\n {MARKER[type]}\n </span>\n );\n}\n"],"mappings":"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"}
|
package/dist/data/CodeDiff.js
CHANGED
|
@@ -94,6 +94,7 @@ function CodeDiff(props) {
|
|
|
94
94
|
})] }, index);
|
|
95
95
|
});
|
|
96
96
|
if (bare) return /* @__PURE__ */ jsx("div", {
|
|
97
|
+
"data-scroll-x": true,
|
|
97
98
|
className: cn("overflow-x-auto font-mono text-xs leading-relaxed", className),
|
|
98
99
|
children: rows
|
|
99
100
|
});
|
|
@@ -126,6 +127,7 @@ function CodeDiff(props) {
|
|
|
126
127
|
})]
|
|
127
128
|
}) : null,
|
|
128
129
|
/* @__PURE__ */ jsx("div", {
|
|
130
|
+
"data-scroll-x": true,
|
|
129
131
|
className: "overflow-x-auto font-mono text-xs leading-relaxed",
|
|
130
132
|
children: rows
|
|
131
133
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeDiff.js","names":["_Fragment"],"sources":["../../src/data/CodeDiff.tsx"],"sourcesContent":["import { Fragment, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SegmentedControl, type SegmentedOption } from \"../components/SegmentedControl\";\nimport { UiAdd, UiColumns, UiFile, UiRows } from \"../icons\";\nimport {\n computeLineDiff,\n parseUnifiedDiff,\n type DiffHunk,\n type DiffLine,\n type DiffLineType,\n} from \"./code-diff\";\nimport { highlightToLines, type HighlightedLine } from \"./code-highlight\";\nimport { HighlightedTokens } from \"./HighlightedTokens\";\n\nexport type CodeDiffView = \"unified\" | \"split\";\n\n// Rows = stacked/unified; columns = side-by-side/split.\nconst DIFF_VIEW_OPTIONS: SegmentedOption<CodeDiffView>[] = [\n { id: \"unified\", label: \"Unified\", icon: UiRows, title: \"Unified view\" },\n { id: \"split\", label: \"Split\", icon: UiColumns, title: \"Split view\" },\n];\n\n// Either two blobs (diffed in-repo) or a ready unified-diff string (what\n// `GitDiffPanel` already receives). `never` on the absent keys keeps the shapes\n// mutually exclusive.\ntype CodeDiffInput =\n | { original: string; modified: string; unified?: never }\n | { unified: string; original?: never; modified?: never };\n\nexport type DiffSide = \"old\" | \"new\";\n\n/** The diff line a gutter \"+\" button was clicked on. */\nexport interface DiffLineTarget {\n side: DiffSide;\n line: number;\n content: string;\n}\n\n/** A node rendered as a full-width row directly below the row at `(side, line)`. */\nexport interface DiffLineWidget {\n key: string;\n side: DiffSide;\n line: number;\n node: ReactNode;\n}\n\ntype LineAnnotations = {\n onLineAction: ((target: DiffLineTarget) => void) | undefined;\n lineWidgets: DiffLineWidget[] | undefined;\n};\n\nexport type CodeDiffProps = CodeDiffInput & {\n /**\n * When set, every numbered line shows a \"+\" button in its gutter (on row hover\n * or keyboard focus). Added/context lines report side `new`, deleted lines\n * `old`; in split view the left column is `old` and the right `new`.\n */\n onLineAction?: ((target: DiffLineTarget) => void) | undefined;\n /**\n * Rendered as a full-width row directly below the row matching `(side, line)`,\n * in array order. A context line matches both its `old` and `new` number.\n */\n lineWidgets?: DiffLineWidget[] | undefined;\n /** Highlighter language hint, e.g. `typescript`, `go`, `python`. */\n language?: string | undefined;\n /** Unified (single column) or split (side-by-side). Defaults to `unified`. */\n view?: CodeDiffView | undefined;\n /** Names the original (left) side; unified view prefixes it with a minus. */\n originalLabel?: ReactNode;\n /** Names the modified (right) side; unified view prefixes it with a plus. */\n modifiedLabel?: ReactNode;\n /** Show old/new line-number gutters. Defaults to `true`. */\n showLineNumbers?: boolean | undefined;\n /** Render only the rows — no border, background, or language header. */\n bare?: boolean | undefined;\n className?: string | undefined;\n};\n\ntype ResolvedLine = {\n line: DiffLine;\n oldTokens: HighlightedLine | undefined;\n newTokens: HighlightedLine | undefined;\n};\n\ntype ResolvedHunk = { header: string | undefined; path: string | undefined; lines: ResolvedLine[] };\n\n// Row background tint — theme-aware via `[[data-theme=dark]_&]` (plain `dark:`\n// compiles to prefers-color-scheme in the built dist and ignores `data-theme`).\nconst ROW_TINT: Record<DiffLineType, string | undefined> = {\n context: undefined,\n add: \"bg-emerald-500/10\",\n remove: \"bg-rose-500/10\",\n};\n\nconst MARKER_TONE: Record<DiffLineType, string> = {\n context: \"text-muted-foreground\",\n add: \"text-emerald-700 [[data-theme=dark]_&]:text-emerald-300\",\n remove: \"text-rose-700 [[data-theme=dark]_&]:text-rose-300\",\n};\n\nconst MARKER: Record<DiffLineType, string> = { context: \"\", add: \"+\", remove: \"-\" };\n\nexport function CodeDiff(props: CodeDiffProps) {\n const { language, view: viewProp = \"unified\", showLineNumbers = true, bare = false, className } = props;\n const { unified, original, modified, originalLabel, modifiedLabel, onLineAction, lineWidgets } = props;\n const annotations: LineAnnotations = { onLineAction, lineWidgets };\n\n // `view` prop seeds the default; the header toggle then owns it.\n const [view, setView] = useState<CodeDiffView>(viewProp);\n\n const hunks = useMemo<DiffHunk[]>(\n () =>\n unified !== undefined\n ? parseUnifiedDiff(unified)\n : computeLineDiff(original ?? \"\", modified ?? \"\"),\n [unified, original, modified],\n );\n\n const { oldSource, newSource } = useMemo(() => buildSides(hunks), [hunks]);\n\n // Raw first paint, highlighted tokens swap in — matches CodeBlock. `null`\n // means \"not highlighted\" (empty/unsupported/loading); rows fall back to plain\n // text token-by-token.\n const [tokens, setTokens] = useState<{\n old: HighlightedLine[] | null;\n mod: HighlightedLine[] | null;\n }>({ old: null, mod: null });\n\n useEffect(() => {\n if (!language) {\n setTokens({ old: null, mod: null });\n return;\n }\n let cancelled = false;\n Promise.all([\n highlightToLines(oldSource, { lang: language }),\n highlightToLines(newSource, { lang: language }),\n ]).then(([old, mod]) => {\n if (!cancelled) setTokens({ old, mod });\n });\n return () => {\n cancelled = true;\n };\n }, [language, oldSource, newSource]);\n\n const resolved = useMemo(\n () => resolveHunks(hunks, tokens.old, tokens.mod),\n [hunks, tokens],\n );\n\n // Only a diff that spans more than one file labels its hunks with the path —\n // a single-file diff's path is already known from its surrounding context.\n const multiFile =\n new Set(resolved.map((hunk) => hunk.path).filter((p) => p !== undefined)).size > 1;\n\n let lastPath: string | undefined;\n const rows = resolved.map((hunk, index) => {\n const filePath =\n multiFile && hunk.path !== undefined && hunk.path !== lastPath ? hunk.path : undefined;\n lastPath = hunk.path;\n return (\n <Fragment key={index}>\n {filePath && <FileHeader path={filePath} />}\n {view === \"split\" ? (\n <SplitHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n ) : (\n <UnifiedHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n )}\n </Fragment>\n );\n });\n\n if (bare) {\n return (\n <div className={cn(\"overflow-x-auto font-mono text-xs leading-relaxed\", className)}>\n {rows}\n </div>\n );\n }\n return (\n <div className={cn(\"overflow-hidden rounded-md border border-border bg-muted/40\", className)}>\n <div className=\"flex items-center justify-between gap-2 border-b border-border px-3 py-1.5\">\n <span className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {language || \"diff\"}\n </span>\n <SegmentedControl\n size=\"sm\"\n aria-label=\"Diff view\"\n value={view}\n onChange={setView}\n options={DIFF_VIEW_OPTIONS}\n />\n </div>\n {originalLabel != null || modifiedLabel != null ? (\n <div className={cn(\"border-b border-border text-xs font-medium\", view === \"split\" ? \"grid grid-cols-2 divide-x divide-border\" : \"flex flex-wrap gap-x-4\")}>\n <div data-diff-side=\"original\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"− \" : null}{originalLabel}</div>\n <div data-diff-side=\"modified\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"+ \" : null}{modifiedLabel}</div>\n </div>\n ) : null}\n <div className=\"overflow-x-auto font-mono text-xs leading-relaxed\">{rows}</div>\n </div>\n );\n}\n\n// Reconstruct the full old side (context + remove) and new side (context + add)\n// as text — highlighting each side as a coherent blob so grammar state is intact.\nfunction buildSides(hunks: DiffHunk[]): { oldSource: string; newSource: string } {\n const oldLines: string[] = [];\n const newLines: string[] = [];\n for (const hunk of hunks) {\n for (const line of hunk.lines) {\n if (line.type !== \"add\") oldLines.push(line.content);\n if (line.type !== \"remove\") newLines.push(line.content);\n }\n }\n return { oldSource: oldLines.join(\"\\n\"), newSource: newLines.join(\"\\n\") };\n}\n\n// Map each diff line to its highlighted tokens via a sequential cursor per side\n// (not absolute line number, so unified-diff gaps between hunks stay aligned).\nfunction resolveHunks(\n hunks: DiffHunk[],\n oldTokens: HighlightedLine[] | null,\n newTokens: HighlightedLine[] | null,\n): ResolvedHunk[] {\n let oldCursor = 0;\n let newCursor = 0;\n return hunks.map((hunk) => ({\n header: hunk.header,\n path: hunk.path,\n lines: hunk.lines.map((line) => {\n const resolved: ResolvedLine = {\n line,\n oldTokens: line.type === \"add\" ? undefined : oldTokens?.[oldCursor],\n newTokens: line.type === \"remove\" ? undefined : newTokens?.[newCursor],\n };\n if (line.type !== \"add\") oldCursor += 1;\n if (line.type !== \"remove\") newCursor += 1;\n return resolved;\n }),\n }));\n}\n\ntype HunkProps = {\n hunk: ResolvedHunk;\n showLineNumbers: boolean;\n annotations: LineAnnotations;\n};\n\n// Which side of `line` a widget at (side, number) attaches to: context lines\n// carry both numbers, add lines only `new`, remove lines only `old`.\nfunction lineHasPosition(line: DiffLine, side: DiffSide, number: number): boolean {\n if (side === \"old\") return line.type !== \"add\" && line.oldNumber === number;\n return line.type !== \"remove\" && line.newNumber === number;\n}\n\nfunction WidgetRows({ widgets }: { widgets: DiffLineWidget[] }) {\n return (\n <>\n {widgets.map((widget) => (\n <div\n key={widget.key}\n data-diff-widget={widget.key}\n className=\"whitespace-normal border-y border-border bg-background px-3 py-2 font-sans text-sm leading-normal text-foreground\"\n >\n {widget.node}\n </div>\n ))}\n </>\n );\n}\n\nfunction UnifiedHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {hunk.lines.map((resolved, index) => {\n const { line } = resolved;\n const tokens = line.type === \"remove\" ? resolved.oldTokens : resolved.newTokens;\n const actionSide: DiffSide = line.type === \"remove\" ? \"old\" : \"new\";\n const widgets = lineWidgets?.filter((w) => lineHasPosition(line, w.side, w.line));\n return (\n <Fragment key={index}>\n <div className={cn(\"group flex\", ROW_TINT[line.type])} data-diff-line={line.type}>\n {showLineNumbers && (\n <>\n <Gutter\n value={line.oldNumber}\n line={line}\n side=\"old\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n <Gutter\n value={line.newNumber}\n line={line}\n side=\"new\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n </>\n )}\n <Marker type={line.type} />\n <code className=\"whitespace-pre pl-1 pr-3\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\nfunction SplitHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const pairs = useMemo(() => pairLines(hunk.lines), [hunk.lines]);\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {pairs.map((pair, index) => {\n const widgets = lineWidgets?.filter(\n (w) =>\n (pair.left !== undefined && lineHasPosition(pair.left.line, w.side, w.line) && w.side === \"old\") ||\n (pair.right !== undefined && lineHasPosition(pair.right.line, w.side, w.line) && w.side === \"new\"),\n );\n return (\n <Fragment key={index}>\n <div className=\"flex\">\n <SplitCell\n resolved={pair.left}\n side=\"old\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n <span aria-hidden className=\"w-px shrink-0 bg-border\" />\n <SplitCell\n resolved={pair.right}\n side=\"new\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\ntype SplitPair = { left: ResolvedLine | undefined; right: ResolvedLine | undefined };\n\n// Pair consecutive remove/add runs (remove[i] ↔ add[i]); leftovers get a blank\n// opposite cell. Context is one aligned row on both sides.\nfunction pairLines(lines: ResolvedLine[]): SplitPair[] {\n const pairs: SplitPair[] = [];\n let removes: ResolvedLine[] = [];\n let adds: ResolvedLine[] = [];\n const flush = () => {\n const max = Math.max(removes.length, adds.length);\n for (let i = 0; i < max; i++) pairs.push({ left: removes[i], right: adds[i] });\n removes = [];\n adds = [];\n };\n for (const resolved of lines) {\n if (resolved.line.type === \"remove\") removes.push(resolved);\n else if (resolved.line.type === \"add\") adds.push(resolved);\n else {\n flush();\n pairs.push({ left: resolved, right: resolved });\n }\n }\n flush();\n return pairs;\n}\n\nfunction SplitCell({\n resolved,\n side,\n showLineNumbers,\n onLineAction,\n}: {\n resolved: ResolvedLine | undefined;\n side: DiffSide;\n showLineNumbers: boolean;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n if (!resolved) return <div className=\"min-w-0 flex-1 basis-0\" />;\n const { line } = resolved;\n const active =\n (side === \"old\" && line.type === \"remove\") || (side === \"new\" && line.type === \"add\");\n const type: DiffLineType = active ? line.type : \"context\";\n const number = side === \"old\" ? line.oldNumber : line.newNumber;\n const tokens = side === \"old\" ? resolved.oldTokens : resolved.newTokens;\n return (\n // Equal, shrinkable halves whose code wraps: with `whitespace-pre` a long\n // line painted past its half and over the other side in a narrow container.\n <div\n className={cn(\"group flex min-w-0 flex-1 basis-0\", active && ROW_TINT[line.type])}\n data-diff-line={type}\n >\n {showLineNumbers && (\n <Gutter value={number} line={line} side={side} actionSide={side} onLineAction={onLineAction} />\n )}\n <Marker type={type} />\n <code className=\"min-w-0 flex-1 whitespace-pre-wrap pl-1 pr-3 [overflow-wrap:anywhere]\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n );\n}\n\nfunction FileHeader({ path }: { path: string }) {\n return (\n <div\n data-diff-file={path}\n className=\"flex items-center gap-1.5 border-b border-border bg-muted px-2 py-1 font-medium text-foreground\"\n >\n <UiFile className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"truncate\">{path}</span>\n </div>\n );\n}\n\nfunction HunkHeader({ header }: { header: string }) {\n return (\n <div className=\"select-none bg-muted/60 px-2 py-0.5 text-muted-foreground\">{header}</div>\n );\n}\n\n// `side` is the number this gutter shows; the \"+\" button only renders in the\n// `actionSide` gutter so a unified row (two gutters) exposes exactly one.\nfunction Gutter({\n value,\n line,\n side,\n actionSide,\n onLineAction,\n}: {\n value: number | undefined;\n line: DiffLine;\n side: DiffSide;\n actionSide: DiffSide;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n const showAction = onLineAction !== undefined && value !== undefined && side === actionSide;\n return (\n <span className=\"relative w-10 shrink-0 select-none px-2 text-right tabular-nums text-muted-foreground\">\n {value ?? \"\"}\n {showAction && (\n <button\n type=\"button\"\n aria-label={`Comment on line ${value}`}\n onClick={() => onLineAction({ side, line: value, content: line.content })}\n className=\"absolute inset-y-0 left-0.5 flex items-center rounded-sm bg-background text-primary opacity-0 hover:text-primary/80 focus-visible:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring group-hover:opacity-100\"\n >\n <UiAdd className=\"size-3.5\" />\n </button>\n )}\n </span>\n );\n}\n\nfunction Marker({ type }: { type: DiffLineType }) {\n return (\n <span className={cn(\"w-4 shrink-0 select-none text-center\", MARKER_TONE[type])}>\n {MARKER[type]}\n </span>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeDiff.js","names":["_Fragment"],"sources":["../../src/data/CodeDiff.tsx"],"sourcesContent":["import { Fragment, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SegmentedControl, type SegmentedOption } from \"../components/SegmentedControl\";\nimport { UiAdd, UiColumns, UiFile, UiRows } from \"../icons\";\nimport {\n computeLineDiff,\n parseUnifiedDiff,\n type DiffHunk,\n type DiffLine,\n type DiffLineType,\n} from \"./code-diff\";\nimport { highlightToLines, type HighlightedLine } from \"./code-highlight\";\nimport { HighlightedTokens } from \"./HighlightedTokens\";\n\nexport type CodeDiffView = \"unified\" | \"split\";\n\n// Rows = stacked/unified; columns = side-by-side/split.\nconst DIFF_VIEW_OPTIONS: SegmentedOption<CodeDiffView>[] = [\n { id: \"unified\", label: \"Unified\", icon: UiRows, title: \"Unified view\" },\n { id: \"split\", label: \"Split\", icon: UiColumns, title: \"Split view\" },\n];\n\n// Either two blobs (diffed in-repo) or a ready unified-diff string (what\n// `GitDiffPanel` already receives). `never` on the absent keys keeps the shapes\n// mutually exclusive.\ntype CodeDiffInput =\n | { original: string; modified: string; unified?: never }\n | { unified: string; original?: never; modified?: never };\n\nexport type DiffSide = \"old\" | \"new\";\n\n/** The diff line a gutter \"+\" button was clicked on. */\nexport interface DiffLineTarget {\n side: DiffSide;\n line: number;\n content: string;\n}\n\n/** A node rendered as a full-width row directly below the row at `(side, line)`. */\nexport interface DiffLineWidget {\n key: string;\n side: DiffSide;\n line: number;\n node: ReactNode;\n}\n\ntype LineAnnotations = {\n onLineAction: ((target: DiffLineTarget) => void) | undefined;\n lineWidgets: DiffLineWidget[] | undefined;\n};\n\nexport type CodeDiffProps = CodeDiffInput & {\n /**\n * When set, every numbered line shows a \"+\" button in its gutter (on row hover\n * or keyboard focus). Added/context lines report side `new`, deleted lines\n * `old`; in split view the left column is `old` and the right `new`.\n */\n onLineAction?: ((target: DiffLineTarget) => void) | undefined;\n /**\n * Rendered as a full-width row directly below the row matching `(side, line)`,\n * in array order. A context line matches both its `old` and `new` number.\n */\n lineWidgets?: DiffLineWidget[] | undefined;\n /** Highlighter language hint, e.g. `typescript`, `go`, `python`. */\n language?: string | undefined;\n /** Unified (single column) or split (side-by-side). Defaults to `unified`. */\n view?: CodeDiffView | undefined;\n /** Names the original (left) side; unified view prefixes it with a minus. */\n originalLabel?: ReactNode;\n /** Names the modified (right) side; unified view prefixes it with a plus. */\n modifiedLabel?: ReactNode;\n /** Show old/new line-number gutters. Defaults to `true`. */\n showLineNumbers?: boolean | undefined;\n /** Render only the rows — no border, background, or language header. */\n bare?: boolean | undefined;\n className?: string | undefined;\n};\n\ntype ResolvedLine = {\n line: DiffLine;\n oldTokens: HighlightedLine | undefined;\n newTokens: HighlightedLine | undefined;\n};\n\ntype ResolvedHunk = { header: string | undefined; path: string | undefined; lines: ResolvedLine[] };\n\n// Row background tint — theme-aware via `[[data-theme=dark]_&]` (plain `dark:`\n// compiles to prefers-color-scheme in the built dist and ignores `data-theme`).\nconst ROW_TINT: Record<DiffLineType, string | undefined> = {\n context: undefined,\n add: \"bg-emerald-500/10\",\n remove: \"bg-rose-500/10\",\n};\n\nconst MARKER_TONE: Record<DiffLineType, string> = {\n context: \"text-muted-foreground\",\n add: \"text-emerald-700 [[data-theme=dark]_&]:text-emerald-300\",\n remove: \"text-rose-700 [[data-theme=dark]_&]:text-rose-300\",\n};\n\nconst MARKER: Record<DiffLineType, string> = { context: \"\", add: \"+\", remove: \"-\" };\n\nexport function CodeDiff(props: CodeDiffProps) {\n const { language, view: viewProp = \"unified\", showLineNumbers = true, bare = false, className } = props;\n const { unified, original, modified, originalLabel, modifiedLabel, onLineAction, lineWidgets } = props;\n const annotations: LineAnnotations = { onLineAction, lineWidgets };\n\n // `view` prop seeds the default; the header toggle then owns it.\n const [view, setView] = useState<CodeDiffView>(viewProp);\n\n const hunks = useMemo<DiffHunk[]>(\n () =>\n unified !== undefined\n ? parseUnifiedDiff(unified)\n : computeLineDiff(original ?? \"\", modified ?? \"\"),\n [unified, original, modified],\n );\n\n const { oldSource, newSource } = useMemo(() => buildSides(hunks), [hunks]);\n\n // Raw first paint, highlighted tokens swap in — matches CodeBlock. `null`\n // means \"not highlighted\" (empty/unsupported/loading); rows fall back to plain\n // text token-by-token.\n const [tokens, setTokens] = useState<{\n old: HighlightedLine[] | null;\n mod: HighlightedLine[] | null;\n }>({ old: null, mod: null });\n\n useEffect(() => {\n if (!language) {\n setTokens({ old: null, mod: null });\n return;\n }\n let cancelled = false;\n Promise.all([\n highlightToLines(oldSource, { lang: language }),\n highlightToLines(newSource, { lang: language }),\n ]).then(([old, mod]) => {\n if (!cancelled) setTokens({ old, mod });\n });\n return () => {\n cancelled = true;\n };\n }, [language, oldSource, newSource]);\n\n const resolved = useMemo(\n () => resolveHunks(hunks, tokens.old, tokens.mod),\n [hunks, tokens],\n );\n\n // Only a diff that spans more than one file labels its hunks with the path —\n // a single-file diff's path is already known from its surrounding context.\n const multiFile =\n new Set(resolved.map((hunk) => hunk.path).filter((p) => p !== undefined)).size > 1;\n\n let lastPath: string | undefined;\n const rows = resolved.map((hunk, index) => {\n const filePath =\n multiFile && hunk.path !== undefined && hunk.path !== lastPath ? hunk.path : undefined;\n lastPath = hunk.path;\n return (\n <Fragment key={index}>\n {filePath && <FileHeader path={filePath} />}\n {view === \"split\" ? (\n <SplitHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n ) : (\n <UnifiedHunk hunk={hunk} showLineNumbers={showLineNumbers} annotations={annotations} />\n )}\n </Fragment>\n );\n });\n\n if (bare) {\n return (\n <div data-scroll-x className={cn(\"overflow-x-auto font-mono text-xs leading-relaxed\", className)}>\n {rows}\n </div>\n );\n }\n return (\n <div className={cn(\"overflow-hidden rounded-md border border-border bg-muted/40\", className)}>\n <div className=\"flex items-center justify-between gap-2 border-b border-border px-3 py-1.5\">\n <span className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {language || \"diff\"}\n </span>\n <SegmentedControl\n size=\"sm\"\n aria-label=\"Diff view\"\n value={view}\n onChange={setView}\n options={DIFF_VIEW_OPTIONS}\n />\n </div>\n {originalLabel != null || modifiedLabel != null ? (\n <div className={cn(\"border-b border-border text-xs font-medium\", view === \"split\" ? \"grid grid-cols-2 divide-x divide-border\" : \"flex flex-wrap gap-x-4\")}>\n <div data-diff-side=\"original\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"− \" : null}{originalLabel}</div>\n <div data-diff-side=\"modified\" className=\"min-w-0 break-words px-3 py-1.5\">{view === \"unified\" ? \"+ \" : null}{modifiedLabel}</div>\n </div>\n ) : null}\n <div data-scroll-x className=\"overflow-x-auto font-mono text-xs leading-relaxed\">{rows}</div>\n </div>\n );\n}\n\n// Reconstruct the full old side (context + remove) and new side (context + add)\n// as text — highlighting each side as a coherent blob so grammar state is intact.\nfunction buildSides(hunks: DiffHunk[]): { oldSource: string; newSource: string } {\n const oldLines: string[] = [];\n const newLines: string[] = [];\n for (const hunk of hunks) {\n for (const line of hunk.lines) {\n if (line.type !== \"add\") oldLines.push(line.content);\n if (line.type !== \"remove\") newLines.push(line.content);\n }\n }\n return { oldSource: oldLines.join(\"\\n\"), newSource: newLines.join(\"\\n\") };\n}\n\n// Map each diff line to its highlighted tokens via a sequential cursor per side\n// (not absolute line number, so unified-diff gaps between hunks stay aligned).\nfunction resolveHunks(\n hunks: DiffHunk[],\n oldTokens: HighlightedLine[] | null,\n newTokens: HighlightedLine[] | null,\n): ResolvedHunk[] {\n let oldCursor = 0;\n let newCursor = 0;\n return hunks.map((hunk) => ({\n header: hunk.header,\n path: hunk.path,\n lines: hunk.lines.map((line) => {\n const resolved: ResolvedLine = {\n line,\n oldTokens: line.type === \"add\" ? undefined : oldTokens?.[oldCursor],\n newTokens: line.type === \"remove\" ? undefined : newTokens?.[newCursor],\n };\n if (line.type !== \"add\") oldCursor += 1;\n if (line.type !== \"remove\") newCursor += 1;\n return resolved;\n }),\n }));\n}\n\ntype HunkProps = {\n hunk: ResolvedHunk;\n showLineNumbers: boolean;\n annotations: LineAnnotations;\n};\n\n// Which side of `line` a widget at (side, number) attaches to: context lines\n// carry both numbers, add lines only `new`, remove lines only `old`.\nfunction lineHasPosition(line: DiffLine, side: DiffSide, number: number): boolean {\n if (side === \"old\") return line.type !== \"add\" && line.oldNumber === number;\n return line.type !== \"remove\" && line.newNumber === number;\n}\n\nfunction WidgetRows({ widgets }: { widgets: DiffLineWidget[] }) {\n return (\n <>\n {widgets.map((widget) => (\n <div\n key={widget.key}\n data-diff-widget={widget.key}\n className=\"whitespace-normal border-y border-border bg-background px-3 py-2 font-sans text-sm leading-normal text-foreground\"\n >\n {widget.node}\n </div>\n ))}\n </>\n );\n}\n\nfunction UnifiedHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {hunk.lines.map((resolved, index) => {\n const { line } = resolved;\n const tokens = line.type === \"remove\" ? resolved.oldTokens : resolved.newTokens;\n const actionSide: DiffSide = line.type === \"remove\" ? \"old\" : \"new\";\n const widgets = lineWidgets?.filter((w) => lineHasPosition(line, w.side, w.line));\n return (\n <Fragment key={index}>\n <div className={cn(\"group flex\", ROW_TINT[line.type])} data-diff-line={line.type}>\n {showLineNumbers && (\n <>\n <Gutter\n value={line.oldNumber}\n line={line}\n side=\"old\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n <Gutter\n value={line.newNumber}\n line={line}\n side=\"new\"\n actionSide={actionSide}\n onLineAction={onLineAction}\n />\n </>\n )}\n <Marker type={line.type} />\n <code className=\"whitespace-pre pl-1 pr-3\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\nfunction SplitHunk({ hunk, showLineNumbers, annotations }: HunkProps) {\n const pairs = useMemo(() => pairLines(hunk.lines), [hunk.lines]);\n const { onLineAction, lineWidgets } = annotations;\n return (\n <>\n {hunk.header && <HunkHeader header={hunk.header} />}\n {pairs.map((pair, index) => {\n const widgets = lineWidgets?.filter(\n (w) =>\n (pair.left !== undefined && lineHasPosition(pair.left.line, w.side, w.line) && w.side === \"old\") ||\n (pair.right !== undefined && lineHasPosition(pair.right.line, w.side, w.line) && w.side === \"new\"),\n );\n return (\n <Fragment key={index}>\n <div className=\"flex\">\n <SplitCell\n resolved={pair.left}\n side=\"old\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n <span aria-hidden className=\"w-px shrink-0 bg-border\" />\n <SplitCell\n resolved={pair.right}\n side=\"new\"\n showLineNumbers={showLineNumbers}\n onLineAction={onLineAction}\n />\n </div>\n {widgets && <WidgetRows widgets={widgets} />}\n </Fragment>\n );\n })}\n </>\n );\n}\n\ntype SplitPair = { left: ResolvedLine | undefined; right: ResolvedLine | undefined };\n\n// Pair consecutive remove/add runs (remove[i] ↔ add[i]); leftovers get a blank\n// opposite cell. Context is one aligned row on both sides.\nfunction pairLines(lines: ResolvedLine[]): SplitPair[] {\n const pairs: SplitPair[] = [];\n let removes: ResolvedLine[] = [];\n let adds: ResolvedLine[] = [];\n const flush = () => {\n const max = Math.max(removes.length, adds.length);\n for (let i = 0; i < max; i++) pairs.push({ left: removes[i], right: adds[i] });\n removes = [];\n adds = [];\n };\n for (const resolved of lines) {\n if (resolved.line.type === \"remove\") removes.push(resolved);\n else if (resolved.line.type === \"add\") adds.push(resolved);\n else {\n flush();\n pairs.push({ left: resolved, right: resolved });\n }\n }\n flush();\n return pairs;\n}\n\nfunction SplitCell({\n resolved,\n side,\n showLineNumbers,\n onLineAction,\n}: {\n resolved: ResolvedLine | undefined;\n side: DiffSide;\n showLineNumbers: boolean;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n if (!resolved) return <div className=\"min-w-0 flex-1 basis-0\" />;\n const { line } = resolved;\n const active =\n (side === \"old\" && line.type === \"remove\") || (side === \"new\" && line.type === \"add\");\n const type: DiffLineType = active ? line.type : \"context\";\n const number = side === \"old\" ? line.oldNumber : line.newNumber;\n const tokens = side === \"old\" ? resolved.oldTokens : resolved.newTokens;\n return (\n // Equal, shrinkable halves whose code wraps: with `whitespace-pre` a long\n // line painted past its half and over the other side in a narrow container.\n <div\n className={cn(\"group flex min-w-0 flex-1 basis-0\", active && ROW_TINT[line.type])}\n data-diff-line={type}\n >\n {showLineNumbers && (\n <Gutter value={number} line={line} side={side} actionSide={side} onLineAction={onLineAction} />\n )}\n <Marker type={type} />\n <code className=\"min-w-0 flex-1 whitespace-pre-wrap pl-1 pr-3 [overflow-wrap:anywhere]\">\n <HighlightedTokens tokens={tokens} content={line.content} />\n </code>\n </div>\n );\n}\n\nfunction FileHeader({ path }: { path: string }) {\n return (\n <div\n data-diff-file={path}\n className=\"flex items-center gap-1.5 border-b border-border bg-muted px-2 py-1 font-medium text-foreground\"\n >\n <UiFile className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"truncate\">{path}</span>\n </div>\n );\n}\n\nfunction HunkHeader({ header }: { header: string }) {\n return (\n <div className=\"select-none bg-muted/60 px-2 py-0.5 text-muted-foreground\">{header}</div>\n );\n}\n\n// `side` is the number this gutter shows; the \"+\" button only renders in the\n// `actionSide` gutter so a unified row (two gutters) exposes exactly one.\nfunction Gutter({\n value,\n line,\n side,\n actionSide,\n onLineAction,\n}: {\n value: number | undefined;\n line: DiffLine;\n side: DiffSide;\n actionSide: DiffSide;\n onLineAction: LineAnnotations[\"onLineAction\"];\n}) {\n const showAction = onLineAction !== undefined && value !== undefined && side === actionSide;\n return (\n <span className=\"relative w-10 shrink-0 select-none px-2 text-right tabular-nums text-muted-foreground\">\n {value ?? \"\"}\n {showAction && (\n <button\n type=\"button\"\n aria-label={`Comment on line ${value}`}\n onClick={() => onLineAction({ side, line: value, content: line.content })}\n className=\"absolute inset-y-0 left-0.5 flex items-center rounded-sm bg-background text-primary opacity-0 hover:text-primary/80 focus-visible:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring group-hover:opacity-100\"\n >\n <UiAdd className=\"size-3.5\" />\n </button>\n )}\n </span>\n );\n}\n\nfunction Marker({ type }: { type: DiffLineType }) {\n return (\n <span className={cn(\"w-4 shrink-0 select-none text-center\", MARKER_TONE[type])}>\n {MARKER[type]}\n </span>\n );\n}\n"],"mappings":"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"}
|
package/dist/data/DataTable.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_utils = require("../lib/utils.cjs");
|
|
2
|
+
const require_breakpoints = require("../lib/breakpoints.cjs");
|
|
2
3
|
const require_UiChevronDown = require("../icons/components/UiChevronDown.cjs");
|
|
3
4
|
const require_UiChevronRight = require("../icons/components/UiChevronRight.cjs");
|
|
4
5
|
const require_UiClose = require("../icons/components/UiClose.cjs");
|
|
@@ -153,7 +154,7 @@ function DataTableInner({ data, error, columns: columnsInput, loading = false, l
|
|
|
153
154
|
});
|
|
154
155
|
const [columnMenu, setColumnMenu] = (0, react.useState)(null);
|
|
155
156
|
const [headerFilterMenu, setHeaderFilterMenu] = (0, react.useState)(null);
|
|
156
|
-
const preferencesSheet = require_use_media_query.useMediaQuery(
|
|
157
|
+
const preferencesSheet = require_use_media_query.useMediaQuery(require_breakpoints.belowBreakpoint("sm"));
|
|
157
158
|
const [textFilters, setTextFilters] = (0, react.useState)({});
|
|
158
159
|
const [multiFilters, setMultiFilters] = (0, react.useState)({});
|
|
159
160
|
const [numberFilters, setNumberFilters] = (0, react.useState)({});
|
|
@@ -1471,7 +1472,7 @@ function DataTablePaginationFooter({ pagination, visibleRowCount, infinite = fal
|
|
|
1471
1472
|
trail.push(cursor.next);
|
|
1472
1473
|
cursor.onCursorChange(cursor.next);
|
|
1473
1474
|
};
|
|
1474
|
-
const compact = require_use_media_query.useMediaQuery(
|
|
1475
|
+
const compact = require_use_media_query.useMediaQuery(require_breakpoints.belowBreakpoint("sm"));
|
|
1475
1476
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1476
1477
|
className: "flex min-h-9 shrink-0 flex-wrap items-center justify-between gap-x-2 gap-y-1 border-t border-border/70 px-1 pt-2 text-xs text-muted-foreground max-sm:flex-nowrap sm:gap-3",
|
|
1477
1478
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|