@deephaven/console 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/Console.css +44 -0
  2. package/dist/Console.css.map +1 -0
  3. package/dist/Console.js +875 -0
  4. package/dist/Console.js.map +1 -0
  5. package/dist/ConsoleInput.css +42 -0
  6. package/dist/ConsoleInput.css.map +1 -0
  7. package/dist/ConsoleInput.js +442 -0
  8. package/dist/ConsoleInput.js.map +1 -0
  9. package/dist/ConsoleMenu.css +25 -0
  10. package/dist/ConsoleMenu.css.map +1 -0
  11. package/dist/ConsoleMenu.js +192 -0
  12. package/dist/ConsoleMenu.js.map +1 -0
  13. package/dist/ConsolePropTypes.js +10 -0
  14. package/dist/ConsolePropTypes.js.map +1 -0
  15. package/dist/ConsoleShortcuts.js +85 -0
  16. package/dist/ConsoleShortcuts.js.map +1 -0
  17. package/dist/ConsoleStatusBar.css +52 -0
  18. package/dist/ConsoleStatusBar.css.map +1 -0
  19. package/dist/ConsoleStatusBar.js +105 -0
  20. package/dist/ConsoleStatusBar.js.map +1 -0
  21. package/dist/HeapUsage.css +61 -0
  22. package/dist/HeapUsage.css.map +1 -0
  23. package/dist/HeapUsage.js +168 -0
  24. package/dist/HeapUsage.js.map +1 -0
  25. package/dist/StoragePropTypes.js +16 -0
  26. package/dist/StoragePropTypes.js.map +1 -0
  27. package/dist/command-history/CommandHistory.css +41 -0
  28. package/dist/command-history/CommandHistory.css.map +1 -0
  29. package/dist/command-history/CommandHistory.js +381 -0
  30. package/dist/command-history/CommandHistory.js.map +1 -0
  31. package/dist/command-history/CommandHistoryActions.css +10 -0
  32. package/dist/command-history/CommandHistoryActions.css.map +1 -0
  33. package/dist/command-history/CommandHistoryActions.js +47 -0
  34. package/dist/command-history/CommandHistoryActions.js.map +1 -0
  35. package/dist/command-history/CommandHistoryItem.css +61 -0
  36. package/dist/command-history/CommandHistoryItem.css.map +1 -0
  37. package/dist/command-history/CommandHistoryItem.js +50 -0
  38. package/dist/command-history/CommandHistoryItem.js.map +1 -0
  39. package/dist/command-history/CommandHistoryItemTooltip.css +37 -0
  40. package/dist/command-history/CommandHistoryItemTooltip.css.map +1 -0
  41. package/dist/command-history/CommandHistoryItemTooltip.js +159 -0
  42. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -0
  43. package/dist/command-history/CommandHistoryStorage.js +2 -0
  44. package/dist/command-history/CommandHistoryStorage.js.map +1 -0
  45. package/dist/command-history/CommandHistoryTypes.js +2 -0
  46. package/dist/command-history/CommandHistoryTypes.js.map +1 -0
  47. package/dist/command-history/CommandHistoryViewportUpdater.js +57 -0
  48. package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -0
  49. package/dist/command-history/index.js +7 -0
  50. package/dist/command-history/index.js.map +1 -0
  51. package/dist/common/Code.js +45 -0
  52. package/dist/common/Code.js.map +1 -0
  53. package/dist/common/ConsoleConstants.js +10 -0
  54. package/dist/common/ConsoleConstants.js.map +1 -0
  55. package/dist/common/ConsoleUtils.js +62 -0
  56. package/dist/common/ConsoleUtils.js.map +1 -0
  57. package/dist/common/ObjectIcon.js +33 -0
  58. package/dist/common/ObjectIcon.js.map +1 -0
  59. package/dist/common/index.js +5 -0
  60. package/dist/common/index.js.map +1 -0
  61. package/dist/console-history/ConsoleHistory.css +42 -0
  62. package/dist/console-history/ConsoleHistory.css.map +1 -0
  63. package/dist/console-history/ConsoleHistory.js +42 -0
  64. package/dist/console-history/ConsoleHistory.js.map +1 -0
  65. package/dist/console-history/ConsoleHistoryItem.css +87 -0
  66. package/dist/console-history/ConsoleHistoryItem.css.map +1 -0
  67. package/dist/console-history/ConsoleHistoryItem.js +139 -0
  68. package/dist/console-history/ConsoleHistoryItem.js.map +1 -0
  69. package/dist/console-history/ConsoleHistoryItemResult.js +22 -0
  70. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -0
  71. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +142 -0
  72. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -0
  73. package/dist/console-history/ConsoleHistoryResultInProgress.css +27 -0
  74. package/dist/console-history/ConsoleHistoryResultInProgress.css.map +1 -0
  75. package/dist/console-history/ConsoleHistoryResultInProgress.js +66 -0
  76. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -0
  77. package/dist/console-history/ConsoleHistoryTypes.js +2 -0
  78. package/dist/console-history/ConsoleHistoryTypes.js.map +1 -0
  79. package/dist/console-history/index.js +6 -0
  80. package/dist/console-history/index.js.map +1 -0
  81. package/dist/csv/CsvFormats.js +134 -0
  82. package/dist/csv/CsvFormats.js.map +1 -0
  83. package/dist/csv/CsvInputBar.css +36 -0
  84. package/dist/csv/CsvInputBar.css.map +1 -0
  85. package/dist/csv/CsvInputBar.js +342 -0
  86. package/dist/csv/CsvInputBar.js.map +1 -0
  87. package/dist/csv/CsvOverlay.css +57 -0
  88. package/dist/csv/CsvOverlay.css.map +1 -0
  89. package/dist/csv/CsvOverlay.js +244 -0
  90. package/dist/csv/CsvOverlay.js.map +1 -0
  91. package/dist/csv/CsvParser.js +268 -0
  92. package/dist/csv/CsvParser.js.map +1 -0
  93. package/dist/csv/CsvTypeParser.js +235 -0
  94. package/dist/csv/CsvTypeParser.js.map +1 -0
  95. package/dist/csv/NewTableColumnTypes.js +16 -0
  96. package/dist/csv/NewTableColumnTypes.js.map +1 -0
  97. package/dist/declaration.d.js +2 -0
  98. package/dist/declaration.d.js.map +1 -0
  99. package/dist/index.js +18 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/log/LogLevel.js +11 -0
  102. package/dist/log/LogLevel.js.map +1 -0
  103. package/dist/log/LogLevelMenuItem.css +38 -0
  104. package/dist/log/LogLevelMenuItem.css.map +1 -0
  105. package/dist/log/LogLevelMenuItem.js +32 -0
  106. package/dist/log/LogLevelMenuItem.js.map +1 -0
  107. package/dist/log/LogView.css +65 -0
  108. package/dist/log/LogView.css.map +1 -0
  109. package/dist/log/LogView.js +487 -0
  110. package/dist/log/LogView.js.map +1 -0
  111. package/dist/monaco/MonacoProviders.js +314 -0
  112. package/dist/monaco/MonacoProviders.js.map +1 -0
  113. package/dist/monaco/MonacoTheme.module.css +54 -0
  114. package/dist/monaco/MonacoTheme.module.css.map +1 -0
  115. package/dist/monaco/MonacoUtils.js +423 -0
  116. package/dist/monaco/MonacoUtils.js.map +1 -0
  117. package/dist/monaco/index.js +4 -0
  118. package/dist/monaco/index.js.map +1 -0
  119. package/dist/monaco/lang/Language.js +2 -0
  120. package/dist/monaco/lang/Language.js.map +1 -0
  121. package/dist/monaco/lang/db.js +152 -0
  122. package/dist/monaco/lang/db.js.map +1 -0
  123. package/dist/monaco/lang/groovy.js +229 -0
  124. package/dist/monaco/lang/groovy.js.map +1 -0
  125. package/dist/monaco/lang/log.js +64 -0
  126. package/dist/monaco/lang/log.js.map +1 -0
  127. package/dist/monaco/lang/python.js +234 -0
  128. package/dist/monaco/lang/python.js.map +1 -0
  129. package/dist/monaco/lang/scala.js +264 -0
  130. package/dist/monaco/lang/scala.js.map +1 -0
  131. package/dist/notebook/Editor.css +6 -0
  132. package/dist/notebook/Editor.css.map +1 -0
  133. package/dist/notebook/Editor.js +130 -0
  134. package/dist/notebook/Editor.js.map +1 -0
  135. package/dist/notebook/ScriptEditor.css +8 -0
  136. package/dist/notebook/ScriptEditor.css.map +1 -0
  137. package/dist/notebook/ScriptEditor.d.ts.map +1 -1
  138. package/dist/notebook/ScriptEditor.js +311 -0
  139. package/dist/notebook/ScriptEditor.js.map +1 -0
  140. package/dist/notebook/ScriptEditorUtils.d.ts +7 -0
  141. package/dist/notebook/ScriptEditorUtils.d.ts.map +1 -1
  142. package/dist/notebook/ScriptEditorUtils.js +52 -0
  143. package/dist/notebook/ScriptEditorUtils.js.map +1 -0
  144. package/package.json +12 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Console.js","names":["React","PureComponent","ContextActions","vsCheck","classNames","memoize","throttle","Log","assertNotNull","Pending","PromiseUtils","ConsoleHistory","SHORTCUTS","LogLevel","ConsoleInput","CsvOverlay","CsvInputBar","ConsoleStatusBar","log","module","DEFAULT_SETTINGS","isAutoLaunchPanelsEnabled","isPrintStdOutEnabled","isClosePanelsOnDisconnectEnabled","Console","isErrorLevel","logLevel","STDERR","ERROR","FATAL","isOutputLevel","STDOUT","constructor","props","scrollConsoleHistoryToBottom","setState","state","debug2","queuedLogMessages","length","consoleHistory","concat","LOG_THROTTLE","objectMap","values","actions","action","handleClearShortcut","shortcut","CONSOLE","CLEAR","handleFocusHistory","FOCUS_HISTORY","handleCommandResult","bind","handleCommandStarted","handleCommandSubmit","handleLogMessage","handleOverflowActions","handleScrollPaneScroll","handleToggleAutoLaunchPanels","handleToggleClosePanelsOnDisconnect","handleTogglePrintStdout","handleUploadCsv","handleHideCsv","handleCsvFileCanceled","handleCsvFileOpened","handleCsvPaste","handleDragEnter","handleDragLeave","handleClearDragError","handleOpenCsvTable","handleCsvUpdate","handleCsvError","handleCsvInProgress","consolePane","createRef","consoleInput","consoleHistoryScrollPane","pending","settings","consoleHeight","isScrollDecorationShown","objectHistoryMap","Map","showCsvOverlay","csvFile","csvPaste","dragError","csvUploadInProgress","componentDidMount","initConsoleLogging","dh","session","addEventListener","IdeSession","EVENT_COMMANDSTARTED","updateDimensions","componentDidUpdate","prevProps","prevState","sendSettingsChange","updateObjectMap","componentWillUnmount","removeEventListener","cancel","processLogMessageQueue","deinitConsoleLogging","cancelListener","onLogMessage","undefined","event","preventDefault","stopPropagation","current","clear","code","result","detail","wrappedResult","add","historyItem","command","disabledObjects","startTime","Date","now","cancelResult","commandHistoryStorage","language","scope","workspaceItemPromise","addItem","toJSON","catch","err","debug","then","resolved","error","handleCommandError","newHistoryItem","itemIndex","lastIndexOf","newHistory","updateHistory","updateKnownObjects","updateWorkspaceHistoryItem","closeRemovedItems","changes","openUpdatedItems","isCanceled","history","index","endTime","focusCommandHistory","message","queueLogMessage","push","openObject","created","updated","forEach","object","removed","closeObject","historyItemParam","disableOldObject","isRemoved","title","oldIndex","get","set","delete","promise","workspaceItem","updatedItem","data","updateItem","warn","force","pane","scrollTop","scrollHeight","offsetHeight","window","requestAnimationFrame","scrollPane","clientHeight","file","value","e","dataTransfer","items","kind","MULTIPLE_FILE_ERROR","item","isValidDropItem","FILE_TYPE_ERROR","currentTarget","Element","relatedTarget","contains","name","type","VariableType","TABLE","isExistingObject","has","addConsoleHistoryMessage","group","groups","high","icon","order","clearConsoleHistory","runCode","keys","map","addCommand","focus","execute","setConsoleText","checkIfChanged","Object","hasChanges","i","key","setting","prevSetting","onSettingsChange","render","historyChildren","statusBarChildren","timeZone","disabled","unzip","consoleMenuObjects","getObjects","inputMaxHeight","Math","round","contextActions","getContextActions","handleDragOver","INPUT_CLASS_NAME"],"sources":["../src/Console.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, {\n DragEvent,\n PureComponent,\n ReactElement,\n ReactNode,\n RefObject,\n} from 'react';\nimport { ContextActions, DropdownAction } from '@deephaven/components';\nimport { vsCheck } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport type { JSZipObject } from 'jszip';\nimport type {\n dh as DhType,\n IdeSession,\n LogItem,\n VariableChanges,\n VariableDefinition,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport ConsoleHistory from './console-history/ConsoleHistory';\nimport { ConsoleHistoryActionItem } from './console-history/ConsoleHistoryTypes';\nimport SHORTCUTS from './ConsoleShortcuts';\nimport LogLevel from './log/LogLevel';\nimport ConsoleInput from './ConsoleInput';\nimport CsvOverlay from './csv/CsvOverlay';\nimport CsvInputBar from './csv/CsvInputBar';\nimport './Console.scss';\nimport ConsoleStatusBar from './ConsoleStatusBar';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n} from './command-history';\n\nconst log = Log.module('Console');\n\ninterface Settings {\n isAutoLaunchPanelsEnabled: boolean;\n isPrintStdOutEnabled: boolean;\n isClosePanelsOnDisconnectEnabled: boolean;\n}\n\nconst DEFAULT_SETTINGS: Settings = {\n isAutoLaunchPanelsEnabled: true,\n isPrintStdOutEnabled: true,\n isClosePanelsOnDisconnectEnabled: true,\n} as const;\n\ninterface ConsoleProps {\n dh: DhType;\n statusBarChildren: ReactNode;\n settings: Partial<Settings>;\n focusCommandHistory: () => void;\n openObject: (object: VariableDefinition) => void;\n closeObject: (object: VariableDefinition) => void;\n session: IdeSession;\n language: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSettingsChange: (settings: Record<string, unknown>) => void;\n scope: string;\n actions: DropdownAction[];\n timeZone: string;\n\n // Children shown at the bottom of the console history\n historyChildren: ReactNode;\n\n // Known object map\n objectMap: Map<string, VariableDefinition>;\n\n disabled: boolean;\n\n /**\n * Function to unzip a zip file. If not provided, zip files will not be accepted\n * (file:File) => Promise<File[]>\n */\n unzip: (file: File) => Promise<JSZipObject[]>;\n}\n\ninterface ConsoleState {\n // Need separate histories as console history has stdout/stderr output\n consoleHistory: ConsoleHistoryActionItem[];\n\n // Height of the viewport of the console input and history\n consoleHeight: number;\n\n isScrollDecorationShown: boolean;\n\n // Location of objects in the console history\n objectHistoryMap: Map<string, number>;\n\n // The object definitions, name/type\n objectMap: Map<string, VariableDefinition>;\n\n showCsvOverlay: boolean;\n csvFile: File | null;\n csvPaste: string | null;\n dragError: string | null;\n csvUploadInProgress: boolean;\n isAutoLaunchPanelsEnabled: boolean;\n isPrintStdOutEnabled: boolean;\n isClosePanelsOnDisconnectEnabled: boolean;\n}\nexport class Console extends PureComponent<ConsoleProps, ConsoleState> {\n static defaultProps = {\n statusBarChildren: null,\n settings: {},\n onSettingsChange: (): void => undefined,\n scope: null,\n actions: [],\n historyChildren: null,\n timeZone: 'America/New_York',\n objectMap: new Map(),\n disabled: false,\n unzip: null,\n };\n\n static LOG_THROTTLE = 500;\n\n /**\n * Check if the provided log level is an error type\n * @param logLevel The LogLevel being checked\n * @returns true if the log level is an error level log\n */\n static isErrorLevel(logLevel: string): boolean {\n return (\n logLevel === LogLevel.STDERR ||\n logLevel === LogLevel.ERROR ||\n logLevel === LogLevel.FATAL\n );\n }\n\n /**\n * Check if the provided log level is output level\n * @param logLevel The LogLevel being checked\n * @returns true if the log level should be output to the console\n */\n static isOutputLevel(\n logLevel: typeof LogLevel[keyof typeof LogLevel]\n ): boolean {\n // We want all errors to be output, in addition to STDOUT.\n // That way the user is more likely to see them.\n return logLevel === LogLevel.STDOUT || Console.isErrorLevel(logLevel);\n }\n\n constructor(props: ConsoleProps) {\n super(props);\n\n this.handleCommandResult = this.handleCommandResult.bind(this);\n this.handleCommandStarted = this.handleCommandStarted.bind(this);\n this.handleCommandSubmit = this.handleCommandSubmit.bind(this);\n this.handleClearShortcut = this.handleClearShortcut.bind(this);\n this.handleFocusHistory = this.handleFocusHistory.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleOverflowActions = this.handleOverflowActions.bind(this);\n this.handleScrollPaneScroll = this.handleScrollPaneScroll.bind(this);\n this.handleToggleAutoLaunchPanels = this.handleToggleAutoLaunchPanels.bind(\n this\n );\n this.handleToggleClosePanelsOnDisconnect = this.handleToggleClosePanelsOnDisconnect.bind(\n this\n );\n this.handleTogglePrintStdout = this.handleTogglePrintStdout.bind(this);\n this.handleUploadCsv = this.handleUploadCsv.bind(this);\n this.handleHideCsv = this.handleHideCsv.bind(this);\n this.handleCsvFileCanceled = this.handleCsvFileCanceled.bind(this);\n this.handleCsvFileOpened = this.handleCsvFileOpened.bind(this);\n this.handleCsvPaste = this.handleCsvPaste.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleClearDragError = this.handleClearDragError.bind(this);\n this.handleOpenCsvTable = this.handleOpenCsvTable.bind(this);\n this.handleCsvUpdate = this.handleCsvUpdate.bind(this);\n this.handleCsvError = this.handleCsvError.bind(this);\n this.handleCsvInProgress = this.handleCsvInProgress.bind(this);\n\n this.consolePane = React.createRef();\n this.consoleInput = React.createRef();\n this.consoleHistoryScrollPane = React.createRef();\n this.pending = new Pending();\n this.queuedLogMessages = [];\n\n const { objectMap, settings } = this.props;\n\n this.state = {\n // Need separate histories as console history has stdout/stderr output\n consoleHistory: [],\n\n // Height of the viewport of the console input and history\n consoleHeight: 0,\n\n isScrollDecorationShown: false,\n\n // Location of objects in the console history\n objectHistoryMap: new Map(),\n\n // The object definitions, name/type\n objectMap: new Map(objectMap),\n\n showCsvOverlay: false,\n csvFile: null,\n csvPaste: null,\n dragError: null,\n csvUploadInProgress: false,\n\n ...DEFAULT_SETTINGS,\n ...settings,\n };\n }\n\n componentDidMount(): void {\n this.initConsoleLogging();\n\n const { dh, session } = this.props;\n session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n\n this.updateDimensions();\n }\n\n componentDidUpdate(prevProps: ConsoleProps, prevState: ConsoleState): void {\n const { props, state } = this;\n this.sendSettingsChange(prevState, state);\n\n if (props.objectMap !== prevProps.objectMap) {\n this.updateObjectMap();\n }\n }\n\n componentWillUnmount(): void {\n const { dh, session } = this.props;\n\n session.removeEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n\n this.pending.cancel();\n this.processLogMessageQueue.cancel();\n\n this.deinitConsoleLogging();\n }\n\n cancelListener?: () => void;\n\n consolePane: RefObject<HTMLDivElement>;\n\n consoleInput: RefObject<ConsoleInput>;\n\n consoleHistoryScrollPane: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n queuedLogMessages: ConsoleHistoryActionItem[];\n\n initConsoleLogging(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n deinitConsoleLogging(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n handleClearShortcut(event: CustomEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.consoleInput.current?.clear();\n }\n\n handleCommandStarted(event: CustomEvent): void {\n const { code, result } = event.detail;\n const wrappedResult = this.pending.add(result);\n const historyItem = {\n command: code,\n disabledObjects: [],\n startTime: Date.now(),\n cancelResult: () => {\n result.cancel();\n },\n wrappedResult,\n };\n\n const { commandHistoryStorage, language, scope } = this.props;\n const workspaceItemPromise = commandHistoryStorage.addItem(\n language,\n scope,\n code,\n {\n command: code,\n startTime: new Date().toJSON(),\n }\n );\n workspaceItemPromise.catch(err => {\n log.debug('Error adding workspace item', err);\n });\n\n this.setState(\n state => ({\n consoleHistory: state.consoleHistory.concat(historyItem),\n }),\n () => {\n this.scrollConsoleHistoryToBottom(true);\n }\n );\n\n wrappedResult\n .then(resolved => {\n this.handleCommandResult(resolved, historyItem, workspaceItemPromise);\n })\n .catch(error => {\n this.handleCommandError(error, historyItem, workspaceItemPromise);\n });\n }\n\n handleCommandResult(\n result:\n | {\n message: string;\n error?: string;\n changes: VariableChanges;\n }\n | undefined,\n historyItem: ConsoleHistoryActionItem,\n workspaceItemPromise: Promise<CommandHistoryStorageItem>\n ): void {\n const newHistoryItem = {\n ...historyItem,\n wrappedResult: undefined,\n cancelResult: undefined,\n result: result ?? historyItem.result,\n };\n\n this.setState(({ consoleHistory }) => {\n const itemIndex = consoleHistory.lastIndexOf(historyItem);\n if (itemIndex < 0) {\n log.error(`historyItem not found in consoleHistory`);\n return null;\n }\n const newHistory = consoleHistory.concat();\n newHistory[itemIndex] = newHistoryItem;\n\n return { consoleHistory: newHistory };\n });\n\n if (!result) {\n return;\n }\n\n this.updateHistory(result, newHistoryItem);\n this.updateKnownObjects(newHistoryItem);\n this.updateWorkspaceHistoryItem(\n { error: result.error },\n workspaceItemPromise\n );\n\n this.closeRemovedItems(result.changes);\n this.openUpdatedItems(result.changes);\n }\n\n handleCommandError(\n error: unknown,\n historyItem: ConsoleHistoryActionItem,\n workspaceItemPromise: Promise<CommandHistoryStorageItem>\n ): void {\n if (PromiseUtils.isCanceled(error)) {\n log.debug('Called handleCommandError on a cancelled promise result');\n return;\n }\n\n this.updateWorkspaceHistoryItem(\n { error: `${error}` },\n workspaceItemPromise\n );\n\n this.setState(state => {\n const history = state.consoleHistory.concat();\n const index = history.lastIndexOf(historyItem);\n const newHistoryItem = { ...historyItem };\n newHistoryItem.wrappedResult = undefined;\n newHistoryItem.cancelResult = undefined;\n newHistoryItem.endTime = Date.now();\n newHistoryItem.result = { error };\n history[index] = newHistoryItem;\n return { consoleHistory: history };\n });\n }\n\n handleFocusHistory(event: CustomEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n const { focusCommandHistory } = this.props;\n focusCommandHistory();\n }\n\n handleLogMessage(message: LogItem): void {\n const { isPrintStdOutEnabled } = this.state;\n if (!isPrintStdOutEnabled) {\n return;\n }\n\n if (\n Console.isOutputLevel(\n message.logLevel as typeof LogLevel[keyof typeof LogLevel]\n )\n ) {\n this.queueLogMessage(message.message, message.logLevel);\n }\n }\n\n queueLogMessage(message: string, logLevel: string): void {\n const result: Record<string, string> = {};\n if (\n Console.isErrorLevel(logLevel as typeof LogLevel[keyof typeof LogLevel])\n ) {\n result.error = message;\n } else {\n result.message = message;\n }\n\n const historyItem = { command: undefined, result };\n\n this.queuedLogMessages.push(historyItem);\n\n this.processLogMessageQueue();\n }\n\n processLogMessageQueue = throttle(() => {\n this.scrollConsoleHistoryToBottom();\n\n this.setState(state => {\n log.debug2(\n 'processLogMessageQueue',\n this.queuedLogMessages.length,\n ' items'\n );\n\n let { consoleHistory } = state;\n consoleHistory = consoleHistory.concat(this.queuedLogMessages);\n this.queuedLogMessages = [];\n\n return { consoleHistory };\n });\n }, Console.LOG_THROTTLE);\n\n openUpdatedItems(changes: VariableChanges): void {\n const { isAutoLaunchPanelsEnabled } = this.state;\n if (changes == null || !isAutoLaunchPanelsEnabled) {\n return;\n }\n\n const { openObject } = this.props;\n [...changes.created, ...changes.updated].forEach(object =>\n openObject(object)\n );\n }\n\n closeRemovedItems(changes: VariableChanges): void {\n if (\n changes == null ||\n changes.removed == null ||\n changes.removed.length === 0\n ) {\n return;\n }\n\n const { closeObject } = this.props;\n const { removed } = changes;\n removed.forEach(object => closeObject(object));\n }\n\n updateHistory(\n result: { changes: unknown },\n historyItemParam: ConsoleHistoryActionItem\n ): void {\n const historyItem = historyItemParam;\n if (result == null || result.changes == null || historyItem == null) {\n return;\n }\n\n historyItem.endTime = Date.now();\n\n this.scrollConsoleHistoryToBottom();\n\n // Update history to re-render items as necessary\n this.setState(state => {\n const consoleHistory = state.consoleHistory.concat();\n return { consoleHistory };\n });\n }\n\n updateKnownObjects(historyItem: ConsoleHistoryActionItem): void {\n let changes: undefined | VariableChanges;\n if (historyItem.result) {\n changes = historyItem.result.changes;\n }\n if (\n !changes ||\n ((changes.created == null || changes.created.length === 0) &&\n (changes.updated == null || changes.updated.length === 0) &&\n (changes.removed == null || changes.removed.length === 0))\n ) {\n log.debug2('updateKnownObjects no changes');\n return;\n }\n\n this.setState(state => {\n let { consoleHistory } = state;\n const itemIndex = consoleHistory.lastIndexOf(historyItem);\n if (itemIndex < 0) {\n log.error(`historyItem not found in state.consoleHistory`);\n return null;\n }\n\n const objectHistoryMap = new Map(state.objectHistoryMap);\n const objectMap = new Map(state.objectMap);\n\n const disableOldObject = (\n object: VariableDefinition,\n isRemoved = false\n ) => {\n const { title } = object;\n assertNotNull(title);\n const oldIndex = objectHistoryMap.get(title);\n // oldIndex can be -1 if a object is active but doesn't have a command in consoleHistory\n // this can happen after clearing the console using 'clear' or 'cls' command\n\n if (oldIndex != null && oldIndex >= 0) {\n // disable outdated object variable in the old consoleHistory item\n if (consoleHistory === state.consoleHistory) {\n // First item in the history being updated,\n consoleHistory = consoleHistory.concat();\n }\n const newHistoryItem = {\n ...consoleHistory[oldIndex],\n disabledObjects: [\n ...(consoleHistory[oldIndex].disabledObjects ?? []),\n title,\n ],\n };\n consoleHistory[oldIndex] = newHistoryItem;\n }\n objectHistoryMap.set(title, itemIndex);\n if (isRemoved) {\n objectMap.delete(title);\n } else {\n objectMap.set(title, object);\n }\n };\n\n changes?.updated.forEach(object => disableOldObject(object));\n changes?.removed.forEach(object => disableOldObject(object, true));\n\n // Created objects have to be processed after removed\n // in case the same object name is present in both removed and created\n changes?.created.forEach(object => {\n const { title } = object;\n assertNotNull(title);\n objectHistoryMap.set(title, itemIndex);\n objectMap.set(title, object);\n });\n\n return { objectHistoryMap, objectMap, consoleHistory };\n });\n }\n\n updateObjectMap(): void {\n const { objectMap } = this.props;\n this.setState({ objectMap });\n }\n\n /**\n * Updates an existing workspace CommandHistoryItem\n * @param result The result to store with the history item. Could be empty object for success\n * @param workspaceItemPromise The workspace data row promise for the workspace item to be updated\n */\n updateWorkspaceHistoryItem(\n result: { error?: string },\n workspaceItemPromise: Promise<CommandHistoryStorageItem>\n ): void {\n const promise = this.pending.add(workspaceItemPromise);\n\n const endTime = new Date().toJSON();\n promise\n .then(workspaceItem => {\n const updatedItem = {\n ...workspaceItem,\n data: {\n ...workspaceItem.data,\n endTime,\n result,\n },\n };\n\n const { commandHistoryStorage, language } = this.props;\n commandHistoryStorage.updateItem(language, updatedItem).catch(err => {\n log.warn('Error updating command history storage', err);\n });\n })\n .catch(err => {\n log.debug('Error updating workspace history item', err);\n });\n }\n\n scrollConsoleHistoryToBottom(force = false): void {\n const pane = this.consoleHistoryScrollPane.current;\n assertNotNull(pane);\n if (!force && pane.scrollTop < pane.scrollHeight - pane.offsetHeight) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n pane.scrollTop = pane.scrollHeight;\n });\n }\n\n handleScrollPaneScroll(): void {\n const scrollPane = this.consoleHistoryScrollPane.current;\n assertNotNull(scrollPane);\n if (\n scrollPane.scrollTop > 0 &&\n scrollPane.scrollHeight > scrollPane.clientHeight\n ) {\n this.setState({ isScrollDecorationShown: true });\n } else {\n this.setState({ isScrollDecorationShown: false });\n }\n }\n\n handleToggleAutoLaunchPanels(): void {\n this.setState(state => ({\n isAutoLaunchPanelsEnabled: !state.isAutoLaunchPanelsEnabled,\n }));\n }\n\n handleToggleClosePanelsOnDisconnect(): void {\n this.setState(state => ({\n isClosePanelsOnDisconnectEnabled: !state.isClosePanelsOnDisconnectEnabled,\n }));\n }\n\n handleTogglePrintStdout(): void {\n this.setState(state => ({\n isPrintStdOutEnabled: !state.isPrintStdOutEnabled,\n }));\n }\n\n handleUploadCsv(): void {\n this.setState({\n showCsvOverlay: true,\n dragError: null,\n csvUploadInProgress: false,\n });\n }\n\n handleHideCsv(): void {\n this.setState({\n showCsvOverlay: false,\n csvFile: null,\n csvPaste: null,\n dragError: null,\n csvUploadInProgress: false,\n });\n }\n\n handleCsvFileCanceled(): void {\n this.setState({ csvFile: null, csvPaste: null });\n }\n\n handleCsvFileOpened(file: File): void {\n this.setState({ csvFile: file, csvPaste: null });\n }\n\n handleCsvPaste(value: string): void {\n this.setState({ csvFile: null, csvPaste: value });\n }\n\n handleDragEnter(e: DragEvent<HTMLDivElement>): void {\n if (\n e.dataTransfer == null ||\n e.dataTransfer.items == null ||\n e.dataTransfer.items.length === 0 ||\n e.dataTransfer.items[0].kind === 'string'\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.setState({ showCsvOverlay: true });\n\n const { items } = e.dataTransfer;\n if (items.length > 1) {\n this.setState({ dragError: CsvOverlay.MULTIPLE_FILE_ERROR });\n return;\n }\n\n const item = items[0];\n if (CsvOverlay.isValidDropItem(item)) {\n this.setState({ dragError: null });\n } else {\n this.setState({ dragError: CsvOverlay.FILE_TYPE_ERROR });\n }\n }\n\n handleDragLeave(e: DragEvent<HTMLDivElement>): void {\n // DragLeave gets fired for every child element, so make sure we're actually leaving the drop zone\n if (\n e.currentTarget == null ||\n (e.currentTarget instanceof Element &&\n e.relatedTarget instanceof Element &&\n e.currentTarget.contains(e.relatedTarget))\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.setState({ showCsvOverlay: false, dragError: null });\n }\n\n handleClearDragError(): void {\n this.setState({ dragError: null });\n }\n\n handleOpenCsvTable(title: string): void {\n const {\n dh,\n openObject,\n commandHistoryStorage,\n language,\n scope,\n } = this.props;\n const { consoleHistory, objectMap } = this.state;\n const object = { name: title, title, type: dh.VariableType.TABLE };\n const isExistingObject = objectMap.has(title);\n const historyItem = {\n startTime: Date.now(),\n endTime: Date.now(),\n disabledObjects: [],\n result: {\n changes: {\n created: [],\n updated: [],\n removed: [],\n [isExistingObject ? 'updated' : 'created']: [object],\n },\n },\n };\n\n const history = consoleHistory.concat(historyItem);\n this.setState({ consoleHistory: history });\n this.scrollConsoleHistoryToBottom(true);\n this.updateKnownObjects(historyItem);\n openObject({ name: title, title, type: dh.VariableType.TABLE });\n commandHistoryStorage.addItem(language, scope, title, {\n command: title,\n startTime: new Date().toJSON(),\n endTime: new Date().toJSON(),\n });\n }\n\n addConsoleHistoryMessage(message?: string, error?: string): void {\n const { consoleHistory } = this.state;\n const historyItem = {\n command: '',\n startTime: Date.now(),\n endTime: Date.now(),\n result: { message, error },\n };\n const history = consoleHistory.concat(historyItem);\n this.setState({\n consoleHistory: history,\n });\n }\n\n handleCsvUpdate(message: string): void {\n this.addConsoleHistoryMessage(message);\n }\n\n handleCsvError(error: unknown): void {\n this.addConsoleHistoryMessage(\n undefined,\n error != null ? `${error}` : undefined\n );\n }\n\n handleCsvInProgress(csvUploadInProgress: boolean): void {\n this.setState({ csvUploadInProgress });\n }\n\n handleOverflowActions(): DropdownAction[] {\n const {\n isAutoLaunchPanelsEnabled,\n isClosePanelsOnDisconnectEnabled,\n isPrintStdOutEnabled,\n } = this.state;\n const { actions } = this.props;\n return [\n ...actions,\n {\n title: 'Print Stdout',\n action: this.handleTogglePrintStdout,\n group: ContextActions.groups.high,\n icon: isPrintStdOutEnabled ? vsCheck : undefined,\n order: 10,\n },\n {\n title: 'Auto Launch Panels',\n action: this.handleToggleAutoLaunchPanels,\n group: ContextActions.groups.high,\n icon: isAutoLaunchPanelsEnabled ? vsCheck : undefined,\n order: 20,\n },\n {\n title: 'Close Panels on Disconnect',\n action: this.handleToggleClosePanelsOnDisconnect,\n group: ContextActions.groups.high,\n icon: isClosePanelsOnDisconnectEnabled ? vsCheck : undefined,\n order: 30,\n },\n {\n title: 'Upload Table from File',\n action: this.handleUploadCsv,\n group: ContextActions.groups.high + 10,\n order: 40,\n },\n ];\n }\n\n handleCommandSubmit(command: string): void {\n if (command === 'clear' || command === 'cls') {\n this.clearConsoleHistory();\n } else if (command.length > 0) {\n // Result is handled in this.handleCommandStarted\n const { session } = this.props;\n session.runCode(command).catch(error => {\n log.error('There was an error initiating the command', error);\n });\n } else {\n // Empty command, just pump a blank line out to history\n const historyItem = {\n command: ' ',\n result: {},\n startTime: Date.now(),\n endTime: Date.now(),\n };\n\n this.scrollConsoleHistoryToBottom(true);\n\n this.setState(state => ({\n consoleHistory: state.consoleHistory.concat(historyItem),\n }));\n }\n }\n\n clearConsoleHistory(): void {\n this.pending.cancel();\n\n this.setState(state => {\n // Replace all values with -1 to indicate that table references are still active\n // but don't have corresponding command indexes in consoleHistory\n const objectHistoryMap = new Map(\n [...state.objectHistoryMap.keys()].map(name => [name, -1])\n );\n return { consoleHistory: [], objectHistoryMap };\n });\n }\n\n getObjects = memoize((objectMap: Map<string, VariableDefinition>) => [\n ...objectMap.values(),\n ]);\n\n getContextActions = memoize((actions: DropdownAction[]) => [\n ...actions,\n {\n action: this.handleClearShortcut,\n shortcut: SHORTCUTS.CONSOLE.CLEAR,\n },\n {\n action: this.handleFocusHistory,\n shortcut: SHORTCUTS.CONSOLE.FOCUS_HISTORY,\n },\n ]);\n\n addCommand(command: string, focus = true, execute = false): void {\n if (!this.consoleInput.current) {\n return;\n }\n this.consoleInput.current.setConsoleText(command, focus, execute);\n\n if (focus) {\n this.scrollConsoleHistoryToBottom(true);\n }\n }\n\n focus(): void {\n this.consoleInput.current?.focus();\n }\n\n sendSettingsChange(\n prevState: ConsoleState,\n state: ConsoleState,\n checkIfChanged = true\n ): void {\n const keys = Object.keys(DEFAULT_SETTINGS) as Array<keyof Settings>;\n const settings: Record<string, unknown> = {};\n let hasChanges = false;\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const { [key]: setting } = state;\n const { [key]: prevSetting } = prevState;\n if (setting !== prevSetting) {\n hasChanges = true;\n }\n settings[key] = setting;\n }\n if (checkIfChanged && !hasChanges) {\n return;\n }\n const { onSettingsChange } = this.props;\n onSettingsChange(settings);\n }\n\n updateDimensions(): void {\n if (this.consolePane.current) {\n this.setState({\n consoleHeight: this.consolePane.current.clientHeight,\n });\n }\n if (this.consoleInput.current) {\n this.consoleInput.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n actions,\n dh,\n historyChildren,\n language,\n statusBarChildren,\n openObject,\n session,\n scope,\n commandHistoryStorage,\n timeZone,\n disabled,\n unzip,\n } = this.props;\n const {\n consoleHeight,\n consoleHistory,\n isScrollDecorationShown,\n objectMap,\n showCsvOverlay,\n csvFile,\n csvPaste,\n dragError,\n csvUploadInProgress,\n } = this.state;\n const consoleMenuObjects = this.getObjects(objectMap);\n const inputMaxHeight = Math.round(consoleHeight * 0.7);\n const contextActions = this.getContextActions(actions);\n\n return (\n <div\n role=\"presentation\"\n className={classNames('iris-console', 'h-100', 'w-100', { disabled })}\n >\n <div className=\"console-pane\" ref={this.consolePane}>\n <ConsoleStatusBar\n dh={dh}\n session={session}\n overflowActions={this.handleOverflowActions}\n openObject={openObject}\n objects={consoleMenuObjects}\n >\n {statusBarChildren}\n </ConsoleStatusBar>\n <div\n className=\"console-csv-container\"\n onDragOver={CsvOverlay.handleDragOver}\n onDragEnter={this.handleDragEnter}\n onDragLeave={this.handleDragLeave}\n >\n {showCsvOverlay && (\n <CsvOverlay\n onCancel={this.handleCsvFileCanceled}\n onFileOpened={this.handleCsvFileOpened}\n onPaste={this.handleCsvPaste}\n clearDragError={this.handleClearDragError}\n dragError={dragError}\n onError={this.handleCsvError}\n uploadInProgress={csvUploadInProgress}\n allowZip={unzip != null}\n />\n )}\n <div\n role=\"presentation\"\n className={classNames('scroll-pane no-scroll-x', {\n 'scroll-decoration': isScrollDecorationShown,\n })}\n onScroll={this.handleScrollPaneScroll}\n ref={this.consoleHistoryScrollPane}\n >\n <ConsoleHistory\n items={consoleHistory}\n openObject={openObject}\n language={language}\n disabled={disabled}\n />\n {historyChildren}\n </div>\n </div>\n {!showCsvOverlay && (\n <ConsoleInput\n ref={this.consoleInput}\n session={session}\n language={language}\n scope={scope}\n onSubmit={this.handleCommandSubmit}\n maxHeight={inputMaxHeight}\n commandHistoryStorage={commandHistoryStorage}\n />\n )}\n {showCsvOverlay && (\n <CsvInputBar\n session={session}\n onOpenTable={this.handleOpenCsvTable}\n onClose={this.handleHideCsv}\n onUpdate={this.handleCsvUpdate}\n onError={this.handleCsvError}\n file={csvFile ?? undefined}\n paste={csvPaste ?? undefined}\n onInProgress={this.handleCsvInProgress}\n timeZone={timeZone}\n unzip={unzip}\n />\n )}\n </div>\n <ContextActions\n actions={contextActions}\n ignoreClassNames={[ConsoleInput.INPUT_CLASS_NAME]}\n />\n </div>\n );\n }\n}\n\nexport default Console;\n"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /* stylelint-disable scss/at-import-no-partial-leading-underscore */
2
+ .console-input-wrapper {
3
+ background-color: #555356;
4
+ padding: 4px;
5
+ min-height: 40px;
6
+ display: flex;
7
+ flex-grow: 0;
8
+ flex-shrink: 0;
9
+ width: 100%;
10
+ }
11
+ .console-input-wrapper::before {
12
+ content: ">";
13
+ flex-grow: 0;
14
+ flex-shrink: 0;
15
+ flex-basis: 33px;
16
+ font-family: "Fira Mono", menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;
17
+ font-size: 12px;
18
+ text-align: right;
19
+ padding-right: 15px;
20
+ padding-top: 7px;
21
+ color: #f0f0ee;
22
+ }
23
+ .console-input-wrapper .console-input-inner-wrapper {
24
+ min-width: 0;
25
+ flex-grow: 1;
26
+ background-color: #2d2a2e;
27
+ border-radius: 4px;
28
+ border: 1px solid #929192;
29
+ }
30
+ .console-input-wrapper .console-input-inner-wrapper .monaco-editor {
31
+ border-radius: 4px;
32
+ }
33
+ .console-input-wrapper .console-input-inner-wrapper .monaco-editor .overflow-guard {
34
+ border-radius: 4px;
35
+ }
36
+ .console-input-wrapper .console-input-inner-wrapper:focus, .console-input-wrapper .console-input-inner-wrapper.focus {
37
+ border-color: rgba(72, 120, 234, 0.85);
38
+ box-shadow: 0 0 0 0.2rem rgba(72, 120, 234, 0.35);
39
+ outline: none;
40
+ }
41
+
42
+ /*# sourceMappingURL=ConsoleInput.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/ConsoleInput.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACkBA;EACE,kBCIS;EDHT,SAfsB;EAgBtB,YAjByB;EAkBzB;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA,YApBwB;EAqBxB,aCmEoB;EDlEpB,WApB6B;EAqB7B;EACA,eArBiC;EAsBjC,aArB+B;EAsB/B,OCxBa;;AD2Bf;EACE;EACA;EACA,kBChCY;EDiCZ,eC6EY;ED5EZ;;AAEA;EACE,eCyEU;;ADvEV;EACE,eCsEQ;;ADlEZ;EAEE,cCiFqB;EDhFrB,YCoFuB;EDnFvB","file":"ConsoleInput.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '@deephaven/components/scss/custom.scss';\n\n$console-input-bg: $gray-600;\n$console-input-inner-bg: $content-bg;\n$console-input-min-height: 40px;\n$console-input-padding: 4px;\n$console-input-radius: $border-radius;\n$console-input-border-color: $input-border-color;\n$console-input-focus-border-color: $input-focus-border-color;\n$console-input-focus-box-shadow: $input-btn-focus-box-shadow;\n$console-input-border-width: $input-border-width;\n$console-input-margin-left: 33px;\n$console-input-margin-font-family: $font-family-monospace;\n$console-input-margin-font-size: 12px;\n$console-input-margin-padding-right: 15px;\n$console-input-margin-padding-top: 7px;\n$console-input-margin-color: $foreground;\n\n.console-input-wrapper {\n background-color: $console-input-bg;\n padding: $console-input-padding;\n min-height: $console-input-min-height;\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n width: 100%;\n\n &::before {\n content: '>';\n flex-grow: 0;\n flex-shrink: 0;\n flex-basis: $console-input-margin-left;\n font-family: $console-input-margin-font-family;\n font-size: $console-input-margin-font-size;\n text-align: right;\n padding-right: $console-input-margin-padding-right;\n padding-top: $console-input-margin-padding-top;\n color: $console-input-margin-color;\n }\n\n .console-input-inner-wrapper {\n min-width: 0;\n flex-grow: 1;\n background-color: $console-input-inner-bg;\n border-radius: $console-input-radius;\n border: $console-input-border-width solid $console-input-border-color;\n\n .monaco-editor {\n border-radius: $console-input-radius;\n\n .overflow-guard {\n border-radius: $console-input-radius;\n }\n }\n\n &:focus,\n &.focus {\n border-color: $console-input-focus-border-color;\n box-shadow: $console-input-focus-box-shadow;\n outline: none;\n }\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: theme-color('danger');\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n"]}
@@ -0,0 +1,442 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
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
+ import React, { PureComponent } from 'react';
7
+ import classNames from 'classnames';
8
+ import * as monaco from 'monaco-editor';
9
+ import Log from '@deephaven/log';
10
+ import { assertNotNull, PromiseUtils } from '@deephaven/utils';
11
+ import { MonacoProviders, MonacoTheme, MonacoUtils } from "./monaco/index.js";
12
+ import "./ConsoleInput.css";
13
+ var log = Log.module('ConsoleInput');
14
+ var LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);
15
+ var TOP_PADDING = 6;
16
+ var BOTTOM_PADDING = 6;
17
+ var MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;
18
+ var BUFFER_SIZE = 100;
19
+ /**
20
+ * Component for input in a console session. Handles loading the recent command history
21
+ */
22
+ export class ConsoleInput extends PureComponent {
23
+ constructor(props) {
24
+ super(props);
25
+ _defineProperty(this, "cancelListener", void 0);
26
+ _defineProperty(this, "commandContainer", void 0);
27
+ _defineProperty(this, "commandEditor", void 0);
28
+ _defineProperty(this, "commandHistoryIndex", void 0);
29
+ _defineProperty(this, "commandSuggestionContainer", void 0);
30
+ _defineProperty(this, "loadingPromise", void 0);
31
+ _defineProperty(this, "timestamp", void 0);
32
+ _defineProperty(this, "bufferIndex", void 0);
33
+ _defineProperty(this, "history", void 0);
34
+ _defineProperty(this, "modifiedCommands", void 0);
35
+ this.handleWindowResize = this.handleWindowResize.bind(this);
36
+ this.commandContainer = /*#__PURE__*/React.createRef();
37
+ this.commandHistoryIndex = null;
38
+ this.timestamp = Date.now();
39
+ this.bufferIndex = 0;
40
+ this.history = [];
41
+ // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed
42
+ this.modifiedCommands = new Map();
43
+ this.state = {
44
+ commandEditorHeight: LINE_HEIGHT,
45
+ isFocused: false,
46
+ model: null
47
+ };
48
+ }
49
+ componentDidMount() {
50
+ this.initCommandEditor();
51
+ window.addEventListener('resize', this.handleWindowResize);
52
+ this.loadMoreHistory();
53
+ }
54
+ componentDidUpdate() {
55
+ this.layoutEditor();
56
+ }
57
+ componentWillUnmount() {
58
+ window.removeEventListener('resize', this.handleWindowResize);
59
+ if (this.loadingPromise != null) {
60
+ this.loadingPromise.cancel();
61
+ }
62
+ this.destroyCommandEditor();
63
+ }
64
+ /**
65
+ * Sets the console text from an external source.
66
+ * Sets commandHistoryIndex to null since the source is not part of the history
67
+ * @param text The text to set in the input
68
+ * @param focus If the input should be focused
69
+ * @param execute If the input should be executed
70
+ * @returns void
71
+ */
72
+ setConsoleText(text) {
73
+ var focus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
74
+ var execute = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
75
+ if (!text) {
76
+ return;
77
+ }
78
+ log.debug('Command received: ', text);
79
+
80
+ // Only set the console text if we're not running this command
81
+ if (!execute) {
82
+ var _this$commandEditor;
83
+ // Need to set commandHistoryIndex before value
84
+ // On value change, modified commands map updates
85
+ this.commandHistoryIndex = null;
86
+ (_this$commandEditor = this.commandEditor) === null || _this$commandEditor === void 0 ? void 0 : _this$commandEditor.setValue(text);
87
+ }
88
+ if (focus) {
89
+ this.focusEnd();
90
+ }
91
+ this.updateDimensions();
92
+ if (execute) {
93
+ this.processCommand(text);
94
+ }
95
+ }
96
+ initCommandEditor() {
97
+ var {
98
+ language,
99
+ session
100
+ } = this.props;
101
+ var commandSettings = {
102
+ copyWithSyntaxHighlighting: false,
103
+ cursorStyle: 'block',
104
+ fixedOverflowWidgets: true,
105
+ folding: false,
106
+ fontFamily: 'Fira Mono',
107
+ glyphMargin: false,
108
+ language,
109
+ lineHeight: LINE_HEIGHT,
110
+ lineDecorationsWidth: 3,
111
+ lineNumbers: 'off',
112
+ minimap: {
113
+ enabled: false
114
+ },
115
+ renderLineHighlight: 'none',
116
+ scrollBeyondLastLine: false,
117
+ scrollbar: {
118
+ arrowSize: 0,
119
+ horizontal: 'hidden',
120
+ horizontalScrollbarSize: 0
121
+ },
122
+ padding: {
123
+ top: TOP_PADDING,
124
+ bottom: BOTTOM_PADDING
125
+ },
126
+ tabCompletion: 'on',
127
+ value: '',
128
+ wordWrap: 'on'
129
+ };
130
+ var element = this.commandContainer.current;
131
+ assertNotNull(element);
132
+ this.commandEditor = monaco.editor.create(element, commandSettings);
133
+ MonacoUtils.setEOL(this.commandEditor);
134
+ MonacoUtils.openDocument(this.commandEditor, session);
135
+ this.commandEditor.onDidChangeModelContent(() => {
136
+ var _this$commandEditor2;
137
+ var value = (_this$commandEditor2 = this.commandEditor) === null || _this$commandEditor2 === void 0 ? void 0 : _this$commandEditor2.getValue();
138
+ this.modifiedCommands.set(this.commandHistoryIndex, value !== null && value !== void 0 ? value : null);
139
+ this.updateDimensions();
140
+ });
141
+ this.commandEditor.onDidFocusEditorText(() => {
142
+ this.setState({
143
+ isFocused: true
144
+ });
145
+ });
146
+ this.commandEditor.onDidBlurEditorText(() => {
147
+ this.setState({
148
+ isFocused: false
149
+ });
150
+ });
151
+
152
+ /**
153
+ * Register for keydown events to capture the `Enter` key.
154
+ * 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.
155
+ * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.
156
+ */
157
+ this.commandEditor.onKeyDown(keyEvent => {
158
+ var {
159
+ commandEditor,
160
+ commandHistoryIndex
161
+ } = this;
162
+ var position = commandEditor === null || commandEditor === void 0 ? void 0 : commandEditor.getPosition();
163
+ assertNotNull(position);
164
+ var {
165
+ lineNumber
166
+ } = position;
167
+ var model = commandEditor === null || commandEditor === void 0 ? void 0 : commandEditor.getModel();
168
+ if (keyEvent.code === 'ArrowUp' && !this.isSuggestionMenuPopulated() && lineNumber === 1) {
169
+ if (commandHistoryIndex != null) {
170
+ this.loadCommand(commandHistoryIndex + 1);
171
+ } else {
172
+ this.loadCommand(0);
173
+ }
174
+ this.focusStart();
175
+ keyEvent.stopPropagation();
176
+ keyEvent.preventDefault();
177
+ return;
178
+ }
179
+ if (keyEvent.code === 'ArrowDown' && !this.isSuggestionMenuPopulated() && lineNumber === (model === null || model === void 0 ? void 0 : model.getLineCount())) {
180
+ if (commandHistoryIndex != null && commandHistoryIndex > 0) {
181
+ this.loadCommand(commandHistoryIndex - 1);
182
+ } else {
183
+ this.loadCommand(null);
184
+ }
185
+ this.focusEnd();
186
+ keyEvent.stopPropagation();
187
+ keyEvent.preventDefault();
188
+ return;
189
+ }
190
+ if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {
191
+ if (keyEvent.keyCode === monaco.KeyCode.Enter) {
192
+ if (!this.isSuggestionMenuPopulated()) {
193
+ var _this$commandEditor3;
194
+ keyEvent.stopPropagation();
195
+ keyEvent.preventDefault();
196
+ var _command = (_this$commandEditor3 = this.commandEditor) === null || _this$commandEditor3 === void 0 ? void 0 : _this$commandEditor3.getValue().trim();
197
+ if (_command !== undefined) {
198
+ var _this$commandEditor4;
199
+ this.processCommand(_command);
200
+ (_this$commandEditor4 = this.commandEditor) === null || _this$commandEditor4 === void 0 ? void 0 : _this$commandEditor4.setValue('');
201
+ }
202
+ }
203
+ } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {
204
+ if (!this.isSuggestionMenuActive()) {
205
+ var _this$commandEditor5;
206
+ keyEvent.stopPropagation();
207
+ keyEvent.preventDefault();
208
+ (_this$commandEditor5 = this.commandEditor) === null || _this$commandEditor5 === void 0 ? void 0 : _this$commandEditor5.trigger('Tab key trigger suggestions', 'editor.action.triggerSuggest', {});
209
+ } else if (!this.isSuggestionMenuPopulated()) {
210
+ keyEvent.stopPropagation();
211
+ keyEvent.preventDefault();
212
+ }
213
+ }
214
+ }
215
+ });
216
+
217
+ // Override the Ctrl+F functionality so that the find window doesn't appear
218
+ this.commandEditor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,
219
+ // eslint-disable-line no-bitwise
220
+ () => undefined);
221
+ MonacoUtils.removeConflictingKeybindings(this.commandEditor);
222
+ MonacoUtils.registerPasteHandler(this.commandEditor);
223
+ this.commandEditor.focus();
224
+ this.updateDimensions();
225
+ this.setState({
226
+ model: this.commandEditor.getModel()
227
+ });
228
+ }
229
+ destroyCommandEditor() {
230
+ var {
231
+ session
232
+ } = this.props;
233
+ if (this.commandEditor) {
234
+ MonacoUtils.closeDocument(this.commandEditor, session);
235
+ this.commandEditor.dispose();
236
+ this.commandEditor = undefined;
237
+ }
238
+ }
239
+ handleWindowResize() {
240
+ this.updateDimensions();
241
+ }
242
+ isSuggestionMenuActive() {
243
+ var _ref;
244
+ if (!this.commandSuggestionContainer) {
245
+ var _this$commandEditor6, _this$commandEditor6$;
246
+ this.commandSuggestionContainer = (_this$commandEditor6 = this.commandEditor) === null || _this$commandEditor6 === void 0 ? void 0 : (_this$commandEditor6$ = _this$commandEditor6.getDomNode()) === null || _this$commandEditor6$ === void 0 ? void 0 : _this$commandEditor6$.querySelector('.suggest-widget');
247
+ }
248
+ return (_ref = this.commandSuggestionContainer && this.commandSuggestionContainer.classList.contains('visible')) !== null && _ref !== void 0 ? _ref : false;
249
+ }
250
+ isSuggestionMenuPopulated() {
251
+ var _this$commandSuggesti, _this$commandSuggesti2, _this$commandSuggesti3;
252
+ return this.isSuggestionMenuActive() && ((_this$commandSuggesti = (_this$commandSuggesti2 = this.commandSuggestionContainer) === null || _this$commandSuggesti2 === void 0 ? void 0 : (_this$commandSuggesti3 = _this$commandSuggesti2.querySelector('.monaco-list-rows')) === null || _this$commandSuggesti3 === void 0 ? void 0 : _this$commandSuggesti3.childElementCount) !== null && _this$commandSuggesti !== void 0 ? _this$commandSuggesti : 0) > 0;
253
+ }
254
+ focus() {
255
+ var _this$commandEditor7;
256
+ (_this$commandEditor7 = this.commandEditor) === null || _this$commandEditor7 === void 0 ? void 0 : _this$commandEditor7.focus();
257
+ }
258
+ focusStart() {
259
+ var _this$commandEditor8, _this$commandEditor9, _this$commandEditor10, _this$commandEditor11, _this$commandEditor12;
260
+ var model = (_this$commandEditor8 = this.commandEditor) === null || _this$commandEditor8 === void 0 ? void 0 : _this$commandEditor8.getModel();
261
+ assertNotNull(model);
262
+ var column = model.getLineLength(1) + 1; // Length of 1st line
263
+ var firstCharTop = (_this$commandEditor9 = this.commandEditor) === null || _this$commandEditor9 === void 0 ? void 0 : _this$commandEditor9.getTopForPosition(1, column);
264
+ assertNotNull(firstCharTop);
265
+ (_this$commandEditor10 = this.commandEditor) === null || _this$commandEditor10 === void 0 ? void 0 : _this$commandEditor10.setPosition({
266
+ lineNumber: 1,
267
+ column
268
+ });
269
+ (_this$commandEditor11 = this.commandEditor) === null || _this$commandEditor11 === void 0 ? void 0 : _this$commandEditor11.setScrollTop(firstCharTop);
270
+ (_this$commandEditor12 = this.commandEditor) === null || _this$commandEditor12 === void 0 ? void 0 : _this$commandEditor12.focus();
271
+ }
272
+ focusEnd() {
273
+ var _this$commandEditor13, _this$commandEditor14, _this$commandEditor15, _this$commandEditor16, _this$commandEditor17;
274
+ var model = (_this$commandEditor13 = this.commandEditor) === null || _this$commandEditor13 === void 0 ? void 0 : _this$commandEditor13.getModel();
275
+ assertNotNull(model);
276
+ var lastLine = model.getLineCount();
277
+ var column = model.getLineLength(lastLine) + 1;
278
+ var lastCharTop = (_this$commandEditor14 = this.commandEditor) === null || _this$commandEditor14 === void 0 ? void 0 : _this$commandEditor14.getTopForPosition(lastLine, column);
279
+ assertNotNull(lastCharTop);
280
+ (_this$commandEditor15 = this.commandEditor) === null || _this$commandEditor15 === void 0 ? void 0 : _this$commandEditor15.setPosition({
281
+ lineNumber: lastLine,
282
+ column
283
+ });
284
+ (_this$commandEditor16 = this.commandEditor) === null || _this$commandEditor16 === void 0 ? void 0 : _this$commandEditor16.setScrollTop(lastCharTop);
285
+ (_this$commandEditor17 = this.commandEditor) === null || _this$commandEditor17 === void 0 ? void 0 : _this$commandEditor17.focus();
286
+ }
287
+ clear() {
288
+ var _this$commandEditor18, _this$commandEditor19, _this$commandEditor20;
289
+ (_this$commandEditor18 = this.commandEditor) === null || _this$commandEditor18 === void 0 ? void 0 : _this$commandEditor18.focus();
290
+ (_this$commandEditor19 = this.commandEditor) === null || _this$commandEditor19 === void 0 ? void 0 : (_this$commandEditor20 = _this$commandEditor19.getModel()) === null || _this$commandEditor20 === void 0 ? void 0 : _this$commandEditor20.setValue('');
291
+ this.commandHistoryIndex = null;
292
+ }
293
+ layoutEditor() {
294
+ if (this.commandEditor) {
295
+ this.commandEditor.layout();
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Loads the given command from history
301
+ * If edits have been made to the command since last run command, loads the modified version
302
+ * @param index The index to load. Null to load command started in the editor and not in the history
303
+ */
304
+ loadCommand(index) {
305
+ var _this$commandEditor21, _this$commandEditor22;
306
+ if (index !== null && index >= this.history.length) {
307
+ return;
308
+ }
309
+ var modifiedValue = this.modifiedCommands.get(index);
310
+ var historyValue = index === null ? '' : this.history[this.history.length - index - 1];
311
+ this.commandHistoryIndex = index;
312
+ (_this$commandEditor21 = this.commandEditor) === null || _this$commandEditor21 === void 0 ? void 0 : (_this$commandEditor22 = _this$commandEditor21.getModel()) === null || _this$commandEditor22 === void 0 ? void 0 : _this$commandEditor22.setValue(modifiedValue !== null && modifiedValue !== void 0 ? modifiedValue : historyValue);
313
+ if (index !== null && index > this.history.length - BUFFER_SIZE) {
314
+ this.loadMoreHistory();
315
+ }
316
+ }
317
+ loadMoreHistory() {
318
+ var _this = this;
319
+ return _asyncToGenerator(function* () {
320
+ try {
321
+ if (_this.loadingPromise != null || _this.bufferIndex == null) {
322
+ return;
323
+ }
324
+ var {
325
+ commandHistoryStorage,
326
+ language,
327
+ scope
328
+ } = _this.props;
329
+ _this.loadingPromise = PromiseUtils.makeCancelable(commandHistoryStorage.getTable(language, scope !== null && scope !== void 0 ? scope : '', _this.timestamp), resolved => resolved.close());
330
+ var table = yield _this.loadingPromise;
331
+ table.setReversed(true);
332
+ table.setViewport({
333
+ top: _this.bufferIndex,
334
+ bottom: _this.bufferIndex + BUFFER_SIZE - 1
335
+ });
336
+ _this.loadingPromise = PromiseUtils.makeCancelable(table.getViewportData(), () => table.close());
337
+ var viewportData = yield _this.loadingPromise;
338
+ _this.bufferIndex += BUFFER_SIZE;
339
+ if (_this.bufferIndex >= table.size) {
340
+ // We've loaded the full history, no need to load any more
341
+ _this.bufferIndex = null;
342
+ }
343
+ _this.history = [...viewportData.items.filter((_ref2, pos, arr) => {
344
+ var {
345
+ name
346
+ } = _ref2;
347
+ return pos === 0 || name !== arr[pos - 1].name;
348
+ }).map(_ref3 => {
349
+ var {
350
+ name
351
+ } = _ref3;
352
+ return name;
353
+ }).reverse(), ..._this.history];
354
+ _this.loadingPromise = undefined;
355
+ table.close();
356
+ } catch (err) {
357
+ _this.loadingPromise = undefined;
358
+ if (PromiseUtils.isCanceled(err)) {
359
+ log.debug2('Promise canceled, not loading history');
360
+ return;
361
+ }
362
+ log.error('Error fetching history', err);
363
+ }
364
+ })();
365
+ }
366
+ processCommand(command) {
367
+ this.commandHistoryIndex = null;
368
+ this.modifiedCommands.clear();
369
+ assertNotNull(command);
370
+ if (command !== '' && (this.history.length === 0 || command !== this.history[this.history.length - 1])) {
371
+ this.history.push(command);
372
+ }
373
+ this.updateDimensions();
374
+ var {
375
+ onSubmit
376
+ } = this.props;
377
+ onSubmit(command);
378
+ }
379
+ updateDimensions() {
380
+ if (!this.commandEditor) {
381
+ return;
382
+ }
383
+ var {
384
+ maxHeight
385
+ } = this.props;
386
+ assertNotNull(maxHeight);
387
+ var contentHeight = this.commandEditor.getContentHeight();
388
+ var commandEditorHeight = Math.max(Math.min(contentHeight, maxHeight), MIN_INPUT_HEIGHT);
389
+
390
+ // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show
391
+ var shouldScroll = contentHeight > commandEditorHeight;
392
+ var options = {
393
+ overviewRulerLanes: shouldScroll ? undefined : 0
394
+ };
395
+ this.setState({
396
+ commandEditorHeight
397
+ }, () => {
398
+ var _this$commandEditor23, _this$commandEditor24;
399
+ (_this$commandEditor23 = this.commandEditor) === null || _this$commandEditor23 === void 0 ? void 0 : _this$commandEditor23.updateOptions(options);
400
+ (_this$commandEditor24 = this.commandEditor) === null || _this$commandEditor24 === void 0 ? void 0 : _this$commandEditor24.layout();
401
+ });
402
+ }
403
+ render() {
404
+ var {
405
+ disabled,
406
+ language,
407
+ session
408
+ } = this.props;
409
+ var {
410
+ commandEditorHeight,
411
+ isFocused,
412
+ model
413
+ } = this.state;
414
+ return /*#__PURE__*/React.createElement("div", {
415
+ className: classNames('console-input-wrapper', {
416
+ disabled
417
+ })
418
+ }, /*#__PURE__*/React.createElement("div", {
419
+ className: classNames('console-input-inner-wrapper', {
420
+ focus: isFocused
421
+ })
422
+ }, /*#__PURE__*/React.createElement("div", {
423
+ className: ConsoleInput.INPUT_CLASS_NAME,
424
+ ref: this.commandContainer,
425
+ style: {
426
+ height: commandEditorHeight
427
+ }
428
+ }), model && /*#__PURE__*/React.createElement(MonacoProviders, {
429
+ model: model,
430
+ language: language,
431
+ session: session
432
+ })));
433
+ }
434
+ }
435
+ _defineProperty(ConsoleInput, "defaultProps", {
436
+ maxHeight: LINE_HEIGHT * 10,
437
+ scope: null,
438
+ disabled: false
439
+ });
440
+ _defineProperty(ConsoleInput, "INPUT_CLASS_NAME", 'console-input');
441
+ export default ConsoleInput;
442
+ //# sourceMappingURL=ConsoleInput.js.map