@deephaven/console 0.22.2-beta.1 → 0.22.2

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.
@@ -69,7 +69,7 @@ export declare class ConsoleInput extends PureComponent<ConsoleInputProps, Conso
69
69
  */
70
70
  loadCommand(index: number | null): void;
71
71
  loadMoreHistory(): Promise<void>;
72
- processCommand(): void;
72
+ processCommand(command: string): void;
73
73
  updateDimensions(): void;
74
74
  render(): ReactElement;
75
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleInput.d.ts","sourceRoot":"","sources":["../src/ConsoleInput.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAEL,iBAAiB,EAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,qBAAqB,CAAC;AAU7B,UAAU,iBAAiB;IACzB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,aAAa,CAC7C,iBAAiB,EACjB,iBAAiB,CAClB;IACC,MAAM,CAAC,YAAY;;;;MAIjB;IAEF,MAAM,CAAC,gBAAgB,SAAmB;gBAE9B,KAAK,EAAE,iBAAiB;IAoBpC,iBAAiB,IAAI,IAAI;IAQzB,kBAAkB,IAAI,IAAI;IAI1B,oBAAoB,IAAI,IAAI;IAU5B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B,gBAAgB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAE5C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAEpD,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,0BAA0B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAE5C,cAAc,CAAC,EACX,iBAAiB,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,GAC1D,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAE3C,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAGlB,gBAAgB,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpD;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAO,EAAE,OAAO,UAAQ,GAAG,IAAI;IAuBjE,iBAAiB,IAAI,IAAI;IA6IzB,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,IAAI,IAAI;IAI1B,sBAAsB,IAAI,OAAO;IAcjC,yBAAyB,IAAI,OAAO;IAQpC,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;IAWlB,QAAQ,IAAI,IAAI;IAYhB,KAAK,IAAI,IAAI;IAMb,YAAY,IAAI,IAAI;IAMpB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAiBjC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDtC,cAAc,IAAI,IAAI;IAoBtB,gBAAgB,IAAI,IAAI;IA6BxB,MAAM,IAAI,YAAY;CA0BvB;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ConsoleInput.d.ts","sourceRoot":"","sources":["../src/ConsoleInput.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAEL,iBAAiB,EAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,qBAAqB,CAAC;AAU7B,UAAU,iBAAiB;IACzB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,aAAa,CAC7C,iBAAiB,EACjB,iBAAiB,CAClB;IACC,MAAM,CAAC,YAAY;;;;MAIjB;IAEF,MAAM,CAAC,gBAAgB,SAAmB;gBAE9B,KAAK,EAAE,iBAAiB;IAoBpC,iBAAiB,IAAI,IAAI;IAQzB,kBAAkB,IAAI,IAAI;IAI1B,oBAAoB,IAAI,IAAI;IAU5B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B,gBAAgB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAE5C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAEpD,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,0BAA0B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAE5C,cAAc,CAAC,EACX,iBAAiB,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,GAC1D,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAE3C,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAGlB,gBAAgB,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpD;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAO,EAAE,OAAO,UAAQ,GAAG,IAAI;IA0BjE,iBAAiB,IAAI,IAAI;IAiJzB,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,IAAI,IAAI;IAI1B,sBAAsB,IAAI,OAAO;IAcjC,yBAAyB,IAAI,OAAO;IAQpC,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;IAWlB,QAAQ,IAAI,IAAI;IAYhB,KAAK,IAAI,IAAI;IAMb,YAAY,IAAI,IAAI;IAMpB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAiBjC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDtC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAkBrC,gBAAgB,IAAI,IAAI;IA6BxB,MAAM,IAAI,YAAY;CA0BvB;AAED,eAAe,YAAY,CAAC"}
@@ -89,8 +89,6 @@ export class ConsoleInput extends PureComponent {
89
89
  * @returns void
90
90
  */
91
91
  setConsoleText(text) {
92
- var _this$commandEditor;
93
-
94
92
  var focus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
95
93
  var execute = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
96
94
 
@@ -98,11 +96,16 @@ export class ConsoleInput extends PureComponent {
98
96
  return;
99
97
  }
100
98
 
101
- log.debug('Command received: ', text); // Need to set commandHistoryIndex before value
102
- // On value change, modified commands map updates
99
+ log.debug('Command received: ', text); // Only set the console text if we're not running this command
103
100
 
104
- this.commandHistoryIndex = null;
105
- (_this$commandEditor = this.commandEditor) === null || _this$commandEditor === void 0 ? void 0 : _this$commandEditor.setValue(text);
101
+ if (!execute) {
102
+ var _this$commandEditor;
103
+
104
+ // Need to set commandHistoryIndex before value
105
+ // On value change, modified commands map updates
106
+ this.commandHistoryIndex = null;
107
+ (_this$commandEditor = this.commandEditor) === null || _this$commandEditor === void 0 ? void 0 : _this$commandEditor.setValue(text);
108
+ }
106
109
 
107
110
  if (focus) {
108
111
  this.focusEnd();
@@ -111,7 +114,7 @@ export class ConsoleInput extends PureComponent {
111
114
  this.updateDimensions();
112
115
 
113
116
  if (execute) {
114
- this.processCommand();
117
+ this.processCommand(text);
115
118
  }
116
119
  }
117
120
 
@@ -218,17 +221,27 @@ export class ConsoleInput extends PureComponent {
218
221
  if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {
219
222
  if (keyEvent.keyCode === monaco.KeyCode.Enter) {
220
223
  if (!this.isSuggestionMenuPopulated()) {
224
+ var _this$commandEditor3;
225
+
221
226
  keyEvent.stopPropagation();
222
227
  keyEvent.preventDefault();
223
- this.processCommand();
228
+
229
+ var _command = (_this$commandEditor3 = this.commandEditor) === null || _this$commandEditor3 === void 0 ? void 0 : _this$commandEditor3.getValue().trim();
230
+
231
+ if (_command !== undefined) {
232
+ var _this$commandEditor4;
233
+
234
+ this.processCommand(_command);
235
+ (_this$commandEditor4 = this.commandEditor) === null || _this$commandEditor4 === void 0 ? void 0 : _this$commandEditor4.setValue('');
236
+ }
224
237
  }
225
238
  } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {
226
239
  if (!this.isSuggestionMenuActive()) {
227
- var _this$commandEditor3;
240
+ var _this$commandEditor5;
228
241
 
229
242
  keyEvent.stopPropagation();
230
243
  keyEvent.preventDefault();
231
- (_this$commandEditor3 = this.commandEditor) === null || _this$commandEditor3 === void 0 ? void 0 : _this$commandEditor3.trigger('Tab key trigger suggestions', 'editor.action.triggerSuggest', {});
244
+ (_this$commandEditor5 = this.commandEditor) === null || _this$commandEditor5 === void 0 ? void 0 : _this$commandEditor5.trigger('Tab key trigger suggestions', 'editor.action.triggerSuggest', {});
232
245
  } else if (!this.isSuggestionMenuPopulated()) {
233
246
  keyEvent.stopPropagation();
234
247
  keyEvent.preventDefault();
@@ -268,9 +281,9 @@ export class ConsoleInput extends PureComponent {
268
281
  var _ref;
269
282
 
270
283
  if (!this.commandSuggestionContainer) {
271
- var _this$commandEditor4, _this$commandEditor4$;
284
+ var _this$commandEditor6, _this$commandEditor6$;
272
285
 
273
- this.commandSuggestionContainer = (_this$commandEditor4 = this.commandEditor) === null || _this$commandEditor4 === void 0 ? void 0 : (_this$commandEditor4$ = _this$commandEditor4.getDomNode()) === null || _this$commandEditor4$ === void 0 ? void 0 : _this$commandEditor4$.querySelector('.suggest-widget');
286
+ this.commandSuggestionContainer = (_this$commandEditor6 = this.commandEditor) === null || _this$commandEditor6 === void 0 ? void 0 : (_this$commandEditor6$ = _this$commandEditor6.getDomNode()) === null || _this$commandEditor6$ === void 0 ? void 0 : _this$commandEditor6$.querySelector('.suggest-widget');
274
287
  }
275
288
 
276
289
  return (_ref = this.commandSuggestionContainer && this.commandSuggestionContainer.classList.contains('visible')) !== null && _ref !== void 0 ? _ref : false;
@@ -283,50 +296,50 @@ export class ConsoleInput extends PureComponent {
283
296
  }
284
297
 
285
298
  focus() {
286
- var _this$commandEditor5;
299
+ var _this$commandEditor7;
287
300
 
288
- (_this$commandEditor5 = this.commandEditor) === null || _this$commandEditor5 === void 0 ? void 0 : _this$commandEditor5.focus();
301
+ (_this$commandEditor7 = this.commandEditor) === null || _this$commandEditor7 === void 0 ? void 0 : _this$commandEditor7.focus();
289
302
  }
290
303
 
291
304
  focusStart() {
292
- var _this$commandEditor6, _this$commandEditor7, _this$commandEditor8, _this$commandEditor9, _this$commandEditor10;
305
+ var _this$commandEditor8, _this$commandEditor9, _this$commandEditor10, _this$commandEditor11, _this$commandEditor12;
293
306
 
294
- var model = (_this$commandEditor6 = this.commandEditor) === null || _this$commandEditor6 === void 0 ? void 0 : _this$commandEditor6.getModel();
307
+ var model = (_this$commandEditor8 = this.commandEditor) === null || _this$commandEditor8 === void 0 ? void 0 : _this$commandEditor8.getModel();
295
308
  assertNotNull(model);
296
309
  var column = model.getLineLength(1) + 1; // Length of 1st line
297
310
 
298
- var firstCharTop = (_this$commandEditor7 = this.commandEditor) === null || _this$commandEditor7 === void 0 ? void 0 : _this$commandEditor7.getTopForPosition(1, column);
311
+ var firstCharTop = (_this$commandEditor9 = this.commandEditor) === null || _this$commandEditor9 === void 0 ? void 0 : _this$commandEditor9.getTopForPosition(1, column);
299
312
  assertNotNull(firstCharTop);
300
- (_this$commandEditor8 = this.commandEditor) === null || _this$commandEditor8 === void 0 ? void 0 : _this$commandEditor8.setPosition({
313
+ (_this$commandEditor10 = this.commandEditor) === null || _this$commandEditor10 === void 0 ? void 0 : _this$commandEditor10.setPosition({
301
314
  lineNumber: 1,
302
315
  column
303
316
  });
304
- (_this$commandEditor9 = this.commandEditor) === null || _this$commandEditor9 === void 0 ? void 0 : _this$commandEditor9.setScrollTop(firstCharTop);
305
- (_this$commandEditor10 = this.commandEditor) === null || _this$commandEditor10 === void 0 ? void 0 : _this$commandEditor10.focus();
317
+ (_this$commandEditor11 = this.commandEditor) === null || _this$commandEditor11 === void 0 ? void 0 : _this$commandEditor11.setScrollTop(firstCharTop);
318
+ (_this$commandEditor12 = this.commandEditor) === null || _this$commandEditor12 === void 0 ? void 0 : _this$commandEditor12.focus();
306
319
  }
307
320
 
308
321
  focusEnd() {
309
- var _this$commandEditor11, _this$commandEditor12, _this$commandEditor13, _this$commandEditor14, _this$commandEditor15;
322
+ var _this$commandEditor13, _this$commandEditor14, _this$commandEditor15, _this$commandEditor16, _this$commandEditor17;
310
323
 
311
- var model = (_this$commandEditor11 = this.commandEditor) === null || _this$commandEditor11 === void 0 ? void 0 : _this$commandEditor11.getModel();
324
+ var model = (_this$commandEditor13 = this.commandEditor) === null || _this$commandEditor13 === void 0 ? void 0 : _this$commandEditor13.getModel();
312
325
  assertNotNull(model);
313
326
  var lastLine = model.getLineCount();
314
327
  var column = model.getLineLength(lastLine) + 1;
315
- var lastCharTop = (_this$commandEditor12 = this.commandEditor) === null || _this$commandEditor12 === void 0 ? void 0 : _this$commandEditor12.getTopForPosition(lastLine, column);
328
+ var lastCharTop = (_this$commandEditor14 = this.commandEditor) === null || _this$commandEditor14 === void 0 ? void 0 : _this$commandEditor14.getTopForPosition(lastLine, column);
316
329
  assertNotNull(lastCharTop);
317
- (_this$commandEditor13 = this.commandEditor) === null || _this$commandEditor13 === void 0 ? void 0 : _this$commandEditor13.setPosition({
330
+ (_this$commandEditor15 = this.commandEditor) === null || _this$commandEditor15 === void 0 ? void 0 : _this$commandEditor15.setPosition({
318
331
  lineNumber: lastLine,
319
332
  column
320
333
  });
321
- (_this$commandEditor14 = this.commandEditor) === null || _this$commandEditor14 === void 0 ? void 0 : _this$commandEditor14.setScrollTop(lastCharTop);
322
- (_this$commandEditor15 = this.commandEditor) === null || _this$commandEditor15 === void 0 ? void 0 : _this$commandEditor15.focus();
334
+ (_this$commandEditor16 = this.commandEditor) === null || _this$commandEditor16 === void 0 ? void 0 : _this$commandEditor16.setScrollTop(lastCharTop);
335
+ (_this$commandEditor17 = this.commandEditor) === null || _this$commandEditor17 === void 0 ? void 0 : _this$commandEditor17.focus();
323
336
  }
324
337
 
325
338
  clear() {
326
- var _this$commandEditor16, _this$commandEditor17, _this$commandEditor18;
339
+ var _this$commandEditor18, _this$commandEditor19, _this$commandEditor20;
327
340
 
328
- (_this$commandEditor16 = this.commandEditor) === null || _this$commandEditor16 === void 0 ? void 0 : _this$commandEditor16.focus();
329
- (_this$commandEditor17 = this.commandEditor) === null || _this$commandEditor17 === void 0 ? void 0 : (_this$commandEditor18 = _this$commandEditor17.getModel()) === null || _this$commandEditor18 === void 0 ? void 0 : _this$commandEditor18.setValue('');
341
+ (_this$commandEditor18 = this.commandEditor) === null || _this$commandEditor18 === void 0 ? void 0 : _this$commandEditor18.focus();
342
+ (_this$commandEditor19 = this.commandEditor) === null || _this$commandEditor19 === void 0 ? void 0 : (_this$commandEditor20 = _this$commandEditor19.getModel()) === null || _this$commandEditor20 === void 0 ? void 0 : _this$commandEditor20.setValue('');
330
343
  this.commandHistoryIndex = null;
331
344
  }
332
345
 
@@ -343,7 +356,7 @@ export class ConsoleInput extends PureComponent {
343
356
 
344
357
 
345
358
  loadCommand(index) {
346
- var _this$commandEditor19, _this$commandEditor20;
359
+ var _this$commandEditor21, _this$commandEditor22;
347
360
 
348
361
  if (index === null || index >= this.history.length) {
349
362
  return;
@@ -352,7 +365,7 @@ export class ConsoleInput extends PureComponent {
352
365
  var modifiedValue = this.modifiedCommands.get(index);
353
366
  var historyValue = index === null ? '' : this.history[this.history.length - index - 1];
354
367
  this.commandHistoryIndex = index;
355
- (_this$commandEditor19 = this.commandEditor) === null || _this$commandEditor19 === void 0 ? void 0 : (_this$commandEditor20 = _this$commandEditor19.getModel()) === null || _this$commandEditor20 === void 0 ? void 0 : _this$commandEditor20.setValue(modifiedValue !== null && modifiedValue !== void 0 ? modifiedValue : historyValue);
368
+ (_this$commandEditor21 = this.commandEditor) === null || _this$commandEditor21 === void 0 ? void 0 : (_this$commandEditor22 = _this$commandEditor21.getModel()) === null || _this$commandEditor22 === void 0 ? void 0 : _this$commandEditor22.setValue(modifiedValue !== null && modifiedValue !== void 0 ? modifiedValue : historyValue);
356
369
 
357
370
  if (index !== null && index > this.history.length - BUFFER_SIZE) {
358
371
  this.loadMoreHistory();
@@ -415,19 +428,15 @@ export class ConsoleInput extends PureComponent {
415
428
  })();
416
429
  }
417
430
 
418
- processCommand() {
419
- var _this$commandEditor21, _this$commandEditor22;
420
-
431
+ processCommand(command) {
421
432
  this.commandHistoryIndex = null;
422
433
  this.modifiedCommands.clear();
423
- var command = (_this$commandEditor21 = this.commandEditor) === null || _this$commandEditor21 === void 0 ? void 0 : _this$commandEditor21.getValue().trim();
424
434
  assertNotNull(command);
425
435
 
426
436
  if (command !== '' && (this.history.length === 0 || command !== this.history[this.history.length - 1])) {
427
437
  this.history.push(command);
428
438
  }
429
439
 
430
- (_this$commandEditor22 = this.commandEditor) === null || _this$commandEditor22 === void 0 ? void 0 : _this$commandEditor22.setValue('');
431
440
  this.updateDimensions();
432
441
  var {
433
442
  onSubmit
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoCompletionProvider","MonacoTheme","MonacoUtils","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","handleWindowResize","bind","commandContainer","createRef","commandHistoryIndex","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","window","addEventListener","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","removeEventListener","loadingPromise","cancel","destroyCommandEditor","setConsoleText","text","focus","execute","debug","commandEditor","setValue","focusEnd","updateDimensions","processCommand","language","session","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","tabCompletion","value","wordWrap","element","current","editor","create","setEOL","openDocument","onDidChangeModelContent","getValue","set","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","position","getPosition","lineNumber","getModel","keyCode","KeyCode","UpArrow","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","DownArrow","getLineCount","altKey","shiftKey","metaKey","Enter","Tab","isSuggestionMenuActive","trigger","addCommand","KeyMod","CtrlCmd","KeyF","undefined","removeConflictingKeybindings","registerPasteHandler","closeDocument","dispose","commandSuggestionContainer","getDomNode","querySelector","classList","contains","childElementCount","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","lastLine","lastCharTop","clear","layout","index","length","modifiedValue","get","historyValue","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","filter","pos","arr","name","map","reverse","err","isCanceled","debug2","error","command","trim","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","overviewRulerLanes","updateOptions","render","disabled","INPUT_CLASS_NAME","height"],"sources":["../src/ConsoleInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n CancelablePromise,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { ViewportData } from '@deephaven/storage';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './command-history';\nimport { MonacoCompletionProvider, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\ninterface ConsoleInputProps {\n session: IdeSession;\n language: string;\n scope?: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSubmit: (command: string) => void;\n maxHeight?: number;\n disabled?: boolean;\n}\n\ninterface ConsoleInputState {\n commandEditorHeight: number;\n isFocused: boolean;\n model: monaco.editor.ITextModel | null;\n}\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent<\n ConsoleInputProps,\n ConsoleInputState\n> {\n static defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n disabled: false,\n };\n\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props: ConsoleInputProps) {\n super(props);\n\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.commandContainer = React.createRef();\n this.commandHistoryIndex = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount(): void {\n this.initCommandEditor();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate(): void {\n this.layoutEditor();\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n cancelListener?: () => void;\n\n commandContainer: RefObject<HTMLDivElement>;\n\n commandEditor?: monaco.editor.IStandaloneCodeEditor;\n\n commandHistoryIndex: number | null;\n\n commandSuggestionContainer?: Element | null;\n\n loadingPromise?:\n | CancelablePromise<ViewportData<CommandHistoryStorageItem>>\n | CancelablePromise<CommandHistoryTable>;\n\n timestamp: number;\n\n bufferIndex: number | null;\n\n history: string[];\n\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n modifiedCommands: Map<number | null, string | null>;\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param text The text to set in the input\n * @param focus If the input should be focused\n * @param execute If the input should be executed\n * @returns void\n */\n setConsoleText(text: string, focus = true, execute = false): void {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor?.setValue(text);\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand();\n }\n }\n\n initCommandEditor(): void {\n const { language, session } = this.props;\n const commandSettings = {\n copyWithSyntaxHighlighting: false,\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n tabCompletion: 'on',\n value: '',\n wordWrap: 'on',\n } as const;\n\n const element = this.commandContainer.current;\n assertNotNull(element);\n this.commandEditor = monaco.editor.create(element, commandSettings);\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n const value = this.commandEditor?.getValue();\n this.modifiedCommands.set(this.commandHistoryIndex, value ?? null);\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const position = commandEditor?.getPosition();\n assertNotNull(position);\n const { lineNumber } = position;\n const model = commandEditor?.getModel();\n if (\n keyEvent.keyCode === monaco.KeyCode.UpArrow &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === 1\n ) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.keyCode === monaco.KeyCode.DownArrow &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === model?.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (keyEvent.keyCode === monaco.KeyCode.Enter) {\n if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.processCommand();\n }\n } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {\n if (!this.isSuggestionMenuActive()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.commandEditor?.trigger(\n 'Tab key trigger suggestions',\n 'editor.action.triggerSuggest',\n {}\n );\n } else if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n }\n }\n }\n });\n\n // Override the Ctrl+F functionality so that the find window doesn't appear\n this.commandEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n () => undefined\n );\n\n MonacoUtils.removeConflictingKeybindings(this.commandEditor);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor(): void {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = undefined;\n }\n }\n\n handleWindowResize(): void {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive(): boolean {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n ?.getDomNode()\n ?.querySelector('.suggest-widget');\n }\n\n return (\n (this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')) ??\n false\n );\n }\n\n isSuggestionMenuPopulated(): boolean {\n return (\n this.isSuggestionMenuActive() &&\n (this.commandSuggestionContainer?.querySelector('.monaco-list-rows')\n ?.childElementCount ?? 0) > 0\n );\n }\n\n focus(): void {\n this.commandEditor?.focus();\n }\n\n focusStart(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor?.getTopForPosition(1, column);\n assertNotNull(firstCharTop);\n this.commandEditor?.setPosition({ lineNumber: 1, column });\n this.commandEditor?.setScrollTop(firstCharTop);\n this.commandEditor?.focus();\n }\n\n focusEnd(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor?.getTopForPosition(lastLine, column);\n assertNotNull(lastCharTop);\n this.commandEditor?.setPosition({ lineNumber: lastLine, column });\n this.commandEditor?.setScrollTop(lastCharTop);\n this.commandEditor?.focus();\n }\n\n clear(): void {\n this.commandEditor?.focus();\n this.commandEditor?.getModel()?.setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor(): void {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index: number | null): void {\n if (index === null || index >= this.history.length) {\n return;\n }\n\n const modifiedValue = this.modifiedCommands.get(index);\n const historyValue =\n index === null ? '' : this.history[this.history.length - index - 1];\n\n this.commandHistoryIndex = index;\n this.commandEditor?.getModel()?.setValue(modifiedValue ?? historyValue);\n\n if (index !== null && index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n async loadMoreHistory(): Promise<void> {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope ?? '', this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData?.items\n .filter(\n ({ name }, pos, arr) => pos === 0 || name !== arr[pos - 1].name\n )\n .map(({ name }) => name)\n .reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = undefined;\n\n table.close();\n } catch (err) {\n this.loadingPromise = undefined;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand(): void {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n const command = this.commandEditor?.getValue().trim();\n assertNotNull(command);\n if (\n command !== '' &&\n (this.history.length === 0 ||\n command !== this.history[this.history.length - 1])\n ) {\n this.history.push(command);\n }\n this.commandEditor?.setValue('');\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions(): void {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n assertNotNull(maxHeight);\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n\n const options = { overviewRulerLanes: shouldScroll ? undefined : 0 };\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor?.updateOptions(options);\n this.commandEditor?.layout();\n }\n );\n }\n\n render(): ReactElement {\n const { disabled, language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className={classNames('console-input-wrapper', { disabled })}>\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoCompletionProvider\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ConsoleInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoCompletionProvider","MonacoTheme","MonacoUtils","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","handleWindowResize","bind","commandContainer","createRef","commandHistoryIndex","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","window","addEventListener","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","removeEventListener","loadingPromise","cancel","destroyCommandEditor","setConsoleText","text","focus","execute","debug","commandEditor","setValue","focusEnd","updateDimensions","processCommand","language","session","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","tabCompletion","value","wordWrap","element","current","editor","create","setEOL","openDocument","onDidChangeModelContent","getValue","set","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","position","getPosition","lineNumber","getModel","keyCode","KeyCode","UpArrow","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","DownArrow","getLineCount","altKey","shiftKey","metaKey","Enter","command","trim","undefined","Tab","isSuggestionMenuActive","trigger","addCommand","KeyMod","CtrlCmd","KeyF","removeConflictingKeybindings","registerPasteHandler","closeDocument","dispose","commandSuggestionContainer","getDomNode","querySelector","classList","contains","childElementCount","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","lastLine","lastCharTop","clear","layout","index","length","modifiedValue","get","historyValue","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","filter","pos","arr","name","map","reverse","err","isCanceled","debug2","error","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","overviewRulerLanes","updateOptions","render","disabled","INPUT_CLASS_NAME","height"],"sources":["../src/ConsoleInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n CancelablePromise,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { ViewportData } from '@deephaven/storage';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './command-history';\nimport { MonacoCompletionProvider, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\ninterface ConsoleInputProps {\n session: IdeSession;\n language: string;\n scope?: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSubmit: (command: string) => void;\n maxHeight?: number;\n disabled?: boolean;\n}\n\ninterface ConsoleInputState {\n commandEditorHeight: number;\n isFocused: boolean;\n model: monaco.editor.ITextModel | null;\n}\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent<\n ConsoleInputProps,\n ConsoleInputState\n> {\n static defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n disabled: false,\n };\n\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props: ConsoleInputProps) {\n super(props);\n\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.commandContainer = React.createRef();\n this.commandHistoryIndex = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount(): void {\n this.initCommandEditor();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate(): void {\n this.layoutEditor();\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n cancelListener?: () => void;\n\n commandContainer: RefObject<HTMLDivElement>;\n\n commandEditor?: monaco.editor.IStandaloneCodeEditor;\n\n commandHistoryIndex: number | null;\n\n commandSuggestionContainer?: Element | null;\n\n loadingPromise?:\n | CancelablePromise<ViewportData<CommandHistoryStorageItem>>\n | CancelablePromise<CommandHistoryTable>;\n\n timestamp: number;\n\n bufferIndex: number | null;\n\n history: string[];\n\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n modifiedCommands: Map<number | null, string | null>;\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param text The text to set in the input\n * @param focus If the input should be focused\n * @param execute If the input should be executed\n * @returns void\n */\n setConsoleText(text: string, focus = true, execute = false): void {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Only set the console text if we're not running this command\n if (!execute) {\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor?.setValue(text);\n }\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand(text);\n }\n }\n\n initCommandEditor(): void {\n const { language, session } = this.props;\n const commandSettings = {\n copyWithSyntaxHighlighting: false,\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n tabCompletion: 'on',\n value: '',\n wordWrap: 'on',\n } as const;\n\n const element = this.commandContainer.current;\n assertNotNull(element);\n this.commandEditor = monaco.editor.create(element, commandSettings);\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n const value = this.commandEditor?.getValue();\n this.modifiedCommands.set(this.commandHistoryIndex, value ?? null);\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const position = commandEditor?.getPosition();\n assertNotNull(position);\n const { lineNumber } = position;\n const model = commandEditor?.getModel();\n if (\n keyEvent.keyCode === monaco.KeyCode.UpArrow &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === 1\n ) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.keyCode === monaco.KeyCode.DownArrow &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === model?.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (keyEvent.keyCode === monaco.KeyCode.Enter) {\n if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n const command = this.commandEditor?.getValue().trim();\n if (command !== undefined) {\n this.processCommand(command);\n this.commandEditor?.setValue('');\n }\n }\n } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {\n if (!this.isSuggestionMenuActive()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.commandEditor?.trigger(\n 'Tab key trigger suggestions',\n 'editor.action.triggerSuggest',\n {}\n );\n } else if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n }\n }\n }\n });\n\n // Override the Ctrl+F functionality so that the find window doesn't appear\n this.commandEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n () => undefined\n );\n\n MonacoUtils.removeConflictingKeybindings(this.commandEditor);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor(): void {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = undefined;\n }\n }\n\n handleWindowResize(): void {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive(): boolean {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n ?.getDomNode()\n ?.querySelector('.suggest-widget');\n }\n\n return (\n (this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')) ??\n false\n );\n }\n\n isSuggestionMenuPopulated(): boolean {\n return (\n this.isSuggestionMenuActive() &&\n (this.commandSuggestionContainer?.querySelector('.monaco-list-rows')\n ?.childElementCount ?? 0) > 0\n );\n }\n\n focus(): void {\n this.commandEditor?.focus();\n }\n\n focusStart(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor?.getTopForPosition(1, column);\n assertNotNull(firstCharTop);\n this.commandEditor?.setPosition({ lineNumber: 1, column });\n this.commandEditor?.setScrollTop(firstCharTop);\n this.commandEditor?.focus();\n }\n\n focusEnd(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor?.getTopForPosition(lastLine, column);\n assertNotNull(lastCharTop);\n this.commandEditor?.setPosition({ lineNumber: lastLine, column });\n this.commandEditor?.setScrollTop(lastCharTop);\n this.commandEditor?.focus();\n }\n\n clear(): void {\n this.commandEditor?.focus();\n this.commandEditor?.getModel()?.setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor(): void {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index: number | null): void {\n if (index === null || index >= this.history.length) {\n return;\n }\n\n const modifiedValue = this.modifiedCommands.get(index);\n const historyValue =\n index === null ? '' : this.history[this.history.length - index - 1];\n\n this.commandHistoryIndex = index;\n this.commandEditor?.getModel()?.setValue(modifiedValue ?? historyValue);\n\n if (index !== null && index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n async loadMoreHistory(): Promise<void> {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope ?? '', this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData?.items\n .filter(\n ({ name }, pos, arr) => pos === 0 || name !== arr[pos - 1].name\n )\n .map(({ name }) => name)\n .reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = undefined;\n\n table.close();\n } catch (err) {\n this.loadingPromise = undefined;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand(command: string): void {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n assertNotNull(command);\n if (\n command !== '' &&\n (this.history.length === 0 ||\n command !== this.history[this.history.length - 1])\n ) {\n this.history.push(command);\n }\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions(): void {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n assertNotNull(maxHeight);\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n\n const options = { overviewRulerLanes: shouldScroll ? undefined : 0 };\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor?.updateOptions(options);\n this.commandEditor?.layout();\n }\n );\n }\n\n render(): ReactElement {\n const { disabled, language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className={classNames('console-input-wrapper', { disabled })}>\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoCompletionProvider\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ConsoleInput;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoCompletionProvider.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoCompletionProvider.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,UAAU,6BAA6B;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cAAM,wBAAyB,SAAQ,aAAa,CAClD,6BAA6B,EAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;gBACa,KAAK,EAAE,6BAA6B;IAMhD,iBAAiB,IAAI,IAAI;IAWzB,oBAAoB,IAAI,IAAI;IAI5B,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAElD,uBAAuB,CACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IA6EnE,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"MonacoCompletionProvider.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoCompletionProvider.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,UAAU,6BAA6B;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cAAM,wBAAyB,SAAQ,aAAa,CAClD,6BAA6B,EAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;gBACa,KAAK,EAAE,6BAA6B;IAMhD,iBAAiB,IAAI,IAAI;IAWzB,oBAAoB,IAAI,IAAI;IAI5B,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAElD,uBAAuB,CACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IA8EnE,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,wBAAwB,CAAC"}
@@ -48,7 +48,8 @@ class MonacoCompletionProvider extends PureComponent {
48
48
 
49
49
  var params = {
50
50
  textDocument: {
51
- uri: "".concat(model.uri)
51
+ uri: "".concat(model.uri),
52
+ version: model.getVersionId()
52
53
  },
53
54
  // Yes, the Monaco API Position is different than the Position received by the LSP
54
55
  // Why? I do not know.
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoCompletionProvider.js","names":["PureComponent","monaco","Log","log","module","MonacoCompletionProvider","constructor","props","handleCompletionRequest","bind","componentDidMount","language","registeredCompletionProvider","languages","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","componentWillUnmount","dispose","model","position","context","propModel","session","params","textDocument","uri","line","lineNumber","character","column","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","kind","detail","documentation","sortText","filterText","textEdit","insertTextFormat","start","end","range","startLineNumber","startColumn","endLineNumber","endColumn","insertText","text","insertTextRules","incomplete","catch","error","render"],"sources":["../../src/monaco/MonacoCompletionProvider.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoCompletionProviderProps {\n model: monaco.editor.ITextModel;\n session: IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoCompletionProvider extends PureComponent<\n MonacoCompletionProviderProps,\n Record<string, never>\n> {\n constructor(props: MonacoCompletionProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language } = this.props;\n this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(\n language ?? '',\n {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['\"', '.', \"'\", '(', '[', '{', ','],\n }\n );\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n },\n // Yes, the Monaco API Position is different than the Position received by the LSP\n // Why? I do not know.\n position: {\n line: position.lineNumber - 1,\n character: position.column - 1,\n },\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n\n log.debug('Completion items received: ', params, completionItems);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n // Annoying that the LSP protocol returns completion items with a range that's slightly different than what Monaco expects\n // Need to remap the items here\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n const { start, end } = textEdit.range;\n\n // Monaco expects the columns/ranges to start at 1.\n const range = {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n return {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range,\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoCompletionProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MonacoCompletionProvider.js","names":["PureComponent","monaco","Log","log","module","MonacoCompletionProvider","constructor","props","handleCompletionRequest","bind","componentDidMount","language","registeredCompletionProvider","languages","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","componentWillUnmount","dispose","model","position","context","propModel","session","params","textDocument","uri","version","getVersionId","line","lineNumber","character","column","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","kind","detail","documentation","sortText","filterText","textEdit","insertTextFormat","start","end","range","startLineNumber","startColumn","endLineNumber","endColumn","insertText","text","insertTextRules","incomplete","catch","error","render"],"sources":["../../src/monaco/MonacoCompletionProvider.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoCompletionProviderProps {\n model: monaco.editor.ITextModel;\n session: IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoCompletionProvider extends PureComponent<\n MonacoCompletionProviderProps,\n Record<string, never>\n> {\n constructor(props: MonacoCompletionProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language } = this.props;\n this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(\n language ?? '',\n {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['\"', '.', \"'\", '(', '[', '{', ','],\n }\n );\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n // Yes, the Monaco API Position is different than the Position received by the LSP\n // Why? I do not know.\n position: {\n line: position.lineNumber - 1,\n character: position.column - 1,\n },\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n\n log.debug('Completion items received: ', params, completionItems);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n // Annoying that the LSP protocol returns completion items with a range that's slightly different than what Monaco expects\n // Need to remap the items here\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n const { start, end } = textEdit.range;\n\n // Monaco expects the columns/ranges to start at 1.\n const range = {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n return {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range,\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoCompletionProvider;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/console",
3
- "version": "0.22.2-beta.1+0c0142f",
3
+ "version": "0.22.2",
4
4
  "description": "Deephaven Console",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -23,13 +23,13 @@
23
23
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
24
24
  },
25
25
  "dependencies": {
26
- "@deephaven/chart": "^0.22.2-beta.1+0c0142f",
27
- "@deephaven/components": "^0.22.2-beta.1+0c0142f",
28
- "@deephaven/icons": "^0.22.2-beta.1+0c0142f",
29
- "@deephaven/jsapi-shim": "^0.22.2-beta.1+0c0142f",
30
- "@deephaven/log": "^0.22.2-beta.1+0c0142f",
31
- "@deephaven/storage": "^0.22.2-beta.1+0c0142f",
32
- "@deephaven/utils": "^0.22.2-beta.1+0c0142f",
26
+ "@deephaven/chart": "^0.22.1",
27
+ "@deephaven/components": "^0.22.2",
28
+ "@deephaven/icons": "^0.22.0",
29
+ "@deephaven/jsapi-shim": "^0.22.1",
30
+ "@deephaven/log": "^0.22.0",
31
+ "@deephaven/storage": "^0.22.0",
32
+ "@deephaven/utils": "^0.22.0",
33
33
  "@fortawesome/react-fontawesome": "^0.1.18",
34
34
  "classnames": "^2.3.1",
35
35
  "lodash.debounce": "^4.0.8",
@@ -47,8 +47,8 @@
47
47
  "react-dom": "^17.x"
48
48
  },
49
49
  "devDependencies": {
50
- "@deephaven/mocks": "^0.22.2-beta.1+0c0142f",
51
- "@deephaven/tsconfig": "^0.22.2-beta.1+0c0142f"
50
+ "@deephaven/mocks": "^0.22.0",
51
+ "@deephaven/tsconfig": "^0.22.0"
52
52
  },
53
53
  "files": [
54
54
  "dist"
@@ -59,5 +59,5 @@
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  },
62
- "gitHead": "0c0142f618e2f9979c2d09635ea38931cde7d39f"
62
+ "gitHead": "2d4fbd0de915bb72ea632c0bdf986b963f2f6071"
63
63
  }