@deephaven/console 1.22.1 → 1.22.2-alpha-pivot-builder.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/Console.js +85 -141
  2. package/dist/Console.js.map +1 -1
  3. package/dist/ConsoleInput.js +23 -41
  4. package/dist/ConsoleInput.js.map +1 -1
  5. package/dist/ConsoleObjectsMenu.js +13 -8
  6. package/dist/ConsoleObjectsMenu.js.map +1 -1
  7. package/dist/ConsoleStatusBar.js +15 -10
  8. package/dist/ConsoleStatusBar.js.map +1 -1
  9. package/dist/HeapUsage.js +33 -26
  10. package/dist/HeapUsage.js.map +1 -1
  11. package/dist/command-history/CommandHistory.js +45 -76
  12. package/dist/command-history/CommandHistory.js.map +1 -1
  13. package/dist/command-history/CommandHistoryActions.js +3 -4
  14. package/dist/command-history/CommandHistoryActions.js.map +1 -1
  15. package/dist/command-history/CommandHistoryItem.js +5 -6
  16. package/dist/command-history/CommandHistoryItem.js.map +1 -1
  17. package/dist/command-history/CommandHistoryItemTooltip.js +20 -33
  18. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  19. package/dist/command-history/CommandHistoryViewportUpdater.js +10 -9
  20. package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
  21. package/dist/common/Code.js +14 -8
  22. package/dist/common/Code.js.map +1 -1
  23. package/dist/common/ObjectIcon.js +1 -3
  24. package/dist/common/ObjectIcon.js.map +1 -1
  25. package/dist/console-history/ConsoleHistory.js +8 -9
  26. package/dist/console-history/ConsoleHistory.js.map +1 -1
  27. package/dist/console-history/ConsoleHistoryItem.js +17 -32
  28. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  29. package/dist/console-history/ConsoleHistoryItemActions.js +3 -5
  30. package/dist/console-history/ConsoleHistoryItemActions.js.map +1 -1
  31. package/dist/console-history/ConsoleHistoryItemResult.js +1 -3
  32. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  33. package/dist/console-history/ConsoleHistoryItemTooltip.js +4 -8
  34. package/dist/console-history/ConsoleHistoryItemTooltip.js.map +1 -1
  35. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +4 -7
  36. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  37. package/dist/console-history/ConsoleHistoryResultInProgress.js +4 -7
  38. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  39. package/dist/csv/CsvInputBar.js +51 -67
  40. package/dist/csv/CsvInputBar.js.map +1 -1
  41. package/dist/csv/CsvOverlay.js +19 -31
  42. package/dist/csv/CsvOverlay.js.map +1 -1
  43. package/dist/csv/CsvParser.js +25 -36
  44. package/dist/csv/CsvParser.js.map +1 -1
  45. package/dist/csv/CsvTypeParser.js +4 -10
  46. package/dist/csv/CsvTypeParser.js.map +1 -1
  47. package/dist/log/LogLevelMenuItem.js +6 -8
  48. package/dist/log/LogLevelMenuItem.js.map +1 -1
  49. package/dist/log/LogView.js +9 -27
  50. package/dist/log/LogView.js.map +1 -1
  51. package/dist/monaco/MonacoProviders.js +27 -41
  52. package/dist/monaco/MonacoProviders.js.map +1 -1
  53. package/dist/monaco/MonacoThemeProvider.js +3 -6
  54. package/dist/monaco/MonacoThemeProvider.js.map +1 -1
  55. package/dist/monaco/MonacoUtils.js +17 -36
  56. package/dist/monaco/MonacoUtils.js.map +1 -1
  57. package/dist/monaco/RuffSettingsModal.js +29 -17
  58. package/dist/monaco/RuffSettingsModal.js.map +1 -1
  59. package/dist/notebook/Editor.js +4 -12
  60. package/dist/notebook/Editor.js.map +1 -1
  61. package/dist/notebook/ScriptEditor.js +34 -51
  62. package/dist/notebook/ScriptEditor.js.map +1 -1
  63. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoUtils.js","names":["nanoid","throttle","resolveCssVariablesInRecord","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoThemeRaw","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","MonacoProviders","log","module","CONSOLE_URI_PREFIX","MonacoUtils","init","getWorker","arguments","length","undefined","debug","registerGetWorker","initTheme","registerLanguages","languages","onLanguage","registerCodeActionProvider","provideCodeActions","handlePythonCodeActionRequest","providedCodeActionKinds","registerDocumentFormattingEditProvider","provideDocumentFormattingEdits","handlePythonFormatRequest","editor","onDidCreateModel","model","getLanguageId","ruffWorkspace","lintPython","throttledLint","m","onDidChangeContent","removeConflictingKeybindings","_MonacoTheme$logErro","_MonacoTheme$logErro2","removeHashtag","MonacoTheme","debug2","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","defineTheme","base","inherit","rules","colors","setTheme","err","error","window","MonacoEnvironment","_objectSpread","color","_color$substring","languageIds","map","_ref","id","getLanguages","filter","_ref2","includes","forEach","languageParam","language","registerLanguage","register","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","_editor$getModel","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","didOpenDocumentParams","textDocument","uri","concat","languageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","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","_loop","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links","generateConsoleUri","Uri","parse","isConsoleModel","toString","canFormat","_editor$getAction","getAction","isSupported","formatDocument","_asyncToGenerator","_editor$getAction2"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { nanoid } from 'nanoid';\nimport throttle from 'lodash.throttle';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport {\n resolveCssVariablesInRecord,\n type Shortcut,\n} from '@deephaven/components';\nimport type { dh } 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 MonacoThemeRaw 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 { type Language } from './lang/Language';\nimport MonacoProviders from './MonacoProviders';\n\nconst log = Log.module('MonacoUtils');\n\nconst CONSOLE_URI_PREFIX = 'inmemory://dh-console/';\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 { initTheme, registerLanguages } = MonacoUtils;\n\n initTheme();\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n monaco.languages.onLanguage('python', () => {\n monaco.languages.registerCodeActionProvider(\n 'python',\n {\n provideCodeActions: MonacoProviders.handlePythonCodeActionRequest,\n },\n { providedCodeActionKinds: ['quickfix'] }\n );\n\n monaco.languages.registerDocumentFormattingEditProvider('python', {\n provideDocumentFormattingEdits:\n MonacoProviders.handlePythonFormatRequest,\n });\n });\n\n monaco.editor.onDidCreateModel(model => {\n // Lint Python models on creation and on change\n if (model.getLanguageId() === 'python') {\n if (MonacoProviders.ruffWorkspace != null) {\n MonacoProviders.lintPython(model);\n }\n\n const throttledLint = throttle(\n (m: monaco.editor.ITextModel) => MonacoProviders.lintPython(m),\n 250\n );\n\n model.onDidChangeContent(() => {\n throttledLint(model);\n });\n }\n });\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Initialize current Monaco theme based on the current DH theme.\n */\n static initTheme(): void {\n const { removeHashtag } = MonacoUtils;\n\n const MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);\n log.debug2('Monaco theme:', MonacoThemeRaw);\n log.debug2('Monaco theme derived:', MonacoTheme);\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 foreground: MonacoTheme.foreground,\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':\n MonacoTheme['editor-line-highlight-background'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editorLineNumber.activeForeground':\n MonacoTheme['editor-line-number-active-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.inactiveSelectionBackground':\n MonacoTheme['editor-inactive-selection-background'],\n 'editor.selectionHighlightBackground':\n MonacoTheme['editor-selection-highlight-background'],\n 'editor.wordHighlightBackground':\n MonacoTheme['editor-word-highlight-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 'list.activeSelectionBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.selectedForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'list.activeSelectionForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'editorSuggestWidget.focusHighlightForeground':\n MonacoTheme['editor-suggest-widget-focus-highlight-foreground'],\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 'menu.selectionForeground': MonacoTheme['menu-selection-foreground'],\n 'keybindingLabel.foreground': MonacoTheme['menu-selection-foreground'],\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 'editorBracketHighlight.foreground1':\n MonacoTheme['editor-bracket-foreground1'],\n 'editorBracketHighlight.foreground2':\n MonacoTheme['editor-bracket-foreground2'],\n 'editorBracketHighlight.foreground3':\n MonacoTheme['editor-bracket-foreground3'],\n 'editorBracketHighlight.foreground4':\n MonacoTheme['editor-bracket-foreground4'],\n 'editorBracketHighlight.foreground5':\n MonacoTheme['editor-bracket-foreground5'],\n 'editorBracketHighlight.foreground6':\n MonacoTheme['editor-bracket-foreground6'],\n 'editorBracketHighlight.unexpectedBracket.foreground':\n MonacoTheme['editor-unexpected-bracket-foreground'],\n 'diffEditor.insertedTextBackground':\n MonacoTheme['diff-editor-inserted-text-background'],\n 'diffEditor.removedTextBackground':\n MonacoTheme['diff-editor-removed-text-background'],\n 'diffEditor.insertedLineBackground':\n MonacoTheme['diff-editor-inserted-line-background'],\n 'diffEditor.removedLineBackground':\n MonacoTheme['diff-editor-removed-line-background'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n\n try {\n monaco.editor.setTheme('dh-dark');\n } catch (err) {\n log.error(\n `Failed to set 'dh-dark' Monaco theme, falling back to vs-dark`,\n err\n );\n monaco.editor.setTheme('vs-dark');\n }\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: dh.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: dh.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-${nanoid()}`,\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 /**\n * Generates a console URI for use with monaco.\n * @returns A new console URI\n */\n static generateConsoleUri(): monaco.Uri {\n return monaco.Uri.parse(`${CONSOLE_URI_PREFIX}${nanoid()}`);\n }\n\n /**\n * Checks if a model is a console model based on its URI.\n * @param model The monaco model to check\n * @returns If the model is a console model\n */\n static isConsoleModel(model: monaco.editor.ITextModel): boolean {\n return model.uri.toString().startsWith(CONSOLE_URI_PREFIX);\n }\n\n /**\n * Checks if the editor has the formatDocument action registered.\n * @param editor The monaco editor to check\n * @returns If the editor has a document formatter registered\n */\n static canFormat(editor: monaco.editor.IStandaloneCodeEditor): boolean {\n return (\n editor.getAction('editor.action.formatDocument')?.isSupported() === true\n );\n }\n\n /**\n * Runs the formatDocument action on the editor.\n * @param editor The editor to format\n */\n static async formatDocument(\n editor: monaco.editor.IStandaloneCodeEditor\n ): Promise<void> {\n await editor.getAction('editor.action.formatDocument')?.run();\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MonacoUtils.js","names":["nanoid","throttle","resolveCssVariablesInRecord","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoThemeRaw","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","MonacoProviders","log","module","CONSOLE_URI_PREFIX","MonacoUtils","init","_ref","arguments","length","undefined","getWorker","debug","registerGetWorker","initTheme","registerLanguages","languages","onLanguage","registerCodeActionProvider","provideCodeActions","handlePythonCodeActionRequest","providedCodeActionKinds","registerDocumentFormattingEditProvider","provideDocumentFormattingEdits","handlePythonFormatRequest","editor","onDidCreateModel","model","getLanguageId","ruffWorkspace","lintPython","throttledLint","m","onDidChangeContent","removeConflictingKeybindings","_MonacoTheme$logErro","_MonacoTheme$logErro2","removeHashtag","MonacoTheme","debug2","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","defineTheme","base","inherit","rules","colors","setTheme","err","error","window","MonacoEnvironment","_objectSpread","color","_color$substring","languageIds","map","_ref2","id","getLanguages","filter","_ref3","includes","forEach","languageParam","language","registerLanguage","register","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","_editor$getModel","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","didOpenDocumentParams","textDocument","uri","concat","languageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","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","_loop","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links","generateConsoleUri","Uri","parse","isConsoleModel","toString","canFormat","_editor$getAction","getAction","isSupported","formatDocument","_asyncToGenerator","_editor$getAction2"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { nanoid } from 'nanoid';\nimport throttle from 'lodash.throttle';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport {\n resolveCssVariablesInRecord,\n type Shortcut,\n} from '@deephaven/components';\nimport type { dh } 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 MonacoThemeRaw 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 { type Language } from './lang/Language';\nimport MonacoProviders from './MonacoProviders';\n\nconst log = Log.module('MonacoUtils');\n\nconst CONSOLE_URI_PREFIX = 'inmemory://dh-console/';\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 { initTheme, registerLanguages } = MonacoUtils;\n\n initTheme();\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n monaco.languages.onLanguage('python', () => {\n monaco.languages.registerCodeActionProvider(\n 'python',\n {\n provideCodeActions: MonacoProviders.handlePythonCodeActionRequest,\n },\n { providedCodeActionKinds: ['quickfix'] }\n );\n\n monaco.languages.registerDocumentFormattingEditProvider('python', {\n provideDocumentFormattingEdits:\n MonacoProviders.handlePythonFormatRequest,\n });\n });\n\n monaco.editor.onDidCreateModel(model => {\n // Lint Python models on creation and on change\n if (model.getLanguageId() === 'python') {\n if (MonacoProviders.ruffWorkspace != null) {\n MonacoProviders.lintPython(model);\n }\n\n const throttledLint = throttle(\n (m: monaco.editor.ITextModel) => MonacoProviders.lintPython(m),\n 250\n );\n\n model.onDidChangeContent(() => {\n throttledLint(model);\n });\n }\n });\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Initialize current Monaco theme based on the current DH theme.\n */\n static initTheme(): void {\n const { removeHashtag } = MonacoUtils;\n\n const MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);\n log.debug2('Monaco theme:', MonacoThemeRaw);\n log.debug2('Monaco theme derived:', MonacoTheme);\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 foreground: MonacoTheme.foreground,\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':\n MonacoTheme['editor-line-highlight-background'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editorLineNumber.activeForeground':\n MonacoTheme['editor-line-number-active-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.inactiveSelectionBackground':\n MonacoTheme['editor-inactive-selection-background'],\n 'editor.selectionHighlightBackground':\n MonacoTheme['editor-selection-highlight-background'],\n 'editor.wordHighlightBackground':\n MonacoTheme['editor-word-highlight-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 'list.activeSelectionBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.selectedForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'list.activeSelectionForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'editorSuggestWidget.focusHighlightForeground':\n MonacoTheme['editor-suggest-widget-focus-highlight-foreground'],\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 'menu.selectionForeground': MonacoTheme['menu-selection-foreground'],\n 'keybindingLabel.foreground': MonacoTheme['menu-selection-foreground'],\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 'editorBracketHighlight.foreground1':\n MonacoTheme['editor-bracket-foreground1'],\n 'editorBracketHighlight.foreground2':\n MonacoTheme['editor-bracket-foreground2'],\n 'editorBracketHighlight.foreground3':\n MonacoTheme['editor-bracket-foreground3'],\n 'editorBracketHighlight.foreground4':\n MonacoTheme['editor-bracket-foreground4'],\n 'editorBracketHighlight.foreground5':\n MonacoTheme['editor-bracket-foreground5'],\n 'editorBracketHighlight.foreground6':\n MonacoTheme['editor-bracket-foreground6'],\n 'editorBracketHighlight.unexpectedBracket.foreground':\n MonacoTheme['editor-unexpected-bracket-foreground'],\n 'diffEditor.insertedTextBackground':\n MonacoTheme['diff-editor-inserted-text-background'],\n 'diffEditor.removedTextBackground':\n MonacoTheme['diff-editor-removed-text-background'],\n 'diffEditor.insertedLineBackground':\n MonacoTheme['diff-editor-inserted-line-background'],\n 'diffEditor.removedLineBackground':\n MonacoTheme['diff-editor-removed-line-background'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n\n try {\n monaco.editor.setTheme('dh-dark');\n } catch (err) {\n log.error(\n `Failed to set 'dh-dark' Monaco theme, falling back to vs-dark`,\n err\n );\n monaco.editor.setTheme('vs-dark');\n }\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: dh.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: dh.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-${nanoid()}`,\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 /**\n * Generates a console URI for use with monaco.\n * @returns A new console URI\n */\n static generateConsoleUri(): monaco.Uri {\n return monaco.Uri.parse(`${CONSOLE_URI_PREFIX}${nanoid()}`);\n }\n\n /**\n * Checks if a model is a console model based on its URI.\n * @param model The monaco model to check\n * @returns If the model is a console model\n */\n static isConsoleModel(model: monaco.editor.ITextModel): boolean {\n return model.uri.toString().startsWith(CONSOLE_URI_PREFIX);\n }\n\n /**\n * Checks if the editor has the formatDocument action registered.\n * @param editor The monaco editor to check\n * @returns If the editor has a document formatter registered\n */\n static canFormat(editor: monaco.editor.IStandaloneCodeEditor): boolean {\n return (\n editor.getAction('editor.action.formatDocument')?.isSupported() === true\n );\n }\n\n /**\n * Runs the formatDocument action on the editor.\n * @param editor The editor to format\n */\n static async formatDocument(\n editor: monaco.editor.IStandaloneCodeEditor\n ): Promise<void> {\n await editor.getAction('editor.action.formatDocument')?.run();\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
8
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
9
  import React, { useCallback, useMemo, useRef, useState } from 'react';
@@ -16,9 +22,8 @@ import MonacoProviders from "./MonacoProviders.js";
16
22
  import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
17
23
  var RUFF_SETTINGS_URI = monaco.Uri.parse('inmemory://dh-config/ruff-settings.json');
18
24
  function registerRuffSchema() {
19
- var {
20
- schemas = []
21
- } = monaco.languages.json.jsonDefaults.diagnosticsOptions;
25
+ var _monaco$languages$jso = monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas,
26
+ schemas = _monaco$languages$jso === void 0 ? [] : _monaco$languages$jso;
22
27
  if (!schemas.some(schema => schema.uri === 'json://ruff-schema')) {
23
28
  // Register the ruff schema so users get validation and completion
24
29
  monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
@@ -41,22 +46,29 @@ function _getRuffVersion() {
41
46
  return _getRuffVersion.apply(this, arguments);
42
47
  }
43
48
  export default function RuffSettingsModal(_ref) {
44
- var {
45
- text,
46
- isOpen,
47
- onClose,
48
- onSave,
49
- readOnly = false,
50
- defaultSettings = RUFF_DEFAULT_SETTINGS
51
- } = _ref;
52
- var [isValid, setIsValid] = useState(false);
53
- var [isDefault, setIsDefault] = useState(false);
49
+ var text = _ref.text,
50
+ isOpen = _ref.isOpen,
51
+ onClose = _ref.onClose,
52
+ onSave = _ref.onSave,
53
+ _ref$readOnly = _ref.readOnly,
54
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
55
+ _ref$defaultSettings = _ref.defaultSettings,
56
+ defaultSettings = _ref$defaultSettings === void 0 ? RUFF_DEFAULT_SETTINGS : _ref$defaultSettings;
57
+ var _useState = useState(false),
58
+ _useState2 = _slicedToArray(_useState, 2),
59
+ isValid = _useState2[0],
60
+ setIsValid = _useState2[1];
61
+ var _useState3 = useState(false),
62
+ _useState4 = _slicedToArray(_useState3, 2),
63
+ isDefault = _useState4[0],
64
+ setIsDefault = _useState4[1];
54
65
  var editorRef = useRef();
55
66
  var formattedDefaultSettings = useMemo(() => JSON.stringify(defaultSettings, null, 2), [defaultSettings]);
56
- var {
57
- data: ruffVersion
58
- } = usePromiseFactory(getRuffVersion);
59
- var [model] = useState(() => monaco.editor.createModel(text, 'json', RUFF_SETTINGS_URI));
67
+ var _usePromiseFactory = usePromiseFactory(getRuffVersion),
68
+ ruffVersion = _usePromiseFactory.data;
69
+ var _useState5 = useState(() => monaco.editor.createModel(text, 'json', RUFF_SETTINGS_URI)),
70
+ _useState6 = _slicedToArray(_useState5, 1),
71
+ model = _useState6[0];
60
72
  var handleClose = useCallback(() => {
61
73
  if (isOpen) {
62
74
  onClose();
@@ -1 +1 @@
1
- {"version":3,"file":"RuffSettingsModal.js","names":["React","useCallback","useMemo","useRef","useState","monaco","Workspace","FontAwesomeIcon","ActionButton","Button","Icon","Link","Modal","ModalBody","ModalFooter","ModalHeader","Text","vsLinkExternal","vsDiscard","useDebouncedCallback","usePromiseFactory","assertNotNull","EMPTY_FUNCTION","Editor","RUFF_DEFAULT_SETTINGS","ruffSchema","MonacoProviders","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","RUFF_SETTINGS_URI","Uri","parse","registerRuffSchema","schemas","languages","json","jsonDefaults","diagnosticsOptions","some","schema","uri","setDiagnosticsOptions","fileMatch","toString","getRuffVersion","_getRuffVersion","apply","arguments","_asyncToGenerator","initRuff","concat","version","RuffSettingsModal","_ref","text","isOpen","onClose","onSave","readOnly","defaultSettings","isValid","setIsValid","isDefault","setIsDefault","editorRef","formattedDefaultSettings","JSON","stringify","data","ruffVersion","model","editor","createModel","handleClose","current","undefined","dispose","handleSave","_editorRef$current$ge","_editorRef$current","getModel","getValue","_unused","handleReset","setValue","validate","val","_editorRef$current2","_unused2","debouncedValidate","leading","onEditorInitialized","onDidChangeContent","centered","keyboard","clickOutside","toggle","size","className","children","closeButton","href","target","kind","onClick","icon","isDisabled","onPress","style","height","settings","value","language","folding","padding","bottom","lineNumbers","overviewRulerLanes","tooltip","disabled"],"sources":["../../src/monaco/RuffSettingsModal.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport * as monaco from 'monaco-editor';\nimport { Workspace } from '@astral-sh/ruff-wasm-web';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ActionButton,\n Button,\n Icon,\n Link,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Text,\n} from '@deephaven/components';\nimport { vsLinkExternal, vsDiscard } from '@deephaven/icons';\nimport {\n useDebouncedCallback,\n usePromiseFactory,\n} from '@deephaven/react-hooks';\nimport { assertNotNull, EMPTY_FUNCTION } from '@deephaven/utils';\nimport Editor from '../notebook/Editor';\nimport RUFF_DEFAULT_SETTINGS from './RuffDefaultSettings';\nimport ruffSchema from './ruffSchema';\nimport './RuffSettingsModal.scss';\nimport MonacoProviders from './MonacoProviders';\n\ninterface RuffSettingsModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n onSave: (value: Record<string, unknown>) => void;\n readOnly?: boolean;\n defaultSettings?: Record<string, unknown>;\n}\n\nconst RUFF_SETTINGS_URI = monaco.Uri.parse(\n 'inmemory://dh-config/ruff-settings.json'\n);\n\nfunction registerRuffSchema(): void {\n const { schemas = [] } =\n monaco.languages.json.jsonDefaults.diagnosticsOptions;\n\n if (!schemas.some(schema => schema.uri === 'json://ruff-schema')) {\n // Register the ruff schema so users get validation and completion\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: [\n ...schemas,\n {\n uri: 'json://ruff-schema',\n fileMatch: [RUFF_SETTINGS_URI.toString()],\n schema: ruffSchema,\n },\n ],\n });\n }\n}\n\nasync function getRuffVersion(): Promise<string> {\n await MonacoProviders.initRuff();\n return `v${Workspace.version()}`;\n}\n\nexport default function RuffSettingsModal({\n text,\n isOpen,\n onClose,\n onSave,\n readOnly = false,\n defaultSettings = RUFF_DEFAULT_SETTINGS,\n}: RuffSettingsModalProps): React.ReactElement | null {\n const [isValid, setIsValid] = useState(false);\n const [isDefault, setIsDefault] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n const formattedDefaultSettings = useMemo(\n () => JSON.stringify(defaultSettings, null, 2),\n [defaultSettings]\n );\n\n const { data: ruffVersion } = usePromiseFactory(getRuffVersion);\n\n const [model] = useState(() =>\n monaco.editor.createModel(text, 'json', RUFF_SETTINGS_URI)\n );\n\n const handleClose = useCallback((): void => {\n if (isOpen) {\n onClose();\n editorRef.current = undefined;\n model.dispose();\n }\n }, [isOpen, onClose, model]);\n\n const handleSave = useCallback((): void => {\n if (isOpen) {\n try {\n onSave(JSON.parse(editorRef.current?.getModel()?.getValue() ?? ''));\n } catch {\n // no-op\n }\n handleClose();\n }\n }, [isOpen, handleClose, onSave]);\n\n const handleReset = useCallback((): void => {\n assertNotNull(model);\n model.setValue(formattedDefaultSettings);\n }, [model, formattedDefaultSettings]);\n\n const validate = useCallback(\n (val: string) => {\n try {\n JSON.parse(val);\n setIsValid(true);\n } catch {\n setIsValid(false);\n }\n setIsDefault(\n editorRef.current?.getModel()?.getValue() === formattedDefaultSettings\n );\n },\n [formattedDefaultSettings]\n );\n\n const debouncedValidate = useDebouncedCallback(validate, 500, {\n leading: true,\n });\n\n const onEditorInitialized = useCallback(\n (editor: monaco.editor.IStandaloneCodeEditor): void => {\n editorRef.current = editor;\n\n model.onDidChangeContent(() => {\n debouncedValidate(model.getValue());\n });\n\n registerRuffSchema();\n debouncedValidate(model.getValue());\n },\n [debouncedValidate, model]\n );\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n clickOutside={false}\n toggle={handleClose}\n size=\"lg\"\n className=\"ruff-settings-modal\"\n >\n <ModalHeader closeButton={false}>\n <span className=\"settings-modal-title mr-auto\">\n Ruff {ruffVersion} Settings\n </span>\n\n <Link href=\"https://docs.astral.sh/ruff/settings/\" target=\"_blank\">\n <Button kind=\"ghost\" onClick={EMPTY_FUNCTION} icon={vsLinkExternal}>\n Settings Docs\n </Button>\n </Link>\n\n <ActionButton isDisabled={isDefault} onPress={handleReset}>\n <Icon>\n <FontAwesomeIcon icon={vsDiscard} />\n </Icon>\n <Text>Reset to default</Text>\n </ActionButton>\n </ModalHeader>\n <ModalBody style={{ height: '80vh' }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n readOnly,\n value: text,\n language: 'json',\n folding: true,\n padding: { bottom: 16 },\n lineNumbers: 'on',\n overviewRulerLanes: 0,\n model,\n }}\n />\n </ModalBody>\n <ModalFooter>\n {readOnly ? (\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Close\n </Button>\n ) : (\n <>\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n data-dismiss=\"modal\"\n tooltip={!isValid ? 'Cannot save invalid JSON' : undefined}\n disabled={!isValid}\n onClick={handleSave}\n >\n Save\n </Button>\n </>\n )}\n </ModalFooter>\n </Modal>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"RuffSettingsModal.js","names":["React","useCallback","useMemo","useRef","useState","monaco","Workspace","FontAwesomeIcon","ActionButton","Button","Icon","Link","Modal","ModalBody","ModalFooter","ModalHeader","Text","vsLinkExternal","vsDiscard","useDebouncedCallback","usePromiseFactory","assertNotNull","EMPTY_FUNCTION","Editor","RUFF_DEFAULT_SETTINGS","ruffSchema","MonacoProviders","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","RUFF_SETTINGS_URI","Uri","parse","registerRuffSchema","_monaco$languages$jso","languages","json","jsonDefaults","diagnosticsOptions","schemas","some","schema","uri","setDiagnosticsOptions","fileMatch","toString","getRuffVersion","_getRuffVersion","apply","arguments","_asyncToGenerator","initRuff","concat","version","RuffSettingsModal","_ref","text","isOpen","onClose","onSave","_ref$readOnly","readOnly","_ref$defaultSettings","defaultSettings","_useState","_useState2","_slicedToArray","isValid","setIsValid","_useState3","_useState4","isDefault","setIsDefault","editorRef","formattedDefaultSettings","JSON","stringify","_usePromiseFactory","ruffVersion","data","_useState5","editor","createModel","_useState6","model","handleClose","current","undefined","dispose","handleSave","_editorRef$current$ge","_editorRef$current","getModel","getValue","_unused","handleReset","setValue","validate","val","_editorRef$current2","_unused2","debouncedValidate","leading","onEditorInitialized","onDidChangeContent","centered","keyboard","clickOutside","toggle","size","className","children","closeButton","href","target","kind","onClick","icon","isDisabled","onPress","style","height","settings","value","language","folding","padding","bottom","lineNumbers","overviewRulerLanes","tooltip","disabled"],"sources":["../../src/monaco/RuffSettingsModal.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport * as monaco from 'monaco-editor';\nimport { Workspace } from '@astral-sh/ruff-wasm-web';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ActionButton,\n Button,\n Icon,\n Link,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Text,\n} from '@deephaven/components';\nimport { vsLinkExternal, vsDiscard } from '@deephaven/icons';\nimport {\n useDebouncedCallback,\n usePromiseFactory,\n} from '@deephaven/react-hooks';\nimport { assertNotNull, EMPTY_FUNCTION } from '@deephaven/utils';\nimport Editor from '../notebook/Editor';\nimport RUFF_DEFAULT_SETTINGS from './RuffDefaultSettings';\nimport ruffSchema from './ruffSchema';\nimport './RuffSettingsModal.scss';\nimport MonacoProviders from './MonacoProviders';\n\ninterface RuffSettingsModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n onSave: (value: Record<string, unknown>) => void;\n readOnly?: boolean;\n defaultSettings?: Record<string, unknown>;\n}\n\nconst RUFF_SETTINGS_URI = monaco.Uri.parse(\n 'inmemory://dh-config/ruff-settings.json'\n);\n\nfunction registerRuffSchema(): void {\n const { schemas = [] } =\n monaco.languages.json.jsonDefaults.diagnosticsOptions;\n\n if (!schemas.some(schema => schema.uri === 'json://ruff-schema')) {\n // Register the ruff schema so users get validation and completion\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: [\n ...schemas,\n {\n uri: 'json://ruff-schema',\n fileMatch: [RUFF_SETTINGS_URI.toString()],\n schema: ruffSchema,\n },\n ],\n });\n }\n}\n\nasync function getRuffVersion(): Promise<string> {\n await MonacoProviders.initRuff();\n return `v${Workspace.version()}`;\n}\n\nexport default function RuffSettingsModal({\n text,\n isOpen,\n onClose,\n onSave,\n readOnly = false,\n defaultSettings = RUFF_DEFAULT_SETTINGS,\n}: RuffSettingsModalProps): React.ReactElement | null {\n const [isValid, setIsValid] = useState(false);\n const [isDefault, setIsDefault] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n const formattedDefaultSettings = useMemo(\n () => JSON.stringify(defaultSettings, null, 2),\n [defaultSettings]\n );\n\n const { data: ruffVersion } = usePromiseFactory(getRuffVersion);\n\n const [model] = useState(() =>\n monaco.editor.createModel(text, 'json', RUFF_SETTINGS_URI)\n );\n\n const handleClose = useCallback((): void => {\n if (isOpen) {\n onClose();\n editorRef.current = undefined;\n model.dispose();\n }\n }, [isOpen, onClose, model]);\n\n const handleSave = useCallback((): void => {\n if (isOpen) {\n try {\n onSave(JSON.parse(editorRef.current?.getModel()?.getValue() ?? ''));\n } catch {\n // no-op\n }\n handleClose();\n }\n }, [isOpen, handleClose, onSave]);\n\n const handleReset = useCallback((): void => {\n assertNotNull(model);\n model.setValue(formattedDefaultSettings);\n }, [model, formattedDefaultSettings]);\n\n const validate = useCallback(\n (val: string) => {\n try {\n JSON.parse(val);\n setIsValid(true);\n } catch {\n setIsValid(false);\n }\n setIsDefault(\n editorRef.current?.getModel()?.getValue() === formattedDefaultSettings\n );\n },\n [formattedDefaultSettings]\n );\n\n const debouncedValidate = useDebouncedCallback(validate, 500, {\n leading: true,\n });\n\n const onEditorInitialized = useCallback(\n (editor: monaco.editor.IStandaloneCodeEditor): void => {\n editorRef.current = editor;\n\n model.onDidChangeContent(() => {\n debouncedValidate(model.getValue());\n });\n\n registerRuffSchema();\n debouncedValidate(model.getValue());\n },\n [debouncedValidate, model]\n );\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n clickOutside={false}\n toggle={handleClose}\n size=\"lg\"\n className=\"ruff-settings-modal\"\n >\n <ModalHeader closeButton={false}>\n <span className=\"settings-modal-title mr-auto\">\n Ruff {ruffVersion} Settings\n </span>\n\n <Link href=\"https://docs.astral.sh/ruff/settings/\" target=\"_blank\">\n <Button kind=\"ghost\" onClick={EMPTY_FUNCTION} icon={vsLinkExternal}>\n Settings Docs\n </Button>\n </Link>\n\n <ActionButton isDisabled={isDefault} onPress={handleReset}>\n <Icon>\n <FontAwesomeIcon icon={vsDiscard} />\n </Icon>\n <Text>Reset to default</Text>\n </ActionButton>\n </ModalHeader>\n <ModalBody style={{ height: '80vh' }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n readOnly,\n value: text,\n language: 'json',\n folding: true,\n padding: { bottom: 16 },\n lineNumbers: 'on',\n overviewRulerLanes: 0,\n model,\n }}\n />\n </ModalBody>\n <ModalFooter>\n {readOnly ? (\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Close\n </Button>\n ) : (\n <>\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n data-dismiss=\"modal\"\n tooltip={!isValid ? 'Cannot save invalid JSON' : undefined}\n disabled={!isValid}\n onClick={handleSave}\n >\n Save\n </Button>\n </>\n )}\n </ModalFooter>\n </Modal>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -54,12 +54,8 @@ class Editor extends Component {
54
54
  (_this$editor = this.editor) === null || _this$editor === void 0 || _this$editor.layout();
55
55
  }
56
56
  initEditor() {
57
- var {
58
- onEditorInitialized
59
- } = this.props;
60
- var {
61
- settings
62
- } = this.props;
57
+ var onEditorInitialized = this.props.onEditorInitialized;
58
+ var settings = this.props.settings;
63
59
  settings = _objectSpread({
64
60
  copyWithSyntaxHighlighting: false,
65
61
  fixedOverflowWidgets: true,
@@ -101,18 +97,14 @@ class Editor extends Component {
101
97
  onEditorInitialized(this.editor);
102
98
  }
103
99
  destroyEditor() {
104
- var {
105
- onEditorWillDestroy
106
- } = this.props;
100
+ var onEditorWillDestroy = this.props.onEditorWillDestroy;
107
101
  assertNotNull(this.editor);
108
102
  onEditorWillDestroy(this.editor);
109
103
  this.editor.dispose();
110
104
  this.editor = undefined;
111
105
  }
112
106
  render() {
113
- var {
114
- className
115
- } = this.props;
107
+ var className = this.props.className;
116
108
  return /*#__PURE__*/_jsx("div", {
117
109
  className: classNames('editor-container', className),
118
110
  ref: container => {
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","jsx","_jsx","Editor","constructor","props","_defineProperty","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","_this$editor","layout","onEditorInitialized","settings","_objectSpread","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","links","autoClosingBrackets","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","languages","registerLinkProvider","provideLinks","onEditorWillDestroy","dispose","render","className","ref"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, type 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\nexport interface 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 autoClosingBrackets: 'beforeWhitespace',\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":";;;;;AAAA;AACA;AACA;AACA,OAAOA,KAAK,IAAIC,SAAS,QAA2B,OAAO;AAC3D,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,aAAa,QAAQ,kBAAkB;AAAC,OAC1CC,WAAW;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAUlB,MAAMC,MAAM,SAASP,SAAS,CAAqC;EAQjEQ,WAAWA,CAACC,KAAkB,EAAE;IAC9B,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAEb,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAEhD,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,KAAK,GAAG,CAAC,CAAC;EACjB;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACC,UAAU,CAAC,CAAC;IAEjBC,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACP,YAAY,CAAC;EACtD;EAEAQ,oBAAoBA,CAAA,EAAS;IAC3BF,MAAM,CAACG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACT,YAAY,CAAC;IAEvD,IAAI,CAACU,aAAa,CAAC,CAAC;EACtB;EAMAC,WAAWA,CAACC,QAAgB,EAAQ;IAClC,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAMC,KAAK,GAAG,IAAI,CAACD,MAAM,CAACE,QAAQ,CAAC,CAAC;MACpCvB,aAAa,CAACsB,KAAK,CAAC;MACpBvB,MAAM,CAACsB,MAAM,CAACG,gBAAgB,CAACF,KAAK,EAAEF,QAAQ,CAAC;IACjD;EACF;EAEAZ,YAAYA,CAAA,EAAS;IACnB,IAAI,CAACiB,gBAAgB,CAAC,CAAC;EACzB;EAEAC,UAAUA,CAAA,EAAS;IACjB,IAAI,IAAI,CAACL,MAAM,EAAE;MACf;MACA;MACA;MACA,IAAI,CAACA,MAAM,CAACM,KAAK,CAAC,CAAC;MACnB,IAAI,CAACN,MAAM,CAACO,OAAO,CAAC,YAAY,EAAE,cAAc,EAAEC,SAAS,CAAC;IAC9D;EACF;EAEAJ,gBAAgBA,CAAA,EAAS;IAAA,IAAAK,YAAA;IACvB,CAAAA,YAAA,OAAI,CAACT,MAAM,cAAAS,YAAA,eAAXA,YAAA,CAAaC,MAAM,CAAC,CAAC;EACvB;EAEAlB,UAAUA,CAAA,EAAS;IACjB,IAAM;MAAEmB;IAAoB,CAAC,GAAG,IAAI,CAAC1B,KAAK;IAC1C,IAAI;MAAE2B;IAAS,CAAC,GAAG,IAAI,CAAC3B,KAAK;IAC7B2B,QAAQ,GAAAC,aAAA;MACNC,0BAA0B,EAAE,KAAK;MACjCC,oBAAoB,EAAE,IAAI;MAC1BC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,WAAW;MACvBC,WAAW,EAAE,KAAK;MAClBnB,QAAQ,UAAU;MAClBoB,mBAAmB,EAAE,CAAC;MACtBC,OAAO,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAC3BC,oBAAoB,EAAE,KAAK;MAC3BC,aAAa,EAAE,IAAI;MACnBC,KAAK,EAAE,EAAE;MACTC,QAAQ,EAAE,KAAK;MACfC,KAAK,EAAE,IAAI;MACXC,mBAAmB,EAAE;IAAkB,GACpCf,QAAQ,CACZ;IACDjC,aAAa,CAAC,IAAI,CAACU,SAAS,CAAC;IAE7B,IAAI,CAACW,MAAM,GAAGtB,MAAM,CAACsB,MAAM,CAAC4B,MAAM,CAAC,IAAI,CAACvC,SAAS,EAAEuB,QAAQ,CAAC;IAE5D,IAAI,CAACZ,MAAM,CAAC6B,SAAS,CAAC;MACpBC,EAAE,EAAE,MAAM;MACVC,KAAK,EAAE,MAAM;MACbC,WAAW,EAAE;MACX;MACAtD,MAAM,CAACuD,MAAM,CAACC,OAAO,GAAGxD,MAAM,CAACyD,OAAO,CAACC,IAAI,CAC5C;MACDC,YAAY,EAAE7B,SAAS;MACvB8B,iBAAiB,EAAE9B,SAAS;MAC5B+B,kBAAkB,EAAE,YAAY;MAChCC,gBAAgB,EAAE,GAAG;MAErBC,GAAG,EAAEA,CAAA,KAAM;QACT,IAAI,CAACpC,UAAU,CAAC,CAAC;MACnB;IACF,CAAC,CAAC;IACF,IAAI,CAACL,MAAM,CAACU,MAAM,CAAC,CAAC;IAEpBhC,MAAM,CAACgE,SAAS,CAACC,oBAAoB,CAAC,WAAW,EAAE;MACjDC,YAAY,EAAEhE,WAAW,CAACgE;IAC5B,CAAC,CAAC;IAEFjC,mBAAmB,CAAC,IAAI,CAACX,MAAM,CAAC;EAClC;EAEAH,aAAaA,CAAA,EAAS;IACpB,IAAM;MAAEgD;IAAoB,CAAC,GAAG,IAAI,CAAC5D,KAAK;IAC1CN,aAAa,CAAC,IAAI,CAACqB,MAAM,CAAC;IAC1B6C,mBAAmB,CAAC,IAAI,CAAC7C,MAAM,CAAC;IAChC,IAAI,CAACA,MAAM,CAAC8C,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC9C,MAAM,GAAGQ,SAAS;EACzB;EAEAuC,MAAMA,CAAA,EAAiB;IACrB,IAAM;MAAEC;IAAU,CAAC,GAAG,IAAI,CAAC/D,KAAK;IAChC,oBACEH,IAAA;MACEkE,SAAS,EAAEvE,UAAU,CAAC,kBAAkB,EAAEuE,SAAS,CAAE;MACrDC,GAAG,EAAE5D,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B;IAAE,CACH,CAAC;EAEN;AACF;AAACH,eAAA,CA/HKH,MAAM,kBACY;EACpBiE,SAAS,EAAE,sBAAsB;EACjCrC,mBAAmB,EAAEA,CAAA,KAAYH,SAAS;EAC1CqC,mBAAmB,EAAEA,CAAA,KAAYrC,SAAS;EAC1CI,QAAQ,EAAE,CAAC;AACb,CAAC;AA2HH,eAAe7B,MAAM","ignoreList":[]}
1
+ {"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","jsx","_jsx","Editor","constructor","props","_defineProperty","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","_this$editor","layout","onEditorInitialized","settings","_objectSpread","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","links","autoClosingBrackets","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","languages","registerLinkProvider","provideLinks","onEditorWillDestroy","dispose","render","className","ref"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, type 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\nexport interface 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 autoClosingBrackets: 'beforeWhitespace',\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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","ignoreList":[]}
@@ -38,10 +38,9 @@ class ScriptEditor extends Component {
38
38
  }
39
39
  componentDidUpdate(prevProps) {
40
40
  var _prevProps$settings, _prevProps$settings2;
41
- var {
42
- sessionLanguage,
43
- settings
44
- } = this.props;
41
+ var _this$props = this.props,
42
+ sessionLanguage = _this$props.sessionLanguage,
43
+ settings = _this$props.settings;
45
44
  var language = settings === null || settings === void 0 ? void 0 : settings.language;
46
45
  var languageChanged = language !== ((_prevProps$settings = prevProps.settings) === null || _prevProps$settings === void 0 ? void 0 : _prevProps$settings.language);
47
46
  if (languageChanged) {
@@ -79,13 +78,9 @@ class ScriptEditor extends Component {
79
78
  assertNotNull(range);
80
79
  var model = (_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.getModel();
81
80
  assertNotNull(model);
82
- var {
83
- startLineNumber,
84
- endColumn
85
- } = range;
86
- var {
87
- endLineNumber
88
- } = range;
81
+ var startLineNumber = range.startLineNumber,
82
+ endColumn = range.endColumn;
83
+ var endLineNumber = range.endLineNumber;
89
84
  if (endColumn === 1 && endLineNumber > startLineNumber) {
90
85
  endLineNumber -= 1;
91
86
  }
@@ -95,14 +90,13 @@ class ScriptEditor extends Component {
95
90
  return ScriptEditorUtils.outdentCode(model.getValueInRange(wholeLineRange));
96
91
  }
97
92
  handleEditorInitialized(innerEditor) {
98
- var {
99
- focusOnMount,
100
- onChange,
101
- onEditorInitialized,
102
- settings,
103
- session,
104
- sessionLanguage
105
- } = this.props;
93
+ var _this$props2 = this.props,
94
+ focusOnMount = _this$props2.focusOnMount,
95
+ onChange = _this$props2.onChange,
96
+ onEditorInitialized = _this$props2.onEditorInitialized,
97
+ settings = _this$props2.settings,
98
+ session = _this$props2.session,
99
+ sessionLanguage = _this$props2.sessionLanguage;
106
100
  log.debug('handleEditorInitialized', sessionLanguage, session, settings);
107
101
  this.editor = innerEditor;
108
102
  this.setState({
@@ -125,9 +119,7 @@ class ScriptEditor extends Component {
125
119
  }
126
120
  handleEditorWillDestroy(innerEditor) {
127
121
  log.debug('handleEditorWillDestroy');
128
- var {
129
- onEditorWillDestroy
130
- } = this.props;
122
+ var onEditorWillDestroy = this.props.onEditorWillDestroy;
131
123
  onEditorWillDestroy(innerEditor);
132
124
  this.deInitContextActions();
133
125
  this.deInitCodeCompletion();
@@ -137,12 +129,11 @@ class ScriptEditor extends Component {
137
129
  this.editor = undefined;
138
130
  }
139
131
  handleRun() {
140
- var {
141
- onRunCommand,
142
- session,
143
- sessionLanguage,
144
- settings
145
- } = this.props;
132
+ var _this$props3 = this.props,
133
+ onRunCommand = _this$props3.onRunCommand,
134
+ session = _this$props3.session,
135
+ sessionLanguage = _this$props3.sessionLanguage,
136
+ settings = _this$props3.settings;
146
137
  var command = this.getValue();
147
138
  var language = settings === null || settings === void 0 ? void 0 : settings.language;
148
139
  var languageMatch = language === sessionLanguage;
@@ -155,12 +146,11 @@ class ScriptEditor extends Component {
155
146
  }
156
147
  }
157
148
  handleRunSelected() {
158
- var {
159
- onRunCommand,
160
- session,
161
- sessionLanguage,
162
- settings
163
- } = this.props;
149
+ var _this$props4 = this.props,
150
+ onRunCommand = _this$props4.onRunCommand,
151
+ session = _this$props4.session,
152
+ sessionLanguage = _this$props4.sessionLanguage,
153
+ settings = _this$props4.settings;
164
154
  var command = this.getSelectedCommand();
165
155
  var language = settings === null || settings === void 0 ? void 0 : settings.language;
166
156
  var languageMatch = language === sessionLanguage;
@@ -216,18 +206,14 @@ class ScriptEditor extends Component {
216
206
  log.error('Code completion already initialized.');
217
207
  return;
218
208
  }
219
- var {
220
- session
221
- } = this.props;
209
+ var session = this.props.session;
222
210
  log.debug('initCodeCompletion', this.editor, session);
223
211
  if (this.editor && session != null) {
224
212
  this.completionCleanup = MonacoUtils.openDocument(this.editor, session);
225
213
  }
226
214
  }
227
215
  deInitCodeCompletion() {
228
- var {
229
- session
230
- } = this.props;
216
+ var session = this.props.session;
231
217
  log.debug('deInitCodeCompletion', this.editor, session);
232
218
  if (this.completionCleanup) {
233
219
  this.completionCleanup.dispose();
@@ -282,17 +268,14 @@ class ScriptEditor extends Component {
282
268
  }
283
269
  render() {
284
270
  var _settings$language;
285
- var {
286
- error,
287
- isLoaded,
288
- isLoading,
289
- session,
290
- sessionLanguage,
291
- settings
292
- } = this.props;
293
- var {
294
- model
295
- } = this.state;
271
+ var _this$props5 = this.props,
272
+ error = _this$props5.error,
273
+ isLoaded = _this$props5.isLoaded,
274
+ isLoading = _this$props5.isLoading,
275
+ session = _this$props5.session,
276
+ sessionLanguage = _this$props5.sessionLanguage,
277
+ settings = _this$props5.settings;
278
+ var model = this.state.model;
296
279
  var errorMessage = error ? "Unable to open document. ".concat(error) : null;
297
280
  var editorLanguage = settings ? (_settings$language = settings.language) !== null && _settings$language !== void 0 ? _settings$language : null : null;
298
281
  var completionProviderEnabled = model && session && editorLanguage === sessionLanguage;