@deephaven/console 0.32.1-table-plugins.9 → 0.33.1-auth-plugins.25
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/ConsoleInput.js +2 -2
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/HeapUsage.d.ts +1 -1
- package/dist/HeapUsage.d.ts.map +1 -1
- package/dist/HeapUsage.js +27 -21
- package/dist/HeapUsage.js.map +1 -1
- package/dist/monaco/MonacoProviders.d.ts +53 -0
- package/dist/monaco/MonacoProviders.d.ts.map +1 -0
- package/dist/monaco/MonacoProviders.js +314 -0
- package/dist/monaco/MonacoProviders.js.map +1 -0
- package/dist/monaco/MonacoTheme.module.css +3 -0
- package/dist/monaco/MonacoTheme.module.css.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +3 -0
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +25 -1
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/index.d.ts +1 -1
- package/dist/monaco/index.d.ts.map +1 -1
- package/dist/monaco/index.js +1 -1
- package/dist/monaco/index.js.map +1 -1
- package/dist/notebook/Editor.css +6 -0
- package/dist/notebook/Editor.css.map +1 -0
- package/dist/notebook/Editor.d.ts +1 -0
- package/dist/notebook/Editor.d.ts.map +1 -1
- package/dist/notebook/Editor.js +6 -1
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.js +2 -2
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/package.json +12 -11
- package/dist/monaco/MonacoCompletionProvider.d.ts +0 -24
- package/dist/monaco/MonacoCompletionProvider.d.ts.map +0 -1
- package/dist/monaco/MonacoCompletionProvider.js +0 -114
- package/dist/monaco/MonacoCompletionProvider.js.map +0 -1
package/dist/monaco/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default as MonacoUtils } from './MonacoUtils';
|
|
2
|
-
export { default as
|
|
2
|
+
export { default as MonacoProviders } from './MonacoProviders';
|
|
3
3
|
export { default as MonacoTheme } from './MonacoTheme.module.scss';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monaco/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monaco/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/monaco/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default as MonacoUtils } from "./MonacoUtils.js";
|
|
2
|
-
export { default as
|
|
2
|
+
export { default as MonacoProviders } from "./MonacoProviders.js";
|
|
3
3
|
export { default as MonacoTheme } from "./MonacoTheme.module.css";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/monaco/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","MonacoUtils","
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","MonacoUtils","MonacoProviders","MonacoTheme"],"sources":["../../src/monaco/index.ts"],"sourcesContent":["export { default as MonacoUtils } from './MonacoUtils';\nexport { default as MonacoProviders } from './MonacoProviders';\nexport { default as MonacoTheme } from './MonacoTheme.module.scss';\n"],"mappings":"SAASA,OAAO,IAAIC,WAAW;AAAA,SACtBD,OAAO,IAAIE,eAAe;AAAA,SAC1BF,OAAO,IAAIG,WAAW"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../node_modules/@deephaven/components/scss/custom.scss","../../src/notebook/Editor.scss","../../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACEA;EACE,OCkBS","file":"Editor.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '@deephaven/components/scss/custom.scss';\n\n.monaco-editor .detected-link {\n color: $link-color;\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: theme-color('danger');\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/notebook/Editor.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/notebook/Editor.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,eAAe,CAAC;AAEvB,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;IAC3E,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;IAC3E,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC;CAC9D;AAED,cAAM,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,YAAY;;mCAEQ,IAAI;mCACJ,IAAI;;MAE7B;gBAEU,KAAK,EAAE,WAAW;IAS9B,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQnC,YAAY,IAAI,IAAI;IAIpB,UAAU,IAAI,IAAI;IAUlB,gBAAgB,IAAI,IAAI;IAIxB,UAAU,IAAI,IAAI;IA+ClB,aAAa,IAAI,IAAI;IAQrB,MAAM,IAAI,YAAY;CAWvB;AAED,eAAe,MAAM,CAAC"}
|
package/dist/notebook/Editor.js
CHANGED
|
@@ -11,6 +11,7 @@ import classNames from 'classnames';
|
|
|
11
11
|
import * as monaco from 'monaco-editor';
|
|
12
12
|
import { assertNotNull } from '@deephaven/utils';
|
|
13
13
|
import MonacoUtils from "../monaco/MonacoUtils.js";
|
|
14
|
+
import "./Editor.css";
|
|
14
15
|
class Editor extends Component {
|
|
15
16
|
constructor(props) {
|
|
16
17
|
super(props);
|
|
@@ -72,7 +73,8 @@ class Editor extends Component {
|
|
|
72
73
|
scrollBeyondLastLine: false,
|
|
73
74
|
tabCompletion: 'on',
|
|
74
75
|
value: '',
|
|
75
|
-
wordWrap: 'off'
|
|
76
|
+
wordWrap: 'off',
|
|
77
|
+
links: true
|
|
76
78
|
}, settings);
|
|
77
79
|
assertNotNull(this.container);
|
|
78
80
|
this.editor = monaco.editor.create(this.container, settings);
|
|
@@ -92,6 +94,9 @@ class Editor extends Component {
|
|
|
92
94
|
});
|
|
93
95
|
this.editor.layout();
|
|
94
96
|
MonacoUtils.removeConflictingKeybindings(this.editor);
|
|
97
|
+
monaco.languages.registerLinkProvider('plaintext', {
|
|
98
|
+
provideLinks: MonacoUtils.provideLinks
|
|
99
|
+
});
|
|
95
100
|
onEditorInitialized(this.editor);
|
|
96
101
|
}
|
|
97
102
|
destroyEditor() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","Editor","constructor","props","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","layout","onEditorInitialized","settings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","removeConflictingKeybindings","onEditorWillDestroy","dispose","render","className"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from '../monaco/MonacoUtils';\n\ninterface EditorProps {\n className: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n settings: monaco.editor.IStandaloneEditorConstructionOptions;\n}\n\nclass Editor extends Component<EditorProps, Record<string, never>> {\n static defaultProps = {\n className: 'fill-parent-absolute',\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n settings: {},\n };\n\n constructor(props: EditorProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.container = null;\n this.state = {};\n }\n\n componentDidMount(): void {\n this.initEditor();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleResize);\n\n this.destroyEditor();\n }\n\n container: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setLanguage(language: string): void {\n if (this.editor) {\n const model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n toggleFind(): void {\n if (this.editor) {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor.focus();\n this.editor.trigger('toggleFind', 'actions.find', undefined);\n }\n }\n\n updateDimensions(): void {\n this.editor?.layout();\n }\n\n initEditor(): void {\n const { onEditorInitialized } = this.props;\n let { settings } = this.props;\n settings = {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: `python`,\n lineNumbersMinChars: 3,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n ...settings,\n };\n assertNotNull(this.container);\n this.editor = monaco.editor.create(this.container, settings);\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n ],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n\n run: () => {\n this.toggleFind();\n },\n });\n this.editor.layout();\n MonacoUtils.removeConflictingKeybindings(this.editor);\n\n onEditorInitialized(this.editor);\n }\n\n destroyEditor(): void {\n const { onEditorWillDestroy } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n\n render(): ReactElement {\n const { className } = this.props;\n return (\n <div\n className={classNames('editor-container', className)}\n ref={container => {\n this.container = container;\n }}\n />\n );\n }\n}\n\nexport default Editor;\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,aAAa,QAAQ,kBAAkB;AAAC,OAC1CC,WAAW;
|
|
1
|
+
{"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","Editor","constructor","props","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","layout","onEditorInitialized","settings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","links","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","removeConflictingKeybindings","languages","registerLinkProvider","provideLinks","onEditorWillDestroy","dispose","render","className"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from '../monaco/MonacoUtils';\nimport './Editor.scss';\n\ninterface EditorProps {\n className: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n settings: monaco.editor.IStandaloneEditorConstructionOptions;\n}\n\nclass Editor extends Component<EditorProps, Record<string, never>> {\n static defaultProps = {\n className: 'fill-parent-absolute',\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n settings: {},\n };\n\n constructor(props: EditorProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.container = null;\n this.state = {};\n }\n\n componentDidMount(): void {\n this.initEditor();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleResize);\n\n this.destroyEditor();\n }\n\n container: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setLanguage(language: string): void {\n if (this.editor) {\n const model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n toggleFind(): void {\n if (this.editor) {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor.focus();\n this.editor.trigger('toggleFind', 'actions.find', undefined);\n }\n }\n\n updateDimensions(): void {\n this.editor?.layout();\n }\n\n initEditor(): void {\n const { onEditorInitialized } = this.props;\n let { settings } = this.props;\n settings = {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: `python`,\n lineNumbersMinChars: 3,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n links: true,\n ...settings,\n };\n assertNotNull(this.container);\n this.editor = monaco.editor.create(this.container, settings);\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n ],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n\n run: () => {\n this.toggleFind();\n },\n });\n this.editor.layout();\n MonacoUtils.removeConflictingKeybindings(this.editor);\n\n monaco.languages.registerLinkProvider('plaintext', {\n provideLinks: MonacoUtils.provideLinks,\n });\n\n onEditorInitialized(this.editor);\n }\n\n destroyEditor(): void {\n const { onEditorWillDestroy } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n\n render(): ReactElement {\n const { className } = this.props;\n return (\n <div\n className={classNames('editor-container', className)}\n ref={container => {\n this.container = container;\n }}\n />\n );\n }\n}\n\nexport default Editor;\n"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import Log from '@deephaven/log';
|
|
|
10
10
|
import { assertNotNull } from '@deephaven/utils';
|
|
11
11
|
import { editor } from 'monaco-editor';
|
|
12
12
|
import Editor from "./Editor.js";
|
|
13
|
-
import {
|
|
13
|
+
import { MonacoProviders, MonacoUtils } from "../monaco/index.js";
|
|
14
14
|
import "./ScriptEditor.css";
|
|
15
15
|
import SHORTCUTS from "../ConsoleShortcuts.js";
|
|
16
16
|
var log = Log.module('ScriptEditor');
|
|
@@ -289,7 +289,7 @@ class ScriptEditor extends Component {
|
|
|
289
289
|
settings: settings,
|
|
290
290
|
onEditorInitialized: this.handleEditorInitialized,
|
|
291
291
|
onEditorWillDestroy: this.handleEditorWillDestroy
|
|
292
|
-
}), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/React.createElement(
|
|
292
|
+
}), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/React.createElement(MonacoProviders, {
|
|
293
293
|
model: model,
|
|
294
294
|
language: editorLanguage,
|
|
295
295
|
session: session
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptEditor.js","names":["React","Component","LoadingOverlay","ShortcutRegistry","Log","assertNotNull","editor","Editor","MonacoCompletionProvider","MonacoUtils","SHORTCUTS","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","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 { IdeSession } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\nimport { editor, IDisposable } from 'monaco-editor';\nimport Editor from './Editor';\nimport { MonacoCompletionProvider, MonacoUtils } from '../monaco';\nimport './ScriptEditor.scss';\nimport SHORTCUTS from '../ConsoleShortcuts';\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 return 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 <MonacoCompletionProvider\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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"}
|
|
1
|
+
{"version":3,"file":"ScriptEditor.js","names":["React","Component","LoadingOverlay","ShortcutRegistry","Log","assertNotNull","editor","Editor","MonacoProviders","MonacoUtils","SHORTCUTS","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","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 { IdeSession } from '@deephaven/jsapi-shim';\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';\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 return 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/console",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.1-auth-plugins.25+2a689a65",
|
|
4
4
|
"description": "Deephaven Console",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,15 +23,16 @@
|
|
|
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-shim": "^0.
|
|
30
|
-
"@deephaven/log": "^0.
|
|
31
|
-
"@deephaven/storage": "^0.
|
|
32
|
-
"@deephaven/utils": "^0.
|
|
26
|
+
"@deephaven/chart": "^0.33.1-auth-plugins.25+2a689a65",
|
|
27
|
+
"@deephaven/components": "^0.33.1-auth-plugins.25+2a689a65",
|
|
28
|
+
"@deephaven/icons": "^0.33.1-auth-plugins.25+2a689a65",
|
|
29
|
+
"@deephaven/jsapi-shim": "^0.33.1-auth-plugins.25+2a689a65",
|
|
30
|
+
"@deephaven/log": "^0.33.1-auth-plugins.25+2a689a65",
|
|
31
|
+
"@deephaven/storage": "^0.33.1-auth-plugins.25+2a689a65",
|
|
32
|
+
"@deephaven/utils": "^0.33.1-auth-plugins.25+2a689a65",
|
|
33
33
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
34
34
|
"classnames": "^2.3.1",
|
|
35
|
+
"linkifyjs": "^4.1.0",
|
|
35
36
|
"lodash.debounce": "^4.0.8",
|
|
36
37
|
"lodash.throttle": "^4.1.1",
|
|
37
38
|
"memoize-one": "^5.1.1",
|
|
@@ -47,8 +48,8 @@
|
|
|
47
48
|
"react-dom": "^17.x"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
|
-
"@deephaven/mocks": "^0.
|
|
51
|
-
"@deephaven/tsconfig": "^0.
|
|
51
|
+
"@deephaven/mocks": "^0.33.1-auth-plugins.25+2a689a65",
|
|
52
|
+
"@deephaven/tsconfig": "^0.33.1-auth-plugins.25+2a689a65"
|
|
52
53
|
},
|
|
53
54
|
"files": [
|
|
54
55
|
"dist"
|
|
@@ -59,5 +60,5 @@
|
|
|
59
60
|
"publishConfig": {
|
|
60
61
|
"access": "public"
|
|
61
62
|
},
|
|
62
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "2a689a654f019c33259582f8196ea9acf64497e9"
|
|
63
64
|
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Completion provider for a code session
|
|
3
|
-
*/
|
|
4
|
-
import { PureComponent } from 'react';
|
|
5
|
-
import * as monaco from 'monaco-editor';
|
|
6
|
-
import { IdeSession } from '@deephaven/jsapi-shim';
|
|
7
|
-
interface MonacoCompletionProviderProps {
|
|
8
|
-
model: monaco.editor.ITextModel;
|
|
9
|
-
session: IdeSession;
|
|
10
|
-
language: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Registers a completion provider with monaco for the language and session provided.
|
|
14
|
-
*/
|
|
15
|
-
declare class MonacoCompletionProvider extends PureComponent<MonacoCompletionProviderProps, Record<string, never>> {
|
|
16
|
-
constructor(props: MonacoCompletionProviderProps);
|
|
17
|
-
componentDidMount(): void;
|
|
18
|
-
componentWillUnmount(): void;
|
|
19
|
-
registeredCompletionProvider?: monaco.IDisposable;
|
|
20
|
-
handleCompletionRequest(model: monaco.editor.ITextModel, position: monaco.Position, context: monaco.languages.CompletionContext): monaco.languages.ProviderResult<monaco.languages.CompletionList>;
|
|
21
|
-
render(): null;
|
|
22
|
-
}
|
|
23
|
-
export default MonacoCompletionProvider;
|
|
24
|
-
//# sourceMappingURL=MonacoCompletionProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,114 +0,0 @@
|
|
|
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
|
-
* Completion provider for a code session
|
|
6
|
-
*/
|
|
7
|
-
import { PureComponent } from 'react';
|
|
8
|
-
import * as monaco from 'monaco-editor';
|
|
9
|
-
import Log from '@deephaven/log';
|
|
10
|
-
var log = Log.module('MonacoCompletionProvider');
|
|
11
|
-
/**
|
|
12
|
-
* Registers a completion provider with monaco for the language and session provided.
|
|
13
|
-
*/
|
|
14
|
-
class MonacoCompletionProvider extends PureComponent {
|
|
15
|
-
constructor(props) {
|
|
16
|
-
super(props);
|
|
17
|
-
_defineProperty(this, "registeredCompletionProvider", void 0);
|
|
18
|
-
this.handleCompletionRequest = this.handleCompletionRequest.bind(this);
|
|
19
|
-
}
|
|
20
|
-
componentDidMount() {
|
|
21
|
-
var {
|
|
22
|
-
language
|
|
23
|
-
} = this.props;
|
|
24
|
-
this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(language !== null && language !== void 0 ? language : '', {
|
|
25
|
-
provideCompletionItems: this.handleCompletionRequest,
|
|
26
|
-
triggerCharacters: ['"', '.', "'", '(', '[', '{', ',']
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
componentWillUnmount() {
|
|
30
|
-
var _this$registeredCompl;
|
|
31
|
-
(_this$registeredCompl = this.registeredCompletionProvider) === null || _this$registeredCompl === void 0 ? void 0 : _this$registeredCompl.dispose();
|
|
32
|
-
}
|
|
33
|
-
handleCompletionRequest(model, position, context) {
|
|
34
|
-
var {
|
|
35
|
-
model: propModel,
|
|
36
|
-
session
|
|
37
|
-
} = this.props;
|
|
38
|
-
if (model !== propModel) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
var params = {
|
|
42
|
-
textDocument: {
|
|
43
|
-
uri: "".concat(model.uri),
|
|
44
|
-
version: model.getVersionId()
|
|
45
|
-
},
|
|
46
|
-
// Yes, the Monaco API Position is different than the Position received by the LSP
|
|
47
|
-
// Why? I do not know.
|
|
48
|
-
position: {
|
|
49
|
-
line: position.lineNumber - 1,
|
|
50
|
-
character: position.column - 1
|
|
51
|
-
},
|
|
52
|
-
context
|
|
53
|
-
};
|
|
54
|
-
var completionItems = session.getCompletionItems(params);
|
|
55
|
-
log.debug('Completion items received: ', params, completionItems);
|
|
56
|
-
var monacoCompletionItems = completionItems.then(items => {
|
|
57
|
-
// Annoying that the LSP protocol returns completion items with a range that's slightly different than what Monaco expects
|
|
58
|
-
// Need to remap the items here
|
|
59
|
-
var suggestions = items.map(item => {
|
|
60
|
-
var {
|
|
61
|
-
label,
|
|
62
|
-
kind,
|
|
63
|
-
detail,
|
|
64
|
-
documentation,
|
|
65
|
-
sortText,
|
|
66
|
-
filterText,
|
|
67
|
-
textEdit,
|
|
68
|
-
insertTextFormat
|
|
69
|
-
} = item;
|
|
70
|
-
var {
|
|
71
|
-
start,
|
|
72
|
-
end
|
|
73
|
-
} = textEdit.range;
|
|
74
|
-
|
|
75
|
-
// Monaco expects the columns/ranges to start at 1.
|
|
76
|
-
var range = {
|
|
77
|
-
startLineNumber: start.line + 1,
|
|
78
|
-
startColumn: start.character + 1,
|
|
79
|
-
endLineNumber: end.line + 1,
|
|
80
|
-
endColumn: end.character + 1
|
|
81
|
-
};
|
|
82
|
-
return {
|
|
83
|
-
label,
|
|
84
|
-
kind,
|
|
85
|
-
detail,
|
|
86
|
-
documentation,
|
|
87
|
-
sortText,
|
|
88
|
-
filterText,
|
|
89
|
-
insertText: textEdit.text,
|
|
90
|
-
// We are basically guessing that LSP's insertTextFormat===2 is
|
|
91
|
-
// semantically equivalent to monaco's insertTextRules===4.
|
|
92
|
-
// Why microsoft is using almost-but-not-LSP apis is beyond me....
|
|
93
|
-
insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,
|
|
94
|
-
range
|
|
95
|
-
};
|
|
96
|
-
});
|
|
97
|
-
return {
|
|
98
|
-
incomplete: true,
|
|
99
|
-
suggestions
|
|
100
|
-
};
|
|
101
|
-
}).catch(error => {
|
|
102
|
-
log.error('There was an error retrieving completion items', error);
|
|
103
|
-
return {
|
|
104
|
-
suggestions: []
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
return monacoCompletionItems;
|
|
108
|
-
}
|
|
109
|
-
render() {
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
export default MonacoCompletionProvider;
|
|
114
|
-
//# sourceMappingURL=MonacoCompletionProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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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"}
|