@deephaven/console 0.45.2-beta.7 → 0.45.2-beta.9
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.d.ts.map +1 -1
- package/dist/ConsoleInput.js +4 -5
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/log/LogView.d.ts.map +1 -1
- package/dist/log/LogView.js +30 -28
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +11 -14
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +42 -53
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/notebook/Editor.d.ts.map +1 -1
- package/dist/notebook/Editor.js +0 -1
- package/dist/notebook/Editor.js.map +1 -1
- package/package.json +15 -14
|
@@ -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,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,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;
|
|
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,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,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;IA+IzB,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"}
|
package/dist/ConsoleInput.js
CHANGED
|
@@ -214,11 +214,10 @@ export class ConsoleInput extends PureComponent {
|
|
|
214
214
|
}
|
|
215
215
|
});
|
|
216
216
|
|
|
217
|
-
//
|
|
218
|
-
this.commandEditor
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
MonacoUtils.removeConflictingKeybindings(this.commandEditor);
|
|
217
|
+
// Disable the Ctrl+F functionality so that the find window doesn't appear
|
|
218
|
+
MonacoUtils.disableKeyBindings(this.commandEditor, [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF // eslint-disable-line no-bitwise
|
|
219
|
+
]);
|
|
220
|
+
|
|
222
221
|
MonacoUtils.registerPasteHandler(this.commandEditor);
|
|
223
222
|
this.commandEditor.focus();
|
|
224
223
|
this.updateDimensions();
|
package/dist/ConsoleInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoProviders","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","code","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","getLineCount","altKey","shiftKey","metaKey","keyCode","KeyCode","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 type { IdeSession } from '@deephaven/jsapi-types';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './command-history';\nimport { MonacoProviders, 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.code === 'ArrowUp' &&\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.code === 'ArrowDown' &&\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 <MonacoProviders\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","MonacoProviders","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","code","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","getLineCount","altKey","shiftKey","metaKey","keyCode","KeyCode","Enter","command","trim","undefined","Tab","isSuggestionMenuActive","trigger","disableKeyBindings","KeyMod","CtrlCmd","KeyF","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 type { IdeSession } from '@deephaven/jsapi-types';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './command-history';\nimport { MonacoProviders, 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\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.code === 'ArrowUp' &&\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.code === 'ArrowDown' &&\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 // Disable the Ctrl+F functionality so that the find window doesn't appear\n MonacoUtils.disableKeyBindings(this.commandEditor, [\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n ]);\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 <MonacoProviders\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":"LogView.d.ts","sourceRoot":"","sources":["../../src/log/LogView.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAU,eAAe,EAAgB,MAAM,uBAAuB,CAAC;AAG9E,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/log/LogView.tsx"],"names":[],"mappings":"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"}
|
package/dist/log/LogView.js
CHANGED
|
@@ -12,6 +12,7 @@ import ConsoleUtils from "../common/ConsoleUtils.js";
|
|
|
12
12
|
import LogLevel from "./LogLevel.js";
|
|
13
13
|
import "./LogView.css";
|
|
14
14
|
import LogLevelMenuItem from "./LogLevelMenuItem.js";
|
|
15
|
+
import { MonacoUtils } from "../monaco/index.js";
|
|
15
16
|
/**
|
|
16
17
|
* Log view contents. Uses a monaco editor to display/search the contents of the log.
|
|
17
18
|
*/
|
|
@@ -175,28 +176,29 @@ class LogView extends PureComponent {
|
|
|
175
176
|
wordWrap: 'on'
|
|
176
177
|
});
|
|
177
178
|
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
// eslint-disable-next-line no-bitwise
|
|
183
|
-
monaco.KeyMod.Shift | monaco.KeyCode.Escape, () => undefined);
|
|
179
|
+
// Override default Monaco keybindings for `escape` and `shift-escape`
|
|
180
|
+
[[monaco.KeyCode.Escape], [monaco.KeyMod.Shift | monaco.KeyCode.Escape] // eslint-disable-line no-bitwise
|
|
181
|
+
].forEach(keybindings => {
|
|
182
|
+
assertNotNull(this.editor);
|
|
184
183
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
184
|
+
// Monaco default behavior is for escape key to close the find widget.
|
|
185
|
+
// Instead, capture it and do nothing. Same for shift-escape.
|
|
186
|
+
MonacoUtils.disableKeyBindings(this.editor, keybindings);
|
|
187
|
+
|
|
188
|
+
// Restore regular escape to clear selection, when editorText has focus.
|
|
189
|
+
this.editor.addAction({
|
|
190
|
+
id: 'clear-selection-on-escape',
|
|
191
|
+
label: '',
|
|
192
|
+
keybindings: [monaco.KeyCode.Escape],
|
|
193
|
+
keybindingContext: 'findWidgetVisible && editorTextFocus',
|
|
194
|
+
run: () => {
|
|
195
|
+
var _this$editor, _this$editor2;
|
|
196
|
+
var position = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getPosition();
|
|
197
|
+
assertNotNull(position);
|
|
198
|
+
(_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.setPosition(position);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
200
202
|
}
|
|
201
203
|
destroyMonaco() {
|
|
202
204
|
if (this.editor) {
|
|
@@ -205,12 +207,12 @@ class LogView extends PureComponent {
|
|
|
205
207
|
}
|
|
206
208
|
}
|
|
207
209
|
triggerFindWidget() {
|
|
208
|
-
var _this$
|
|
210
|
+
var _this$editor3, _this$editor4;
|
|
209
211
|
// The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.
|
|
210
212
|
// As a workaround, just focus the editor before triggering the action
|
|
211
213
|
// https://github.com/microsoft/monaco-editor/issues/2355
|
|
212
|
-
(_this$
|
|
213
|
-
(_this$
|
|
214
|
+
(_this$editor3 = this.editor) === null || _this$editor3 === void 0 ? void 0 : _this$editor3.focus();
|
|
215
|
+
(_this$editor4 = this.editor) === null || _this$editor4 === void 0 ? void 0 : _this$editor4.trigger('keyboard', 'actions.find', undefined);
|
|
214
216
|
}
|
|
215
217
|
toggleAll() {
|
|
216
218
|
var {
|
|
@@ -342,11 +344,11 @@ class LogView extends PureComponent {
|
|
|
342
344
|
}
|
|
343
345
|
}
|
|
344
346
|
scrollToBottom() {
|
|
345
|
-
var _this$
|
|
347
|
+
var _this$editor5, _this$editor5$getMode, _this$editor5$getMode2;
|
|
346
348
|
if (!this.editor) {
|
|
347
349
|
return;
|
|
348
350
|
}
|
|
349
|
-
var line = (_this$
|
|
351
|
+
var line = (_this$editor5 = this.editor) === null || _this$editor5 === void 0 ? void 0 : (_this$editor5$getMode = _this$editor5.getModel) === null || _this$editor5$getMode === void 0 ? void 0 : (_this$editor5$getMode2 = _this$editor5$getMode.call(_this$editor5)) === null || _this$editor5$getMode2 === void 0 ? void 0 : _this$editor5$getMode2.getLineCount();
|
|
350
352
|
assertNotNull(line);
|
|
351
353
|
this.editor.revealLine(line, 1);
|
|
352
354
|
}
|
|
@@ -360,8 +362,8 @@ class LogView extends PureComponent {
|
|
|
360
362
|
return this.isLineVisible(line);
|
|
361
363
|
}
|
|
362
364
|
isLineVisible(line) {
|
|
363
|
-
var _this$
|
|
364
|
-
var visibleRanges = (_this$
|
|
365
|
+
var _this$editor6;
|
|
366
|
+
var visibleRanges = (_this$editor6 = this.editor) === null || _this$editor6 === void 0 ? void 0 : _this$editor6.getVisibleRanges();
|
|
365
367
|
if (visibleRanges == null || visibleRanges.length === 0) {
|
|
366
368
|
return false;
|
|
367
369
|
}
|
package/dist/log/LogView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\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('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","MonacoUtils","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\nimport { MonacoUtils } from '../monaco';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\n });\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\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('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
|
|
@@ -57,23 +57,20 @@ declare class MonacoUtils {
|
|
|
57
57
|
static isMacPlatform(): boolean;
|
|
58
58
|
/**
|
|
59
59
|
* Remove any keybindings which are used for our own shortcuts.
|
|
60
|
-
* This allows the key events to bubble up so a component higher up can capture
|
|
61
|
-
*
|
|
60
|
+
* This allows the key events to bubble up so a component higher up can capture
|
|
61
|
+
* them. Note that this is a global configuration, so all editor instances will
|
|
62
|
+
* be impacted.
|
|
62
63
|
*/
|
|
63
|
-
static removeConflictingKeybindings(
|
|
64
|
+
static removeConflictingKeybindings(): void;
|
|
64
65
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* The issue for an API for this has apparently been open since 2016. Link below
|
|
72
|
-
* https://github.com/microsoft/monaco-editor/issues/102
|
|
73
|
-
* @param editor The editor to remove the keybinding from
|
|
74
|
-
* @param keybinding The key string to remove. E.g. 'ctrl+C' for copy on Windows
|
|
66
|
+
* Creates actions with a `noop` run function to disable specified keybindings.
|
|
67
|
+
* Note that this will swallow the events. To disable default keybindings in a
|
|
68
|
+
* way that allows events to propagate upward, see `removeConflictingKeybindings`
|
|
69
|
+
* @param editor Editor to disable keybindings for
|
|
70
|
+
* @param keybindings List of monaco keybindings to disable. Often a bitwise
|
|
71
|
+
* combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`
|
|
75
72
|
*/
|
|
76
|
-
static
|
|
73
|
+
static disableKeyBindings(editor: monaco.editor.IStandaloneCodeEditor, keybindings: number[]): void;
|
|
77
74
|
static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number;
|
|
78
75
|
static provideLinks(model: monaco.editor.ITextModel): {
|
|
79
76
|
links: monaco.languages.ILink[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAUjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iBAAiB,CAAC,EAAE,WAAW,CAAC;KACjC;CACF;AAED,cAAM,WAAW;IACf;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,EACV,SAAS,GACV,GAAE;QAAE,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;KAAO,GAAG,IAAI;IAgIvD;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI;IAOnE;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3C,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAkBrD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUjD;;;;OAIG;IACH,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,WAAW,kCAAqC,GAC/C,IAAI;IAIP;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,OAAO,EAAE,UAAU,GAClB,MAAM,CAAC,WAAW;IAwDrB,MAAM,CAAC,aAAa,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,OAAO,EAAE,UAAU,GAClB,IAAI;IAWP;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAC1C,IAAI;IA0BP,MAAM,CAAC,aAAa,IAAI,OAAO;IAK/B;;;;;OAKG;IACH,MAAM,CAAC,4BAA4B,IAAI,IAAI;IA2B3C;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI;IAUP,MAAM,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IA8B/D,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG;QACpD,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACjC;CA0BF;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -4,6 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
4
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
5
|
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); }
|
|
6
6
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
7
|
+
import shortid from 'shortid';
|
|
7
8
|
/**
|
|
8
9
|
* Exports a function for initializing monaco with the deephaven theme/config
|
|
9
10
|
*/
|
|
@@ -140,6 +141,7 @@ class MonacoUtils {
|
|
|
140
141
|
log.debug2('monaco theme: ', MonacoTheme);
|
|
141
142
|
monaco.editor.setTheme('dh-dark');
|
|
142
143
|
registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);
|
|
144
|
+
MonacoUtils.removeConflictingKeybindings();
|
|
143
145
|
log.debug('Monaco initialized.');
|
|
144
146
|
}
|
|
145
147
|
|
|
@@ -309,67 +311,54 @@ class MonacoUtils {
|
|
|
309
311
|
|
|
310
312
|
/**
|
|
311
313
|
* Remove any keybindings which are used for our own shortcuts.
|
|
312
|
-
* This allows the key events to bubble up so a component higher up can capture
|
|
313
|
-
*
|
|
314
|
+
* This allows the key events to bubble up so a component higher up can capture
|
|
315
|
+
* them. Note that this is a global configuration, so all editor instances will
|
|
316
|
+
* be impacted.
|
|
314
317
|
*/
|
|
315
|
-
static removeConflictingKeybindings(
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
//
|
|
320
|
-
//
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
318
|
+
static removeConflictingKeybindings() {
|
|
319
|
+
// All editor instances share a global keybinding registry which is where
|
|
320
|
+
// default keybindings are set. There doesn't appear to be a way to remove
|
|
321
|
+
// default bindings, but we can add new ones that will override the existing
|
|
322
|
+
// ones and set `command` to null. This will treat the key events as unhandled
|
|
323
|
+
// and allow them to bubble up.
|
|
324
|
+
monaco.editor.addKeybindingRule(
|
|
325
|
+
// Restart console in Enterprise (see Shortcuts.ts)
|
|
326
|
+
{
|
|
327
|
+
/* eslint-disable-next-line no-bitwise */
|
|
328
|
+
keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyD,
|
|
329
|
+
command: null
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
// Ctrl+H is used to focus Community console history in Windows + Linux.
|
|
333
|
+
// An alternate shortcut is used for Mac, so no need to override it
|
|
334
|
+
// (See ConsoleShortcuts.ts)
|
|
335
|
+
if (!MonacoUtils.isMacPlatform()) {
|
|
336
|
+
monaco.editor.addKeybindingRule({
|
|
337
|
+
/* eslint-disable-next-line no-bitwise */
|
|
338
|
+
keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyH,
|
|
339
|
+
command: null
|
|
333
340
|
});
|
|
334
|
-
} catch (err) {
|
|
335
|
-
// This is probably only caused by Monaco changing private methods used here
|
|
336
|
-
log.error(err);
|
|
337
341
|
}
|
|
338
342
|
}
|
|
339
343
|
|
|
340
344
|
/**
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
* The issue for an API for this has apparently been open since 2016. Link below
|
|
348
|
-
* https://github.com/microsoft/monaco-editor/issues/102
|
|
349
|
-
* @param editor The editor to remove the keybinding from
|
|
350
|
-
* @param keybinding The key string to remove. E.g. 'ctrl+C' for copy on Windows
|
|
345
|
+
* Creates actions with a `noop` run function to disable specified keybindings.
|
|
346
|
+
* Note that this will swallow the events. To disable default keybindings in a
|
|
347
|
+
* way that allows events to propagate upward, see `removeConflictingKeybindings`
|
|
348
|
+
* @param editor Editor to disable keybindings for
|
|
349
|
+
* @param keybindings List of monaco keybindings to disable. Often a bitwise
|
|
350
|
+
* combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`
|
|
351
351
|
*/
|
|
352
|
-
static
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
if (keybindings != null) {
|
|
362
|
-
keybindings.forEach(elem => {
|
|
363
|
-
log.debug2("Removing Monaco keybinding ".concat(keybinding, " for ").concat(elem.command));
|
|
364
|
-
// @ts-ignore
|
|
365
|
-
editor._standaloneKeybindingService.addDynamicKeybinding("-".concat(elem.command), null, () => undefined);
|
|
366
|
-
});
|
|
367
|
-
} else {
|
|
368
|
-
log.warn("Did not find any keybindings to remove for ".concat(keybinding));
|
|
369
|
-
}
|
|
370
|
-
/* eslint-enable no-underscore-dangle */
|
|
352
|
+
static disableKeyBindings(editor, keybindings) {
|
|
353
|
+
editor.addAction({
|
|
354
|
+
// This shouldn't be referenced by anything so using an arbitrary unique id
|
|
355
|
+
id: "disable-keybindings-".concat(shortid()),
|
|
356
|
+
label: '',
|
|
357
|
+
// This action won't be shown in the UI so no need for a label
|
|
358
|
+
keybindings,
|
|
359
|
+
run: () => undefined
|
|
360
|
+
});
|
|
371
361
|
}
|
|
372
|
-
|
|
373
362
|
static getMonacoKeyCodeFromShortcut(shortcut) {
|
|
374
363
|
var {
|
|
375
364
|
keyState
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoUtils.js","names":["assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoTheme","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","log","module","MonacoUtils","init","getWorker","debug","undefined","registerGetWorker","registerLanguages","removeHashtag","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","debug2","setTheme","window","MonacoEnvironment","color","languages","languageIds","map","id","getLanguages","filter","includes","forEach","languageParam","language","registerLanguage","register","onLanguage","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","length","change","range","rangeLength","contentChange","start","line","startLineNumber","character","startColumn","end","endLineNumber","endColumn","push","didChangeDocumentParams","changeDocument","closeDocument","didCloseDocumentParams","registerPasteHandler","onDidPaste","pasteEvent","smartQuotes","invalidChars","invalidSpaces","editorModel","pastedText","getValueInRange","test","applyEdits","replace","isMacPlatform","platform","navigator","startsWith","removeConflictingKeybindings","keybindings","windows","mac","keybinding","removeKeybinding","err","error","_standaloneKeybindingService","_getResolver","_map","get","elem","command","addDynamicKeybinding","warn","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","KeyMod","CtrlCmd","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString","provideLinks","newTokens","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport { Shortcut } from '@deephaven/components';\nimport type { IdeSession } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { find as linkifyFind } from 'linkifyjs';\nimport * as monaco from 'monaco-editor';\nimport type { Environment } from 'monaco-editor';\n// @ts-ignore\nimport { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';\nimport Log from '@deephaven/log';\nimport MonacoTheme from './MonacoTheme.module.scss';\nimport PyLang from './lang/python';\nimport GroovyLang from './lang/groovy';\nimport ScalaLang from './lang/scala';\nimport DbLang from './lang/db';\nimport LogLang from './lang/log';\nimport { Language } from './lang/Language';\n\nconst log = Log.module('MonacoUtils');\n\ndeclare global {\n interface Window {\n MonacoEnvironment?: Environment;\n }\n}\n\nclass MonacoUtils {\n /**\n * Initializes Monaco for the environment\n * @param getWorker The getWorker function Monaco should use\n * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)\n */\n static init({\n getWorker,\n }: { getWorker?: Environment['getWorker'] } = {}): void {\n log.debug('Initializing Monaco...');\n\n if (getWorker !== undefined) {\n MonacoUtils.registerGetWorker(getWorker);\n }\n\n const { registerLanguages, removeHashtag } = MonacoUtils;\n\n const dhDarkRules = [\n { token: '', foreground: removeHashtag(MonacoTheme.foreground) },\n { token: 'string', foreground: removeHashtag(MonacoTheme.string) },\n {\n token: 'string.delim',\n foreground: removeHashtag(MonacoTheme['string-delim']),\n },\n { token: 'keyword', foreground: removeHashtag(MonacoTheme.keyword) },\n {\n token: 'identifier.js',\n foreground: removeHashtag(MonacoTheme['identifier-js']),\n },\n {\n token: 'delimiter',\n foreground: removeHashtag(MonacoTheme.delimiter),\n },\n { token: 'comment', foreground: removeHashtag(MonacoTheme.comment) },\n { token: 'number', foreground: removeHashtag(MonacoTheme.number) },\n { token: 'storage', foreground: removeHashtag(MonacoTheme.storage) },\n {\n token: 'identifier',\n foreground: removeHashtag(MonacoTheme.identifier),\n },\n {\n token: 'namespace.identifier',\n foreground: removeHashtag(MonacoTheme['namespace-identifier']),\n },\n { token: 'operator', foreground: removeHashtag(MonacoTheme.operator) },\n {\n token: 'predefined',\n foreground: removeHashtag(MonacoTheme.predefined),\n },\n {\n token: 'error.log',\n foreground: MonacoTheme['log-error'].substring(1),\n },\n {\n token: 'warn.log',\n foreground: removeHashtag(MonacoTheme['log-warn']),\n },\n {\n token: 'info.log',\n foreground: removeHashtag(MonacoTheme['log-info']),\n },\n {\n token: 'stdout.log',\n foreground: removeHashtag(MonacoTheme['log-stdout']),\n },\n {\n token: 'trace.log',\n foreground: removeHashtag(MonacoTheme['log-trace']),\n },\n {\n token: 'debug.log',\n foreground: removeHashtag(MonacoTheme['log-debug']),\n },\n {\n token: 'date.log',\n foreground: removeHashtag(MonacoTheme['log-date']),\n },\n ];\n\n const dhDarkColors = {\n errorForeground: MonacoTheme['error-foreground'],\n 'inputOption.activeBorder': MonacoTheme['input-option-active-border'],\n 'editor.background': MonacoTheme.background,\n 'editor.foreground': MonacoTheme.foreground,\n 'editor.lineHighlightBackground': MonacoTheme['editor-line-highlight-bg'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.findMatchBackground': MonacoTheme['editor-find-match-background'],\n 'editor.findMatchHighlightBackground':\n MonacoTheme['editor-find-match-highlight-background'],\n 'editorSuggestWidget.background':\n MonacoTheme['editor-suggest-widget-background'],\n 'editorSuggestWidget.border': MonacoTheme['editor-suggest-widget-border'],\n 'editorSuggestWidget.foreground':\n MonacoTheme['editor-suggest-widget-foreground'],\n 'editorSuggestWidget.selectedBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'list.hoverBackground': MonacoTheme['list-hover-background'],\n 'dropdown.background': MonacoTheme['context-menu-background'],\n 'dropdown.foreground': MonacoTheme['context-menu-foreground'],\n 'menu.selectionBackground': MonacoTheme['menu-selection-background'],\n 'list.focusBackground': MonacoTheme['menu-selection-background'],\n 'editorWidget.background': MonacoTheme['editor-widget-background'],\n 'inputOption.activeBackground':\n MonacoTheme['input-option-active-background'],\n 'inputOption.activeForeground':\n MonacoTheme['input-option-active-foreground'],\n focusBorder: MonacoTheme['focus-border'],\n 'input.background': MonacoTheme['input-background'],\n 'input.foreground': MonacoTheme['input-foreground'],\n 'input.border': MonacoTheme['input-border'],\n 'textLink.foreground': MonacoTheme['text-link-foreground'],\n 'textLink.activeForeground': MonacoTheme['text-link-active-foreground'],\n 'editorLink.activeForeground':\n MonacoTheme['editor-link-active-foreground'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n log.debug2('monaco theme: ', MonacoTheme);\n monaco.editor.setTheme('dh-dark');\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Register the getWorker function for Monaco\n * @param getWorker The getWorker function for Monaco\n */\n static registerGetWorker(getWorker: Environment['getWorker']): void {\n window.MonacoEnvironment = {\n ...window.MonacoEnvironment,\n getWorker,\n };\n }\n\n /**\n * Remove the hashtag prefix from a CSS color string.\n * Monaco expects colors to be the value only, no hashtag.\n * @param color The hex color string to remove the hashtag from, eg. '#ffffff'\n */\n static removeHashtag(color: string): string {\n return color.substring(1);\n }\n\n static registerLanguages(languages: Language[]): void {\n // First override the default loader for any language we have a custom definition for\n // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867\n const languageIds = languages.map(({ id }) => id);\n monaco.languages\n .getLanguages()\n .filter(({ id }) => languageIds.includes(id))\n .forEach(languageParam => {\n const language = languageParam;\n log.debug2('Overriding default language loader:', language.id);\n });\n\n // Then register our language definitions\n languages.forEach(language => {\n MonacoUtils.registerLanguage(language);\n });\n }\n\n static registerLanguage(language: Language): void {\n log.debug2('Registering language: ', language.id);\n monaco.languages.register(language);\n\n monaco.languages.onLanguage(language.id, () => {\n monaco.languages.setLanguageConfiguration(language.id, language.conf);\n monaco.languages.setMonarchTokensProvider(language.id, language.language);\n });\n }\n\n /**\n * Set EOL preference for the editor\n * @param editor The editor to set the EOL for\n * @param eolSequence EOL sequence\n */\n static setEOL(\n editor: monaco.editor.IStandaloneCodeEditor,\n eolSequence = monaco.editor.EndOfLineSequence.LF\n ): void {\n editor.getModel()?.setEOL(eolSequence);\n }\n\n /**\n * Links an editor with a provided session to provide completion items.\n * @param session The IdeSession to link\n * @param editor The editor to link the session to\n * @returns A cleanup function for disposing of the created listeners\n */\n static openDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: IdeSession\n ): monaco.IDisposable {\n const model = editor.getModel();\n assertNotNull(model);\n const didOpenDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n languageId: model.getLanguageId(),\n version: model.getVersionId(),\n text: model.getValue(),\n },\n };\n log.debug2('didOpenDocumentParams: ', didOpenDocumentParams);\n\n session.openDocument(didOpenDocumentParams);\n\n const dispose = editor.onDidChangeModelContent(changedEvent => {\n const { changes, versionId } = changedEvent;\n\n const contentChanges = [];\n for (let i = 0; i < changes.length; i += 1) {\n const change = changes[i];\n const { range, rangeLength, text } = change;\n const contentChange = {\n range: {\n start: {\n line: range.startLineNumber - 1,\n character: range.startColumn - 1,\n },\n end: {\n line: range.endLineNumber - 1,\n character: range.endColumn - 1,\n },\n },\n rangeLength,\n text,\n };\n\n contentChanges.push(contentChange);\n }\n\n if (contentChanges.length > 0) {\n const didChangeDocumentParams = {\n textDocument: {\n version: versionId,\n uri: `${model.uri}`,\n },\n contentChanges,\n };\n log.debug2('didChangeDocumentParams', didChangeDocumentParams);\n session.changeDocument(didChangeDocumentParams);\n }\n });\n\n return dispose;\n }\n\n static closeDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: IdeSession\n ): void {\n const model = editor.getModel();\n assertNotNull(model);\n const didCloseDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n },\n };\n session.closeDocument(didCloseDocumentParams);\n }\n\n /**\n * Register a paste handle to clean up any garbage code pasted.\n * Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.\n * I've emailed Slack about the issue and they're working on it. I can't reference a ticket number because their ticket system is entirely internally facing.\n * @param editor The editor the register the paste handler for\n */\n static registerPasteHandler(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editor.onDidPaste(pasteEvent => {\n const smartQuotes = /“|”/g;\n const invalidChars = /\\u200b/g; // zero width space\n const invalidSpaces = /\\u00A0/g; // non-breaking space\n const editorModel = editor.getModel();\n assertNotNull(editorModel);\n const pastedText = editorModel.getValueInRange(pasteEvent.range);\n if (\n smartQuotes.test(pastedText) ||\n invalidChars.test(pastedText) ||\n invalidSpaces.test(pastedText)\n ) {\n editorModel.applyEdits([\n {\n range: pasteEvent.range,\n text: pastedText\n .replace(smartQuotes, '\"')\n .replace(invalidChars, '')\n .replace(invalidSpaces, ' '),\n },\n ]);\n }\n });\n }\n\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Remove any keybindings which are used for our own shortcuts.\n * This allows the key events to bubble up so a component higher up can capture them\n * @param editor The editor to remove the keybindings from\n */\n static removeConflictingKeybindings(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n // Multi-mod key events have a specific order\n // E.g. ctrl+alt+UpArrow is not found, but alt+ctrl+UpArrow is found\n // meta is WindowsKey on Windows and cmd on Mac\n // ctrl is ctrl Windows and ctrl on Mac\n // alt is alt on Windows and option on Mac\n const keybindings = [\n {\n windows: 'ctrl+D',\n mac: 'meta+D',\n },\n {\n windows: 'ctrl+H',\n },\n ];\n\n try {\n keybindings.forEach(keybinding => {\n if (\n (MonacoUtils.isMacPlatform() && keybinding.mac === '') ||\n (!MonacoUtils.isMacPlatform() && keybinding.windows === '')\n ) {\n return;\n }\n MonacoUtils.removeKeybinding(\n editor,\n MonacoUtils.isMacPlatform() ? keybinding.mac : keybinding.windows\n );\n });\n } catch (err) {\n // This is probably only caused by Monaco changing private methods used here\n log.error(err);\n }\n }\n\n /**\n * Remove a keybinding and allow the events to bubble up\n * If you want the keybinding removed for all editors, add it to removeConflictingKeybindings\n * Monaco still captures the event if you choose to override the keybinding with a no-op function\n *\n * Based on the following comment to remove a keybinding and let the event bubble up\n * https://github.com/microsoft/monaco-editor/issues/287#issuecomment-331447475\n * The issue for an API for this has apparently been open since 2016. Link below\n * https://github.com/microsoft/monaco-editor/issues/102\n * @param editor The editor to remove the keybinding from\n * @param keybinding The key string to remove. E.g. 'ctrl+C' for copy on Windows\n */\n static removeKeybinding(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybinding: string | undefined\n ): void {\n if (keybinding === undefined) {\n return;\n }\n\n /* eslint-disable no-underscore-dangle */\n // It's possible a single keybinding has multiple commands depending on context\n // @ts-ignore\n const keybindings = editor._standaloneKeybindingService\n ._getResolver()\n ._map.get(keybinding);\n\n if (keybindings != null) {\n keybindings.forEach((elem: { command: unknown }) => {\n log.debug2(\n `Removing Monaco keybinding ${keybinding} for ${elem.command}`\n );\n // @ts-ignore\n editor._standaloneKeybindingService.addDynamicKeybinding(\n `-${elem.command}`,\n null,\n () => undefined\n );\n });\n } else {\n log.warn(`Did not find any keybindings to remove for ${keybinding}`);\n }\n /* eslint-enable no-underscore-dangle */\n }\n\n static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number {\n const { keyState } = shortcut;\n const { keyValue } = keyState;\n if (keyValue === null) {\n return 0;\n }\n\n const isMac = MonacoUtils.isMacPlatform();\n\n if (isMac) {\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n static provideLinks(model: monaco.editor.ITextModel): {\n links: monaco.languages.ILink[];\n } {\n const newTokens: monaco.languages.ILink[] = [];\n\n for (let i = 1; i <= model.getLineCount(); i += 1) {\n const lineText = model.getLineContent(i);\n const originalTokens = linkifyFind(lineText);\n\n const tokens = originalTokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n // map the tokens to the ranges - you know the line number now, use the token start/end as the startColumn/endColumn\n tokens.forEach(token => {\n newTokens.push({\n url: token.href,\n range: new monaco.Range(i, token.start + 1, i, token.end + 1),\n });\n });\n }\n\n return {\n links: newTokens,\n };\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonacoUtils.js","names":["shortid","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoTheme","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","log","module","MonacoUtils","init","getWorker","debug","undefined","registerGetWorker","registerLanguages","removeHashtag","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","debug2","setTheme","removeConflictingKeybindings","window","MonacoEnvironment","color","languages","languageIds","map","id","getLanguages","filter","includes","forEach","languageParam","language","registerLanguage","register","onLanguage","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","length","change","range","rangeLength","contentChange","start","line","startLineNumber","character","startColumn","end","endLineNumber","endColumn","push","didChangeDocumentParams","changeDocument","closeDocument","didCloseDocumentParams","registerPasteHandler","onDidPaste","pasteEvent","smartQuotes","invalidChars","invalidSpaces","editorModel","pastedText","getValueInRange","test","applyEdits","replace","isMacPlatform","platform","navigator","startsWith","addKeybindingRule","keybinding","KeyMod","CtrlCmd","KeyCode","KeyD","command","KeyH","disableKeyBindings","keybindings","addAction","label","run","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString","provideLinks","newTokens","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport shortid from 'shortid';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport { Shortcut } from '@deephaven/components';\nimport type { IdeSession } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { find as linkifyFind } from 'linkifyjs';\nimport * as monaco from 'monaco-editor';\nimport type { Environment } from 'monaco-editor';\n// @ts-ignore\nimport { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';\nimport Log from '@deephaven/log';\nimport MonacoTheme from './MonacoTheme.module.scss';\nimport PyLang from './lang/python';\nimport GroovyLang from './lang/groovy';\nimport ScalaLang from './lang/scala';\nimport DbLang from './lang/db';\nimport LogLang from './lang/log';\nimport { Language } from './lang/Language';\n\nconst log = Log.module('MonacoUtils');\n\ndeclare global {\n interface Window {\n MonacoEnvironment?: Environment;\n }\n}\n\nclass MonacoUtils {\n /**\n * Initializes Monaco for the environment\n * @param getWorker The getWorker function Monaco should use\n * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)\n */\n static init({\n getWorker,\n }: { getWorker?: Environment['getWorker'] } = {}): void {\n log.debug('Initializing Monaco...');\n\n if (getWorker !== undefined) {\n MonacoUtils.registerGetWorker(getWorker);\n }\n\n const { registerLanguages, removeHashtag } = MonacoUtils;\n\n const dhDarkRules = [\n { token: '', foreground: removeHashtag(MonacoTheme.foreground) },\n { token: 'string', foreground: removeHashtag(MonacoTheme.string) },\n {\n token: 'string.delim',\n foreground: removeHashtag(MonacoTheme['string-delim']),\n },\n { token: 'keyword', foreground: removeHashtag(MonacoTheme.keyword) },\n {\n token: 'identifier.js',\n foreground: removeHashtag(MonacoTheme['identifier-js']),\n },\n {\n token: 'delimiter',\n foreground: removeHashtag(MonacoTheme.delimiter),\n },\n { token: 'comment', foreground: removeHashtag(MonacoTheme.comment) },\n { token: 'number', foreground: removeHashtag(MonacoTheme.number) },\n { token: 'storage', foreground: removeHashtag(MonacoTheme.storage) },\n {\n token: 'identifier',\n foreground: removeHashtag(MonacoTheme.identifier),\n },\n {\n token: 'namespace.identifier',\n foreground: removeHashtag(MonacoTheme['namespace-identifier']),\n },\n { token: 'operator', foreground: removeHashtag(MonacoTheme.operator) },\n {\n token: 'predefined',\n foreground: removeHashtag(MonacoTheme.predefined),\n },\n {\n token: 'error.log',\n foreground: MonacoTheme['log-error'].substring(1),\n },\n {\n token: 'warn.log',\n foreground: removeHashtag(MonacoTheme['log-warn']),\n },\n {\n token: 'info.log',\n foreground: removeHashtag(MonacoTheme['log-info']),\n },\n {\n token: 'stdout.log',\n foreground: removeHashtag(MonacoTheme['log-stdout']),\n },\n {\n token: 'trace.log',\n foreground: removeHashtag(MonacoTheme['log-trace']),\n },\n {\n token: 'debug.log',\n foreground: removeHashtag(MonacoTheme['log-debug']),\n },\n {\n token: 'date.log',\n foreground: removeHashtag(MonacoTheme['log-date']),\n },\n ];\n\n const dhDarkColors = {\n errorForeground: MonacoTheme['error-foreground'],\n 'inputOption.activeBorder': MonacoTheme['input-option-active-border'],\n 'editor.background': MonacoTheme.background,\n 'editor.foreground': MonacoTheme.foreground,\n 'editor.lineHighlightBackground': MonacoTheme['editor-line-highlight-bg'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.findMatchBackground': MonacoTheme['editor-find-match-background'],\n 'editor.findMatchHighlightBackground':\n MonacoTheme['editor-find-match-highlight-background'],\n 'editorSuggestWidget.background':\n MonacoTheme['editor-suggest-widget-background'],\n 'editorSuggestWidget.border': MonacoTheme['editor-suggest-widget-border'],\n 'editorSuggestWidget.foreground':\n MonacoTheme['editor-suggest-widget-foreground'],\n 'editorSuggestWidget.selectedBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'list.hoverBackground': MonacoTheme['list-hover-background'],\n 'dropdown.background': MonacoTheme['context-menu-background'],\n 'dropdown.foreground': MonacoTheme['context-menu-foreground'],\n 'menu.selectionBackground': MonacoTheme['menu-selection-background'],\n 'list.focusBackground': MonacoTheme['menu-selection-background'],\n 'editorWidget.background': MonacoTheme['editor-widget-background'],\n 'inputOption.activeBackground':\n MonacoTheme['input-option-active-background'],\n 'inputOption.activeForeground':\n MonacoTheme['input-option-active-foreground'],\n focusBorder: MonacoTheme['focus-border'],\n 'input.background': MonacoTheme['input-background'],\n 'input.foreground': MonacoTheme['input-foreground'],\n 'input.border': MonacoTheme['input-border'],\n 'textLink.foreground': MonacoTheme['text-link-foreground'],\n 'textLink.activeForeground': MonacoTheme['text-link-active-foreground'],\n 'editorLink.activeForeground':\n MonacoTheme['editor-link-active-foreground'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n log.debug2('monaco theme: ', MonacoTheme);\n monaco.editor.setTheme('dh-dark');\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Register the getWorker function for Monaco\n * @param getWorker The getWorker function for Monaco\n */\n static registerGetWorker(getWorker: Environment['getWorker']): void {\n window.MonacoEnvironment = {\n ...window.MonacoEnvironment,\n getWorker,\n };\n }\n\n /**\n * Remove the hashtag prefix from a CSS color string.\n * Monaco expects colors to be the value only, no hashtag.\n * @param color The hex color string to remove the hashtag from, eg. '#ffffff'\n */\n static removeHashtag(color: string): string {\n return color.substring(1);\n }\n\n static registerLanguages(languages: Language[]): void {\n // First override the default loader for any language we have a custom definition for\n // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867\n const languageIds = languages.map(({ id }) => id);\n monaco.languages\n .getLanguages()\n .filter(({ id }) => languageIds.includes(id))\n .forEach(languageParam => {\n const language = languageParam;\n log.debug2('Overriding default language loader:', language.id);\n });\n\n // Then register our language definitions\n languages.forEach(language => {\n MonacoUtils.registerLanguage(language);\n });\n }\n\n static registerLanguage(language: Language): void {\n log.debug2('Registering language: ', language.id);\n monaco.languages.register(language);\n\n monaco.languages.onLanguage(language.id, () => {\n monaco.languages.setLanguageConfiguration(language.id, language.conf);\n monaco.languages.setMonarchTokensProvider(language.id, language.language);\n });\n }\n\n /**\n * Set EOL preference for the editor\n * @param editor The editor to set the EOL for\n * @param eolSequence EOL sequence\n */\n static setEOL(\n editor: monaco.editor.IStandaloneCodeEditor,\n eolSequence = monaco.editor.EndOfLineSequence.LF\n ): void {\n editor.getModel()?.setEOL(eolSequence);\n }\n\n /**\n * Links an editor with a provided session to provide completion items.\n * @param session The IdeSession to link\n * @param editor The editor to link the session to\n * @returns A cleanup function for disposing of the created listeners\n */\n static openDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: IdeSession\n ): monaco.IDisposable {\n const model = editor.getModel();\n assertNotNull(model);\n const didOpenDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n languageId: model.getLanguageId(),\n version: model.getVersionId(),\n text: model.getValue(),\n },\n };\n log.debug2('didOpenDocumentParams: ', didOpenDocumentParams);\n\n session.openDocument(didOpenDocumentParams);\n\n const dispose = editor.onDidChangeModelContent(changedEvent => {\n const { changes, versionId } = changedEvent;\n\n const contentChanges = [];\n for (let i = 0; i < changes.length; i += 1) {\n const change = changes[i];\n const { range, rangeLength, text } = change;\n const contentChange = {\n range: {\n start: {\n line: range.startLineNumber - 1,\n character: range.startColumn - 1,\n },\n end: {\n line: range.endLineNumber - 1,\n character: range.endColumn - 1,\n },\n },\n rangeLength,\n text,\n };\n\n contentChanges.push(contentChange);\n }\n\n if (contentChanges.length > 0) {\n const didChangeDocumentParams = {\n textDocument: {\n version: versionId,\n uri: `${model.uri}`,\n },\n contentChanges,\n };\n log.debug2('didChangeDocumentParams', didChangeDocumentParams);\n session.changeDocument(didChangeDocumentParams);\n }\n });\n\n return dispose;\n }\n\n static closeDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: IdeSession\n ): void {\n const model = editor.getModel();\n assertNotNull(model);\n const didCloseDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n },\n };\n session.closeDocument(didCloseDocumentParams);\n }\n\n /**\n * Register a paste handle to clean up any garbage code pasted.\n * Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.\n * I've emailed Slack about the issue and they're working on it. I can't reference a ticket number because their ticket system is entirely internally facing.\n * @param editor The editor the register the paste handler for\n */\n static registerPasteHandler(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editor.onDidPaste(pasteEvent => {\n const smartQuotes = /“|”/g;\n const invalidChars = /\\u200b/g; // zero width space\n const invalidSpaces = /\\u00A0/g; // non-breaking space\n const editorModel = editor.getModel();\n assertNotNull(editorModel);\n const pastedText = editorModel.getValueInRange(pasteEvent.range);\n if (\n smartQuotes.test(pastedText) ||\n invalidChars.test(pastedText) ||\n invalidSpaces.test(pastedText)\n ) {\n editorModel.applyEdits([\n {\n range: pasteEvent.range,\n text: pastedText\n .replace(smartQuotes, '\"')\n .replace(invalidChars, '')\n .replace(invalidSpaces, ' '),\n },\n ]);\n }\n });\n }\n\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Remove any keybindings which are used for our own shortcuts.\n * This allows the key events to bubble up so a component higher up can capture\n * them. Note that this is a global configuration, so all editor instances will\n * be impacted.\n */\n static removeConflictingKeybindings(): void {\n // All editor instances share a global keybinding registry which is where\n // default keybindings are set. There doesn't appear to be a way to remove\n // default bindings, but we can add new ones that will override the existing\n // ones and set `command` to null. This will treat the key events as unhandled\n // and allow them to bubble up.\n monaco.editor.addKeybindingRule(\n // Restart console in Enterprise (see Shortcuts.ts)\n {\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyD,\n command: null,\n }\n );\n\n // Ctrl+H is used to focus Community console history in Windows + Linux.\n // An alternate shortcut is used for Mac, so no need to override it\n // (See ConsoleShortcuts.ts)\n if (!MonacoUtils.isMacPlatform()) {\n monaco.editor.addKeybindingRule({\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyH,\n command: null,\n });\n }\n }\n\n /**\n * Creates actions with a `noop` run function to disable specified keybindings.\n * Note that this will swallow the events. To disable default keybindings in a\n * way that allows events to propagate upward, see `removeConflictingKeybindings`\n * @param editor Editor to disable keybindings for\n * @param keybindings List of monaco keybindings to disable. Often a bitwise\n * combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`\n */\n static disableKeyBindings(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybindings: number[]\n ): void {\n editor.addAction({\n // This shouldn't be referenced by anything so using an arbitrary unique id\n id: `disable-keybindings-${shortid()}`,\n label: '', // This action won't be shown in the UI so no need for a label\n keybindings,\n run: () => undefined,\n });\n }\n\n static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number {\n const { keyState } = shortcut;\n const { keyValue } = keyState;\n if (keyValue === null) {\n return 0;\n }\n\n const isMac = MonacoUtils.isMacPlatform();\n\n if (isMac) {\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n static provideLinks(model: monaco.editor.ITextModel): {\n links: monaco.languages.ILink[];\n } {\n const newTokens: monaco.languages.ILink[] = [];\n\n for (let i = 1; i <= model.getLineCount(); i += 1) {\n const lineText = model.getLineContent(i);\n const originalTokens = linkifyFind(lineText);\n\n const tokens = originalTokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n // map the tokens to the ranges - you know the line number now, use the token start/end as the startColumn/endColumn\n tokens.forEach(token => {\n newTokens.push({\n url: token.href,\n range: new monaco.Range(i, token.start + 1, i, token.end + 1),\n });\n });\n }\n\n return {\n links: newTokens,\n };\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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"}
|
|
@@ -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;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;
|
|
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;IAgDlB,aAAa,IAAI,IAAI;IAQrB,MAAM,IAAI,YAAY;CAWvB;AAED,eAAe,MAAM,CAAC"}
|
package/dist/notebook/Editor.js
CHANGED
|
@@ -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","links","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","
|
|
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","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\n this.editor = monaco.editor.create(this.container, settings);\n\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\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/console",
|
|
3
|
-
"version": "0.45.2-beta.
|
|
3
|
+
"version": "0.45.2-beta.9+e0ac8d90",
|
|
4
4
|
"description": "Deephaven Console",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@deephaven/chart": "^0.45.2-beta.
|
|
27
|
-
"@deephaven/components": "^0.45.2-beta.
|
|
28
|
-
"@deephaven/icons": "^0.45.2-beta.
|
|
29
|
-
"@deephaven/jsapi-bootstrap": "^0.45.2-beta.
|
|
30
|
-
"@deephaven/jsapi-types": "^0.45.2-beta.
|
|
31
|
-
"@deephaven/log": "^0.45.2-beta.
|
|
32
|
-
"@deephaven/storage": "^0.45.2-beta.
|
|
33
|
-
"@deephaven/utils": "^0.45.2-beta.
|
|
26
|
+
"@deephaven/chart": "^0.45.2-beta.9+e0ac8d90",
|
|
27
|
+
"@deephaven/components": "^0.45.2-beta.9+e0ac8d90",
|
|
28
|
+
"@deephaven/icons": "^0.45.2-beta.9+e0ac8d90",
|
|
29
|
+
"@deephaven/jsapi-bootstrap": "^0.45.2-beta.9+e0ac8d90",
|
|
30
|
+
"@deephaven/jsapi-types": "^0.45.2-beta.9+e0ac8d90",
|
|
31
|
+
"@deephaven/log": "^0.45.2-beta.9+e0ac8d90",
|
|
32
|
+
"@deephaven/storage": "^0.45.2-beta.9+e0ac8d90",
|
|
33
|
+
"@deephaven/utils": "^0.45.2-beta.9+e0ac8d90",
|
|
34
34
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
35
35
|
"classnames": "^2.3.1",
|
|
36
36
|
"linkifyjs": "^4.1.0",
|
|
@@ -38,19 +38,20 @@
|
|
|
38
38
|
"lodash.throttle": "^4.1.1",
|
|
39
39
|
"memoize-one": "^5.1.1",
|
|
40
40
|
"memoizee": "^0.4.15",
|
|
41
|
-
"monaco-editor": "^0.
|
|
41
|
+
"monaco-editor": "^0.41.0",
|
|
42
42
|
"papaparse": "5.3.2",
|
|
43
43
|
"popper.js": "^1.16.1",
|
|
44
44
|
"prop-types": "^15.7.2",
|
|
45
|
-
"shell-quote": "^1.7.2"
|
|
45
|
+
"shell-quote": "^1.7.2",
|
|
46
|
+
"shortid": "^2.2.16"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"react": "^17.x",
|
|
49
50
|
"react-dom": "^17.x"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
52
|
-
"@deephaven/jsapi-shim": "^0.45.2-beta.
|
|
53
|
-
"@deephaven/mocks": "^0.45.2-beta.
|
|
53
|
+
"@deephaven/jsapi-shim": "^0.45.2-beta.9+e0ac8d90",
|
|
54
|
+
"@deephaven/mocks": "^0.45.2-beta.9+e0ac8d90"
|
|
54
55
|
},
|
|
55
56
|
"files": [
|
|
56
57
|
"dist"
|
|
@@ -61,5 +62,5 @@
|
|
|
61
62
|
"publishConfig": {
|
|
62
63
|
"access": "public"
|
|
63
64
|
},
|
|
64
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "e0ac8d90d12e6f6ceb75d4eacc112779c7d88199"
|
|
65
66
|
}
|