@deephaven/console 0.43.0 → 0.44.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/dist/Console.css +44 -0
- package/dist/Console.css.map +1 -0
- package/dist/Console.js +875 -0
- package/dist/Console.js.map +1 -0
- package/dist/ConsoleInput.css +42 -0
- package/dist/ConsoleInput.css.map +1 -0
- package/dist/ConsoleInput.js +442 -0
- package/dist/ConsoleInput.js.map +1 -0
- package/dist/ConsoleMenu.css +25 -0
- package/dist/ConsoleMenu.css.map +1 -0
- package/dist/ConsoleMenu.js +192 -0
- package/dist/ConsoleMenu.js.map +1 -0
- package/dist/ConsolePropTypes.js +10 -0
- package/dist/ConsolePropTypes.js.map +1 -0
- package/dist/ConsoleShortcuts.js +85 -0
- package/dist/ConsoleShortcuts.js.map +1 -0
- package/dist/ConsoleStatusBar.css +52 -0
- package/dist/ConsoleStatusBar.css.map +1 -0
- package/dist/ConsoleStatusBar.js +105 -0
- package/dist/ConsoleStatusBar.js.map +1 -0
- package/dist/HeapUsage.css +61 -0
- package/dist/HeapUsage.css.map +1 -0
- package/dist/HeapUsage.js +168 -0
- package/dist/HeapUsage.js.map +1 -0
- package/dist/StoragePropTypes.js +16 -0
- package/dist/StoragePropTypes.js.map +1 -0
- package/dist/command-history/CommandHistory.css +41 -0
- package/dist/command-history/CommandHistory.css.map +1 -0
- package/dist/command-history/CommandHistory.js +381 -0
- package/dist/command-history/CommandHistory.js.map +1 -0
- package/dist/command-history/CommandHistoryActions.css +10 -0
- package/dist/command-history/CommandHistoryActions.css.map +1 -0
- package/dist/command-history/CommandHistoryActions.js +47 -0
- package/dist/command-history/CommandHistoryActions.js.map +1 -0
- package/dist/command-history/CommandHistoryItem.css +61 -0
- package/dist/command-history/CommandHistoryItem.css.map +1 -0
- package/dist/command-history/CommandHistoryItem.js +50 -0
- package/dist/command-history/CommandHistoryItem.js.map +1 -0
- package/dist/command-history/CommandHistoryItemTooltip.css +37 -0
- package/dist/command-history/CommandHistoryItemTooltip.css.map +1 -0
- package/dist/command-history/CommandHistoryItemTooltip.js +159 -0
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -0
- package/dist/command-history/CommandHistoryStorage.js +2 -0
- package/dist/command-history/CommandHistoryStorage.js.map +1 -0
- package/dist/command-history/CommandHistoryTypes.js +2 -0
- package/dist/command-history/CommandHistoryTypes.js.map +1 -0
- package/dist/command-history/CommandHistoryViewportUpdater.js +57 -0
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -0
- package/dist/command-history/index.js +7 -0
- package/dist/command-history/index.js.map +1 -0
- package/dist/common/Code.js +45 -0
- package/dist/common/Code.js.map +1 -0
- package/dist/common/ConsoleConstants.js +10 -0
- package/dist/common/ConsoleConstants.js.map +1 -0
- package/dist/common/ConsoleUtils.js +62 -0
- package/dist/common/ConsoleUtils.js.map +1 -0
- package/dist/common/ObjectIcon.js +33 -0
- package/dist/common/ObjectIcon.js.map +1 -0
- package/dist/common/index.js +5 -0
- package/dist/common/index.js.map +1 -0
- package/dist/console-history/ConsoleHistory.css +42 -0
- package/dist/console-history/ConsoleHistory.css.map +1 -0
- package/dist/console-history/ConsoleHistory.js +42 -0
- package/dist/console-history/ConsoleHistory.js.map +1 -0
- package/dist/console-history/ConsoleHistoryItem.css +87 -0
- package/dist/console-history/ConsoleHistoryItem.css.map +1 -0
- package/dist/console-history/ConsoleHistoryItem.js +139 -0
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -0
- package/dist/console-history/ConsoleHistoryItemResult.js +22 -0
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -0
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +142 -0
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.css +27 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.css.map +1 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.js +66 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -0
- package/dist/console-history/ConsoleHistoryTypes.js +2 -0
- package/dist/console-history/ConsoleHistoryTypes.js.map +1 -0
- package/dist/console-history/index.js +6 -0
- package/dist/console-history/index.js.map +1 -0
- package/dist/csv/CsvFormats.js +134 -0
- package/dist/csv/CsvFormats.js.map +1 -0
- package/dist/csv/CsvInputBar.css +36 -0
- package/dist/csv/CsvInputBar.css.map +1 -0
- package/dist/csv/CsvInputBar.js +342 -0
- package/dist/csv/CsvInputBar.js.map +1 -0
- package/dist/csv/CsvOverlay.css +57 -0
- package/dist/csv/CsvOverlay.css.map +1 -0
- package/dist/csv/CsvOverlay.js +244 -0
- package/dist/csv/CsvOverlay.js.map +1 -0
- package/dist/csv/CsvParser.js +268 -0
- package/dist/csv/CsvParser.js.map +1 -0
- package/dist/csv/CsvTypeParser.js +235 -0
- package/dist/csv/CsvTypeParser.js.map +1 -0
- package/dist/csv/NewTableColumnTypes.js +16 -0
- package/dist/csv/NewTableColumnTypes.js.map +1 -0
- package/dist/declaration.d.js +2 -0
- package/dist/declaration.d.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/log/LogLevel.js +11 -0
- package/dist/log/LogLevel.js.map +1 -0
- package/dist/log/LogLevelMenuItem.css +38 -0
- package/dist/log/LogLevelMenuItem.css.map +1 -0
- package/dist/log/LogLevelMenuItem.js +32 -0
- package/dist/log/LogLevelMenuItem.js.map +1 -0
- package/dist/log/LogView.css +65 -0
- package/dist/log/LogView.css.map +1 -0
- package/dist/log/LogView.js +487 -0
- package/dist/log/LogView.js.map +1 -0
- package/dist/monaco/MonacoProviders.js +314 -0
- package/dist/monaco/MonacoProviders.js.map +1 -0
- package/dist/monaco/MonacoTheme.module.css +54 -0
- package/dist/monaco/MonacoTheme.module.css.map +1 -0
- package/dist/monaco/MonacoUtils.js +423 -0
- package/dist/monaco/MonacoUtils.js.map +1 -0
- package/dist/monaco/index.js +4 -0
- package/dist/monaco/index.js.map +1 -0
- package/dist/monaco/lang/Language.js +2 -0
- package/dist/monaco/lang/Language.js.map +1 -0
- package/dist/monaco/lang/db.js +152 -0
- package/dist/monaco/lang/db.js.map +1 -0
- package/dist/monaco/lang/groovy.js +229 -0
- package/dist/monaco/lang/groovy.js.map +1 -0
- package/dist/monaco/lang/log.js +64 -0
- package/dist/monaco/lang/log.js.map +1 -0
- package/dist/monaco/lang/python.js +234 -0
- package/dist/monaco/lang/python.js.map +1 -0
- package/dist/monaco/lang/scala.js +264 -0
- package/dist/monaco/lang/scala.js.map +1 -0
- package/dist/notebook/Editor.css +6 -0
- package/dist/notebook/Editor.css.map +1 -0
- package/dist/notebook/Editor.js +130 -0
- package/dist/notebook/Editor.js.map +1 -0
- package/dist/notebook/ScriptEditor.css +8 -0
- package/dist/notebook/ScriptEditor.css.map +1 -0
- package/dist/notebook/ScriptEditor.d.ts.map +1 -1
- package/dist/notebook/ScriptEditor.js +311 -0
- package/dist/notebook/ScriptEditor.js.map +1 -0
- package/dist/notebook/ScriptEditorUtils.d.ts +7 -0
- package/dist/notebook/ScriptEditorUtils.d.ts.map +1 -1
- package/dist/notebook/ScriptEditorUtils.js +52 -0
- package/dist/notebook/ScriptEditorUtils.js.map +1 -0
- package/package.json +12 -12
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
4
|
+
/**
|
|
5
|
+
* Script editor for large blocks of code
|
|
6
|
+
*/
|
|
7
|
+
import React, { Component } from 'react';
|
|
8
|
+
import { LoadingOverlay, ShortcutRegistry } from '@deephaven/components';
|
|
9
|
+
import Log from '@deephaven/log';
|
|
10
|
+
import { assertNotNull } from '@deephaven/utils';
|
|
11
|
+
import { editor } from 'monaco-editor';
|
|
12
|
+
import Editor from "./Editor.js";
|
|
13
|
+
import { MonacoProviders, MonacoUtils } from "../monaco/index.js";
|
|
14
|
+
import "./ScriptEditor.css";
|
|
15
|
+
import SHORTCUTS from "../ConsoleShortcuts.js";
|
|
16
|
+
import ScriptEditorUtils from "./ScriptEditorUtils.js";
|
|
17
|
+
var log = Log.module('ScriptEditor');
|
|
18
|
+
class ScriptEditor extends Component {
|
|
19
|
+
constructor(props) {
|
|
20
|
+
super(props);
|
|
21
|
+
_defineProperty(this, "contextActionCleanups", void 0);
|
|
22
|
+
_defineProperty(this, "completionCleanup", void 0);
|
|
23
|
+
_defineProperty(this, "editor", void 0);
|
|
24
|
+
_defineProperty(this, "editorComponent", void 0);
|
|
25
|
+
this.handleEditorInitialized = this.handleEditorInitialized.bind(this);
|
|
26
|
+
this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);
|
|
27
|
+
this.handleRun = this.handleRun.bind(this);
|
|
28
|
+
this.handleRunSelected = this.handleRunSelected.bind(this);
|
|
29
|
+
this.updateShortcuts = this.updateShortcuts.bind(this);
|
|
30
|
+
this.contextActionCleanups = [];
|
|
31
|
+
this.editorComponent = /*#__PURE__*/React.createRef();
|
|
32
|
+
this.state = {
|
|
33
|
+
model: null
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
componentDidMount() {
|
|
37
|
+
ShortcutRegistry.addEventListener('onUpdate', this.updateShortcuts);
|
|
38
|
+
}
|
|
39
|
+
componentDidUpdate(prevProps) {
|
|
40
|
+
var _prevProps$settings, _prevProps$settings2;
|
|
41
|
+
var {
|
|
42
|
+
sessionLanguage,
|
|
43
|
+
settings
|
|
44
|
+
} = this.props;
|
|
45
|
+
var language = settings === null || settings === void 0 ? void 0 : settings.language;
|
|
46
|
+
var languageChanged = language !== ((_prevProps$settings = prevProps.settings) === null || _prevProps$settings === void 0 ? void 0 : _prevProps$settings.language);
|
|
47
|
+
if (languageChanged) {
|
|
48
|
+
log.debug('Set language', language);
|
|
49
|
+
this.setLanguage(language);
|
|
50
|
+
}
|
|
51
|
+
var sessionDisconnected = sessionLanguage == null && prevProps.sessionLanguage != null;
|
|
52
|
+
var languageMatch = language === sessionLanguage;
|
|
53
|
+
var prevLanguageMatch = ((_prevProps$settings2 = prevProps.settings) === null || _prevProps$settings2 === void 0 ? void 0 : _prevProps$settings2.language) === prevProps.sessionLanguage;
|
|
54
|
+
if (sessionDisconnected || sessionLanguage !== undefined && prevLanguageMatch && !languageMatch) {
|
|
55
|
+
// Session disconnected or language changed from matching the session language to non-matching
|
|
56
|
+
log.debug('De-init completion and context actions');
|
|
57
|
+
this.deInitContextActions();
|
|
58
|
+
this.deInitCodeCompletion();
|
|
59
|
+
}
|
|
60
|
+
var sessionConnected = sessionLanguage != null && prevProps.sessionLanguage == null;
|
|
61
|
+
if (sessionConnected && languageMatch || sessionLanguage !== undefined && !prevLanguageMatch && languageMatch) {
|
|
62
|
+
// Session connected with a matching language or notebook language changed to matching
|
|
63
|
+
log.debug('Init completion and context actions');
|
|
64
|
+
this.initContextActions();
|
|
65
|
+
this.initCodeCompletion();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
componentWillUnmount() {
|
|
69
|
+
ShortcutRegistry.removeEventListener('onUpdate', this.updateShortcuts);
|
|
70
|
+
}
|
|
71
|
+
getValue() {
|
|
72
|
+
if (this.editor) {
|
|
73
|
+
return this.editor.getValue();
|
|
74
|
+
}
|
|
75
|
+
log.error('Editor not initialized');
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
getSelectedCommand() {
|
|
79
|
+
var _this$editor, _this$editor2;
|
|
80
|
+
var range = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getSelection();
|
|
81
|
+
assertNotNull(range);
|
|
82
|
+
var model = (_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.getModel();
|
|
83
|
+
assertNotNull(model);
|
|
84
|
+
var {
|
|
85
|
+
startLineNumber,
|
|
86
|
+
endColumn
|
|
87
|
+
} = range;
|
|
88
|
+
var {
|
|
89
|
+
endLineNumber
|
|
90
|
+
} = range;
|
|
91
|
+
if (endColumn === 1 && endLineNumber > startLineNumber) {
|
|
92
|
+
endLineNumber -= 1;
|
|
93
|
+
}
|
|
94
|
+
var startLineMinColumn = model.getLineMinColumn(startLineNumber);
|
|
95
|
+
var endLineMaxColumn = model.getLineMaxColumn(endLineNumber);
|
|
96
|
+
var wholeLineRange = range.setStartPosition(startLineNumber, startLineMinColumn).setEndPosition(endLineNumber, endLineMaxColumn);
|
|
97
|
+
return ScriptEditorUtils.outdentCode(model.getValueInRange(wholeLineRange));
|
|
98
|
+
}
|
|
99
|
+
handleEditorInitialized(innerEditor) {
|
|
100
|
+
var {
|
|
101
|
+
focusOnMount,
|
|
102
|
+
onChange,
|
|
103
|
+
onEditorInitialized,
|
|
104
|
+
settings,
|
|
105
|
+
session,
|
|
106
|
+
sessionLanguage
|
|
107
|
+
} = this.props;
|
|
108
|
+
log.debug('handleEditorInitialized', sessionLanguage, session, settings);
|
|
109
|
+
this.editor = innerEditor;
|
|
110
|
+
this.setState({
|
|
111
|
+
model: this.editor.getModel()
|
|
112
|
+
});
|
|
113
|
+
MonacoUtils.setEOL(innerEditor);
|
|
114
|
+
MonacoUtils.registerPasteHandler(innerEditor);
|
|
115
|
+
if (session != null && settings && sessionLanguage === settings.language) {
|
|
116
|
+
this.initContextActions();
|
|
117
|
+
this.initCodeCompletion();
|
|
118
|
+
}
|
|
119
|
+
innerEditor.onDidChangeModelContent(onChange);
|
|
120
|
+
if (focusOnMount != null && focusOnMount) {
|
|
121
|
+
innerEditor.focus();
|
|
122
|
+
}
|
|
123
|
+
onEditorInitialized(this.editor);
|
|
124
|
+
}
|
|
125
|
+
handleEditorWillDestroy(innerEditor) {
|
|
126
|
+
log.debug('handleEditorWillDestroy');
|
|
127
|
+
var {
|
|
128
|
+
onEditorWillDestroy
|
|
129
|
+
} = this.props;
|
|
130
|
+
onEditorWillDestroy(innerEditor);
|
|
131
|
+
this.deInitContextActions();
|
|
132
|
+
this.deInitCodeCompletion();
|
|
133
|
+
this.setState({
|
|
134
|
+
model: null
|
|
135
|
+
});
|
|
136
|
+
this.editor = undefined;
|
|
137
|
+
}
|
|
138
|
+
handleRun() {
|
|
139
|
+
var {
|
|
140
|
+
onRunCommand
|
|
141
|
+
} = this.props;
|
|
142
|
+
var command = this.getValue();
|
|
143
|
+
if (command != null) {
|
|
144
|
+
onRunCommand(command);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
handleRunSelected() {
|
|
148
|
+
var {
|
|
149
|
+
onRunCommand
|
|
150
|
+
} = this.props;
|
|
151
|
+
var command = this.getSelectedCommand();
|
|
152
|
+
onRunCommand(command);
|
|
153
|
+
}
|
|
154
|
+
initContextActions() {
|
|
155
|
+
if (this.contextActionCleanups.length > 0) {
|
|
156
|
+
log.error('Context actions already initialized.');
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!this.editor) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
var cleanups = [];
|
|
163
|
+
cleanups.push(this.editor.addAction({
|
|
164
|
+
id: 'run-code',
|
|
165
|
+
label: 'Run',
|
|
166
|
+
keybindings: [MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN)],
|
|
167
|
+
contextMenuGroupId: 'navigation',
|
|
168
|
+
contextMenuOrder: 1.5,
|
|
169
|
+
run: () => {
|
|
170
|
+
this.handleRun();
|
|
171
|
+
}
|
|
172
|
+
}));
|
|
173
|
+
cleanups.push(this.editor.addAction({
|
|
174
|
+
id: 'run-selected-code',
|
|
175
|
+
label: 'Run Selected',
|
|
176
|
+
keybindings: [MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN_SELECTED)],
|
|
177
|
+
contextMenuGroupId: 'navigation',
|
|
178
|
+
contextMenuOrder: 1.5,
|
|
179
|
+
run: () => {
|
|
180
|
+
this.handleRunSelected();
|
|
181
|
+
}
|
|
182
|
+
}));
|
|
183
|
+
this.contextActionCleanups = cleanups;
|
|
184
|
+
}
|
|
185
|
+
deInitContextActions() {
|
|
186
|
+
if (this.contextActionCleanups.length > 0) {
|
|
187
|
+
this.contextActionCleanups.forEach(cleanup => cleanup.dispose());
|
|
188
|
+
this.contextActionCleanups = [];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
updateShortcuts() {
|
|
192
|
+
this.deInitContextActions();
|
|
193
|
+
this.initContextActions();
|
|
194
|
+
}
|
|
195
|
+
initCodeCompletion() {
|
|
196
|
+
if (this.completionCleanup != null) {
|
|
197
|
+
log.error('Code completion already initialized.');
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
var {
|
|
201
|
+
session
|
|
202
|
+
} = this.props;
|
|
203
|
+
log.debug('initCodeCompletion', this.editor, session);
|
|
204
|
+
if (this.editor && session != null) {
|
|
205
|
+
this.completionCleanup = MonacoUtils.openDocument(this.editor, session);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
deInitCodeCompletion() {
|
|
209
|
+
var {
|
|
210
|
+
session
|
|
211
|
+
} = this.props;
|
|
212
|
+
log.debug('deInitCodeCompletion', this.editor, session);
|
|
213
|
+
if (this.completionCleanup) {
|
|
214
|
+
this.completionCleanup.dispose();
|
|
215
|
+
this.completionCleanup = undefined;
|
|
216
|
+
if (this.editor && session != null) {
|
|
217
|
+
MonacoUtils.closeDocument(this.editor, session);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
append(text) {
|
|
222
|
+
var focus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
223
|
+
assertNotNull(this.editor);
|
|
224
|
+
var model = this.editor.getModel();
|
|
225
|
+
assertNotNull(model);
|
|
226
|
+
var currentText = model.getValue();
|
|
227
|
+
if (currentText) {
|
|
228
|
+
model.setValue("".concat(currentText, "\n").concat(text));
|
|
229
|
+
} else {
|
|
230
|
+
model.setValue("".concat(text));
|
|
231
|
+
}
|
|
232
|
+
var lastLine = model.getLineCount();
|
|
233
|
+
var column = model.getLineLength(lastLine) + 1;
|
|
234
|
+
this.editor.setPosition({
|
|
235
|
+
lineNumber: lastLine,
|
|
236
|
+
column
|
|
237
|
+
});
|
|
238
|
+
if (focus) {
|
|
239
|
+
this.editor.focus();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
updateDimensions() {
|
|
243
|
+
log.debug('updateDimensions');
|
|
244
|
+
if (this.editor) {
|
|
245
|
+
this.editor.layout();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
focus() {
|
|
249
|
+
log.debug('focus');
|
|
250
|
+
if (this.editor) {
|
|
251
|
+
this.editor.focus();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
toggleFind() {
|
|
255
|
+
if (this.editorComponent.current) {
|
|
256
|
+
this.editorComponent.current.toggleFind();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
setLanguage(language) {
|
|
260
|
+
if (this.editorComponent.current && language !== undefined) {
|
|
261
|
+
this.editorComponent.current.setLanguage(language);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
render() {
|
|
265
|
+
var _settings$language;
|
|
266
|
+
var {
|
|
267
|
+
error,
|
|
268
|
+
isLoaded,
|
|
269
|
+
isLoading,
|
|
270
|
+
session,
|
|
271
|
+
sessionLanguage,
|
|
272
|
+
settings
|
|
273
|
+
} = this.props;
|
|
274
|
+
var {
|
|
275
|
+
model
|
|
276
|
+
} = this.state;
|
|
277
|
+
var errorMessage = error ? "Unable to open document. ".concat(error) : null;
|
|
278
|
+
var editorLanguage = settings ? (_settings$language = settings.language) !== null && _settings$language !== void 0 ? _settings$language : null : null;
|
|
279
|
+
var completionProviderEnabled = model && session && editorLanguage === sessionLanguage;
|
|
280
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, (error || isLoading) && /*#__PURE__*/React.createElement("div", {
|
|
281
|
+
className: "h-100 w-100 position-relative"
|
|
282
|
+
}, /*#__PURE__*/React.createElement(LoadingOverlay, {
|
|
283
|
+
errorMessage: errorMessage,
|
|
284
|
+
isLoading: isLoading,
|
|
285
|
+
isLoaded: isLoaded
|
|
286
|
+
})), isLoaded && /*#__PURE__*/React.createElement("div", {
|
|
287
|
+
className: "h-100 w-100 script-editor"
|
|
288
|
+
}, settings && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Editor, {
|
|
289
|
+
ref: this.editorComponent,
|
|
290
|
+
settings: settings,
|
|
291
|
+
onEditorInitialized: this.handleEditorInitialized,
|
|
292
|
+
onEditorWillDestroy: this.handleEditorWillDestroy
|
|
293
|
+
}), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/React.createElement(MonacoProviders, {
|
|
294
|
+
model: model,
|
|
295
|
+
language: editorLanguage,
|
|
296
|
+
session: session
|
|
297
|
+
}))));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
_defineProperty(ScriptEditor, "defaultProps", {
|
|
301
|
+
error: null,
|
|
302
|
+
isLoading: false,
|
|
303
|
+
isLoaded: false,
|
|
304
|
+
focusOnMount: true,
|
|
305
|
+
onChange: () => undefined,
|
|
306
|
+
onEditorInitialized: () => undefined,
|
|
307
|
+
onEditorWillDestroy: () => undefined,
|
|
308
|
+
session: null
|
|
309
|
+
});
|
|
310
|
+
export default ScriptEditor;
|
|
311
|
+
//# sourceMappingURL=ScriptEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptEditor.js","names":["React","Component","LoadingOverlay","ShortcutRegistry","Log","assertNotNull","editor","Editor","MonacoProviders","MonacoUtils","SHORTCUTS","ScriptEditorUtils","log","module","ScriptEditor","constructor","props","handleEditorInitialized","bind","handleEditorWillDestroy","handleRun","handleRunSelected","updateShortcuts","contextActionCleanups","editorComponent","createRef","state","model","componentDidMount","addEventListener","componentDidUpdate","prevProps","sessionLanguage","settings","language","languageChanged","debug","setLanguage","sessionDisconnected","languageMatch","prevLanguageMatch","undefined","deInitContextActions","deInitCodeCompletion","sessionConnected","initContextActions","initCodeCompletion","componentWillUnmount","removeEventListener","getValue","error","getSelectedCommand","range","getSelection","getModel","startLineNumber","endColumn","endLineNumber","startLineMinColumn","getLineMinColumn","endLineMaxColumn","getLineMaxColumn","wholeLineRange","setStartPosition","setEndPosition","outdentCode","getValueInRange","innerEditor","focusOnMount","onChange","onEditorInitialized","session","setState","setEOL","registerPasteHandler","onDidChangeModelContent","focus","onEditorWillDestroy","onRunCommand","command","length","cleanups","push","addAction","id","label","keybindings","getMonacoKeyCodeFromShortcut","NOTEBOOK","RUN","contextMenuGroupId","contextMenuOrder","run","RUN_SELECTED","forEach","cleanup","dispose","completionCleanup","openDocument","closeDocument","append","text","currentText","setValue","lastLine","getLineCount","column","getLineLength","setPosition","lineNumber","updateDimensions","layout","toggleFind","current","render","isLoaded","isLoading","errorMessage","editorLanguage","completionProviderEnabled"],"sources":["../../src/notebook/ScriptEditor.tsx"],"sourcesContent":["/**\n * Script editor for large blocks of code\n */\nimport React, { Component, ReactElement, RefObject } from 'react';\nimport { LoadingOverlay, ShortcutRegistry } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { IdeSession } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { editor, IDisposable } from 'monaco-editor';\nimport Editor from './Editor';\nimport { MonacoProviders, MonacoUtils } from '../monaco';\nimport './ScriptEditor.scss';\nimport SHORTCUTS from '../ConsoleShortcuts';\nimport ScriptEditorUtils from './ScriptEditorUtils';\n\nconst log = Log.module('ScriptEditor');\n\ninterface ScriptEditorProps {\n error?: { message?: string };\n isLoading: boolean;\n isLoaded: boolean;\n focusOnMount?: boolean;\n onChange: (e: editor.IModelContentChangedEvent) => void;\n onRunCommand: (command: string) => void;\n onEditorInitialized: (editor: editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: editor.IStandaloneCodeEditor) => void;\n session: IdeSession | null;\n sessionLanguage?: string;\n settings?: editor.IStandaloneEditorConstructionOptions;\n}\n\ninterface ScriptEditorState {\n model: editor.ITextModel | null;\n}\n\nclass ScriptEditor extends Component<ScriptEditorProps, ScriptEditorState> {\n static defaultProps = {\n error: null,\n isLoading: false,\n isLoaded: false,\n focusOnMount: true,\n onChange: (): void => undefined,\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n session: null,\n };\n\n constructor(props: ScriptEditorProps) {\n super(props);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleRun = this.handleRun.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.updateShortcuts = this.updateShortcuts.bind(this);\n\n this.contextActionCleanups = [];\n this.editorComponent = React.createRef();\n\n this.state = {\n model: null,\n };\n }\n\n componentDidMount(): void {\n ShortcutRegistry.addEventListener('onUpdate', this.updateShortcuts);\n }\n\n componentDidUpdate(prevProps: ScriptEditorProps): void {\n const { sessionLanguage, settings } = this.props;\n\n const language = settings?.language;\n\n const languageChanged = language !== prevProps.settings?.language;\n if (languageChanged) {\n log.debug('Set language', language);\n this.setLanguage(language);\n }\n\n const sessionDisconnected =\n sessionLanguage == null && prevProps.sessionLanguage != null;\n const languageMatch = language === sessionLanguage;\n const prevLanguageMatch =\n prevProps.settings?.language === prevProps.sessionLanguage;\n if (\n sessionDisconnected ||\n (sessionLanguage !== undefined && prevLanguageMatch && !languageMatch)\n ) {\n // Session disconnected or language changed from matching the session language to non-matching\n log.debug('De-init completion and context actions');\n this.deInitContextActions();\n this.deInitCodeCompletion();\n }\n\n const sessionConnected =\n sessionLanguage != null && prevProps.sessionLanguage == null;\n if (\n (sessionConnected && languageMatch) ||\n (sessionLanguage !== undefined && !prevLanguageMatch && languageMatch)\n ) {\n // Session connected with a matching language or notebook language changed to matching\n log.debug('Init completion and context actions');\n this.initContextActions();\n this.initCodeCompletion();\n }\n }\n\n componentWillUnmount(): void {\n ShortcutRegistry.removeEventListener('onUpdate', this.updateShortcuts);\n }\n\n contextActionCleanups: IDisposable[];\n\n completionCleanup?: IDisposable;\n\n editor?: editor.IStandaloneCodeEditor;\n\n editorComponent: RefObject<Editor>;\n\n getValue(): string | null {\n if (this.editor) {\n return this.editor.getValue();\n }\n log.error('Editor not initialized');\n return null;\n }\n\n getSelectedCommand(): string {\n const range = this.editor?.getSelection();\n assertNotNull(range);\n const model = this.editor?.getModel();\n assertNotNull(model);\n const { startLineNumber, endColumn } = range;\n let { endLineNumber } = range;\n if (endColumn === 1 && endLineNumber > startLineNumber) {\n endLineNumber -= 1;\n }\n const startLineMinColumn = model.getLineMinColumn(startLineNumber);\n const endLineMaxColumn = model.getLineMaxColumn(endLineNumber);\n const wholeLineRange = range\n .setStartPosition(startLineNumber, startLineMinColumn)\n .setEndPosition(endLineNumber, endLineMaxColumn);\n\n return ScriptEditorUtils.outdentCode(model.getValueInRange(wholeLineRange));\n }\n\n handleEditorInitialized(innerEditor: editor.IStandaloneCodeEditor): void {\n const {\n focusOnMount,\n onChange,\n onEditorInitialized,\n settings,\n session,\n sessionLanguage,\n } = this.props;\n\n log.debug('handleEditorInitialized', sessionLanguage, session, settings);\n\n this.editor = innerEditor;\n this.setState({ model: this.editor.getModel() });\n\n MonacoUtils.setEOL(innerEditor);\n MonacoUtils.registerPasteHandler(innerEditor);\n\n if (session != null && settings && sessionLanguage === settings.language) {\n this.initContextActions();\n this.initCodeCompletion();\n }\n\n innerEditor.onDidChangeModelContent(onChange);\n if (focusOnMount != null && focusOnMount) {\n innerEditor.focus();\n }\n\n onEditorInitialized(this.editor);\n }\n\n handleEditorWillDestroy(innerEditor: editor.IStandaloneCodeEditor): void {\n log.debug('handleEditorWillDestroy');\n const { onEditorWillDestroy } = this.props;\n onEditorWillDestroy(innerEditor);\n this.deInitContextActions();\n this.deInitCodeCompletion();\n this.setState({ model: null });\n this.editor = undefined;\n }\n\n handleRun(): void {\n const { onRunCommand } = this.props;\n const command = this.getValue();\n if (command != null) {\n onRunCommand(command);\n }\n }\n\n handleRunSelected(): void {\n const { onRunCommand } = this.props;\n const command = this.getSelectedCommand();\n onRunCommand(command);\n }\n\n initContextActions(): void {\n if (this.contextActionCleanups.length > 0) {\n log.error('Context actions already initialized.');\n return;\n }\n\n if (!this.editor) {\n return;\n }\n\n const cleanups = [];\n cleanups.push(\n this.editor.addAction({\n id: 'run-code',\n label: 'Run',\n keybindings: [\n MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN),\n ],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n\n run: () => {\n this.handleRun();\n },\n })\n );\n\n cleanups.push(\n this.editor.addAction({\n id: 'run-selected-code',\n label: 'Run Selected',\n keybindings: [\n MonacoUtils.getMonacoKeyCodeFromShortcut(\n SHORTCUTS.NOTEBOOK.RUN_SELECTED\n ),\n ],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n\n run: () => {\n this.handleRunSelected();\n },\n })\n );\n\n this.contextActionCleanups = cleanups;\n }\n\n deInitContextActions(): void {\n if (this.contextActionCleanups.length > 0) {\n this.contextActionCleanups.forEach(cleanup => cleanup.dispose());\n this.contextActionCleanups = [];\n }\n }\n\n updateShortcuts(): void {\n this.deInitContextActions();\n this.initContextActions();\n }\n\n initCodeCompletion(): void {\n if (this.completionCleanup != null) {\n log.error('Code completion already initialized.');\n return;\n }\n const { session } = this.props;\n log.debug('initCodeCompletion', this.editor, session);\n if (this.editor && session != null) {\n this.completionCleanup = MonacoUtils.openDocument(this.editor, session);\n }\n }\n\n deInitCodeCompletion(): void {\n const { session } = this.props;\n log.debug('deInitCodeCompletion', this.editor, session);\n if (this.completionCleanup) {\n this.completionCleanup.dispose();\n this.completionCleanup = undefined;\n if (this.editor && session != null) {\n MonacoUtils.closeDocument(this.editor, session);\n }\n }\n }\n\n append(text: string, focus = true): void {\n assertNotNull(this.editor);\n const model = this.editor.getModel();\n assertNotNull(model);\n const currentText = model.getValue();\n if (currentText) {\n model.setValue(`${currentText}\\n${text}`);\n } else {\n model.setValue(`${text}`);\n }\n\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n\n this.editor.setPosition({ lineNumber: lastLine, column });\n\n if (focus) {\n this.editor.focus();\n }\n }\n\n updateDimensions(): void {\n log.debug('updateDimensions');\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n focus(): void {\n log.debug('focus');\n if (this.editor) {\n this.editor.focus();\n }\n }\n\n toggleFind(): void {\n if (this.editorComponent.current) {\n this.editorComponent.current.toggleFind();\n }\n }\n\n setLanguage(language?: string): void {\n if (this.editorComponent.current && language !== undefined) {\n this.editorComponent.current.setLanguage(language);\n }\n }\n\n render(): ReactElement {\n const {\n error,\n isLoaded,\n isLoading,\n session,\n sessionLanguage,\n settings,\n } = this.props;\n const { model } = this.state;\n const errorMessage = error ? `Unable to open document. ${error}` : null;\n const editorLanguage = settings ? settings.language ?? null : null;\n const completionProviderEnabled =\n model && session && editorLanguage === sessionLanguage;\n\n return (\n <>\n {(error || isLoading) && (\n <div className=\"h-100 w-100 position-relative\">\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n />\n </div>\n )}\n\n {isLoaded && (\n <div className=\"h-100 w-100 script-editor\">\n {settings && (\n <>\n <Editor\n ref={this.editorComponent}\n settings={settings}\n onEditorInitialized={this.handleEditorInitialized}\n onEditorWillDestroy={this.handleEditorWillDestroy}\n />\n {completionProviderEnabled != null &&\n completionProviderEnabled && (\n <MonacoProviders\n model={model}\n language={editorLanguage}\n session={session}\n />\n )}\n </>\n )}\n </div>\n )}\n </>\n );\n }\n}\n\nexport default ScriptEditor;\n"],"mappings":"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"}
|
|
@@ -18,6 +18,13 @@ declare class ScriptEditorUtils {
|
|
|
18
18
|
* @returns Tooltip message or `null` if the session is connected and language is matching
|
|
19
19
|
*/
|
|
20
20
|
static getDisabledRunTooltip(isSessionConnected: boolean, isLanguageMatching: boolean, scriptLanguageLabel: string, buttonLabel: string): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Outdent (opposite of indent) a string so the lowest indent level is 0
|
|
23
|
+
* Assumes each line is indented with the same characters (i.e. no mixed tabs/spaces)
|
|
24
|
+
* @param code The code to outdent
|
|
25
|
+
* @returns A code block where the minimum indent level of a line is 0
|
|
26
|
+
*/
|
|
27
|
+
static outdentCode(code: string): string;
|
|
21
28
|
}
|
|
22
29
|
export default ScriptEditorUtils;
|
|
23
30
|
//# sourceMappingURL=ScriptEditorUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptEditorUtils.d.ts","sourceRoot":"","sources":["../../src/notebook/ScriptEditorUtils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,SAAS;;;;CAIL,CAAC;AAEX,cAAM,iBAAiB;IACrB;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,GAAG,MAAM;IAIxE;;;;;;;OAOG;IACH,MAAM,CAAC,qBAAqB,CAC1B,kBAAkB,EAAE,OAAO,EAC3B,kBAAkB,EAAE,OAAO,EAC3B,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ScriptEditorUtils.d.ts","sourceRoot":"","sources":["../../src/notebook/ScriptEditorUtils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,SAAS;;;;CAIL,CAAC;AAEX,cAAM,iBAAiB;IACrB;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,GAAG,MAAM;IAIxE;;;;;;;OAOG;IACH,MAAM,CAAC,qBAAqB,CAC1B,kBAAkB,EAAE,OAAO,EAC3B,kBAAkB,EAAE,OAAO,EAC3B,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI;IAUhB;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM;CAWhC;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var LANGUAGES = {
|
|
2
|
+
groovy: 'Groovy',
|
|
3
|
+
python: 'Python',
|
|
4
|
+
scala: 'Scala'
|
|
5
|
+
};
|
|
6
|
+
class ScriptEditorUtils {
|
|
7
|
+
/** Get PQ script language from Monaco language
|
|
8
|
+
* @paramlanguage Monaco language
|
|
9
|
+
* @returns PQ script language
|
|
10
|
+
*/
|
|
11
|
+
static normalizeScriptLanguage(language) {
|
|
12
|
+
return LANGUAGES[language] || null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Get a tooltip for disabled button based on the session status and language
|
|
17
|
+
* @param isSessionConnected True if console session connected
|
|
18
|
+
* @param isLanguageMatching True if the script language is matching the session language
|
|
19
|
+
* @param scriptLanguageLabel Language label to use in the tooltip message
|
|
20
|
+
* @param buttonLabel Button label to use in the tooltip message
|
|
21
|
+
* @returns Tooltip message or `null` if the session is connected and language is matching
|
|
22
|
+
*/
|
|
23
|
+
static getDisabledRunTooltip(isSessionConnected, isLanguageMatching, scriptLanguageLabel, buttonLabel) {
|
|
24
|
+
if (!isSessionConnected) {
|
|
25
|
+
return "Console session not connected \u2013 ".concat(buttonLabel, " disabled");
|
|
26
|
+
}
|
|
27
|
+
if (!isLanguageMatching) {
|
|
28
|
+
return "".concat(scriptLanguageLabel, " doesn't match the session language \u2013 ").concat(buttonLabel, " disabled");
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Outdent (opposite of indent) a string so the lowest indent level is 0
|
|
35
|
+
* Assumes each line is indented with the same characters (i.e. no mixed tabs/spaces)
|
|
36
|
+
* @param code The code to outdent
|
|
37
|
+
* @returns A code block where the minimum indent level of a line is 0
|
|
38
|
+
*/
|
|
39
|
+
static outdentCode(code) {
|
|
40
|
+
var lines = code.split('\n');
|
|
41
|
+
var minIndent = lines.reduce((min, line) => {
|
|
42
|
+
var indentLength = line.length - line.trimStart().length;
|
|
43
|
+
if (indentLength === line.length) {
|
|
44
|
+
return min;
|
|
45
|
+
}
|
|
46
|
+
return indentLength < min ? indentLength : min;
|
|
47
|
+
}, Number.MAX_SAFE_INTEGER);
|
|
48
|
+
return lines.map(line => line.slice(minIndent)).join('\n');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export default ScriptEditorUtils;
|
|
52
|
+
//# sourceMappingURL=ScriptEditorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptEditorUtils.js","names":["LANGUAGES","groovy","python","scala","ScriptEditorUtils","normalizeScriptLanguage","language","getDisabledRunTooltip","isSessionConnected","isLanguageMatching","scriptLanguageLabel","buttonLabel","outdentCode","code","lines","split","minIndent","reduce","min","line","indentLength","length","trimStart","Number","MAX_SAFE_INTEGER","map","slice","join"],"sources":["../../src/notebook/ScriptEditorUtils.ts"],"sourcesContent":["const LANGUAGES = {\n groovy: 'Groovy',\n python: 'Python',\n scala: 'Scala',\n} as const;\n\nclass ScriptEditorUtils {\n /** Get PQ script language from Monaco language\n * @paramlanguage Monaco language\n * @returns PQ script language\n */\n static normalizeScriptLanguage(language: keyof typeof LANGUAGES): string {\n return LANGUAGES[language] || null;\n }\n\n /**\n * Get a tooltip for disabled button based on the session status and language\n * @param isSessionConnected True if console session connected\n * @param isLanguageMatching True if the script language is matching the session language\n * @param scriptLanguageLabel Language label to use in the tooltip message\n * @param buttonLabel Button label to use in the tooltip message\n * @returns Tooltip message or `null` if the session is connected and language is matching\n */\n static getDisabledRunTooltip(\n isSessionConnected: boolean,\n isLanguageMatching: boolean,\n scriptLanguageLabel: string,\n buttonLabel: string\n ): string | null {\n if (!isSessionConnected) {\n return `Console session not connected – ${buttonLabel} disabled`;\n }\n if (!isLanguageMatching) {\n return `${scriptLanguageLabel} doesn't match the session language – ${buttonLabel} disabled`;\n }\n return null;\n }\n\n /**\n * Outdent (opposite of indent) a string so the lowest indent level is 0\n * Assumes each line is indented with the same characters (i.e. no mixed tabs/spaces)\n * @param code The code to outdent\n * @returns A code block where the minimum indent level of a line is 0\n */\n static outdentCode(code: string) {\n const lines = code.split('\\n');\n const minIndent = lines.reduce((min, line) => {\n const indentLength = line.length - line.trimStart().length;\n if (indentLength === line.length) {\n return min;\n }\n return indentLength < min ? indentLength : min;\n }, Number.MAX_SAFE_INTEGER);\n return lines.map(line => line.slice(minIndent)).join('\\n');\n }\n}\n\nexport default ScriptEditorUtils;\n"],"mappings":"AAAA,IAAMA,SAAS,GAAG;EAChBC,MAAM,EAAE,QAAQ;EAChBC,MAAM,EAAE,QAAQ;EAChBC,KAAK,EAAE;AACT,CAAU;AAEV,MAAMC,iBAAiB,CAAC;EACtB;AACF;AACA;AACA;EACE,OAAOC,uBAAuB,CAACC,QAAgC,EAAU;IACvE,OAAON,SAAS,CAACM,QAAQ,CAAC,IAAI,IAAI;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,qBAAqB,CAC1BC,kBAA2B,EAC3BC,kBAA2B,EAC3BC,mBAA2B,EAC3BC,WAAmB,EACJ;IACf,IAAI,CAACH,kBAAkB,EAAE;MACvB,sDAA0CG,WAAW;IACvD;IACA,IAAI,CAACF,kBAAkB,EAAE;MACvB,iBAAUC,mBAAmB,wDAAyCC,WAAW;IACnF;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,WAAW,CAACC,IAAY,EAAE;IAC/B,IAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,IAAI,CAAC;IAC9B,IAAMC,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI,KAAK;MAC5C,IAAMC,YAAY,GAAGD,IAAI,CAACE,MAAM,GAAGF,IAAI,CAACG,SAAS,EAAE,CAACD,MAAM;MAC1D,IAAID,YAAY,KAAKD,IAAI,CAACE,MAAM,EAAE;QAChC,OAAOH,GAAG;MACZ;MACA,OAAOE,YAAY,GAAGF,GAAG,GAAGE,YAAY,GAAGF,GAAG;IAChD,CAAC,EAAEK,MAAM,CAACC,gBAAgB,CAAC;IAC3B,OAAOV,KAAK,CAACW,GAAG,CAACN,IAAI,IAAIA,IAAI,CAACO,KAAK,CAACV,SAAS,CAAC,CAAC,CAACW,IAAI,CAAC,IAAI,CAAC;EAC5D;AACF;AAEA,eAAevB,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/console",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "Deephaven Console",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@deephaven/chart": "^0.
|
|
27
|
-
"@deephaven/components": "^0.
|
|
28
|
-
"@deephaven/icons": "^0.
|
|
29
|
-
"@deephaven/jsapi-bootstrap": "^0.
|
|
30
|
-
"@deephaven/jsapi-types": "^0.
|
|
31
|
-
"@deephaven/log": "^0.
|
|
32
|
-
"@deephaven/storage": "^0.
|
|
33
|
-
"@deephaven/utils": "^0.
|
|
26
|
+
"@deephaven/chart": "^0.44.0",
|
|
27
|
+
"@deephaven/components": "^0.44.0",
|
|
28
|
+
"@deephaven/icons": "^0.44.0",
|
|
29
|
+
"@deephaven/jsapi-bootstrap": "^0.44.0",
|
|
30
|
+
"@deephaven/jsapi-types": "^0.44.0",
|
|
31
|
+
"@deephaven/log": "^0.44.0",
|
|
32
|
+
"@deephaven/storage": "^0.44.0",
|
|
33
|
+
"@deephaven/utils": "^0.44.0",
|
|
34
34
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
35
35
|
"classnames": "^2.3.1",
|
|
36
36
|
"linkifyjs": "^4.1.0",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"react-dom": "^17.x"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@deephaven/jsapi-shim": "^0.
|
|
53
|
-
"@deephaven/mocks": "^0.
|
|
52
|
+
"@deephaven/jsapi-shim": "^0.44.0",
|
|
53
|
+
"@deephaven/mocks": "^0.44.0"
|
|
54
54
|
},
|
|
55
55
|
"files": [
|
|
56
56
|
"dist"
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"publishConfig": {
|
|
62
62
|
"access": "public"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "ba13c9139b3b7a5f5d64d79069f1de9d4727eeb6"
|
|
65
65
|
}
|