@deephaven/console 0.15.6-vite.21 → 0.15.7-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsolePropTypes.js.map +1 -1
- package/dist/ConsoleShortcuts.js.map +1 -1
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.css +60 -0
- package/dist/HeapUsage.css.map +1 -0
- package/dist/HeapUsage.d.ts +13 -0
- package/dist/HeapUsage.d.ts.map +1 -0
- package/dist/HeapUsage.js +179 -0
- package/dist/HeapUsage.js.map +1 -0
- package/dist/StoragePropTypes.js.map +1 -1
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItem.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/command-history/CommandHistoryStorage.js.map +1 -1
- package/dist/command-history/CommandHistoryTypes.js.map +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
- package/dist/command-history/index.js.map +1 -1
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ConsoleConstants.js.map +1 -1
- package/dist/common/ConsoleUtils.js.map +1 -1
- package/dist/common/ObjectIcon.js.map +1 -1
- package/dist/common/index.d.js.map +1 -1
- package/dist/common/index.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/console-history/ConsoleHistoryTypes.js.map +1 -1
- package/dist/console-history/index.js.map +1 -1
- package/dist/csv/CsvFormats.js.map +1 -1
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/csv/NewTableColumnTypes.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/log/LogLevel.js.map +1 -1
- package/dist/log/LogLevelMenuItem.js.map +1 -1
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +1 -6
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +1 -14
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/index.js.map +1 -1
- package/dist/monaco/lang/Language.js.map +1 -1
- package/dist/monaco/lang/db.js.map +1 -1
- package/dist/monaco/lang/groovy.js.map +1 -1
- package/dist/monaco/lang/log.js.map +1 -1
- package/dist/monaco/lang/python.js.map +1 -1
- package/dist/monaco/lang/scala.js.map +1 -1
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/dist/notebook/ScriptEditorUtils.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
.max-memory {
|
|
2
|
+
position: relative;
|
|
3
|
+
color: #c0bfbf;
|
|
4
|
+
background-color: #211f22;
|
|
5
|
+
border: #1a171a;
|
|
6
|
+
width: 4.25rem;
|
|
7
|
+
vertical-align: middle;
|
|
8
|
+
text-align: center;
|
|
9
|
+
user-select: none;
|
|
10
|
+
z-index: 1;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.total-memory,
|
|
14
|
+
.used-memory {
|
|
15
|
+
position: absolute;
|
|
16
|
+
inset: 0;
|
|
17
|
+
margin: 1px;
|
|
18
|
+
z-index: -1;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.total-memory {
|
|
22
|
+
background-color: #403e41;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.used-memory {
|
|
26
|
+
background-color: #5b5a5c;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.heap-overflow {
|
|
30
|
+
background-color: #f95d84;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.heap-tooltip {
|
|
34
|
+
padding: 0.25rem;
|
|
35
|
+
width: 200px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.heap-usage-info-row {
|
|
39
|
+
display: flex;
|
|
40
|
+
color: #f0f0ee;
|
|
41
|
+
padding: 0.25rem;
|
|
42
|
+
justify-content: space-between;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.heap-plot {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.heading-bottom-border {
|
|
51
|
+
border-bottom: 1px solid #211f22;
|
|
52
|
+
margin-bottom: 0.25rem;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.heap-utilisation-text {
|
|
56
|
+
margin-top: 0.25rem;
|
|
57
|
+
color: #929192;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/*# sourceMappingURL=HeapUsage.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../src/HeapUsage.scss","../../components/scss/bootstrap_overrides.scss","../../components/scss/new_variables.scss"],"names":[],"mappings":"AAEA;EACE;EACA,OCgBS;EDfT,kBCsBS;EDrBT,QCQe;EDPf;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE,kBCCS;;;ADEX;EACE,kBCLS;;;ADQX;EACE,kBC5BI;;;AD+BN;EACE,SEjCS;EFkCT;;;AAGF;EACE;EACA,OC5Be;ED6Bf,SExCS;EFyCT;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA,eEnDS;;;AFsDX;EACE,YEvDS;EFwDT,OCrCS","file":"HeapUsage.css"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { QueryConnectable } from '@deephaven/jsapi-shim';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
import './HeapUsage.scss';
|
|
4
|
+
interface HeapUsageProps {
|
|
5
|
+
connection: QueryConnectable;
|
|
6
|
+
defaultUpdateInterval: number;
|
|
7
|
+
hoverUpdateInterval: number;
|
|
8
|
+
bgMonitoring?: boolean;
|
|
9
|
+
monitorDuration: number;
|
|
10
|
+
}
|
|
11
|
+
declare const HeapUsage: ({ connection, defaultUpdateInterval, hoverUpdateInterval, bgMonitoring, monitorDuration, }: HeapUsageProps) => ReactElement;
|
|
12
|
+
export default HeapUsage;
|
|
13
|
+
//# sourceMappingURL=HeapUsage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeapUsage.d.ts","sourceRoot":"","sources":["../src/HeapUsage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAc,EAAuB,YAAY,EAAU,MAAM,OAAO,CAAC;AAEzE,OAAO,kBAAkB,CAAC;AAG1B,UAAU,cAAc;IACtB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,QAAA,MAAM,SAAS,+FAMZ,cAAc,KAAG,YAgLnB,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
2
|
+
|
|
3
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
4
|
+
|
|
5
|
+
import { Tooltip } from '@deephaven/components';
|
|
6
|
+
import React, { useEffect, useState, useRef } from 'react';
|
|
7
|
+
import { Plot, ChartTheme } from '@deephaven/chart';
|
|
8
|
+
import "./HeapUsage.css";
|
|
9
|
+
import classNames from 'classnames';
|
|
10
|
+
|
|
11
|
+
var HeapUsage = _ref => {
|
|
12
|
+
var _timestamps2;
|
|
13
|
+
|
|
14
|
+
var {
|
|
15
|
+
connection,
|
|
16
|
+
defaultUpdateInterval,
|
|
17
|
+
hoverUpdateInterval,
|
|
18
|
+
bgMonitoring = true,
|
|
19
|
+
monitorDuration
|
|
20
|
+
} = _ref;
|
|
21
|
+
var [memoryUsage, setMemoryUsage] = useState({
|
|
22
|
+
freeMemory: 0,
|
|
23
|
+
maximumHeapSize: 999,
|
|
24
|
+
totalHeapSize: 0
|
|
25
|
+
});
|
|
26
|
+
var [isOpen, setIsOpen] = useState(false);
|
|
27
|
+
var historyUsage = useRef({
|
|
28
|
+
timestamps: [],
|
|
29
|
+
usages: []
|
|
30
|
+
});
|
|
31
|
+
useEffect(function setUsageUpdateInterval() {
|
|
32
|
+
var fetchAndUpdate = /*#__PURE__*/function () {
|
|
33
|
+
var _ref2 = _asyncToGenerator(function* () {
|
|
34
|
+
var newUsage = yield connection.getWorkerHeapInfo();
|
|
35
|
+
setMemoryUsage(newUsage);
|
|
36
|
+
|
|
37
|
+
if (bgMonitoring || isOpen) {
|
|
38
|
+
var currentUsage = (newUsage.totalHeapSize - newUsage.freeMemory) / newUsage.maximumHeapSize;
|
|
39
|
+
var currentTime = Date.now();
|
|
40
|
+
var {
|
|
41
|
+
timestamps: _timestamps,
|
|
42
|
+
usages: _usages
|
|
43
|
+
} = historyUsage.current;
|
|
44
|
+
|
|
45
|
+
while (_timestamps.length !== 0 && currentTime - _timestamps[0] > monitorDuration * 1.5) {
|
|
46
|
+
_timestamps.shift();
|
|
47
|
+
|
|
48
|
+
_usages.shift();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
_timestamps.push(currentTime);
|
|
52
|
+
|
|
53
|
+
_usages.push(currentUsage);
|
|
54
|
+
} else {
|
|
55
|
+
historyUsage.current = {
|
|
56
|
+
timestamps: [],
|
|
57
|
+
usages: []
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return function fetchAndUpdate() {
|
|
63
|
+
return _ref2.apply(this, arguments);
|
|
64
|
+
};
|
|
65
|
+
}();
|
|
66
|
+
|
|
67
|
+
fetchAndUpdate();
|
|
68
|
+
var updateUsage = setInterval(fetchAndUpdate, isOpen ? hoverUpdateInterval : defaultUpdateInterval);
|
|
69
|
+
return () => {
|
|
70
|
+
clearInterval(updateUsage);
|
|
71
|
+
};
|
|
72
|
+
}, [isOpen, hoverUpdateInterval, connection, defaultUpdateInterval, monitorDuration, bgMonitoring]);
|
|
73
|
+
|
|
74
|
+
var toDecimalPlace = (num, dec) => Math.round(num * 10 ** dec) / 10 ** dec;
|
|
75
|
+
|
|
76
|
+
var decimalPlace = 2;
|
|
77
|
+
var GbToByte = 1024 ** 3;
|
|
78
|
+
var {
|
|
79
|
+
freeMemory,
|
|
80
|
+
totalHeapSize,
|
|
81
|
+
maximumHeapSize
|
|
82
|
+
} = memoryUsage;
|
|
83
|
+
var freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);
|
|
84
|
+
var totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);
|
|
85
|
+
var maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);
|
|
86
|
+
var inUseGB = totalHeapGB - freeMemoryGB;
|
|
87
|
+
|
|
88
|
+
var getRow = function getRow(text, size) {
|
|
89
|
+
var bottomBorder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
90
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
91
|
+
className: classNames("heap-usage-info-row", {
|
|
92
|
+
'heading-bottom-border': bottomBorder
|
|
93
|
+
})
|
|
94
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
95
|
+
className: "font-weight-bold"
|
|
96
|
+
}, text), /*#__PURE__*/React.createElement("div", null, size));
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
var {
|
|
100
|
+
timestamps,
|
|
101
|
+
usages
|
|
102
|
+
} = historyUsage.current;
|
|
103
|
+
var lastTimestamp = (_timestamps2 = timestamps[timestamps.length - 1]) !== null && _timestamps2 !== void 0 ? _timestamps2 : 0;
|
|
104
|
+
var totalPercentage = totalHeapSize / maximumHeapSize;
|
|
105
|
+
var usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;
|
|
106
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
107
|
+
className: "max-memory"
|
|
108
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
109
|
+
className: "total-memory",
|
|
110
|
+
style: {
|
|
111
|
+
width: "calc(".concat(totalPercentage * 100, "% - ").concat(totalPercentage * 2, "px")
|
|
112
|
+
}
|
|
113
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
114
|
+
className: classNames('used-memory', {
|
|
115
|
+
'heap-overflow': (totalHeapSize - freeMemory) / maximumHeapSize > 0.95
|
|
116
|
+
}),
|
|
117
|
+
style: {
|
|
118
|
+
width: "calc(".concat(usedPercentage * 100, "% - ").concat(usedPercentage * 2, "px")
|
|
119
|
+
}
|
|
120
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
121
|
+
className: "memory-text"
|
|
122
|
+
}, maxHeapGB.toFixed(1), " GB")), /*#__PURE__*/React.createElement(Tooltip, {
|
|
123
|
+
onEntered: () => setIsOpen(true),
|
|
124
|
+
onExited: () => setIsOpen(false),
|
|
125
|
+
interactive: true
|
|
126
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
127
|
+
className: "heap-tooltip"
|
|
128
|
+
}, getRow('In use:', "".concat(inUseGB.toFixed(decimalPlace), " of ").concat(maxHeapGB.toFixed(decimalPlace), " GB"), true), getRow('Free:', "".concat(freeMemoryGB.toFixed(decimalPlace), " GB")), getRow('Total:', "".concat(totalHeapGB.toFixed(decimalPlace), " GB")), getRow('Max:', "".concat(maxHeapGB.toFixed(decimalPlace), " GB")), /*#__PURE__*/React.createElement("div", {
|
|
129
|
+
className: "heap-plot"
|
|
130
|
+
}, /*#__PURE__*/React.createElement(Plot, {
|
|
131
|
+
data: [{
|
|
132
|
+
x: [...timestamps],
|
|
133
|
+
y: [...usages],
|
|
134
|
+
type: 'scatter',
|
|
135
|
+
mode: 'lines'
|
|
136
|
+
}],
|
|
137
|
+
config: {
|
|
138
|
+
staticPlot: true,
|
|
139
|
+
responsive: true
|
|
140
|
+
},
|
|
141
|
+
style: {
|
|
142
|
+
width: '196px',
|
|
143
|
+
height: '100px'
|
|
144
|
+
},
|
|
145
|
+
layout: {
|
|
146
|
+
legend: false,
|
|
147
|
+
margin: {
|
|
148
|
+
l: 2,
|
|
149
|
+
t: 2,
|
|
150
|
+
r: 2,
|
|
151
|
+
b: 2
|
|
152
|
+
},
|
|
153
|
+
plot_bgcolor: 'transparent',
|
|
154
|
+
paper_bgcolor: 'transparent',
|
|
155
|
+
colorway: ['#4878ea'],
|
|
156
|
+
xaxis: {
|
|
157
|
+
dtick: Math.round(monitorDuration / 6),
|
|
158
|
+
gridcolor: ChartTheme.linecolor,
|
|
159
|
+
range: [lastTimestamp - monitorDuration, lastTimestamp],
|
|
160
|
+
linecolor: ChartTheme.linecolor,
|
|
161
|
+
linewidth: 2,
|
|
162
|
+
mirror: true
|
|
163
|
+
},
|
|
164
|
+
yaxis: {
|
|
165
|
+
dtick: 0.2,
|
|
166
|
+
gridcolor: ChartTheme.linecolor,
|
|
167
|
+
range: [0, 1],
|
|
168
|
+
linecolor: ChartTheme.linecolor,
|
|
169
|
+
linewidth: 2,
|
|
170
|
+
mirror: true
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
174
|
+
className: "heap-utilisation-text"
|
|
175
|
+
}, "% utilization over ", Math.round(monitorDuration / 1000 / 60), " min."))));
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export default HeapUsage;
|
|
179
|
+
//# sourceMappingURL=HeapUsage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/HeapUsage.tsx"],"names":["Tooltip","React","useEffect","useState","useRef","Plot","ChartTheme","classNames","HeapUsage","connection","defaultUpdateInterval","hoverUpdateInterval","bgMonitoring","monitorDuration","memoryUsage","setMemoryUsage","freeMemory","maximumHeapSize","totalHeapSize","isOpen","setIsOpen","historyUsage","timestamps","usages","setUsageUpdateInterval","fetchAndUpdate","newUsage","getWorkerHeapInfo","currentUsage","currentTime","Date","now","current","length","shift","push","updateUsage","setInterval","clearInterval","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","lastTimestamp","totalPercentage","usedPercentage","width","toFixed","x","y","type","mode","staticPlot","responsive","height","legend","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"mappings":"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","sourcesContent":["import { Tooltip } from '@deephaven/components';\nimport { QueryConnectable } from '@deephaven/jsapi-shim';\nimport React, { useEffect, useState, ReactElement, useRef } from 'react';\nimport { Plot, ChartTheme } from '@deephaven/chart';\nimport './HeapUsage.scss';\nimport classNames from 'classnames';\n\ninterface HeapUsageProps {\n connection: QueryConnectable;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nconst HeapUsage = ({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement => {\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n useEffect(\n function setUsageUpdateInterval() {\n const fetchAndUpdate = async () => {\n const newUsage = await connection.getWorkerHeapInfo();\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n };\n fetchAndUpdate();\n\n const updateUsage = setInterval(\n fetchAndUpdate,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n return () => {\n clearInterval(updateUsage);\n };\n },\n [\n isOpen,\n hoverUpdateInterval,\n connection,\n defaultUpdateInterval,\n monitorDuration,\n bgMonitoring,\n ]\n );\n\n const toDecimalPlace = (num: number, dec: number) =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (text: string, size: string, bottomBorder = false) => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <>\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n </div>\n\n <Tooltip\n onEntered={() => setIsOpen(true)}\n onExited={() => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n legend: false,\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: ChartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: ChartTheme.linecolor,\n range: [0, 1],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </>\n );\n};\n\nexport default HeapUsage;\n"],"file":"HeapUsage.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/StoragePropTypes.ts"],"names":["PropTypes","CommandHistoryStorage","shape","addItem","func","isRequired","updateItem","getTable","CommandHistoryTable","size","number","getSnapshot","StoragePropTypes","Object","freeze"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,YAAtB;AAEA,IAAMC,qBAAqB,GAAGD,SAAS,CAACE,KAAV,CAAgB;AAC5CC,EAAAA,OAAO,EAAEH,SAAS,CAACI,IAAV,CAAeC,UADoB;AAE5CC,EAAAA,UAAU,EAAEN,SAAS,CAACI,IAAV,CAAeC,UAFiB;AAG5CE,EAAAA,QAAQ,EAAEP,SAAS,CAACI,IAAV,CAAeC;AAHmB,CAAhB,CAA9B;AAMA,IAAMG,mBAAmB,GAAGR,SAAS,CAACE,KAAV,CAAgB;AAC1CO,EAAAA,IAAI,EAAET,SAAS,CAACU,MAAV,CAAiBL,UADmB;AAE1CM,EAAAA,WAAW,EAAEX,SAAS,CAACI,IAAV,CAAeC;AAFc,CAAhB,CAA5B;AAKA,IAAMO,gBAAgB,GAAGC,MAAM,CAACC,MAAP,CAAc;AACrCb,EAAAA,qBADqC;AAErCO,EAAAA;AAFqC,CAAd,CAAzB;AAKA,eAAeI,gBAAf","sourcesContent":["import PropTypes from 'prop-types';\n\nconst CommandHistoryStorage = PropTypes.shape({\n addItem: PropTypes.func.isRequired,\n updateItem: PropTypes.func.isRequired,\n getTable: PropTypes.func.isRequired,\n});\n\nconst CommandHistoryTable = PropTypes.shape({\n size: PropTypes.number.isRequired,\n getSnapshot: PropTypes.func.isRequired,\n});\n\nconst StoragePropTypes = Object.freeze({\n CommandHistoryStorage,\n CommandHistoryTable,\n});\n\nexport default StoragePropTypes;\n"],"file":"StoragePropTypes.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandHistory.js","names":["React","Component","ContextActions","ContextActionUtils","ItemList","SearchInput","GLOBAL_SHORTCUTS","vsFileCode","vsFiles","vsNewFile","vsPlay","vsTerminal","Pending","Log","CommandHistoryItem","CommandHistoryActions","ConsoleConstants","CommandHistoryViewportUpdater","SHORTCUTS","log","module","CommandHistory","getCommandsFromViewport","items","offset","sortedRanges","commands","i","length","range","j","name","push","getCommandsFromSnapshot","table","getSnapshot","values","map","item","constructor","props","copySelectedCommands","bind","createNotebook","sendToConsole","renderItem","runInConsole","sendToNotebook","handleSelect","handleSelectionChange","handleSearchChange","handleViewportChange","handleViewportUpdate","itemActions","title","description","icon","shortcut","COPY","action","group","groups","edit","COMMAND_HISTORY","SEND_TO_CONSOLE","menuGroups","send","order","RUN","SEND_TO_NOTEBOOK","historyActions","selectionRequired","pending","searchInputRef","createRef","state","actions","top","bottom","itemCount","size","selectedRanges","searchText","componentWillUnmount","cancel","getSelectedCommands","ranges","slice","sort","a","b","add","getSelectedCommandText","then","join","updateActions","setState","selectedRowCount","reduce","count","MAX_SELECTION_COUNT","debug","copyToClipboard","catch","error","commandText","language","value","index","e","target","itemIndex","isSelected","commandHistoryStorage","focus","current","render","languageDisplayString","LANGUAGE_MAP","get","ITEM_HEIGHT","medium"],"sources":["../../src/command-history/CommandHistory.tsx"],"sourcesContent":["import React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport {\n ContextActions,\n ContextActionUtils,\n ItemList,\n SearchInput,\n GLOBAL_SHORTCUTS,\n RenderItemProps,\n} from '@deephaven/components';\nimport { ViewportData } from '@deephaven/storage';\nimport {\n vsFileCode,\n vsFiles,\n vsNewFile,\n vsPlay,\n vsTerminal,\n} from '@deephaven/icons';\nimport { Pending, Range } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport CommandHistoryItem from './CommandHistoryItem';\nimport CommandHistoryActions from './CommandHistoryActions';\nimport ConsoleConstants from '../common/ConsoleConstants';\n\nimport './CommandHistory.scss';\nimport CommandHistoryViewportUpdater from './CommandHistoryViewportUpdater';\nimport SHORTCUTS from '../ConsoleShortcuts';\nimport CommandHistoryStorage, {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\nimport { ItemAction, HistoryAction } from './CommandHistoryTypes';\n\nconst log = Log.module('CommandHistory');\n\nexport type CommandHistorySettings = {\n value: string;\n language: string;\n};\ninterface CommandHistoryProps {\n language: string;\n sendToConsole: (command: string, focus?: boolean, execute?: boolean) => void;\n sendToNotebook: (\n settings: CommandHistorySettings,\n forceNewNotebook?: boolean\n ) => void;\n table: CommandHistoryTable;\n commandHistoryStorage: CommandHistoryStorage;\n}\ninterface CommandHistoryState {\n actions: ItemAction[];\n historyActions: HistoryAction[];\n top: number;\n bottom: number;\n itemCount: number;\n items: CommandHistoryStorageItem[];\n offset: number;\n selectedRanges: Range[];\n searchText: string;\n}\n\nclass CommandHistory extends Component<\n CommandHistoryProps,\n CommandHistoryState\n> {\n static ITEM_HEIGHT = 29;\n\n static MAX_SELECTION_COUNT = 10000;\n\n static menuGroups = {\n send: ContextActions.groups.medium + 100,\n };\n\n static getCommandsFromViewport(\n items: CommandHistoryStorageItem[],\n offset: number,\n sortedRanges: Range[]\n ): string[] {\n const commands = [];\n for (let i = 0; i < sortedRanges.length; i += 1) {\n const range = sortedRanges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (j >= offset && j < offset + items.length) {\n const { name } = items[j - offset];\n commands.push(name);\n }\n }\n }\n return commands;\n }\n\n static async getCommandsFromSnapshot(\n table: CommandHistoryTable,\n sortedRanges: Range[]\n ): Promise<string[]> {\n const items = await table.getSnapshot(sortedRanges);\n return [...items.values()].map(item => item.name);\n }\n\n constructor(props: CommandHistoryProps) {\n super(props);\n\n this.copySelectedCommands = this.copySelectedCommands.bind(this);\n this.createNotebook = this.createNotebook.bind(this);\n this.sendToConsole = this.sendToConsole.bind(this);\n this.renderItem = this.renderItem.bind(this);\n this.runInConsole = this.runInConsole.bind(this);\n this.sendToNotebook = this.sendToNotebook.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleViewportUpdate = this.handleViewportUpdate.bind(this);\n\n this.itemActions = [\n {\n title: 'Copy Selection',\n description: 'Copy selected commands to clipboard',\n icon: vsFiles,\n shortcut: GLOBAL_SHORTCUTS.COPY,\n action: this.copySelectedCommands,\n group: ContextActions.groups.edit,\n },\n {\n title: 'Send to Console',\n description: 'Open selected commands in the console',\n icon: vsTerminal,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_CONSOLE,\n action: this.sendToConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Run in Console',\n description: 'Run selected commands in the console',\n icon: vsPlay,\n shortcut: SHORTCUTS.COMMAND_HISTORY.RUN,\n action: this.runInConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Send to Active Notebook',\n description: 'Open selected commands in a notebook',\n icon: vsFileCode,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_NOTEBOOK,\n action: this.sendToNotebook,\n group: CommandHistory.menuGroups.send,\n order: 20,\n },\n {\n title: 'Send to New Notebook',\n description: 'Open selected commands in a new notebook',\n icon: vsNewFile,\n action: this.createNotebook,\n group: CommandHistory.menuGroups.send,\n order: 30,\n },\n ];\n\n this.historyActions = [\n {\n title: 'Send to Console',\n icon: vsTerminal,\n selectionRequired: true,\n description: 'Open selected commands in the console',\n action: this.sendToConsole,\n },\n {\n title: 'Send to Notebook',\n icon: vsFileCode,\n selectionRequired: true,\n description: 'Open selected commands in a notebook',\n action: this.sendToNotebook,\n },\n ];\n\n this.pending = new Pending();\n this.searchInputRef = React.createRef();\n\n const { table } = props;\n\n this.state = {\n actions: [],\n historyActions: this.historyActions,\n top: 0,\n bottom: 0,\n itemCount: table.size,\n items: [],\n offset: 0,\n selectedRanges: [],\n searchText: '',\n };\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n }\n\n itemActions: ItemAction[];\n\n historyActions: HistoryAction[];\n\n pending: Pending;\n\n searchInputRef: RefObject<SearchInput>;\n\n /**\n * Retrieves the selected commands as an array.\n * If they're not within the current viewport, will fetch them from the table\n * @returns Array of selected commands\n */\n async getSelectedCommands(): Promise<string[]> {\n const { items, offset, selectedRanges } = this.state;\n const ranges = selectedRanges.slice().sort((a, b) => a[0] - b[0]);\n\n if (ranges.length === 0) {\n return [];\n }\n if (\n ranges[0][0] >= offset &&\n ranges[ranges.length - 1][1] < offset + items.length\n ) {\n // All ranges are in the current viewport, just copy the data we've already got\n return CommandHistory.getCommandsFromViewport(items, offset, ranges);\n }\n const { table } = this.props;\n return this.pending.add(\n CommandHistory.getCommandsFromSnapshot(table, ranges)\n );\n }\n\n /**\n * Retrieves the text of all the currently selected commands, joined by a new line char\n * @returns The commands joined by \\n char\n */\n getSelectedCommandText(): Promise<string> {\n return this.getSelectedCommands().then(commands => commands.join('\\n'));\n }\n\n updateActions(): void {\n this.setState(state => {\n const { selectedRanges } = state;\n const selectedRowCount = selectedRanges.reduce(\n (count, range) => count + range[1] - range[0] + 1,\n 0\n );\n if (\n selectedRowCount > 0 &&\n selectedRowCount < CommandHistory.MAX_SELECTION_COUNT\n ) {\n log.debug('Updating actions', this.itemActions);\n return { actions: this.itemActions };\n }\n log.debug('Disabling actions', selectedRowCount);\n return { actions: [] };\n });\n }\n\n copySelectedCommands(): void {\n this.getSelectedCommandText()\n .then(ContextActionUtils.copyToClipboard)\n .catch(log.error);\n }\n\n createNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language }, true);\n })\n .catch(log.error);\n }\n\n sendToNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language });\n })\n .catch(log.error);\n }\n\n sendToConsole(): void {\n const { sendToConsole } = this.props;\n this.getSelectedCommandText().then(sendToConsole).catch(log.error);\n }\n\n runInConsole(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { sendToConsole } = this.props;\n sendToConsole(commandText, true, true);\n })\n .catch(log.error);\n }\n\n handleSelect(index: number): void {\n const { sendToConsole } = this.props;\n const { items, offset } = this.state;\n if (index < offset || index >= offset + items.length) {\n log.error('Invalid index!', index);\n return;\n }\n\n const { name } = items[index - offset];\n sendToConsole(name);\n }\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n this.updateActions();\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.setState({ top, bottom });\n }\n\n handleSearchChange(e: ChangeEvent<HTMLInputElement>): void {\n // clear selected range, as old selection could be filtered from list\n this.setState({ searchText: e.target.value, selectedRanges: [] });\n }\n\n handleViewportUpdate({\n items,\n offset,\n }: ViewportData<CommandHistoryStorageItem>): void {\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ items, itemCount, offset });\n }\n\n renderItem({\n item,\n itemIndex,\n isSelected,\n }: RenderItemProps<CommandHistoryStorageItem>): ReactElement {\n const { language, commandHistoryStorage } = this.props;\n return (\n <CommandHistoryItem\n isSelected={isSelected}\n item={item}\n language={language}\n commandHistoryStorage={commandHistoryStorage}\n />\n );\n }\n\n focus(): void {\n if (this.searchInputRef.current) {\n this.searchInputRef.current.focus();\n }\n }\n\n render(): ReactElement {\n const { language, table } = this.props;\n const {\n actions,\n historyActions,\n searchText,\n top,\n bottom,\n items,\n itemCount,\n offset,\n selectedRanges,\n } = this.state;\n const languageDisplayString =\n ConsoleConstants.LANGUAGE_MAP.get(language) ?? '';\n return (\n <div className=\"command-history\">\n <div className=\"command-history-search-bar\">\n <SearchInput\n ref={this.searchInputRef}\n value={searchText}\n placeholder={`${languageDisplayString} Command History`}\n onChange={this.handleSearchChange}\n />\n <CommandHistoryActions\n actions={historyActions}\n hasSelection={selectedRanges.length > 0}\n />\n </div>\n <div className=\"command-history-list\">\n <ItemList\n itemCount={itemCount}\n items={items}\n offset={offset}\n selectedRanges={selectedRanges}\n onSelect={this.handleSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={this.handleViewportChange}\n renderItem={this.renderItem}\n rowHeight={CommandHistory.ITEM_HEIGHT}\n isDoubleClickSelect\n isMultiSelect\n isStickyBottom\n />\n <CommandHistoryViewportUpdater\n table={table}\n top={top}\n bottom={bottom}\n search={searchText}\n onUpdate={this.handleViewportUpdate}\n />\n <ContextActions actions={actions} />\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistory;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/command-history/CommandHistory.tsx"],"names":["React","Component","ContextActions","ContextActionUtils","ItemList","SearchInput","GLOBAL_SHORTCUTS","vsFileCode","vsFiles","vsNewFile","vsPlay","vsTerminal","Pending","Log","CommandHistoryItem","CommandHistoryActions","ConsoleConstants","CommandHistoryViewportUpdater","SHORTCUTS","log","module","CommandHistory","getCommandsFromViewport","items","offset","sortedRanges","commands","i","length","range","j","name","push","getCommandsFromSnapshot","table","getSnapshot","values","map","item","constructor","props","copySelectedCommands","bind","createNotebook","sendToConsole","renderItem","runInConsole","sendToNotebook","handleSelect","handleSelectionChange","handleSearchChange","handleViewportChange","handleViewportUpdate","itemActions","title","description","icon","shortcut","COPY","action","group","groups","edit","COMMAND_HISTORY","SEND_TO_CONSOLE","menuGroups","send","order","RUN","SEND_TO_NOTEBOOK","historyActions","selectionRequired","pending","searchInputRef","createRef","state","actions","top","bottom","itemCount","size","selectedRanges","searchText","componentWillUnmount","cancel","getSelectedCommands","ranges","slice","sort","a","b","add","getSelectedCommandText","then","join","updateActions","setState","selectedRowCount","reduce","count","MAX_SELECTION_COUNT","debug","copyToClipboard","catch","error","commandText","language","value","index","e","target","itemIndex","isSelected","commandHistoryStorage","focus","current","render","languageDisplayString","LANGUAGE_MAP","get","ITEM_HEIGHT","medium"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport {\n ContextActions,\n ContextActionUtils,\n ItemList,\n SearchInput,\n GLOBAL_SHORTCUTS,\n RenderItemProps,\n} from '@deephaven/components';\nimport { ViewportData } from '@deephaven/storage';\nimport {\n vsFileCode,\n vsFiles,\n vsNewFile,\n vsPlay,\n vsTerminal,\n} from '@deephaven/icons';\nimport { Pending, Range } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport CommandHistoryItem from './CommandHistoryItem';\nimport CommandHistoryActions from './CommandHistoryActions';\nimport ConsoleConstants from '../common/ConsoleConstants';\n\nimport './CommandHistory.scss';\nimport CommandHistoryViewportUpdater from './CommandHistoryViewportUpdater';\nimport SHORTCUTS from '../ConsoleShortcuts';\nimport CommandHistoryStorage, {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\nimport { ItemAction, HistoryAction } from './CommandHistoryTypes';\n\nconst log = Log.module('CommandHistory');\n\nexport type CommandHistorySettings = {\n value: string;\n language: string;\n};\ninterface CommandHistoryProps {\n language: string;\n sendToConsole: (command: string, focus?: boolean, execute?: boolean) => void;\n sendToNotebook: (\n settings: CommandHistorySettings,\n forceNewNotebook?: boolean\n ) => void;\n table: CommandHistoryTable;\n commandHistoryStorage: CommandHistoryStorage;\n}\ninterface CommandHistoryState {\n actions: ItemAction[];\n historyActions: HistoryAction[];\n top: number;\n bottom: number;\n itemCount: number;\n items: CommandHistoryStorageItem[];\n offset: number;\n selectedRanges: Range[];\n searchText: string;\n}\n\nclass CommandHistory extends Component<\n CommandHistoryProps,\n CommandHistoryState\n> {\n static ITEM_HEIGHT = 29;\n\n static MAX_SELECTION_COUNT = 10000;\n\n static menuGroups = {\n send: ContextActions.groups.medium + 100,\n };\n\n static getCommandsFromViewport(\n items: CommandHistoryStorageItem[],\n offset: number,\n sortedRanges: Range[]\n ): string[] {\n const commands = [];\n for (let i = 0; i < sortedRanges.length; i += 1) {\n const range = sortedRanges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (j >= offset && j < offset + items.length) {\n const { name } = items[j - offset];\n commands.push(name);\n }\n }\n }\n return commands;\n }\n\n static async getCommandsFromSnapshot(\n table: CommandHistoryTable,\n sortedRanges: Range[]\n ): Promise<string[]> {\n const items = await table.getSnapshot(sortedRanges);\n return [...items.values()].map(item => item.name);\n }\n\n constructor(props: CommandHistoryProps) {\n super(props);\n\n this.copySelectedCommands = this.copySelectedCommands.bind(this);\n this.createNotebook = this.createNotebook.bind(this);\n this.sendToConsole = this.sendToConsole.bind(this);\n this.renderItem = this.renderItem.bind(this);\n this.runInConsole = this.runInConsole.bind(this);\n this.sendToNotebook = this.sendToNotebook.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleViewportUpdate = this.handleViewportUpdate.bind(this);\n\n this.itemActions = [\n {\n title: 'Copy Selection',\n description: 'Copy selected commands to clipboard',\n icon: vsFiles,\n shortcut: GLOBAL_SHORTCUTS.COPY,\n action: this.copySelectedCommands,\n group: ContextActions.groups.edit,\n },\n {\n title: 'Send to Console',\n description: 'Open selected commands in the console',\n icon: vsTerminal,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_CONSOLE,\n action: this.sendToConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Run in Console',\n description: 'Run selected commands in the console',\n icon: vsPlay,\n shortcut: SHORTCUTS.COMMAND_HISTORY.RUN,\n action: this.runInConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Send to Active Notebook',\n description: 'Open selected commands in a notebook',\n icon: vsFileCode,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_NOTEBOOK,\n action: this.sendToNotebook,\n group: CommandHistory.menuGroups.send,\n order: 20,\n },\n {\n title: 'Send to New Notebook',\n description: 'Open selected commands in a new notebook',\n icon: vsNewFile,\n action: this.createNotebook,\n group: CommandHistory.menuGroups.send,\n order: 30,\n },\n ];\n\n this.historyActions = [\n {\n title: 'Send to Console',\n icon: vsTerminal,\n selectionRequired: true,\n description: 'Open selected commands in the console',\n action: this.sendToConsole,\n },\n {\n title: 'Send to Notebook',\n icon: vsFileCode,\n selectionRequired: true,\n description: 'Open selected commands in a notebook',\n action: this.sendToNotebook,\n },\n ];\n\n this.pending = new Pending();\n this.searchInputRef = React.createRef();\n\n const { table } = props;\n\n this.state = {\n actions: [],\n historyActions: this.historyActions,\n top: 0,\n bottom: 0,\n itemCount: table.size,\n items: [],\n offset: 0,\n selectedRanges: [],\n searchText: '',\n };\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n }\n\n itemActions: ItemAction[];\n\n historyActions: HistoryAction[];\n\n pending: Pending;\n\n searchInputRef: RefObject<SearchInput>;\n\n /**\n * Retrieves the selected commands as an array.\n * If they're not within the current viewport, will fetch them from the table\n * @returns Array of selected commands\n */\n async getSelectedCommands(): Promise<string[]> {\n const { items, offset, selectedRanges } = this.state;\n const ranges = selectedRanges.slice().sort((a, b) => a[0] - b[0]);\n\n if (ranges.length === 0) {\n return [];\n }\n if (\n ranges[0][0] >= offset &&\n ranges[ranges.length - 1][1] < offset + items.length\n ) {\n // All ranges are in the current viewport, just copy the data we've already got\n return CommandHistory.getCommandsFromViewport(items, offset, ranges);\n }\n const { table } = this.props;\n return this.pending.add(\n CommandHistory.getCommandsFromSnapshot(table, ranges)\n );\n }\n\n /**\n * Retrieves the text of all the currently selected commands, joined by a new line char\n * @returns The commands joined by \\n char\n */\n getSelectedCommandText(): Promise<string> {\n return this.getSelectedCommands().then(commands => commands.join('\\n'));\n }\n\n updateActions(): void {\n this.setState(state => {\n const { selectedRanges } = state;\n const selectedRowCount = selectedRanges.reduce(\n (count, range) => count + range[1] - range[0] + 1,\n 0\n );\n if (\n selectedRowCount > 0 &&\n selectedRowCount < CommandHistory.MAX_SELECTION_COUNT\n ) {\n log.debug('Updating actions', this.itemActions);\n return { actions: this.itemActions };\n }\n log.debug('Disabling actions', selectedRowCount);\n return { actions: [] };\n });\n }\n\n copySelectedCommands(): void {\n this.getSelectedCommandText()\n .then(ContextActionUtils.copyToClipboard)\n .catch(log.error);\n }\n\n createNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language }, true);\n })\n .catch(log.error);\n }\n\n sendToNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language });\n })\n .catch(log.error);\n }\n\n sendToConsole(): void {\n const { sendToConsole } = this.props;\n this.getSelectedCommandText().then(sendToConsole).catch(log.error);\n }\n\n runInConsole(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { sendToConsole } = this.props;\n sendToConsole(commandText, true, true);\n })\n .catch(log.error);\n }\n\n handleSelect(index: number): void {\n const { sendToConsole } = this.props;\n const { items, offset } = this.state;\n if (index < offset || index >= offset + items.length) {\n log.error('Invalid index!', index);\n return;\n }\n\n const { name } = items[index - offset];\n sendToConsole(name);\n }\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n this.updateActions();\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.setState({ top, bottom });\n }\n\n handleSearchChange(e: ChangeEvent<HTMLInputElement>): void {\n // clear selected range, as old selection could be filtered from list\n this.setState({ searchText: e.target.value, selectedRanges: [] });\n }\n\n handleViewportUpdate({\n items,\n offset,\n }: ViewportData<CommandHistoryStorageItem>): void {\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ items, itemCount, offset });\n }\n\n renderItem({\n item,\n itemIndex,\n isSelected,\n }: RenderItemProps<CommandHistoryStorageItem>): ReactElement {\n const { language, commandHistoryStorage } = this.props;\n return (\n <CommandHistoryItem\n isSelected={isSelected}\n item={item}\n language={language}\n commandHistoryStorage={commandHistoryStorage}\n />\n );\n }\n\n focus(): void {\n if (this.searchInputRef.current) {\n this.searchInputRef.current.focus();\n }\n }\n\n render(): ReactElement {\n const { language, table } = this.props;\n const {\n actions,\n historyActions,\n searchText,\n top,\n bottom,\n items,\n itemCount,\n offset,\n selectedRanges,\n } = this.state;\n const languageDisplayString =\n ConsoleConstants.LANGUAGE_MAP.get(language) ?? '';\n return (\n <div className=\"command-history\">\n <div className=\"command-history-search-bar\">\n <SearchInput\n ref={this.searchInputRef}\n value={searchText}\n placeholder={`${languageDisplayString} Command History`}\n onChange={this.handleSearchChange}\n />\n <CommandHistoryActions\n actions={historyActions}\n hasSelection={selectedRanges.length > 0}\n />\n </div>\n <div className=\"command-history-list\">\n <ItemList\n itemCount={itemCount}\n items={items}\n offset={offset}\n selectedRanges={selectedRanges}\n onSelect={this.handleSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={this.handleViewportChange}\n renderItem={this.renderItem}\n rowHeight={CommandHistory.ITEM_HEIGHT}\n isDoubleClickSelect\n isMultiSelect\n isStickyBottom\n />\n <CommandHistoryViewportUpdater\n table={table}\n top={top}\n bottom={bottom}\n search={searchText}\n onUpdate={this.handleViewportUpdate}\n />\n <ContextActions actions={actions} />\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistory;\n"],"file":"CommandHistory.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/command-history/CommandHistoryActions.tsx"],"names":["React","Component","classNames","FontAwesomeIcon","Button","vsArrowLeft","vsCircleLargeFilled","CommandHistoryActions","itemKey","i","item","title","renderContent","selectionRequired","icon","render","actions","hasSelection","props","map","index","className","action","description"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA+C,OAA/C;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,WAAT,EAAsBC,mBAAtB,QAAiD,kBAAjD;;;AASA,MAAMC,qBAAN,SAAoCN,SAApC,CAGE;AACc,SAAPO,OAAO,CAACC,CAAD,EAAaC,IAAb,EAA0C;AACtD,qBAAUA,IAAI,CAACC,KAAf;AACD;;AAEmB,SAAbC,aAAa,CAACF,IAAD,EAAmC;AACrD,QAAIA,IAAI,CAACG,iBAAT,EAA4B;AAC1B,0BACE;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE,oBAAC,eAAD;AACE,QAAA,IAAI,EAAEP,mBADR;AAEE,QAAA,IAAI,EAAEI,IAAI,CAACI,IAFb;AAGE,QAAA,SAAS,EAAC;AAHZ,QADF,eAME,oBAAC,eAAD;AACE,QAAA,IAAI,EAAET,WADR;AAEE,QAAA,SAAS,EAAC;AAFZ,QANF,CADF;AAaD;;AACD,wBAAO,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEK,IAAI,CAACI;AAA5B,MAAP;AACD;;AAEDC,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAA4B,KAAKC,KAAvC;AAEA,wBACE;AAAK,MAAA,SAAS,EAAC;AAAf,OACGF,OAAO,CAACG,GAAR,CAAY,CAACT,IAAD,EAAOU,KAAP,kBACX,oBAAC,MAAD;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAElB,UAAU,CAACQ,IAAI,CAACW,SAAN,CAFvB;AAGE,MAAA,GAAG,EAAEd,qBAAqB,CAACC,OAAtB,CAA8BY,KAA9B,EAAqCV,IAArC,CAHP;AAIE,MAAA,OAAO,EAAEA,IAAI,CAACY,MAJhB;AAKE,MAAA,OAAO,EAAEZ,IAAI,CAACa,WALhB;AAME,MAAA,QAAQ,EAAEb,IAAI,CAACG,iBAAL,IAA0B,CAACI,YANvC;AAOE,MAAA,IAAI,EAAEV,qBAAqB,CAACK,aAAtB,CAAoCF,IAApC;AAPR,MADD,CADH,CADF;AAeD;;AA1CD;;AA6CF,eAAeH,qBAAf","sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsArrowLeft, vsCircleLargeFilled } from '@deephaven/icons';\nimport './CommandHistoryActions.scss';\nimport { HistoryAction } from './CommandHistoryTypes';\n\ninterface CommandHistoryActionsProps {\n actions: HistoryAction[];\n hasSelection: boolean;\n}\n\nclass CommandHistoryActions extends Component<\n CommandHistoryActionsProps,\n Record<string, never>\n> {\n static itemKey(i: unknown, item: HistoryAction): string {\n return `${item.title}`;\n }\n\n static renderContent(item: HistoryAction): JSX.Element {\n if (item.selectionRequired) {\n return (\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={item.icon}\n transform=\"right-5 down-5 shrink-4\"\n />\n <FontAwesomeIcon\n icon={vsArrowLeft}\n transform=\"shrink-3 right-7 down-6\"\n />\n </div>\n );\n }\n return <FontAwesomeIcon icon={item.icon} />;\n }\n\n render(): ReactElement {\n const { actions, hasSelection } = this.props;\n\n return (\n <div className=\"command-history-actions\">\n {actions.map((item, index) => (\n <Button\n kind=\"inline\"\n className={classNames(item.className)}\n key={CommandHistoryActions.itemKey(index, item)}\n onClick={item.action}\n tooltip={item.description}\n disabled={item.selectionRequired && !hasSelection}\n icon={CommandHistoryActions.renderContent(item)}\n />\n ))}\n </div>\n );\n }\n}\n\nexport default CommandHistoryActions;\n"],"file":"CommandHistoryActions.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/command-history/CommandHistoryItem.tsx"],"names":["React","useRef","useCallback","classNames","Tooltip","CommandHistoryItemTooltip","MAX_TRUNCATE_LENGTH","CommandHistoryItem","props","item","language","isSelected","commandHistoryStorage","previewText","name","substring","tooltip","handleUpdate","current","update","selected","placement","modifiers","preventOverflow","enabled","boundariesElement","order","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,MAAhB,EAAwBC,WAAxB,QAAyD,OAAzD;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,OAAT,QAAwB,uBAAxB;;OAGOC,yB;AAYP,IAAMC,mBAAmB,GAAG,GAA5B;;AAEA,IAAMC,kBAAkB,GAAIC,KAAD,IAAkD;AAC3E,MAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,QAAR;AAAkBC,IAAAA,UAAlB;AAA8BC,IAAAA;AAA9B,MAAwDJ,KAA9D;AACA,MAAMK,WAAW,GAAGJ,IAAI,CAACK,IAAL,CAAUC,SAAV,CAAoB,CAApB,EAAuBT,mBAAvB,CAApB;AACA,MAAMU,OAAO,GAAGf,MAAM,CAAU,IAAV,CAAtB;AACA,MAAMgB,YAAY,GAAGf,WAAW,CAAC,MAAM;AAAA;;AACrC,wBAAAc,OAAO,CAACE,OAAR,sEAAiBC,MAAjB;AACD,GAF+B,EAE7B,CAACH,OAAD,CAF6B,CAAhC;AAIA,sBACE;AACE,IAAA,SAAS,EAAEb,UAAU,CAAC,sBAAD,EAAyB;AAC5CiB,MAAAA,QAAQ,EAAET;AADkC,KAAzB;AADvB,KAKGE,WALH,eAME,oBAAC,OAAD;AACE,IAAA,GAAG,EAAEG,OADP;AAEE,IAAA,WAAW,MAFb;AAGE,IAAA,OAAO,EAAE;AACPK,MAAAA,SAAS,EAAE,MADJ;AAEPC,MAAAA,SAAS,EAAE;AACTC,QAAAA,eAAe,EAAE;AACfC,UAAAA,OAAO,EAAE,IADM;AAEfC,UAAAA,iBAAiB,EAAE,UAFJ;AAGfC,UAAAA,KAAK,EAAE,GAHQ,CAGH;;AAHG;AADR;AAFJ,KAHX;AAaE,IAAA,eAAe,EAAC;AAblB,kBAeE,oBAAC,yBAAD;AACE,IAAA,IAAI,EAAEjB,IADR;AAEE,IAAA,QAAQ,EAAEC,QAFZ;AAGE,IAAA,QAAQ,EAAEO,YAHZ;AAIE,IAAA,qBAAqB,EAAEL;AAJzB,IAfF,CANF,CADF;AA+BD,CAvCD;;AAyCAL,kBAAkB,CAACoB,YAAnB,GAAkC;AAChChB,EAAAA,UAAU,EAAE;AADoB,CAAlC;AAIA,eAAeJ,kBAAf","sourcesContent":["import React, { useRef, useCallback, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Tooltip } from '@deephaven/components';\n\nimport './CommandHistoryItem.scss';\nimport CommandHistoryItemTooltip from './CommandHistoryItemTooltip';\nimport CommandHistoryStorage, {\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemProps {\n item: CommandHistoryStorageItem;\n language: string;\n isSelected?: boolean;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\nconst MAX_TRUNCATE_LENGTH = 512;\n\nconst CommandHistoryItem = (props: CommandHistoryItemProps): ReactElement => {\n const { item, language, isSelected, commandHistoryStorage } = props;\n const previewText = item.name.substring(0, MAX_TRUNCATE_LENGTH);\n const tooltip = useRef<Tooltip>(null);\n const handleUpdate = useCallback(() => {\n tooltip.current?.update();\n }, [tooltip]);\n\n return (\n <div\n className={classNames('command-history-item', {\n selected: isSelected,\n })}\n >\n {previewText}\n <Tooltip\n ref={tooltip}\n interactive\n options={{\n placement: 'left',\n modifiers: {\n preventOverflow: {\n enabled: true,\n boundariesElement: 'viewport',\n order: 825, // modify order so boundary is enforced at end of popper calcs\n },\n },\n }}\n popperClassName=\"command-history-item-popper\"\n >\n <CommandHistoryItemTooltip\n item={item}\n language={language}\n onUpdate={handleUpdate}\n commandHistoryStorage={commandHistoryStorage}\n />\n </Tooltip>\n </div>\n );\n};\n\nCommandHistoryItem.defaultProps = {\n isSelected: false,\n};\n\nexport default CommandHistoryItem;\n"],"file":"CommandHistoryItem.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandHistoryItemTooltip.js","names":["React","Component","debounce","memoize","LoadingSpinner","TimeUtils","FontAwesomeIcon","vsWarning","Code","LOAD_DATA_DEBOUNCE","MAX_NUMBER_OF_LINES","CommandHistoryItemTooltip","getTimeString","startTime","endTime","deltaTime","Math","round","Date","valueOf","formatElapsedTime","constructor","props","commandHistoryStorage","item","language","id","cleanup","listenItem","handleUpdate","handleError","name","split","join","max","bind","handleTimeout","state","currentTime","now","componentDidMount","loadData","componentDidUpdate","prevProps","prevState","data","timer","result","startTimer","stopTimer","componentWillUnmount","cancel","setInterval","clearInterval","undefined","updateTime","setState","error","onUpdate","render","errorMessage","timeString","previewText","getPreviewText","length"],"sources":["../../src/command-history/CommandHistoryItemTooltip.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport debounce from 'lodash.debounce';\nimport memoize from 'memoizee';\nimport { LoadingSpinner } from '@deephaven/components';\nimport { TimeUtils } from '@deephaven/utils';\nimport { StorageListenerRemover } from '@deephaven/storage';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsWarning } from '@deephaven/icons';\nimport Code from '../common/Code';\nimport './CommandHistoryItemTooltip.scss';\nimport CommandHistoryStorage, {\n CommandHistoryStorageData,\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemTooltipProps {\n item: CommandHistoryStorageItem;\n language: string;\n onUpdate?: (data: CommandHistoryStorageData | null) => void;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\ninterface CommandHistoryItemTooltipState {\n currentTime: number;\n data?: CommandHistoryStorageData;\n error?: string;\n}\n\nconst LOAD_DATA_DEBOUNCE = 250;\nconst MAX_NUMBER_OF_LINES = 2500;\n\nexport class CommandHistoryItemTooltip extends Component<\n CommandHistoryItemTooltipProps,\n CommandHistoryItemTooltipState\n> {\n static defaultProps = {\n onUpdate: (): void => undefined,\n };\n\n static getTimeString(\n startTime: string | undefined,\n endTime: string | number\n ): string | null {\n if (!startTime || !endTime) {\n return null;\n }\n\n const deltaTime = Math.round(\n (new Date(endTime).valueOf() - new Date(startTime).valueOf()) / 1000\n );\n\n if (deltaTime < 1) return '<1s';\n\n return TimeUtils.formatElapsedTime(deltaTime);\n }\n\n constructor(props: CommandHistoryItemTooltipProps) {\n super(props);\n\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n\n this.state = {\n currentTime: Date.now(),\n };\n }\n\n componentDidMount(): void {\n this.loadData();\n }\n\n componentDidUpdate(\n prevProps: CommandHistoryItemTooltipProps,\n prevState: CommandHistoryItemTooltipState\n ): void {\n const { data } = this.state;\n\n if (\n this.timer == null &&\n !data?.result &&\n data?.startTime &&\n !data?.endTime\n ) {\n this.startTimer();\n } else if (\n (data?.result && !prevState.data?.result) ||\n (data?.endTime && !prevState.data?.endTime)\n ) {\n // Command complete\n this.stopTimer();\n }\n }\n\n componentWillUnmount(): void {\n this.loadData.cancel();\n if (this.cleanup != null) {\n this.cleanup();\n }\n this.stopTimer();\n }\n\n timer?: NodeJS.Timer;\n\n cleanup?: StorageListenerRemover;\n\n loadData = debounce((): void => {\n const { commandHistoryStorage, item, language } = this.props;\n const { id } = item;\n this.cleanup = commandHistoryStorage.listenItem(\n language,\n id,\n this.handleUpdate,\n this.handleError\n );\n }, LOAD_DATA_DEBOUNCE);\n\n startTimer(): void {\n this.stopTimer();\n\n this.timer = setInterval(this.handleTimeout, 1000);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n updateTime(): void {\n this.setState({\n currentTime: Date.now(),\n });\n }\n\n handleError(error: string): void {\n this.setState({ error: `${error}` });\n }\n\n handleUpdate(item: CommandHistoryStorageItem): void {\n const { data } = item ?? {};\n this.setState({ data });\n\n const { onUpdate } = this.props;\n onUpdate?.(data);\n }\n\n handleTimeout(): void {\n this.updateTime();\n }\n\n getPreviewText = memoize(\n name => name.split('\\n', MAX_NUMBER_OF_LINES).join('\\n'),\n { max: 1 }\n );\n\n render(): ReactElement {\n const {\n item: { name },\n language,\n } = this.props;\n const { currentTime, data, error } = this.state;\n const { result, startTime, endTime } = data ?? {};\n\n const errorMessage = result?.error ?? error;\n\n const timeString = CommandHistoryItemTooltip.getTimeString(\n startTime,\n endTime || currentTime\n );\n\n // colorizing in monaco is mostly a function of the number of lines,\n // it gets real slow after a few thousand lines. Truncate the tooltip\n // to avoid UI locks. The full command is still inserted.\n const previewText = this.getPreviewText(name);\n\n return (\n <div className=\"command-history-item-tooltip\">\n <div className=\"scroll-container\">\n <Code language={language}>{previewText}</Code>\n {previewText.length < name.length && <p>Preview Truncated...</p>}\n </div>\n <div className=\"result-info\">\n <div className=\"d-flex justify-content-between\">\n {errorMessage && (\n <div className=\"text-danger mr-1\">\n <FontAwesomeIcon icon={vsWarning} /> Executed with errors\n </div>\n )}\n <div className=\"time-wrapper\">\n Elapsed time:{' '}\n {timeString ? (\n <span className=\"time-string\">{timeString}</span>\n ) : (\n <LoadingSpinner />\n )}\n </div>\n </div>\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistoryItemTooltip;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA+C,OAA/C;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,OAAP,MAAoB,UAApB;AACA,SAASC,cAAT,QAA+B,uBAA/B;AACA,SAASC,SAAT,QAA0B,kBAA1B;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,QAA0B,kBAA1B;OACOC,I;;AAoBP,IAAMC,kBAAkB,GAAG,GAA3B;AACA,IAAMC,mBAAmB,GAAG,IAA5B;AAEA,OAAO,MAAMC,yBAAN,SAAwCV,SAAxC,CAGL;EAKoB,OAAbW,aAAa,CAClBC,SADkB,EAElBC,OAFkB,EAGH;IACf,IAAI,CAACD,SAAD,IAAc,CAACC,OAAnB,EAA4B;MAC1B,OAAO,IAAP;IACD;;IAED,IAAMC,SAAS,GAAGC,IAAI,CAACC,KAAL,CAChB,CAAC,IAAIC,IAAJ,CAASJ,OAAT,EAAkBK,OAAlB,KAA8B,IAAID,IAAJ,CAASL,SAAT,EAAoBM,OAApB,EAA/B,IAAgE,IADhD,CAAlB;IAIA,IAAIJ,SAAS,GAAG,CAAhB,EAAmB,OAAO,KAAP;IAEnB,OAAOV,SAAS,CAACe,iBAAV,CAA4BL,SAA5B,CAAP;EACD;;EAEDM,WAAW,CAACC,KAAD,EAAwC;IACjD,MAAMA,KAAN;;IADiD;;IAAA;;IAAA,kCAkDxCpB,QAAQ,CAAC,MAAY;MAC9B,IAAM;QAAEqB,qBAAF;QAAyBC,IAAzB;QAA+BC;MAA/B,IAA4C,KAAKH,KAAvD;MACA,IAAM;QAAEI;MAAF,IAASF,IAAf;MACA,KAAKG,OAAL,GAAeJ,qBAAqB,CAACK,UAAtB,CACbH,QADa,EAEbC,EAFa,EAGb,KAAKG,YAHQ,EAIb,KAAKC,WAJQ,CAAf;IAMD,CATkB,EAShBrB,kBATgB,CAlDgC;;IAAA,wCAgGlCN,OAAO,CACtB4B,IAAI,IAAIA,IAAI,CAACC,KAAL,CAAW,IAAX,EAAiBtB,mBAAjB,EAAsCuB,IAAtC,CAA2C,IAA3C,CADc,EAEtB;MAAEC,GAAG,EAAE;IAAP,CAFsB,CAhG2B;;IAGjD,KAAKL,YAAL,GAAoB,KAAKA,YAAL,CAAkBM,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKL,WAAL,GAAmB,KAAKA,WAAL,CAAiBK,IAAjB,CAAsB,IAAtB,CAAnB;IACA,KAAKC,aAAL,GAAqB,KAAKA,aAAL,CAAmBD,IAAnB,CAAwB,IAAxB,CAArB;IAEA,KAAKE,KAAL,GAAa;MACXC,WAAW,EAAEpB,IAAI,CAACqB,GAAL;IADF,CAAb;EAGD;;EAEDC,iBAAiB,GAAS;IACxB,KAAKC,QAAL;EACD;;EAEDC,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGV;IAAA;;IACN,IAAM;MAAEC;IAAF,IAAW,KAAKR,KAAtB;;IAEA,IACE,KAAKS,KAAL,IAAc,IAAd,IACA,EAACD,IAAD,aAACA,IAAD,eAACA,IAAI,CAAEE,MAAP,CADA,IAEAF,IAFA,aAEAA,IAFA,eAEAA,IAAI,CAAEhC,SAFN,IAGA,EAACgC,IAAD,aAACA,IAAD,eAACA,IAAI,CAAE/B,OAAP,CAJF,EAKE;MACA,KAAKkC,UAAL;IACD,CAPD,MAOO,IACJH,IAAI,SAAJ,IAAAA,IAAI,WAAJ,IAAAA,IAAI,CAAEE,MAAN,IAAgB,qBAACH,SAAS,CAACC,IAAX,4CAAC,gBAAgBE,MAAjB,CAAjB,IACCF,IAAI,SAAJ,IAAAA,IAAI,WAAJ,IAAAA,IAAI,CAAE/B,OAAN,IAAiB,sBAAC8B,SAAS,CAACC,IAAX,6CAAC,iBAAgB/B,OAAjB,CAFb,EAGL;MACA;MACA,KAAKmC,SAAL;IACD;EACF;;EAEDC,oBAAoB,GAAS;IAC3B,KAAKT,QAAL,CAAcU,MAAd;;IACA,IAAI,KAAKxB,OAAL,IAAgB,IAApB,EAA0B;MACxB,KAAKA,OAAL;IACD;;IACD,KAAKsB,SAAL;EACD;;EAiBDD,UAAU,GAAS;IACjB,KAAKC,SAAL;IAEA,KAAKH,KAAL,GAAaM,WAAW,CAAC,KAAKhB,aAAN,EAAqB,IAArB,CAAxB;EACD;;EAEDa,SAAS,GAAS;IAChB,IAAI,KAAKH,KAAT,EAAgB;MACdO,aAAa,CAAC,KAAKP,KAAN,CAAb;MACA,KAAKA,KAAL,GAAaQ,SAAb;IACD;EACF;;EAEDC,UAAU,GAAS;IACjB,KAAKC,QAAL,CAAc;MACZlB,WAAW,EAAEpB,IAAI,CAACqB,GAAL;IADD,CAAd;EAGD;;EAEDT,WAAW,CAAC2B,KAAD,EAAsB;IAC/B,KAAKD,QAAL,CAAc;MAAEC,KAAK,YAAKA,KAAL;IAAP,CAAd;EACD;;EAED5B,YAAY,CAACL,IAAD,EAAwC;IAClD,IAAM;MAAEqB;IAAF,IAAWrB,IAAX,aAAWA,IAAX,cAAWA,IAAX,GAAmB,EAAzB;IACA,KAAKgC,QAAL,CAAc;MAAEX;IAAF,CAAd;IAEA,IAAM;MAAEa;IAAF,IAAe,KAAKpC,KAA1B;IACAoC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGb,IAAH,CAAR;EACD;;EAEDT,aAAa,GAAS;IACpB,KAAKmB,UAAL;EACD;;EAODI,MAAM,GAAiB;IAAA;;IACrB,IAAM;MACJnC,IAAI,EAAE;QAAEO;MAAF,CADF;MAEJN;IAFI,IAGF,KAAKH,KAHT;IAIA,IAAM;MAAEgB,WAAF;MAAeO,IAAf;MAAqBY;IAArB,IAA+B,KAAKpB,KAA1C;IACA,IAAM;MAAEU,MAAF;MAAUlC,SAAV;MAAqBC;IAArB,IAAiC+B,IAAjC,aAAiCA,IAAjC,cAAiCA,IAAjC,GAAyC,EAA/C;IAEA,IAAMe,YAAY,oBAAGb,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAEU,KAAX,yDAAoBA,KAAtC;IAEA,IAAMI,UAAU,GAAGlD,yBAAyB,CAACC,aAA1B,CACjBC,SADiB,EAEjBC,OAAO,IAAIwB,WAFM,CAAnB,CAVqB,CAerB;IACA;IACA;;IACA,IAAMwB,WAAW,GAAG,KAAKC,cAAL,CAAoBhC,IAApB,CAApB;IAEA,oBACE;MAAK,SAAS,EAAC;IAAf,gBACE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,IAAD;MAAM,QAAQ,EAAEN;IAAhB,GAA2BqC,WAA3B,CADF,EAEGA,WAAW,CAACE,MAAZ,GAAqBjC,IAAI,CAACiC,MAA1B,iBAAoC,sDAFvC,CADF,eAKE;MAAK,SAAS,EAAC;IAAf,gBACE;MAAK,SAAS,EAAC;IAAf,GACGJ,YAAY,iBACX;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,eAAD;MAAiB,IAAI,EAAErD;IAAvB,EADF,0BAFJ,eAME;MAAK,SAAS,EAAC;IAAf,oBACgB,GADhB,EAEGsD,UAAU,gBACT;MAAM,SAAS,EAAC;IAAhB,GAA+BA,UAA/B,CADS,gBAGT,oBAAC,cAAD,OALJ,CANF,CADF,EAgBGD,YAAY,iBAAI;MAAK,SAAS,EAAC;IAAf,GAAgCA,YAAhC,CAhBnB,CALF,CADF;EA0BD;;AAzKD;;gBAHWjD,yB,kBAIW;EACpB+C,QAAQ,EAAE,MAAYJ;AADF,C;;AA2KxB,eAAe3C,yBAAf"}
|
|
1
|
+
{"version":3,"sources":["../../src/command-history/CommandHistoryItemTooltip.tsx"],"names":["React","Component","debounce","memoize","LoadingSpinner","TimeUtils","FontAwesomeIcon","vsWarning","Code","LOAD_DATA_DEBOUNCE","MAX_NUMBER_OF_LINES","CommandHistoryItemTooltip","getTimeString","startTime","endTime","deltaTime","Math","round","Date","valueOf","formatElapsedTime","constructor","props","commandHistoryStorage","item","language","id","cleanup","listenItem","handleUpdate","handleError","name","split","join","max","bind","handleTimeout","state","currentTime","now","componentDidMount","loadData","componentDidUpdate","prevProps","prevState","data","timer","result","startTimer","stopTimer","componentWillUnmount","cancel","setInterval","clearInterval","undefined","updateTime","setState","error","onUpdate","render","errorMessage","timeString","previewText","getPreviewText","length"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport debounce from 'lodash.debounce';\nimport memoize from 'memoizee';\nimport { LoadingSpinner } from '@deephaven/components';\nimport { TimeUtils } from '@deephaven/utils';\nimport { StorageListenerRemover } from '@deephaven/storage';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsWarning } from '@deephaven/icons';\nimport Code from '../common/Code';\nimport './CommandHistoryItemTooltip.scss';\nimport CommandHistoryStorage, {\n CommandHistoryStorageData,\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemTooltipProps {\n item: CommandHistoryStorageItem;\n language: string;\n onUpdate?: (data: CommandHistoryStorageData | null) => void;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\ninterface CommandHistoryItemTooltipState {\n currentTime: number;\n data?: CommandHistoryStorageData;\n error?: string;\n}\n\nconst LOAD_DATA_DEBOUNCE = 250;\nconst MAX_NUMBER_OF_LINES = 2500;\n\nexport class CommandHistoryItemTooltip extends Component<\n CommandHistoryItemTooltipProps,\n CommandHistoryItemTooltipState\n> {\n static defaultProps = {\n onUpdate: (): void => undefined,\n };\n\n static getTimeString(\n startTime: string | undefined,\n endTime: string | number\n ): string | null {\n if (!startTime || !endTime) {\n return null;\n }\n\n const deltaTime = Math.round(\n (new Date(endTime).valueOf() - new Date(startTime).valueOf()) / 1000\n );\n\n if (deltaTime < 1) return '<1s';\n\n return TimeUtils.formatElapsedTime(deltaTime);\n }\n\n constructor(props: CommandHistoryItemTooltipProps) {\n super(props);\n\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n\n this.state = {\n currentTime: Date.now(),\n };\n }\n\n componentDidMount(): void {\n this.loadData();\n }\n\n componentDidUpdate(\n prevProps: CommandHistoryItemTooltipProps,\n prevState: CommandHistoryItemTooltipState\n ): void {\n const { data } = this.state;\n\n if (\n this.timer == null &&\n !data?.result &&\n data?.startTime &&\n !data?.endTime\n ) {\n this.startTimer();\n } else if (\n (data?.result && !prevState.data?.result) ||\n (data?.endTime && !prevState.data?.endTime)\n ) {\n // Command complete\n this.stopTimer();\n }\n }\n\n componentWillUnmount(): void {\n this.loadData.cancel();\n if (this.cleanup != null) {\n this.cleanup();\n }\n this.stopTimer();\n }\n\n timer?: NodeJS.Timer;\n\n cleanup?: StorageListenerRemover;\n\n loadData = debounce((): void => {\n const { commandHistoryStorage, item, language } = this.props;\n const { id } = item;\n this.cleanup = commandHistoryStorage.listenItem(\n language,\n id,\n this.handleUpdate,\n this.handleError\n );\n }, LOAD_DATA_DEBOUNCE);\n\n startTimer(): void {\n this.stopTimer();\n\n this.timer = setInterval(this.handleTimeout, 1000);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n updateTime(): void {\n this.setState({\n currentTime: Date.now(),\n });\n }\n\n handleError(error: string): void {\n this.setState({ error: `${error}` });\n }\n\n handleUpdate(item: CommandHistoryStorageItem): void {\n const { data } = item ?? {};\n this.setState({ data });\n\n const { onUpdate } = this.props;\n onUpdate?.(data);\n }\n\n handleTimeout(): void {\n this.updateTime();\n }\n\n getPreviewText = memoize(\n name => name.split('\\n', MAX_NUMBER_OF_LINES).join('\\n'),\n { max: 1 }\n );\n\n render(): ReactElement {\n const {\n item: { name },\n language,\n } = this.props;\n const { currentTime, data, error } = this.state;\n const { result, startTime, endTime } = data ?? {};\n\n const errorMessage = result?.error ?? error;\n\n const timeString = CommandHistoryItemTooltip.getTimeString(\n startTime,\n endTime || currentTime\n );\n\n // colorizing in monaco is mostly a function of the number of lines,\n // it gets real slow after a few thousand lines. Truncate the tooltip\n // to avoid UI locks. The full command is still inserted.\n const previewText = this.getPreviewText(name);\n\n return (\n <div className=\"command-history-item-tooltip\">\n <div className=\"scroll-container\">\n <Code language={language}>{previewText}</Code>\n {previewText.length < name.length && <p>Preview Truncated...</p>}\n </div>\n <div className=\"result-info\">\n <div className=\"d-flex justify-content-between\">\n {errorMessage && (\n <div className=\"text-danger mr-1\">\n <FontAwesomeIcon icon={vsWarning} /> Executed with errors\n </div>\n )}\n <div className=\"time-wrapper\">\n Elapsed time:{' '}\n {timeString ? (\n <span className=\"time-string\">{timeString}</span>\n ) : (\n <LoadingSpinner />\n )}\n </div>\n </div>\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistoryItemTooltip;\n"],"file":"CommandHistoryItemTooltip.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"CommandHistoryStorage.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"CommandHistoryTypes.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/command-history/CommandHistoryViewportUpdater.tsx"],"names":["useEffect","useMemo","throttle","Log","UPDATE_DELAY","ROW_BUFFER_PAGES","log","module","CommandHistoryViewportUpdater","table","columns","top","bottom","search","isReversed","onUpdate","throttledUpdateViewport","viewport","viewHeight","bufferedTop","Math","max","bufferedBottom","setViewport","updateTableAndReturnCleanup","cleanup","viewportData","items","offset","debug","setSearchText","setSearch","updateViewport","debug2","cancel"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,OAApB,QAAmC,OAAnC;AACA,OAAOC,QAAP,MAAqB,iBAArB;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;AAgBA,IAAMC,YAAY,GAAG,GAArB;AAEA,IAAMC,gBAAgB,GAAG,CAAzB;AAEA,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,+BAAX,CAAZ;;AAEA,SAASC,6BAAT,OAQ6C;AAAA,MARN;AACrCC,IAAAA,KADqC;AAErCC,IAAAA,OAFqC;AAGrCC,IAAAA,GAAG,GAAG,CAH+B;AAIrCC,IAAAA,MAAM,GAAG,CAJ4B;AAKrCC,IAAAA,MALqC;AAMrCC,IAAAA,UAAU,GAAG,KANwB;AAOrCC,IAAAA;AAPqC,GAQM;AAC3C,MAAMC,uBAAuB,GAAGf,OAAO,CACrC,MACEC,QAAQ,CAAEe,QAAD,IAAoC;AAC3C,QAAMC,UAAU,GAAGD,QAAQ,CAACL,MAAT,GAAkBK,QAAQ,CAACN,GAA9C;AACA,QAAMQ,WAAW,GAAGC,IAAI,CAACC,GAAL,CAClB,CADkB,EAElBJ,QAAQ,CAACN,GAAT,GAAeO,UAAU,GAAGb,gBAFV,CAApB;AAIA,QAAMiB,cAAc,GAAGL,QAAQ,CAACL,MAAT,GAAkBM,UAAU,GAAGb,gBAAtD;AAEAI,IAAAA,KAAK,CAACc,WAAN,CAAkB;AAChBZ,MAAAA,GAAG,EAAEQ,WADW;AAEhBP,MAAAA,MAAM,EAAEU,cAFQ;AAGhBZ,MAAAA,OAAO,EAAEO,QAAQ,CAACP;AAHF,KAAlB;AAKD,GAbO,EAaLN,YAbK,CAF2B,EAgBrC,CAACK,KAAD,CAhBqC,CAAvC;AAmBAT,EAAAA,SAAS,CACP,SAASwB,2BAAT,GAAuC;AACrC,QAAMC,OAAO,GAAGhB,KAAK,CAACM,QAAN,CACbW,YAAD,IAA2D;AAAA;;AACzDX,MAAAA,QAAQ,CAAC;AACPY,QAAAA,KAAK,yBAAED,YAAY,CAACC,KAAf,qEAAwB,EADtB;AAEPC,QAAAA,MAAM,0BAAEF,YAAY,CAACE,MAAf,uEAAyB;AAFxB,OAAD,CAAR;AAID,KANa,CAAhB;AASA,WAAO,MAAM;AACXtB,MAAAA,GAAG,CAACuB,KAAJ,CAAU,kBAAV;AACAJ,MAAAA,OAAO;AACR,KAHD;AAID,GAfM,EAgBP,CAAChB,KAAD,EAAQM,QAAR,CAhBO,CAAT;AAmBAf,EAAAA,SAAS,CACP,SAAS8B,aAAT,GAAyB;AACvBrB,IAAAA,KAAK,CAACsB,SAAN,CAAgBlB,MAAhB,aAAgBA,MAAhB,cAAgBA,MAAhB,GAA0B,EAA1B;AACD,GAHM,EAIP,CAACJ,KAAD,EAAQI,MAAR,CAJO,CAAT;AAMAb,EAAAA,SAAS,CACP,SAASgC,cAAT,GAA0B;AACxBhB,IAAAA,uBAAuB,CAAC;AACtBL,MAAAA,GADsB;AAEtBC,MAAAA,MAFsB;AAGtBF,MAAAA;AAHsB,KAAD,CAAvB;AAKD,GAPM,EAQP,CAACM,uBAAD,EAA0BL,GAA1B,EAA+BC,MAA/B,EAAuCF,OAAvC,EAAgDG,MAAhD,EAAwDC,UAAxD,CARO,CAAT;AAUAd,EAAAA,SAAS,CACP,MAAM,MAAM;AACVM,IAAAA,GAAG,CAAC2B,MAAJ,CAAW,gCAAX;AACAjB,IAAAA,uBAAuB,CAACkB,MAAxB;AACD,GAJM,EAKP,CAAClB,uBAAD,CALO,CAAT;AAQA,SAAO,IAAP;AACD;;AAED,eAAeR,6BAAf","sourcesContent":["import { useEffect, useMemo } from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n StorageTableViewport,\n ViewportData,\n ViewportUpdateCallback,\n} from '@deephaven/storage';\nimport Log from '@deephaven/log';\nimport {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\n\nexport type CommandHistoryViewportUpdaterProps = {\n table: CommandHistoryTable;\n columns?: string[];\n top?: number;\n bottom?: number;\n search?: string;\n isReversed?: boolean;\n onUpdate: ViewportUpdateCallback<CommandHistoryStorageItem>;\n};\n\nconst UPDATE_DELAY = 150;\n\nconst ROW_BUFFER_PAGES = 3;\n\nconst log = Log.module('CommandHistoryViewportUpdater');\n\nfunction CommandHistoryViewportUpdater({\n table,\n columns,\n top = 0,\n bottom = 0,\n search,\n isReversed = false,\n onUpdate,\n}: CommandHistoryViewportUpdaterProps): null {\n const throttledUpdateViewport = useMemo(\n () =>\n throttle((viewport: StorageTableViewport) => {\n const viewHeight = viewport.bottom - viewport.top;\n const bufferedTop = Math.max(\n 0,\n viewport.top - viewHeight * ROW_BUFFER_PAGES\n );\n const bufferedBottom = viewport.bottom + viewHeight * ROW_BUFFER_PAGES;\n\n table.setViewport({\n top: bufferedTop,\n bottom: bufferedBottom,\n columns: viewport.columns,\n });\n }, UPDATE_DELAY),\n [table]\n );\n\n useEffect(\n function updateTableAndReturnCleanup() {\n const cleanup = table.onUpdate(\n (viewportData: ViewportData<CommandHistoryStorageItem>) => {\n onUpdate({\n items: viewportData.items ?? [],\n offset: viewportData.offset ?? 0,\n });\n }\n );\n\n return () => {\n log.debug('onUpdate cleanup');\n cleanup();\n };\n },\n [table, onUpdate]\n );\n\n useEffect(\n function setSearchText() {\n table.setSearch(search ?? '');\n },\n [table, search]\n );\n useEffect(\n function updateViewport() {\n throttledUpdateViewport({\n top,\n bottom,\n columns,\n });\n },\n [throttledUpdateViewport, top, bottom, columns, search, isReversed]\n );\n useEffect(\n () => () => {\n log.debug2('Cancel throttledUpdateViewport');\n throttledUpdateViewport.cancel();\n },\n [throttledUpdateViewport]\n );\n\n return null;\n}\n\nexport default CommandHistoryViewportUpdater;\n"],"file":"CommandHistoryViewportUpdater.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/command-history/index.tsx"],"names":["default","CommandHistory","CommandHistoryActions","CommandHistoryItem","CommandHistoryItemTooltip"],"mappings":"SAASA,OAAO,IAAIC,c;;SAEXD,OAAO,IAAIE,qB;SACXF,OAAO,IAAIG,kB;SACXH,OAAO,IAAII,yB","sourcesContent":["export { default as CommandHistory } from './CommandHistory';\nexport * from './CommandHistory';\nexport { default as CommandHistoryActions } from './CommandHistoryActions';\nexport { default as CommandHistoryItem } from './CommandHistoryItem';\nexport { default as CommandHistoryItemTooltip } from './CommandHistoryItemTooltip';\nexport * from './CommandHistoryStorage';\n"],"file":"index.js"}
|
package/dist/common/Code.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/common/Code.tsx"],"names":["React","Component","monaco","Code","constructor","props","container","componentDidMount","colorize","children","editor","colorizeElement","theme","render","language","pointerEvents"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,OAAO,KAAKC,MAAZ,MAAwB,2CAAxB;;AAOA,MAAMC,IAAN,SAAmBF,SAAnB,CAA+D;AAC7DG,EAAAA,WAAW,CAACC,KAAD,EAAmB;AAC5B,UAAMA,KAAN;;AAD4B;;AAG5B,SAAKC,SAAL,GAAiB,IAAjB;AACD;;AAEDC,EAAAA,iBAAiB,GAAS;AACxB,SAAKC,QAAL;AACD;;AAIDA,EAAAA,QAAQ,GAAS;AACf,QAAM;AAAEC,MAAAA;AAAF,QAAe,KAAKJ,KAA1B;;AACA,QAAI,KAAKC,SAAL,IAAkBG,QAAtB,EAAgC;AAC9BP,MAAAA,MAAM,CAACQ,MAAP,CAAcC,eAAd,CAA8B,KAAKL,SAAnC,EAA8C;AAC5CM,QAAAA,KAAK,EAAE;AADqC,OAA9C;AAGD;AACF;;AAEDC,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEJ,MAAAA,QAAF;AAAYK,MAAAA;AAAZ,QAAyB,KAAKT,KAApC;AACA,wBACE,8CACE;AACE,mBAAWS,QADb;AAEE,MAAA,GAAG,EAAER,SAAS,IAAI;AAChB,aAAKA,SAAL,GAAiBA,SAAjB;AACD,OAJH,CAKE;AACA;AANF;AAOE,MAAA,KAAK,EAAE;AAAES,QAAAA,aAAa,EAAE;AAAjB;AAPT,OASGN,QATH,CADF,CADF;AAeD;;AAvC4D;;AA0C/D,eAAeN,IAAf","sourcesContent":["import React, { Component, ReactElement, ReactNode } from 'react';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';\n\ninterface CodeProps {\n children: ReactNode;\n language: string;\n}\n\nclass Code extends Component<CodeProps, Record<string, never>> {\n constructor(props: CodeProps) {\n super(props);\n\n this.container = null;\n }\n\n componentDidMount(): void {\n this.colorize();\n }\n\n container: HTMLDivElement | null;\n\n colorize(): void {\n const { children } = this.props;\n if (this.container && children) {\n monaco.editor.colorizeElement(this.container, {\n theme: 'dh-dark',\n });\n }\n }\n\n render(): ReactElement {\n const { children, language } = this.props;\n return (\n <div>\n <div\n data-lang={language}\n ref={container => {\n this.container = container;\n }}\n // Add pointerEvents: 'none' has huge benefits on performance with Hit Test testing on large colorized elements.\n // You can still select the text event with this set\n style={{ pointerEvents: 'none' }}\n >\n {children}\n </div>\n </div>\n );\n }\n}\n\nexport default Code;\n"],"file":"Code.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/common/ConsoleConstants.ts"],"names":["ConsoleConstants","LANGUAGE_MAP","Map"],"mappings":"AAAA,MAAMA,gBAAN,CAAuB;AACrB;AACF;AACA;AACyB,aAAZC,YAAY,GAAwB;AAC7C,WAAO,IAAIC,GAAJ,CAAQ,CACb,CAAC,QAAD,EAAW,QAAX,CADa,EAEb,CAAC,QAAD,EAAW,QAAX,CAFa,EAGb,CAAC,OAAD,EAAU,OAAV,CAHa,CAAR,CAAP;AAKD;;AAVoB;;AAavB,eAAeF,gBAAf","sourcesContent":["class ConsoleConstants {\n /**\n * Map of language keys to their display names\n */\n static get LANGUAGE_MAP(): Map<string, string> {\n return new Map([\n ['python', 'Python'],\n ['groovy', 'Groovy'],\n ['scala', 'Scala'],\n ]);\n }\n}\n\nexport default ConsoleConstants;\n"],"file":"ConsoleConstants.js"}
|