@theia/scm 1.71.0-next.8 → 1.71.0
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/lib/browser/dirty-diff/dirty-diff-widget.js +1 -1
- package/lib/browser/dirty-diff/dirty-diff-widget.js.map +1 -1
- package/lib/browser/merge-editor/merge-editor-module.d.ts +6 -0
- package/lib/browser/merge-editor/merge-editor-module.d.ts.map +1 -1
- package/lib/browser/merge-editor/merge-editor-module.js +21 -2
- package/lib/browser/merge-editor/merge-editor-module.js.map +1 -1
- package/lib/browser/scm-context-key-service.d.ts +8 -0
- package/lib/browser/scm-context-key-service.d.ts.map +1 -1
- package/lib/browser/scm-context-key-service.js +16 -0
- package/lib/browser/scm-context-key-service.js.map +1 -1
- package/lib/browser/scm-contribution.d.ts.map +1 -1
- package/lib/browser/scm-contribution.js +143 -1
- package/lib/browser/scm-contribution.js.map +1 -1
- package/lib/browser/scm-frontend-module.d.ts.map +1 -1
- package/lib/browser/scm-frontend-module.js +14 -0
- package/lib/browser/scm-frontend-module.js.map +1 -1
- package/lib/browser/scm-history-graph-helpers.d.ts +39 -0
- package/lib/browser/scm-history-graph-helpers.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-helpers.js +167 -0
- package/lib/browser/scm-history-graph-helpers.js.map +1 -0
- package/lib/browser/scm-history-graph-lanes.d.ts +59 -0
- package/lib/browser/scm-history-graph-lanes.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-lanes.js +183 -0
- package/lib/browser/scm-history-graph-lanes.js.map +1 -0
- package/lib/browser/scm-history-graph-lanes.spec.d.ts +2 -0
- package/lib/browser/scm-history-graph-lanes.spec.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-lanes.spec.js +554 -0
- package/lib/browser/scm-history-graph-lanes.spec.js.map +1 -0
- package/lib/browser/scm-history-graph-model.d.ts +46 -0
- package/lib/browser/scm-history-graph-model.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-model.js +184 -0
- package/lib/browser/scm-history-graph-model.js.map +1 -0
- package/lib/browser/scm-history-graph-model.spec.d.ts +2 -0
- package/lib/browser/scm-history-graph-model.spec.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-model.spec.js +131 -0
- package/lib/browser/scm-history-graph-model.spec.js.map +1 -0
- package/lib/browser/scm-history-graph-tooltip.d.ts +14 -0
- package/lib/browser/scm-history-graph-tooltip.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-tooltip.js +190 -0
- package/lib/browser/scm-history-graph-tooltip.js.map +1 -0
- package/lib/browser/scm-history-graph-widget.d.ts +77 -0
- package/lib/browser/scm-history-graph-widget.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-widget.js +490 -0
- package/lib/browser/scm-history-graph-widget.js.map +1 -0
- package/lib/browser/scm-provider.d.ts +61 -0
- package/lib/browser/scm-provider.d.ts.map +1 -1
- package/lib/browser/scm-provider.js.map +1 -1
- package/lib/browser/scm-repositories-widget.d.ts +6 -1
- package/lib/browser/scm-repositories-widget.d.ts.map +1 -1
- package/lib/browser/scm-repositories-widget.js +11 -4
- package/lib/browser/scm-repositories-widget.js.map +1 -1
- package/lib/browser/scm-repositories-widget.spec.js +1 -1
- package/lib/browser/scm-repositories-widget.spec.js.map +1 -1
- package/lib/browser/scm-service.d.ts.map +1 -1
- package/lib/browser/scm-service.js +4 -1
- package/lib/browser/scm-service.js.map +1 -1
- package/lib/browser/scm-service.spec.d.ts +2 -0
- package/lib/browser/scm-service.spec.d.ts.map +1 -0
- package/lib/browser/scm-service.spec.js +77 -0
- package/lib/browser/scm-service.spec.js.map +1 -0
- package/package.json +11 -11
- package/src/browser/dirty-diff/dirty-diff-widget.ts +1 -1
- package/src/browser/merge-editor/merge-editor-module.ts +24 -6
- package/src/browser/scm-context-key-service.ts +24 -0
- package/src/browser/scm-contribution.ts +157 -0
- package/src/browser/scm-frontend-module.ts +15 -0
- package/src/browser/scm-history-graph-helpers.ts +175 -0
- package/src/browser/scm-history-graph-lanes.spec.ts +635 -0
- package/src/browser/scm-history-graph-lanes.ts +258 -0
- package/src/browser/scm-history-graph-model.spec.ts +171 -0
- package/src/browser/scm-history-graph-model.ts +207 -0
- package/src/browser/scm-history-graph-tooltip.ts +213 -0
- package/src/browser/scm-history-graph-widget.tsx +712 -0
- package/src/browser/scm-provider.ts +68 -0
- package/src/browser/scm-repositories-widget.spec.ts +1 -1
- package/src/browser/scm-repositories-widget.tsx +10 -3
- package/src/browser/scm-service.spec.ts +91 -0
- package/src/browser/scm-service.ts +4 -1
- package/src/browser/style/index.css +12 -13
- package/src/browser/style/scm-history-graph.css +313 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as React from '@theia/core/shared/react';
|
|
2
|
+
import { ReactWidget } from '@theia/core/lib/browser/widgets/react-widget';
|
|
3
|
+
import { LabelProvider } from '@theia/core/lib/browser/label-provider';
|
|
4
|
+
import { HoverService } from '@theia/core/lib/browser/hover-service';
|
|
5
|
+
import { MarkdownRenderer, MarkdownRendererFactory } from '@theia/core/lib/browser/markdown-rendering/markdown-renderer';
|
|
6
|
+
import { ScmHistoryGraphModel, HistoryGraphEntry } from './scm-history-graph-model';
|
|
7
|
+
import { ScmHistoryItemRef, ScmHistoryItemChange } from './scm-provider';
|
|
8
|
+
import { ScmService } from './scm-service';
|
|
9
|
+
import { GraphRow } from './scm-history-graph-lanes';
|
|
10
|
+
import { CancellationTokenSource } from '@theia/core/lib/common/cancellation';
|
|
11
|
+
import { MenuPath } from '@theia/core/lib/common/menu/menu-types';
|
|
12
|
+
import { ContextMenuRenderer } from '@theia/core/lib/browser/context-menu-renderer';
|
|
13
|
+
import { OpenerService } from '@theia/core/lib/browser/opener-service';
|
|
14
|
+
import { ScmContextKeyService } from './scm-context-key-service';
|
|
15
|
+
/** Menu path matching the VS Code 'scm/history/title' contribution point (graph section toolbar). */
|
|
16
|
+
export declare const SCM_HISTORY_TITLE_MENU: MenuPath;
|
|
17
|
+
/** Menu path matching the VS Code 'scm/historyItem/context' contribution point (commit row context menu). */
|
|
18
|
+
export declare const SCM_HISTORY_ITEM_CONTEXT_MENU: MenuPath;
|
|
19
|
+
/** Menu path matching the VS Code 'scm/historyItemRef/context' contribution point (ref badge context menu). */
|
|
20
|
+
export declare const SCM_HISTORY_ITEM_REF_CONTEXT_MENU: MenuPath;
|
|
21
|
+
export declare class ScmHistoryGraphWidget extends ReactWidget {
|
|
22
|
+
static readonly ID = "scm-history-graph-widget";
|
|
23
|
+
static readonly LABEL: string;
|
|
24
|
+
protected readonly model: ScmHistoryGraphModel;
|
|
25
|
+
protected readonly hoverService: HoverService;
|
|
26
|
+
protected readonly markdownRendererFactory: MarkdownRendererFactory;
|
|
27
|
+
protected readonly scmService: ScmService;
|
|
28
|
+
protected readonly labelProvider: LabelProvider;
|
|
29
|
+
protected readonly contextMenuRenderer: ContextMenuRenderer;
|
|
30
|
+
protected readonly openerService: OpenerService;
|
|
31
|
+
protected readonly scmContextKeys: ScmContextKeyService;
|
|
32
|
+
protected selectedIndex: number;
|
|
33
|
+
/** Currently selected change row key (`${itemId}-${ci}`), or undefined. */
|
|
34
|
+
protected selectedChangeKey: string | undefined;
|
|
35
|
+
/** Map from commit id → loaded changes (undefined = not loaded yet). */
|
|
36
|
+
protected expandedChanges: Map<string, ScmHistoryItemChange[] | "loading">;
|
|
37
|
+
/** Set of commit ids that are currently expanded. */
|
|
38
|
+
protected expandedIds: Set<string>;
|
|
39
|
+
/** Map from commit id → in-flight CancellationTokenSource for loadChanges. */
|
|
40
|
+
protected loadChangesCts: Map<string, CancellationTokenSource>;
|
|
41
|
+
constructor();
|
|
42
|
+
protected init(): void;
|
|
43
|
+
protected updateContextKeys(): void;
|
|
44
|
+
protected render(): React.ReactNode;
|
|
45
|
+
protected handleEndReached: () => void;
|
|
46
|
+
protected renderRow(entry: HistoryGraphEntry, idx: number, svgWidth: number): React.ReactElement;
|
|
47
|
+
protected _markdownRenderer: MarkdownRenderer | undefined;
|
|
48
|
+
protected get markdownRenderer(): MarkdownRenderer;
|
|
49
|
+
protected handleRowMouseEnter: (e: React.MouseEvent<HTMLDivElement>, entry: HistoryGraphEntry) => void;
|
|
50
|
+
protected renderChangesRows(itemId: string, svgWidth: number, graphRow: GraphRow, changes: ScmHistoryItemChange[] | 'loading' | undefined): React.ReactElement;
|
|
51
|
+
protected renderChangeRow(change: ScmHistoryItemChange, ci: number, itemId: string, svgWidth: number, graphRow: GraphRow): React.ReactElement;
|
|
52
|
+
protected handleChangeClick: (e: React.MouseEvent, change: ScmHistoryItemChange, changeKey: string) => void;
|
|
53
|
+
protected openChange(change: ScmHistoryItemChange): void;
|
|
54
|
+
protected renderChangeRowSvg(graphRow: GraphRow, svgWidth: number): React.ReactElement;
|
|
55
|
+
/**
|
|
56
|
+
* Renders the SVG graph column for a commit row, matching VS Code's SVG structure:
|
|
57
|
+
*
|
|
58
|
+
* - Each lane is 22px wide; circle cx = lane * 22 + 11, cy = 11
|
|
59
|
+
* - Pass-through lanes: full vertical line M x 0 V 22
|
|
60
|
+
* - Commit lane: top segment (M commitX 0 V 11) + bottom segment (M commitX 11 V 22)
|
|
61
|
+
* - HEAD/current commit (first entry): r=7 with inner dot, NO top segment
|
|
62
|
+
* - Normal commit: r=5
|
|
63
|
+
* - Branch-out edge: diagonal S-curve bezier from commit position (commitX, cy)
|
|
64
|
+
* sweeping down to the new lane at the bottom: M commitX cy C commitX 22 newX cy newX 22
|
|
65
|
+
* - Merge-in edge: bezier from the source lane at the top curving into
|
|
66
|
+
* the commit position: M srcX 0 C srcX cy commitX cy commitX cy
|
|
67
|
+
*/
|
|
68
|
+
protected renderGraphSvg(row: GraphRow, svgWidth: number, isHead: boolean): React.ReactElement;
|
|
69
|
+
protected renderRefBadges(refs?: readonly ScmHistoryItemRef[], entry?: HistoryGraphEntry): React.ReactNode;
|
|
70
|
+
protected handleRowContextMenu: (e: React.MouseEvent, entry: HistoryGraphEntry) => void;
|
|
71
|
+
protected handleRefBadgeContextMenu: (e: React.MouseEvent, entry: HistoryGraphEntry, ref: ScmHistoryItemRef) => void;
|
|
72
|
+
protected handleRowClick: (idx: number, entry: HistoryGraphEntry) => void;
|
|
73
|
+
protected loadChanges(entry: HistoryGraphEntry): Promise<void>;
|
|
74
|
+
protected handleLoadMore: () => void;
|
|
75
|
+
protected handleLoadMoreKey: (e: React.KeyboardEvent) => void;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=scm-history-graph-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm-history-graph-widget.d.ts","sourceRoot":"","sources":["../../src/browser/scm-history-graph-widget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var ScmHistoryGraphWidget_1;
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ScmHistoryGraphWidget = exports.SCM_HISTORY_ITEM_REF_CONTEXT_MENU = exports.SCM_HISTORY_ITEM_CONTEXT_MENU = exports.SCM_HISTORY_TITLE_MENU = void 0;
|
|
20
|
+
const tslib_1 = require("tslib");
|
|
21
|
+
const React = require("@theia/core/shared/react");
|
|
22
|
+
const react_virtuoso_1 = require("@theia/core/shared/react-virtuoso");
|
|
23
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
24
|
+
const react_widget_1 = require("@theia/core/lib/browser/widgets/react-widget");
|
|
25
|
+
const label_provider_1 = require("@theia/core/lib/browser/label-provider");
|
|
26
|
+
const hover_service_1 = require("@theia/core/lib/browser/hover-service");
|
|
27
|
+
const markdown_renderer_1 = require("@theia/core/lib/browser/markdown-rendering/markdown-renderer");
|
|
28
|
+
const scm_history_graph_model_1 = require("./scm-history-graph-model");
|
|
29
|
+
const scm_service_1 = require("./scm-service");
|
|
30
|
+
const uri_1 = require("@theia/core/lib/common/uri");
|
|
31
|
+
const nls_1 = require("@theia/core/lib/common/nls");
|
|
32
|
+
const cancellation_1 = require("@theia/core/lib/common/cancellation");
|
|
33
|
+
const context_menu_renderer_1 = require("@theia/core/lib/browser/context-menu-renderer");
|
|
34
|
+
const opener_service_1 = require("@theia/core/lib/browser/opener-service");
|
|
35
|
+
const diff_uris_1 = require("@theia/core/lib/browser/diff-uris");
|
|
36
|
+
const scm_context_key_service_1 = require("./scm-context-key-service");
|
|
37
|
+
const scm_history_graph_helpers_1 = require("./scm-history-graph-helpers");
|
|
38
|
+
const scm_history_graph_tooltip_1 = require("./scm-history-graph-tooltip");
|
|
39
|
+
/** Menu path matching the VS Code 'scm/history/title' contribution point (graph section toolbar). */
|
|
40
|
+
exports.SCM_HISTORY_TITLE_MENU = ['plugin_scm/history/title'];
|
|
41
|
+
/** Menu path matching the VS Code 'scm/historyItem/context' contribution point (commit row context menu). */
|
|
42
|
+
exports.SCM_HISTORY_ITEM_CONTEXT_MENU = ['plugin_scm/historyItem/context'];
|
|
43
|
+
/** Menu path matching the VS Code 'scm/historyItemRef/context' contribution point (ref badge context menu). */
|
|
44
|
+
exports.SCM_HISTORY_ITEM_REF_CONTEXT_MENU = ['plugin_scm/historyItemRef/context'];
|
|
45
|
+
// ── Layout constants ────────────────────────────────────────────────────────
|
|
46
|
+
const ROW_HEIGHT = 22;
|
|
47
|
+
/** Horizontal width of each lane column in the SVG — matches VS Code exactly. */
|
|
48
|
+
const LANE_WIDTH = 22;
|
|
49
|
+
/** Y position of the commit dot — vertically centered in the row. */
|
|
50
|
+
const DOT_CY = 11;
|
|
51
|
+
/** Renders a ref badge as a JSX element for the commit row. */
|
|
52
|
+
function renderJsxRefBadge(ref, iconClass, showText, style, key, onContextMenu) {
|
|
53
|
+
return (React.createElement("span", { key: key, className: `scm-history-ref-badge ${(0, scm_history_graph_helpers_1.getRefBadgeClass)(ref)}`, title: ref.description ?? ref.name, style: style, onContextMenu: onContextMenu },
|
|
54
|
+
React.createElement("i", { className: `codicon ${iconClass} scm-history-ref-icon` }),
|
|
55
|
+
showText && React.createElement("span", { className: 'scm-history-ref-text' }, ref.name)));
|
|
56
|
+
}
|
|
57
|
+
// ── Widget ──────────────────────────────────────────────────────────────────
|
|
58
|
+
let ScmHistoryGraphWidget = class ScmHistoryGraphWidget extends react_widget_1.ReactWidget {
|
|
59
|
+
static { ScmHistoryGraphWidget_1 = this; }
|
|
60
|
+
static { this.ID = 'scm-history-graph-widget'; }
|
|
61
|
+
static { this.LABEL = nls_1.nls.localizeByDefault('Graph'); }
|
|
62
|
+
constructor() {
|
|
63
|
+
super();
|
|
64
|
+
this.selectedIndex = -1;
|
|
65
|
+
/** Map from commit id → loaded changes (undefined = not loaded yet). */
|
|
66
|
+
this.expandedChanges = new Map();
|
|
67
|
+
/** Set of commit ids that are currently expanded. */
|
|
68
|
+
this.expandedIds = new Set();
|
|
69
|
+
/** Map from commit id → in-flight CancellationTokenSource for loadChanges. */
|
|
70
|
+
this.loadChangesCts = new Map();
|
|
71
|
+
this.handleEndReached = () => {
|
|
72
|
+
if (this.model.hasMore && !this.model.loading) {
|
|
73
|
+
this.model.loadMore();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
this.handleRowMouseEnter = (e, entry) => {
|
|
77
|
+
this.hoverService.requestHover({
|
|
78
|
+
content: (0, scm_history_graph_tooltip_1.buildHtmlTooltip)(entry, this.markdownRenderer),
|
|
79
|
+
target: e.currentTarget,
|
|
80
|
+
position: 'right',
|
|
81
|
+
interactive: true,
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
this.handleChangeClick = (e, change, changeKey) => {
|
|
85
|
+
e.stopPropagation();
|
|
86
|
+
this.selectedChangeKey = changeKey;
|
|
87
|
+
this.update();
|
|
88
|
+
this.openChange(change);
|
|
89
|
+
};
|
|
90
|
+
this.handleRowContextMenu = (e, entry) => {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
e.stopPropagation();
|
|
93
|
+
const repo = this.scmService.selectedRepository;
|
|
94
|
+
if (!repo) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const { item } = entry;
|
|
98
|
+
if (item.references && item.references.length > 0) {
|
|
99
|
+
this.scmContextKeys.scmHistoryItemRef.set(item.references[0].id);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.scmContextKeys.scmHistoryItemRef.set(undefined);
|
|
103
|
+
}
|
|
104
|
+
const sourceControlHandle = repo.provider.handle;
|
|
105
|
+
const args = sourceControlHandle !== undefined
|
|
106
|
+
? [{ sourceControlHandle }, { sourceControlHandle, id: item.id, type: 'historyItem' }]
|
|
107
|
+
: [];
|
|
108
|
+
this.contextMenuRenderer.render({
|
|
109
|
+
menuPath: exports.SCM_HISTORY_ITEM_CONTEXT_MENU,
|
|
110
|
+
anchor: e.nativeEvent,
|
|
111
|
+
args,
|
|
112
|
+
context: this.node
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
this.handleRefBadgeContextMenu = (e, entry, ref) => {
|
|
116
|
+
e.preventDefault();
|
|
117
|
+
e.stopPropagation();
|
|
118
|
+
const repo = this.scmService.selectedRepository;
|
|
119
|
+
if (!repo) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.scmContextKeys.scmHistoryItemRef.set(ref.id);
|
|
123
|
+
const sourceControlHandle = repo.provider.handle;
|
|
124
|
+
const args = sourceControlHandle !== undefined
|
|
125
|
+
? [{ sourceControlHandle }, { sourceControlHandle, id: ref.id, type: 'historyItemRef' }]
|
|
126
|
+
: [];
|
|
127
|
+
this.contextMenuRenderer.render({
|
|
128
|
+
menuPath: exports.SCM_HISTORY_ITEM_REF_CONTEXT_MENU,
|
|
129
|
+
anchor: e.nativeEvent,
|
|
130
|
+
args,
|
|
131
|
+
context: this.node
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
this.handleRowClick = (idx, entry) => {
|
|
135
|
+
this.selectedIndex = idx;
|
|
136
|
+
const { item } = entry;
|
|
137
|
+
if (this.expandedIds.has(item.id)) {
|
|
138
|
+
this.expandedIds.delete(item.id);
|
|
139
|
+
const cts = this.loadChangesCts.get(item.id);
|
|
140
|
+
if (cts) {
|
|
141
|
+
cts.cancel();
|
|
142
|
+
cts.dispose();
|
|
143
|
+
this.loadChangesCts.delete(item.id);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.expandedIds.add(item.id);
|
|
148
|
+
if (!this.expandedChanges.has(item.id)) {
|
|
149
|
+
this.loadChanges(entry);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
this.update();
|
|
153
|
+
};
|
|
154
|
+
this.handleLoadMore = () => {
|
|
155
|
+
this.model.loadMore();
|
|
156
|
+
};
|
|
157
|
+
this.handleLoadMoreKey = (e) => {
|
|
158
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
159
|
+
this.model.loadMore();
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
this.id = ScmHistoryGraphWidget_1.ID;
|
|
163
|
+
this.title.label = ScmHistoryGraphWidget_1.LABEL;
|
|
164
|
+
this.title.caption = ScmHistoryGraphWidget_1.LABEL;
|
|
165
|
+
this.title.closable = false;
|
|
166
|
+
this.addClass('scm-history-graph-container');
|
|
167
|
+
this.node.tabIndex = 0;
|
|
168
|
+
}
|
|
169
|
+
init() {
|
|
170
|
+
this.toDispose.push(this.model.onDidChange(() => {
|
|
171
|
+
this.updateContextKeys();
|
|
172
|
+
this.update();
|
|
173
|
+
}));
|
|
174
|
+
this.toDispose.push({
|
|
175
|
+
dispose: () => {
|
|
176
|
+
for (const cts of this.loadChangesCts.values()) {
|
|
177
|
+
cts.cancel();
|
|
178
|
+
cts.dispose();
|
|
179
|
+
}
|
|
180
|
+
this.loadChangesCts.clear();
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
this.update();
|
|
184
|
+
}
|
|
185
|
+
updateContextKeys() {
|
|
186
|
+
const provider = this.model.provider;
|
|
187
|
+
this.scmContextKeys.scmCurrentHistoryItemRefHasRemote.set(!!provider?.currentHistoryItemRemoteRef);
|
|
188
|
+
this.scmContextKeys.scmCurrentHistoryItemRefHasBase.set(!!provider?.currentHistoryItemBaseRef);
|
|
189
|
+
}
|
|
190
|
+
render() {
|
|
191
|
+
const { entries, hasMore, loading } = this.model;
|
|
192
|
+
// Only show the empty state once the model has completed at least one load attempt.
|
|
193
|
+
// While the model is still initializing (provider not yet set, no load attempted),
|
|
194
|
+
// render a loading indicator to avoid a flash of "no history" on startup.
|
|
195
|
+
if (!loading && entries.length === 0) {
|
|
196
|
+
if (!this.model.hasAttemptedLoad) {
|
|
197
|
+
return (React.createElement("div", { className: 'scm-history-loading' }, nls_1.nls.localizeByDefault('Loading')));
|
|
198
|
+
}
|
|
199
|
+
return (React.createElement("div", { className: 'scm-history-empty' }, nls_1.nls.localize('theia/scm/noHistory', 'No source control history available.')));
|
|
200
|
+
}
|
|
201
|
+
// Determine how many lanes are active for SVG width
|
|
202
|
+
const maxLane = entries.reduce((max, e) => {
|
|
203
|
+
const rowMax = Math.max(e.graphRow.lane, ...e.graphRow.edges.map(ed => Math.max(ed.fromLane, ed.toLane)));
|
|
204
|
+
return Math.max(max, rowMax);
|
|
205
|
+
}, 0);
|
|
206
|
+
const svgWidth = (maxLane + 1) * LANE_WIDTH;
|
|
207
|
+
const footer = loading
|
|
208
|
+
? () => React.createElement("div", { className: 'scm-history-loading' }, nls_1.nls.localizeByDefault('Loading'))
|
|
209
|
+
: hasMore
|
|
210
|
+
? () => (React.createElement("div", { className: 'scm-history-load-more', onClick: this.handleLoadMore, role: 'button', tabIndex: 0, onKeyDown: this.handleLoadMoreKey }, nls_1.nls.localizeByDefault('Load more')))
|
|
211
|
+
: undefined;
|
|
212
|
+
return (React.createElement(react_virtuoso_1.Virtuoso, { className: 'scm-history-graph-list', data: entries, itemContent: (idx, entry) => this.renderRow(entry, idx, svgWidth), endReached: hasMore && !loading ? this.handleEndReached : undefined, overscan: 500, components: footer ? { Footer: footer } : {}, style: { overflowX: 'hidden' } }));
|
|
213
|
+
}
|
|
214
|
+
renderRow(entry, idx, svgWidth) {
|
|
215
|
+
const { item, graphRow } = entry;
|
|
216
|
+
const isSelected = idx === this.selectedIndex;
|
|
217
|
+
const isExpanded = this.expandedIds.has(item.id);
|
|
218
|
+
const changes = this.expandedChanges.get(item.id);
|
|
219
|
+
// The first commit (idx === 0) on lane 0 is treated as HEAD/current
|
|
220
|
+
const isHead = idx === 0 && graphRow.lane === 0;
|
|
221
|
+
return (React.createElement(React.Fragment, { key: item.id },
|
|
222
|
+
React.createElement("div", { className: `scm-history-graph-row${isSelected ? ' selected' : ''}`, onClick: () => this.handleRowClick(idx, entry), onContextMenu: e => this.handleRowContextMenu(e, entry), onMouseEnter: e => this.handleRowMouseEnter(e, entry) },
|
|
223
|
+
this.renderGraphSvg(graphRow, svgWidth, isHead),
|
|
224
|
+
React.createElement("div", { className: 'scm-history-graph-info' },
|
|
225
|
+
React.createElement("span", { className: 'scm-history-subject' }, item.subject),
|
|
226
|
+
item.author && (React.createElement("span", { className: 'scm-history-author' }, item.author)),
|
|
227
|
+
item.references && item.references.length > 0 && (React.createElement("span", { className: 'scm-history-badges scm-history-badges-right' }, this.renderRefBadges(item.references, entry))))),
|
|
228
|
+
isExpanded && this.renderChangesRows(item.id, svgWidth, graphRow, changes)));
|
|
229
|
+
}
|
|
230
|
+
get markdownRenderer() {
|
|
231
|
+
this._markdownRenderer ||= this.markdownRendererFactory();
|
|
232
|
+
return this._markdownRenderer;
|
|
233
|
+
}
|
|
234
|
+
renderChangesRows(itemId, svgWidth, graphRow, changes) {
|
|
235
|
+
if (changes === 'loading' || changes === undefined) {
|
|
236
|
+
return (React.createElement("div", { key: `${itemId}-loading`, className: 'scm-history-changes-loading' }, nls_1.nls.localizeByDefault('Loading')));
|
|
237
|
+
}
|
|
238
|
+
if (changes.length === 0) {
|
|
239
|
+
return (React.createElement("div", { key: `${itemId}-empty`, className: 'scm-history-changes-empty' }, nls_1.nls.localize('theia/scm/noChanges', 'No changed files.')));
|
|
240
|
+
}
|
|
241
|
+
return (React.createElement(React.Fragment, { key: `${itemId}-changes` }, changes.map((change, ci) => this.renderChangeRow(change, ci, itemId, svgWidth, graphRow))));
|
|
242
|
+
}
|
|
243
|
+
renderChangeRow(change, ci, itemId, svgWidth, graphRow) {
|
|
244
|
+
const rootUri = this.scmService.selectedRepository?.provider.rootUri;
|
|
245
|
+
const uri = change.modifiedUri ?? change.originalUri ?? change.uri;
|
|
246
|
+
const relativePath = (0, scm_history_graph_helpers_1.getRepoRelativePath)(uri, rootUri);
|
|
247
|
+
const fileName = (0, scm_history_graph_helpers_1.getFileName)(relativePath);
|
|
248
|
+
const dirPath = relativePath.includes('/')
|
|
249
|
+
? relativePath.slice(0, relativePath.lastIndexOf('/'))
|
|
250
|
+
: '';
|
|
251
|
+
const status = (0, scm_history_graph_helpers_1.getChangeStatus)(change);
|
|
252
|
+
const statusClass = status === 'A' ? 'added' : status === 'D' ? 'deleted' : status === 'R' ? 'renamed' : 'modified';
|
|
253
|
+
const resourceUri = new uri_1.default(uri);
|
|
254
|
+
const fileIcon = this.labelProvider.getIcon(resourceUri);
|
|
255
|
+
const changeKey = `${itemId}-change-${ci}`;
|
|
256
|
+
const isSelected = this.selectedChangeKey === changeKey;
|
|
257
|
+
return (React.createElement("div", { key: changeKey, className: `scm-history-change-row${isSelected ? ' selected' : ''}`, onClick: e => this.handleChangeClick(e, change, changeKey), role: 'treeitem', tabIndex: -1 },
|
|
258
|
+
this.renderChangeRowSvg(graphRow, svgWidth),
|
|
259
|
+
React.createElement("div", { className: 'scm-history-change-info' },
|
|
260
|
+
React.createElement("span", { className: `${fileIcon} file-icon scm-history-change-file-icon` }),
|
|
261
|
+
React.createElement("div", { className: 'scm-history-change-name-container' },
|
|
262
|
+
React.createElement("span", { className: 'name scm-history-change-name', title: relativePath }, fileName),
|
|
263
|
+
dirPath && React.createElement("span", { className: 'path scm-history-change-dir' }, dirPath)),
|
|
264
|
+
React.createElement("span", { className: `scm-history-change-status ${statusClass}` }, status))));
|
|
265
|
+
}
|
|
266
|
+
openChange(change) {
|
|
267
|
+
try {
|
|
268
|
+
if (change.originalUri && change.modifiedUri) {
|
|
269
|
+
const originalUri = new uri_1.default(change.originalUri);
|
|
270
|
+
const modifiedUri = new uri_1.default(change.modifiedUri);
|
|
271
|
+
const label = (0, scm_history_graph_helpers_1.getFileName)((0, scm_history_graph_helpers_1.getFilePath)(change.modifiedUri));
|
|
272
|
+
(0, opener_service_1.open)(this.openerService, diff_uris_1.DiffUris.encode(originalUri, modifiedUri, label));
|
|
273
|
+
}
|
|
274
|
+
else if (change.modifiedUri) {
|
|
275
|
+
(0, opener_service_1.open)(this.openerService, new uri_1.default(change.modifiedUri));
|
|
276
|
+
}
|
|
277
|
+
else if (change.originalUri) {
|
|
278
|
+
(0, opener_service_1.open)(this.openerService, new uri_1.default(change.originalUri));
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
(0, opener_service_1.open)(this.openerService, new uri_1.default(change.uri));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
console.error('ScmHistoryGraphWidget: failed to open change', err);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
renderChangeRowSvg(graphRow, svgWidth) {
|
|
289
|
+
const commitX = graphRow.lane * LANE_WIDTH + 11;
|
|
290
|
+
const commitColor = (0, scm_history_graph_helpers_1.laneColor)(graphRow.color);
|
|
291
|
+
const elements = [];
|
|
292
|
+
let keyIdx = 0;
|
|
293
|
+
for (const edge of graphRow.edges) {
|
|
294
|
+
if (edge.type !== 'pass-through') {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
const x = edge.fromLane * LANE_WIDTH + 11;
|
|
298
|
+
const color = (0, scm_history_graph_helpers_1.laneColor)(edge.color);
|
|
299
|
+
elements.push(React.createElement("path", { key: `pass-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: `M ${x} 0 V 22`, style: { stroke: color } }));
|
|
300
|
+
}
|
|
301
|
+
if (graphRow.hasContinuation) {
|
|
302
|
+
elements.push(React.createElement("path", { key: `commit-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: `M ${commitX} 0 V 22`, style: { stroke: commitColor } }));
|
|
303
|
+
}
|
|
304
|
+
return (React.createElement("svg", { className: 'scm-history-graph-svg', style: { height: `${ROW_HEIGHT}px`, width: `${svgWidth}px` } }, elements));
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Renders the SVG graph column for a commit row, matching VS Code's SVG structure:
|
|
308
|
+
*
|
|
309
|
+
* - Each lane is 22px wide; circle cx = lane * 22 + 11, cy = 11
|
|
310
|
+
* - Pass-through lanes: full vertical line M x 0 V 22
|
|
311
|
+
* - Commit lane: top segment (M commitX 0 V 11) + bottom segment (M commitX 11 V 22)
|
|
312
|
+
* - HEAD/current commit (first entry): r=7 with inner dot, NO top segment
|
|
313
|
+
* - Normal commit: r=5
|
|
314
|
+
* - Branch-out edge: diagonal S-curve bezier from commit position (commitX, cy)
|
|
315
|
+
* sweeping down to the new lane at the bottom: M commitX cy C commitX 22 newX cy newX 22
|
|
316
|
+
* - Merge-in edge: bezier from the source lane at the top curving into
|
|
317
|
+
* the commit position: M srcX 0 C srcX cy commitX cy commitX cy
|
|
318
|
+
*/
|
|
319
|
+
renderGraphSvg(row, svgWidth, isHead) {
|
|
320
|
+
const commitX = row.lane * LANE_WIDTH + 11;
|
|
321
|
+
const cy = DOT_CY;
|
|
322
|
+
const commitColor = (0, scm_history_graph_helpers_1.laneColor)(row.color);
|
|
323
|
+
const elements = [];
|
|
324
|
+
let keyIdx = 0;
|
|
325
|
+
// Pass-through lines: straight vertical line through the full row height
|
|
326
|
+
for (const edge of row.edges) {
|
|
327
|
+
if (edge.type !== 'pass-through') {
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
const x = edge.fromLane * LANE_WIDTH + 11;
|
|
331
|
+
const color = (0, scm_history_graph_helpers_1.laneColor)(edge.color);
|
|
332
|
+
elements.push(React.createElement("path", { key: `pass-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: `M ${x} 0 V 22`, style: { stroke: color } }));
|
|
333
|
+
}
|
|
334
|
+
// Merge-in edges: source lane at top curves into the commit position (mid-row)
|
|
335
|
+
for (const edge of row.edges) {
|
|
336
|
+
if (edge.type !== 'merge-in') {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
const srcX = edge.fromLane * LANE_WIDTH + 11;
|
|
340
|
+
const color = (0, scm_history_graph_helpers_1.laneColor)(edge.color);
|
|
341
|
+
// Cubic bezier: start at (srcX, 0), control points pull both ends to mid-row,
|
|
342
|
+
// end at commit position (commitX, cy)
|
|
343
|
+
const d = `M ${srcX} 0 C ${srcX} ${cy}, ${commitX} ${cy}, ${commitX} ${cy}`;
|
|
344
|
+
elements.push(React.createElement("path", { key: `merge-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: d, style: { stroke: color } }));
|
|
345
|
+
}
|
|
346
|
+
// Commit lane lines — split at cy=11
|
|
347
|
+
// Top segment: only drawn if there is an incoming line from above
|
|
348
|
+
// (i.e. this commit was referenced as a parent by an earlier row)
|
|
349
|
+
if (row.hasTopLine) {
|
|
350
|
+
elements.push(React.createElement("path", { key: `top-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: `M ${commitX} 0 V ${cy}`, style: { stroke: commitColor } }));
|
|
351
|
+
}
|
|
352
|
+
// Bottom segment: only drawn if the lane continues to a parent below
|
|
353
|
+
if (row.hasContinuation) {
|
|
354
|
+
elements.push(React.createElement("path", { key: `bottom-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: `M ${commitX} ${cy} V 22`, style: { stroke: commitColor } }));
|
|
355
|
+
}
|
|
356
|
+
// Branch-out edges: commit position (mid-row) curves down to a new lane at bottom
|
|
357
|
+
for (const edge of row.edges) {
|
|
358
|
+
if (edge.type !== 'branch-out') {
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const dstX = edge.toLane * LANE_WIDTH + 11;
|
|
362
|
+
const color = (0, scm_history_graph_helpers_1.laneColor)(edge.color);
|
|
363
|
+
// Diagonal S-curve bezier: CP1 keeps x at srcX while y goes to bottom;
|
|
364
|
+
// CP2 keeps y at cy while x reaches dstX — produces a smooth sweep
|
|
365
|
+
// down-and-right (or left) from the commit circle to the target lane.
|
|
366
|
+
const srcX = edge.fromLane * LANE_WIDTH + 11;
|
|
367
|
+
const d = `M ${srcX} ${cy} C ${srcX} 22, ${dstX} ${cy}, ${dstX} 22`;
|
|
368
|
+
elements.push(React.createElement("path", { key: `branch-${keyIdx++}`, fill: 'none', strokeWidth: '1px', strokeLinecap: 'round', d: d, style: { stroke: color } }));
|
|
369
|
+
}
|
|
370
|
+
// Commit circle — drawn last so it renders on top of all lines
|
|
371
|
+
if (isHead) {
|
|
372
|
+
elements.push(React.createElement("circle", { key: `circle-${keyIdx++}`, cx: commitX, cy: cy, r: 7, style: { strokeWidth: '2px', fill: commitColor } }));
|
|
373
|
+
elements.push(React.createElement("circle", { key: `inner-${keyIdx++}`, cx: commitX, cy: cy, r: 2, style: { strokeWidth: '4px', fill: 'var(--theia-editor-background)', stroke: 'var(--theia-editor-background)' } }));
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
elements.push(React.createElement("circle", { key: `circle-${keyIdx++}`, cx: commitX, cy: cy, r: 5, style: { strokeWidth: '2px', fill: commitColor } }));
|
|
377
|
+
}
|
|
378
|
+
return (React.createElement("svg", { className: 'scm-history-graph-svg', style: { height: `${ROW_HEIGHT}px`, width: `${svgWidth}px` } }, elements));
|
|
379
|
+
}
|
|
380
|
+
renderRefBadges(refs, entry) {
|
|
381
|
+
if (!refs || refs.length === 0) {
|
|
382
|
+
return undefined;
|
|
383
|
+
}
|
|
384
|
+
const laneColorValue = entry ? (0, scm_history_graph_helpers_1.laneColor)(entry.graphRow.color) : undefined;
|
|
385
|
+
const deduplicated = (0, scm_history_graph_helpers_1.deduplicateRefs)(refs);
|
|
386
|
+
const style = laneColorValue
|
|
387
|
+
? { backgroundColor: laneColorValue, color: 'var(--theia-scmGraph-historyItemRefForeground, var(--theia-badge-foreground))' }
|
|
388
|
+
: {};
|
|
389
|
+
const badges = [];
|
|
390
|
+
for (const info of deduplicated) {
|
|
391
|
+
if (badges.length >= 3) {
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
const { ref, hasBoth } = info;
|
|
395
|
+
const isTag = (0, scm_history_graph_helpers_1.isTagRef)(ref);
|
|
396
|
+
const isRemote = (0, scm_history_graph_helpers_1.isRemoteRef)(ref);
|
|
397
|
+
const onContextMenu = entry ? (e) => this.handleRefBadgeContextMenu(e, entry, ref) : undefined;
|
|
398
|
+
if (isTag) {
|
|
399
|
+
badges.push(renderJsxRefBadge(ref, 'codicon-tag', false, style, ref.id, onContextMenu));
|
|
400
|
+
}
|
|
401
|
+
else if (isRemote) {
|
|
402
|
+
badges.push(renderJsxRefBadge(ref, 'codicon-cloud', true, style, ref.id, onContextMenu));
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
badges.push(renderJsxRefBadge(ref, 'codicon-git-branch', true, style, ref.id, onContextMenu));
|
|
406
|
+
if (hasBoth && badges.length < 3) {
|
|
407
|
+
badges.push(React.createElement("span", { key: `${ref.id}-cloud`, className: 'scm-history-ref-badge scm-history-ref-badge-cloud', title: ref.description ?? ref.name, style: style },
|
|
408
|
+
React.createElement("i", { className: 'codicon codicon-cloud scm-history-ref-icon' })));
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return badges;
|
|
413
|
+
}
|
|
414
|
+
async loadChanges(entry) {
|
|
415
|
+
const { item } = entry;
|
|
416
|
+
const provider = this.model.provider;
|
|
417
|
+
if (!provider) {
|
|
418
|
+
this.expandedChanges.set(item.id, []);
|
|
419
|
+
this.update();
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
this.expandedChanges.set(item.id, 'loading');
|
|
423
|
+
this.update();
|
|
424
|
+
const cts = new cancellation_1.CancellationTokenSource();
|
|
425
|
+
this.loadChangesCts.set(item.id, cts);
|
|
426
|
+
this.toDispose.push(cts);
|
|
427
|
+
try {
|
|
428
|
+
const parentId = item.parentIds?.[0];
|
|
429
|
+
const changes = await provider.provideHistoryItemChanges(item.id, parentId, cts.token);
|
|
430
|
+
if (!cts.token.isCancellationRequested) {
|
|
431
|
+
this.expandedChanges.set(item.id, changes ?? []);
|
|
432
|
+
this.update();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch (err) {
|
|
436
|
+
if (!cts.token.isCancellationRequested) {
|
|
437
|
+
console.error('ScmHistoryGraphWidget: failed to load changes', err);
|
|
438
|
+
this.expandedChanges.set(item.id, []);
|
|
439
|
+
this.update();
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
finally {
|
|
443
|
+
this.loadChangesCts.delete(item.id);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
exports.ScmHistoryGraphWidget = ScmHistoryGraphWidget;
|
|
448
|
+
tslib_1.__decorate([
|
|
449
|
+
(0, inversify_1.inject)(scm_history_graph_model_1.ScmHistoryGraphModel),
|
|
450
|
+
tslib_1.__metadata("design:type", scm_history_graph_model_1.ScmHistoryGraphModel)
|
|
451
|
+
], ScmHistoryGraphWidget.prototype, "model", void 0);
|
|
452
|
+
tslib_1.__decorate([
|
|
453
|
+
(0, inversify_1.inject)(hover_service_1.HoverService),
|
|
454
|
+
tslib_1.__metadata("design:type", hover_service_1.HoverService)
|
|
455
|
+
], ScmHistoryGraphWidget.prototype, "hoverService", void 0);
|
|
456
|
+
tslib_1.__decorate([
|
|
457
|
+
(0, inversify_1.inject)(markdown_renderer_1.MarkdownRendererFactory),
|
|
458
|
+
tslib_1.__metadata("design:type", Function)
|
|
459
|
+
], ScmHistoryGraphWidget.prototype, "markdownRendererFactory", void 0);
|
|
460
|
+
tslib_1.__decorate([
|
|
461
|
+
(0, inversify_1.inject)(scm_service_1.ScmService),
|
|
462
|
+
tslib_1.__metadata("design:type", scm_service_1.ScmService)
|
|
463
|
+
], ScmHistoryGraphWidget.prototype, "scmService", void 0);
|
|
464
|
+
tslib_1.__decorate([
|
|
465
|
+
(0, inversify_1.inject)(label_provider_1.LabelProvider),
|
|
466
|
+
tslib_1.__metadata("design:type", label_provider_1.LabelProvider)
|
|
467
|
+
], ScmHistoryGraphWidget.prototype, "labelProvider", void 0);
|
|
468
|
+
tslib_1.__decorate([
|
|
469
|
+
(0, inversify_1.inject)(context_menu_renderer_1.ContextMenuRenderer),
|
|
470
|
+
tslib_1.__metadata("design:type", context_menu_renderer_1.ContextMenuRenderer)
|
|
471
|
+
], ScmHistoryGraphWidget.prototype, "contextMenuRenderer", void 0);
|
|
472
|
+
tslib_1.__decorate([
|
|
473
|
+
(0, inversify_1.inject)(opener_service_1.OpenerService),
|
|
474
|
+
tslib_1.__metadata("design:type", Object)
|
|
475
|
+
], ScmHistoryGraphWidget.prototype, "openerService", void 0);
|
|
476
|
+
tslib_1.__decorate([
|
|
477
|
+
(0, inversify_1.inject)(scm_context_key_service_1.ScmContextKeyService),
|
|
478
|
+
tslib_1.__metadata("design:type", scm_context_key_service_1.ScmContextKeyService)
|
|
479
|
+
], ScmHistoryGraphWidget.prototype, "scmContextKeys", void 0);
|
|
480
|
+
tslib_1.__decorate([
|
|
481
|
+
(0, inversify_1.postConstruct)(),
|
|
482
|
+
tslib_1.__metadata("design:type", Function),
|
|
483
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
484
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
485
|
+
], ScmHistoryGraphWidget.prototype, "init", null);
|
|
486
|
+
exports.ScmHistoryGraphWidget = ScmHistoryGraphWidget = ScmHistoryGraphWidget_1 = tslib_1.__decorate([
|
|
487
|
+
(0, inversify_1.injectable)(),
|
|
488
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
489
|
+
], ScmHistoryGraphWidget);
|
|
490
|
+
//# sourceMappingURL=scm-history-graph-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm-history-graph-widget.js","sourceRoot":"","sources":["../../src/browser/scm-history-graph-widget.tsx"],"names":[],"mappings":"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"}
|